Control an AM43 Blinds Engine by HTTP or MQTT
npm install am43-ctrlnpm install https://github.com/binsentsu/am43-ctrl
[Unit]
Description=AM43-ctrl
After=multi-user.target
[Service]
ExecStart=/AM43DIRECTORY/node_modules/.bin/am43ctrl MAC1 MAC12 -l 3001 -d --url mqtt://BROKERIP -u BROKERUSER -p BROKERPASS -d
Restart=always
User=root
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/AM43DIRECTORY
[Install]
WantedBy=multi-user.target
`
Then use following commands to persist:
`
sudo systemctl daemon-reload
sudo systemctl enable am43ctrl
sudo systemctl start am43ctrl
`
You can obtain logging through:
sudo journalctl -u am43ctrl.service
Usage
sudo am43ctrl by itself will print usage information
You need to manually specify a list of MAC addresses to connect to, e.g.: sudo am43ctrl f5:11:7b:ee:f3:43
You must then specify options to use either MQTT, HTTP or both
To use with HTTP
Specify a port for the API to listen on with -l:
sudo am43ctrl MACx MACy -l 3000
To use with MQTT
Specify a broker URL with --url option:
sudo am43ctrl --url mqtt://yourbroker (mqtt/mqtts/ws/wss accepted)
Username and password for MQTT may be specified with -u and -p option
If no password argument is supplied, you can enter it interactively
Base topic defaults to homeassistant, but may be configured with the -topic option
MQTT
To issue commands:
OPEN: - message: 'OPEN'
CLOSE: - message: 'CLOSE'
STOP: - message: 'STOP'
SET_POSITION:
100 is closed
0 is open
- message: '21'
In addition, for use with Home Assistant MQTT Discovery:
Three entities will be pubished to homeassistant discovery topic:
`
Cover:
{
"name": "MAC",
"availability_topic": "homeassistant/cover/MACx/connection",
"payload_available": "Online",
"payload_not_available": "Offline",
"command_topic": "homeassistant/cover/MACx/set",
"position_topic": "homeassistant/cover/MACx/state",
"set_position_topic" : "homeassistant/cover/MACx/setposition",
"position_open": 0,
"position_closed": 100,
"payload_open": "OPEN",
"payload_close": "CLOSE",
"payload_stop": "STOP",
"unique_id": "am43_MACx_cover",
"value_template": '{{value_json[\'position\']}}',
"device": {
"identifiers": "am43_MACx",
"name": "MACx",
"manufacturer": "Generic AM43"
}
}
Battery Sensor:
{
"name": "MAC Battery",
"availability_topic": "homeassistant/cover/MACx/connection",
"state_topic": "homeassistant/cover/MACx/state
"payload_available": "Online",
"payload_not_available": "Offline",
"device_class" : "battery",
"unit_of_measurement": "%",
"unique_id": "am43_MACx_battery_sensor",
"value_template": '{{value_json[\'battery\']}}',
"device": {
"identifiers": "am43_MACx",
"name": "MACx",
"manufacturer": "Generic AM43"
}
}
Light Sensor:
{
"name": "MAC Battery",
"availability_topic": "homeassistant/cover/MACx/connection",
"state_topic": "homeassistant/cover/MACx/state
"payload_available": "Online",
"payload_not_available": "Offline",
"unit_of_measurement": "%",
"unique_id": "am43_MACx_light_sensor",
"value_template": '{{value_json[\'light\']}}',
"device": {
"identifiers": "am43_MACx",
"name": "MACx",
"manufacturer": "Generic AM43"
}
}
`
Parameters
has format of the device's MAC address in lowercase, with the colon's stripped out and cannot be changed
HTTP Endpoints
GET /: list devices.
Response type: [String : Device] - ID as String key, Device as value
`
{
"c03dc8105277":{
"id":"c03dc8105277",
"lastconnect":"2019-11-23T17:39:48.949Z",
"lastaction":"OPEN",
"state":"OPEN",
"battery":42,
"light":0,
"position":0
}
}
`
GET /: Get individual device data (or 404 if no device by that ID).
Response type: Device example:
`
{
"id":"c03dc8105277",
"lastconnect":"2019-11-23T17:39:48.949Z",
"lastaction":"OPEN",
"state":"OPEN",
"battery":42,
"light":0,
"position":0
}
`
POST /: Send OPEN command to am43. Response type: 200 - OK or 404 - Not Found
POST /: Send CLOSE command to am43. Response type: 200 - OK or 404 - Not Found
POST /: Send STOP command to am43. Response type: 200 - OK or 404 - Not Found`