Super ! Dziękidude wrote: Sun Feb 21, 2021 8:38 am @PuteR @Luther Jak ogarnę temat z przejściem na broker z clouda to Wam pomogę![]()
SUPLA - MQTT - Homebridge... i mamy Hej Siri!
-
Luther
- Posts: 116
- Joined: Sun Feb 16, 2020 8:19 pm
3x Pnw-01, 2x Row-01, 2x Row-02, 1x Row-07, 1x Slw-02, 1x Diw-01, Slw-01, Lew-02, Lew-01
-
dude
- Posts: 37
- Joined: Thu Sep 03, 2020 8:02 pm
Niestety przejście na sam broker z supla cloud chyba nie będzie takie proste. Jest jakieś ograniczenie na ilość jednoczesnych połączeń do tego brokera. Konfiguracja pluginu mqttthing w homebridge została tak wymyślona, że nawiązywane jest tyle połączeń do brokera ile ma się tam dodanych urządzeń. Przy takim założeniu... zaczyna robić się kaszana. Jeżeli coś się zmieni w tym temacie, to tutorial zostanie zaktualizowany. Jak zrobicie konfigurację mosquitto i mqttthing tak jak przedstawiłem, to gdy pojawi się możliwość przejścia na broker bezpośrednio z clouda wystarczy zmienić w pluginie mqttthing URL serwera i poświadczenia. Tematy pozostaną bez zmian, a z tym jest najwięcej roboty jak się ma sporo urządzeń
. Jeżeli Twoja sieć lokalna ma problemy z obsługą multicastów, to HomeKit nie będzie działał poprawnie. Wykorzystuję to rozwiązanie na raspberry pi 3b+, na pi zero też nie powinno być problemów.
Tutorial wykorzystuje mosquitto jako lokalny broker, oraz dodatkowo jako bridge dla brokera supli.
1.
Zainstaluj system na karcie przez Raspberry Pi Imager. Z listy dostępnych wybierz Raspberry Pi OS (other), a następnie Raspberry Pi OS Lite (32-bit). Wybierz podłączoną kartę pamięci z listy i zainstaluj obraz systemu. Wymagane jest połączenie z Internetem w celu pobrania obrazu przez program.

2.
Po zakończeniu roboty przez program, zrób na partycji boot plik o nazwie ssh (koniecznie bez rozszerzenia i bez zawartości). Pamiętaj, że domyślnie w windowsie nie są pokazywane rozszerzenia plików.
3.
Jeżeli masz możliwość, to raspberry podłącz do sieci przez kabel ethernet. Jeżeli musisz wykorzystywać wifi, to dodaj na partycji boot plik o nazwie wpa_supplicant.conf a następnie w pliku wpisz dane dostępowe do swojej sieci. Pamiętaj, żeby sprawdzić jakie pasmo obsługuje Twoje urządzenie (dla pi 3b+ to niestety tylko pasmo 2.4GHz) i wpisz dane do prawidłowego AP w przypadku podziału na pasma.
4.
Włóż kartę do urządzenia i je uruchom. Na ruterze sprawdź jaki adres uzyskało urządzenie i zaloguj się przez ssh. Domyślne poświadczenia: użytkownik: pi, hasło: raspberry. Jeżeli masz możliwość, to wymuś statyczną dzierżawę przydzielonego adresu - raspberry zawsze otrzyma ten sam adres z serwera DHCP. Unikniesz problemów ze zmieniającym się adresem Twojego serwera.
5.
Sprawdź łączność z Internetem.
6.
Wykonaj dostępny update.
7.
Wyłącz zbędne moduły. Jeżeli nie używasz na raspberry bluetooth lub/i wifi, dodaj na końcu pliku /boot/config.txt poniższe wpisy. Spowoduje to niezaładowanie modułów bt oraz wifi przy następnym starcie systemu.
8.
Skonfiguruj synchronizację czasu z serwerem NTP. Ten krok jest ważny z racji wykorzystywania TLS przez serwer supli.
dodaj wpis pod [Time]

następnie:
Po restarcie sprawdzamy, czy czas został prawidłowo pobrany z serwera NTP. Interesuje nas Local Time.

9.
Instalacja homebridge:
10.
Uruchom MQTT w supla cloud w zakładce integracje. Koniecznie zapisz gdzieś hasło, bo po wygenerowaniu zobaczysz je tylko raz.

