button : io.Button()
camera : media.ImageSource()
screen : media.ImageSink()

button.state > camera.trigger
camera.b64image > screen.b64image

rule button_rule : node_attr_match(index=["address", {"locality": "outside"}])
rule server_rule : node_attr_match(index=["node_name", {"name": "server"}])
apply button : button_rule
apply camera, screen : server_rule
