This demo process is serves a single "crew" of machines.
See protocol.go
for the protocol, and see
input.txt
for a simple example.
To build:
go install
From this directory:
cat input.txt | (cd ../.. && mcrew -I -O)
From this directory:
(cd ../.. && mcrew -v -t :9000) &
cat input.txt | nc localhost 9000
From this directory:
(cd ../.. && mcrew -h :8080 -w -f cmd/mcrew/httpfiles)
Then try http://localhost:8080/static/ws-demo.html
.
ToDo.
This code can be used for Home Assistant automation via its WebSockets API.
See
The file ha-boot.json
expects switches switch.lamp
and switch.shed_light
. Edit accordingly. When you use Home
Assistant to turn on switch.lamp
, switch.shed_light
should turn
on.
export SHEEN_HA_PASSWORD=mypassword
mcrew -c ws://HAHOST:8123/api/websocket -t :9000 -s "../../specs" -b ha-boot.json
This demo code will use environment variables of the form SHEEN_*
that are referenced, with a $
prefix, in messages sent to the
WebSocket client connection via "to":"ws"
. See
specs/homeassistant.yaml
. A
message given to the WebSocket client has strings of the form
$SHEEN_*
expanded to their corresponding environment variable values
(SHEEN_*
). This crude mechanism is used in the demo Home Assistant
machine to pass a password from the process's environment to Home
Assistant.
Messages like
{"to":"timers","makeTimer":{"in":"1s","id":"1","message":{"to":"doubler","double":100}}}}}}
will create a timer. The duration ("in":
) is expressed in Go
time.Duration
syntax.
At the appointed time, the process will send the given message to the crew.
The given id
can be used to try to cancel the timer (assuming it
hasn't fired):
{"to":"timers","deleteTimer":"1"}
Messages like
{"to":"http","request":{"url":"%s", ...},"replyTo":"machine42"}
will result in an asychronous HTTP request. For now, see
HTTPRequest
in http.go
for the supported request
structure. The response is submitted as a message to the crew or to
the replyTo
machine given in the request. For now, see
HTTPResponse
in http.go
for the supported response
structure.