11.
Konfigurujemy mosquitto do działania jako bridge z MQTT supla.
Dodaj i edytuj poniższą konfigurację:

Następnie:
Jeżeli serwis jest na zielono jako active, running przechodzimy dalej.
12.
Testujemy lokalnego brokera.
Sprawdzamy nasłuch na porcie 1883/TCP na który będziemy lokalnie łączyć się do naszego brokera.

Jeżeli w wyniku dostaniesz coś podobnego, to mosquitto nasłuchuje na tym porcie i jest gotowe do otwarcia połączenia.
Sprawdzamy możliwość połączenia do naszego serwera MQTT (lokalnego) za pomocą MQTT Explorer.

Po połączeniu sprawdzamy widoczność tematów z brokera supli. Jeżeli je widzimy, to nasz mqtt bridge działa poprawnie.
13.
Sprawdzamy działanie serwisu homebridge.

Jeżeli wszystko z nim ok, to logujemy się na nasz serwer homebridge (http://adres_raspberry:8581). Domyślne poświadczenia - użytkownik: admin, hasło: admin. Przechodzimy do Ustawień homebridge i ustawiamy interfejs sieciowy oraz mDNS Advertiser na Ciao.

W ustawieniach homebridge-config-ui-x możemy zmienić port webpanelu np. na standardowy HTTP - 80. Wykonujemy ponowne uruchomienie homebridge (restart serwisów, nie reboot całego raspberry). Pamiętajmy, że jeżeli zmieniliśmy port, to musimy zmodyfikować adres w przeglądarce, bo webpanel się nie załaduje.

14.
Przechodzimy do konfiguracji pluginu mqttthing w homebridge.

Tak wygląda przykładowa konfiguracja dla przełącznika (oświetlenie, gniazdka):
Przykład dla czujnika temperatury:
Przykład dla czujnika wilgotności:
Należy zmienić nazwę urządzenia oraz tematy MQTT. Tematy MQTT dla poszczególnych urządzeń wyciągniemy w prosty sposób przez MQTT explorer. Każde urządzenie dodajemy oddzielnie.

Zapisujemy config i wykonujemy restart serwisów homebridge za pomocą magicznego przycisku.

Jak skonfigurować inne urządzenia przez mqttthing znajdziesz na https://github.com/arachnetech/homebridge-mqttthing
15.
Możemy już próbować dodać nasz bridge do HomeKita. W przypadku problemów z automatycznym dodaniem przez zeskanowany QR, kod do dodania "ręcznego" jest wyświetlany poniżej oraz w konsoli homebridge.

Na koniec wykonaj ożywczy reboocik całego raspberry (sudo reboot przez ssh) i sprawdź, czy wszystko działa poprawnie.
Pozdro

Tutorial wykorzystuje mosquitto jako lokalny broker, oraz dodatkowo jako bridge dla brokera supli.
1.
Zainstaluj system na karcie przez Raspberry Pi Imager. Z listy dostępnych wybierz Raspberry Pi OS (other), a następnie Raspberry Pi OS Lite (32-bit). Wybierz podłączoną kartę pamięci z listy i zainstaluj obraz systemu. Wymagane jest połączenie z Internetem w celu pobrania obrazu przez program.

2.
Po zakończeniu roboty przez program, zrób na partycji boot plik o nazwie ssh (koniecznie bez rozszerzenia i bez zawartości). Pamiętaj, że domyślnie w windowsie nie są pokazywane rozszerzenia plików.
3.
Jeżeli masz możliwość, to raspberry podłącz do sieci przez kabel ethernet. Jeżeli musisz wykorzystywać wifi, to dodaj na partycji boot plik o nazwie wpa_supplicant.conf a następnie w pliku wpisz dane dostępowe do swojej sieci. Pamiętaj, żeby sprawdzić jakie pasmo obsługuje Twoje urządzenie (dla pi 3b+ to niestety tylko pasmo 2.4GHz) i wpisz dane do prawidłowego AP w przypadku podziału na pasma.
Code: Select all
country=PL
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="SSID_WIFI"
psk="HASŁO"
key_mgmt=WPA-PSK
}
Włóż kartę do urządzenia i je uruchom. Na ruterze sprawdź jaki adres uzyskało urządzenie i zaloguj się przez ssh. Domyślne poświadczenia: użytkownik: pi, hasło: raspberry. Jeżeli masz możliwość, to wymuś statyczną dzierżawę przydzielonego adresu - raspberry zawsze otrzyma ten sam adres z serwera DHCP. Unikniesz problemów ze zmieniającym się adresem Twojego serwera.
5.
Sprawdź łączność z Internetem.
Code: Select all
ping -c 3 supla.orgWykonaj dostępny update.
Code: Select all
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
Wyłącz zbędne moduły. Jeżeli nie używasz na raspberry bluetooth lub/i wifi, dodaj na końcu pliku /boot/config.txt poniższe wpisy. Spowoduje to niezaładowanie modułów bt oraz wifi przy następnym starcie systemu.
Code: Select all
dtoverlay=disable-wifi
dtoverlay=disable-bt
Skonfiguruj synchronizację czasu z serwerem NTP. Ten krok jest ważny z racji wykorzystywania TLS przez serwer supli.
Code: Select all
sudo timedatectl set-timezone Europe/Warsaw
sudo nano /etc/systemd/timesyncd.confCode: Select all
NTP= pl.pool.ntp.org
następnie:
Code: Select all
sudo timedatectl set-ntp true
sudo reboot
Code: Select all
timedatectl status
9.
Instalacja homebridge:
Code: Select all
curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -
sudo apt install -y nodejs gcc g++ make python net-tools
sudo npm install -g --unsafe-perm homebridge homebridge-config-ui-x
sudo hb-service install --user homebridge
sudo npm install -g homebridge-mqttthing
sudo apt-get install -y mosquitto mosquitto-clients
Uruchom MQTT w supla cloud w zakładce integracje. Koniecznie zapisz gdzieś hasło, bo po wygenerowaniu zobaczysz je tylko raz.

