Supla ma teraz wbudowaną obsługę MQTT
Możesz pominąć wszystko aż do postu:
viewtopic.php?p=89625#p89625
*********************************
Instrukcja dla wszystkich, którzy chcieliby zintegrować Suple z Applowym Homekitem.
Rozwiązanie praktycznie idealne - stabilność i niezawodność Supla połączona z wygodą Apple.
Teraz możemy zapanować nad wszystkimi niemal aspektami w automatyce domowej. Czego nie potrafi Supla - załatwi Homekit - sceny, zależności, reakcja na różne czynniki...
I jeszcze sobie można z Siri pogadać
Nie musimy mieć własnego serwera Supla, spokojnie może to być chmura. W zupełności powinien też wystarczyć Raspberry Pi Zero W za pięć dych
Integracja jest możliwa dzięki pomysłowi @Beku, który jest autorem supla-mqtt-client, to dzięki jego nieocenionej pomocy udało się 100% połączenie dwu platform. Link z którym trzeba się zapoznać: viewtopic.php?f=9&t=5462
Do rzeczy
Co potrzebujemy?
- 1. rpi,
- 2. supla-mqtt-client,
- 3. homebridge oraz plugin homebridge-mqttthing
- 4. mqtt broker
To teraz instrukcje:
- AD.2
Kod: Zaznacz cały
apt-get update \
&& apt-get install -y --no-install-recommends \
git \
make \
gcc \
g++ \
libmysqlclient-dev \
libssl-dev \
wget \
supervisor \
ca-certificates \
ssl-cert \
Kod: Zaznacz cały
sudo apt-get install libssl-dev
Kod: Zaznacz cały
git clone https://github.com/SUPLA/supla-core.git
cd supla-core
git checkout -b mqtt-experimental remotes/origin/mqtt-experimental
cd ..
cd supla-core/supla-mqtt-client/Release
sudo make clean
sudo make all
(poniżej moj config_template.yaml)
Kod: Zaznacz cały
mqtt:
host: '192.168.0.99'
port: 1883
commands_file_path: '/home/pi/supla-core/supla-mqtt-client/config/command.yaml'
states_file_path: '/home/pi/supla-core/supla-mqtt-client/config/state.yaml'
client_name: 'supla_mqtt_client'
protocol_version: 3
supla:
port: 2016
host: 'svrX.supla.org'
location: 1594
password: 'haslo_dla_smartfona'
protocol_version: 11
./supla-mqtt-client -config /home/pi/supla-core/supla-mqtt-client/config/config_template.yaml
w konsoli powinniśmy zobaczyć to:
Kod: Zaznacz cały
pi@nazwa_Raspberry:~/supla-core/supla-mqtt-client/Release $ ./supla-mqtt-client -config /home/pi/supla-core/supla-mqtt-client/config/config_template.mlm
INFO[1574086997.830114] initializing main loop
INFO[1574086997.835865] Client GUID: 1F22D271D0393DSS36FC2F355BF7CCEE
INFO[1574086997.841099] SSL version: OpenSSL 1.1.0l 10 Sep 2019
INFO[1574086997.850215] Connecting...
Aby uruchamiać wszystko jako usługę, która sama wstanie po crashu wykonaj poniższe kroki:
Kod: Zaznacz cały
sudo nano supla_mqtt.service
Kod: Zaznacz cały
[Unit]
Description=SUPLA MQTT Broker
After=network.target
[Service]
ExecStart=/home/pi/supla-core/supla-mqtt-client/Release/supla-mqtt-client -config /home/pi/config_template.yaml
WorkingDirectory=/home/pi/supla-core/supla-mqtt-client/Release
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi
[Install]
WantedBy=multi-user.target
Kod: Zaznacz cały
sudo cp supla_mqtt.service /etc/systemd/system
Kod: Zaznacz cały
sudo systemctl start supla_mqtt.service
Kod: Zaznacz cały
sudo journalctl -f -u supla_mqtt
jeśli jest uruchomiony wykonaj
Kod: Zaznacz cały
sudo systemctl stop supla_mqtt.service
Kod: Zaznacz cały
sudo journalctl -f -u supla_mqtt
Kod: Zaznacz cały
sudo systemctl enable supla_mqtt.service
możesz sprawdzić czy się uruchomiła, jesli nie, to ją uruchom (nie pamiętam czy trzeba)
- AD.3
a tu alternatywna metoda: https://www.heysiri.pl/blog/28-homebridge-w-10-minut - to wygodna opcja dla mniej zaawansowanych bo ma zaintalowany plugin oraz broker mqtt na standardowym porcie (1883).
Jeśli instalujemy sami to plugin instalujemy łatwo:
Kod: Zaznacz cały
sudo npm install -g homebridge-mqttthing
poniżej fragment mojego config.json. Wszystkie urządzenia przetestowane i dzałają bez zarzutu:
Kod: Zaznacz cały
{
"bridge": {
"name": "HomebridgeMQTT",
"username": "CC:22:3f:f3:fa:A1",
"port": 51828,
"pin": "031-45-154"
},
"description": "it's example, but working well, config for integration with SUPLA by supla-mqtt-client",
"accessories": [
{
"accessory": "mqttthing",
"type": "switch",
"name": "przelacznik",
"url": "http://192.168.0.31:1883",
"username": "",
"password": "",
"topics": {
"getOn": {
"topic": "supla/channels/status/switch/17953",
"apply": "return JSON.parse(message).on;"
},
"setOn": {
"topic": "supla/channels/command/switch/17953",
"apply": "return JSON.stringify({ id: 17953, on: message });"
}
},
"integerValue": "false",
"onValue": "1",
"offValue": "0"
},
{
"accessory": "mqttthing",
"type": "occupancySensor",
"name": "czujnik obecnosci",
"url": "http://192.168.0.31:1883",
"username": "",
"password": "",
"topics": {
"getOccupancyDetected": {
"topic": "supla/channels/status/1000/18470",
"apply": "return JSON.parse(message).hi;"
}
},
"integerValue": "false",
"onValue": "1",
"offValue": "0"
},
{
"accessory": "mqttthing",
"type": "temperatureSensor",
"name": "Temperatura biura",
"url": "http://192.168.0.31:1883",
"username": "",
"password": "",
"topics": {
"getCurrentTemperature": {
"topic": "supla/channels/status/thermometer/15868",
"apply": "return JSON.parse(message).temperature;"
}
}
},
{
"accessory": "mqttthing",
"type": "windowCovering",
"name": "roleta",
"topics":
{
"getCurrentPosition": {
"topic": "supla/channels/status/rollershutter/31439",
"apply": "return 100 - JSON.parse(message).shut;"
},
"setTargetPosition": {
"topic": "supla/channels/command/rollershutter/31439",
"apply": "return JSON.stringify({ id: 31439, shut:100 - message });"
},
"getTargetPosition": {
"topic": "supla/channels/status/rollershutter/31439",
"apply": "return 100 - JSON.parse(message).shut;"
},
"getPositionState": {
"topic": "supla/channels/status/rollershutter/31439",
"apply": "return 100 - JSON.parse(message).shut;"
},
"setHoldPosition": {
"topic": "supla/channels/command/rollershutter/31439",
"apply": "return JSON.stringify({ id: 31439, shut:100 - message });"
}
},
"positionStateValues": [ "100", "0", "50" ]
},
{
"accessory": "mqttthing",
"type": "garageDoorOpener",
"name": "garaz",
"topics":
{
"setTargetDoorState": {
"topic": "supla/channels/command/garagedoor/12",
"apply": "return JSON.stringify({ id: 12, hi: message });"
},
"getTargetDoorState": {
"topic": "supla/channels/status/garagedoor/12",
"apply": "return JSON.parse(message).sensor_1;"
},
"getCurrentDoorState": {
"topic": "supla/channels/status/garagedoor/12",
"apply": "return JSON.parse(message).sensor_1;"
},
"setLockTargetState": {
"topic": "supla/channels/command/garagedoor/12",
"apply": "return JSON.stringify({ id: 12, hi: message });"
},
"getLockTargetState": {
"topic": "supla/channels/status/garagedoor/12",
"apply": "return JSON.parse(message).sensor_1;"
},
"getLockCurrentState": {
"topic": "supla/channels/status/garagedoor/12",
"apply": "return JSON.parse(message).sensor_1;"
},
"getObstructionDetected":{
"topic": "supla/channels/status/garagedoor/12",
"apply": "return JSON.parse(message).online;"
}
},
"doorValues": [ "1", "1", "0", "0", "0" ]
},
{
"accessory": "mqttthing",
"type": "temperatureSensor",
"name": "kolejny termometr",
"url": "http://192.168.0.31:1883",
"username": "",
"password": "",
"topics": {
"getCurrentTemperature": {
"topic": "supla/channels/status/thermometer/4116",
"apply": "return JSON.parse(message).temperature;"
}
}
}
],
"platforms": []
}
- AD.4 Instalacja mosquitto
Kod: Zaznacz cały
sudo apt install -y mosquitto mosquitto-clients
Kod: Zaznacz cały
sudo apt-get install mosquitto mosquitto-clients
Jeśli tak - daj znać, jeśli nie, zanim napiszesz, przeczytaj jeszcze o poprzednim sposobie, może on pozwoli Ci zrozumieć w czym problem viewtopic.php?f=24&t=3809