11.
Konfigurujemy mosquitto do działania jako bridge z MQTT supla.
Code: Select all
sudo nano /etc/mosquitto/mosquitto.confCode: Select all
connection supla_cloud
address MQTT_HOST:MQTT_PORT
topic supla/# in
topic supla/+/devices/+/channels/+/set/+ out
remote_username MQTT_USER
remote_password MQTT_PWD
bridge_capath /etc/ssl/certs

Następnie:
Code: Select all
sudo service mosquitto restart
sudo service mosquitto status
12.
Testujemy lokalnego brokera.
Sprawdzamy nasłuch na porcie 1883/TCP na który będziemy lokalnie łączyć się do naszego brokera.
Code: Select all
netstat -an | grep 1883
Jeżeli w wyniku dostaniesz coś podobnego, to mosquitto nasłuchuje na tym porcie i jest gotowe do otwarcia połączenia.
Sprawdzamy możliwość połączenia do naszego serwera MQTT (lokalnego) za pomocą MQTT Explorer.

Po połączeniu sprawdzamy widoczność tematów z brokera supli. Jeżeli je widzimy, to nasz mqtt bridge działa poprawnie.
13.
Sprawdzamy działanie serwisu homebridge.
Code: Select all
hb-service status
Jeżeli wszystko z nim ok, to logujemy się na nasz serwer homebridge (http://adres_raspberry:8581). Domyślne poświadczenia - użytkownik: admin, hasło: admin. Przechodzimy do Ustawień homebridge i ustawiamy interfejs sieciowy oraz mDNS Advertiser na Ciao.

W ustawieniach homebridge-config-ui-x możemy zmienić port webpanelu np. na standardowy HTTP - 80. Wykonujemy ponowne uruchomienie homebridge (restart serwisów, nie reboot całego raspberry). Pamiętajmy, że jeżeli zmieniliśmy port, to musimy zmodyfikować adres w przeglądarce, bo webpanel się nie załaduje.

14.
Przechodzimy do konfiguracji pluginu mqttthing w homebridge.

Tak wygląda przykładowa konfiguracja dla przełącznika (oświetlenie, gniazdka):
Code: Select all
{
"type": "switch",
"name": "Urzadzenie",
"url": "mqtt://127.0.0.1:1883",
"mqttOptions": {
"keepalive": 60
},
"mqttPubOptions": {
"retain": false
},
"topics": {
"getOnline": "supla/XXX/devices/XXX/channels/XXX/state/connected",
"getOn": "supla/XXX/devices/XXX/channels/XXX/state/on",
"setOn": "supla/XXX/devices/XXX/channels/XXX/set/on"
},
"confirmationIndicateOffline": true,
"accessory": "mqttthing"
}
Code: Select all
{
"type": "temperatureSensor",
"name": "Temperatura",
"url": "mqtt://127.0.0.1:1883",
"mqttOptions": {
"keepalive": 60
},
"mqttPubOptions": {
"retain": false
},
"topics": {
"getOnline": "supla/XXX/devices/XXX/channels/XXX/state/connected",
"getCurrentTemperature": "supla/XXX/devices/XXX/channels/XXX/state/temperature"
},
"confirmationIndicateOffline": true,
"accessory": "mqttthing"
}
Code: Select all
{
"type": "humiditySensor",
"name": "Wilgotnosc",
"url": "mqtt://127.0.0.1:1883",
"mqttOptions": {
"keepalive": 60
},
"mqttPubOptions": {
"retain": false
},
"topics": {
"getOnline": "supla/XXX/devices/XXX/channels/XXX/state/connected",
"getCurrentRelativeHumidity": "supla/XXX/devices/XXX/channels/XXX/state/humidity"
},
"confirmationIndicateOffline": true,
"accessory": "mqttthing"
}

Zapisujemy config i wykonujemy restart serwisów homebridge za pomocą magicznego przycisku.

Jak skonfigurować inne urządzenia przez mqttthing znajdziesz na https://github.com/arachnetech/homebridge-mqttthing
15.
Możemy już próbować dodać nasz bridge do HomeKita. W przypadku problemów z automatycznym dodaniem przez zeskanowany QR, kod do dodania "ręcznego" jest wyświetlany poniżej oraz w konsoli homebridge.

Na koniec wykonaj ożywczy reboocik całego raspberry (sudo reboot przez ssh) i sprawdź, czy wszystko działa poprawnie.
Pozdro
-
dude
- Posts: 37
- Joined: Thu Sep 03, 2020 8:02 pm
No właśniepzygmunt wrote: Sun Feb 21, 2021 5:48 pm Obecnie jest limit 5/IP. Będziemy sukcesywnie to zwiększać. Limit się pojawił po zaobserwowaniu dos-owych ataków.
-
artur_n
- Posts: 466
- Joined: Thu Aug 17, 2017 2:24 pm
- Location: RJA
Czyli reasumując, działa to dalej "na około"? Kiedy można się spodziewać zwiększenia liczby połączeń?pzygmunt wrote: Sun Feb 21, 2021 5:48 pm Obecnie jest limit 5/IP. Będziemy sukcesywnie to zwiększać. Limit się pojawił po zaobserwowaniu dos-owych ataków.
-
PuteR
- Posts: 1473
- Joined: Wed Dec 06, 2017 10:07 am
Przy takim zapisie mam błąd składni, gdzie go popełniam?? Do tego dla samego czujnika temperatury jest OK. Widzę temperaturę i się ona odświeża. Jednak dla samego przełącznika już widzę że jego stan zmienia się w mqtt explorer jednak w cloud pozostaje bez zmian.
Code: Select all
{
"type": "switch",
"name": "Gniazdko",
"url": "mqtt://127.0.0.1:1883",
"mqttOptions": {
"keepalive": 60
},
"mqttPubOptions": {
"retain": false
},
"topics": {
"getOnline": "supla/xxx/devices/xxx/channels/xxx/state/connected",
"getOn": "supla/xxx/devices/xxx/channels/xxx/state/on",
"setOn": "supla/xxx/devices/xxx/channels/xxx/state/on"
},
"confirmationIndicateOffline": true,
"accessory": "mqttthing"
},
{
"type": "temperatureSensor",
"name": "Temperatura",
"url": "mqtt://127.0.0.1:1883",
"mqttOptions": {
"keepalive": 60
},
"mqttPubOptions": {
"retain": false
},
"topics": {
"getOnline": "supla/xxx/devices/xxx/channels/xxx/state/connected",
"getCurrentTemperature": "supla/xxx/devices/xxx/channels/xxx/state/temperature"
},
"confirmationIndicateOffline": true,
"accessory": "mqttthing"
}
