Witam,
stawiam pierwsze kroki w konfiguracji MQTT. Niestety nie chce działać :/
Na starym laptopie (IP 192.168.1.192) postawiłem od nowa Debiana 9.
- Zainstalowałem OpenHAB2
- Zainstalowałem Mosquitto
/etc/mosquitto/mosquitto.conf:
pid_file /var/run/mosquitto.pid
port 1883
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
allow_anonymus false
password_file /etc/mosquitto/password_file
/etc/mosquitto/password_file
login:pass
Test mosquito w dwóch konsolach:
mosquitto_sub -h localhost -u login -P pass -t /house
mosquitto_pub -h localhost -u login -P pass -t /house -m test
Wygląda na to, że broker działa...
Konfiguracja Openhab
W addons zainstalowałem MQTT Actions i MQTT Binding
Konfiguracja plików:
/etc/openhab2/services/mqtt.cfg
broker.url=tcp://localhost:1883
broker.clientId=openHAB
broker.user=login
broker.pwd=pass
/etc/openhab2/items/default.items
Switch sonoff_puchary "puchary" {mqtt=">[broker:/sonoff/puchary/cmd:command:ON:ON],>[broker:/sonoff/puchary/cmd:command:OFF:OFF]"}
Switch sonoff_puchary_status {mqtt="<[broker:/sonoff/puchary/state:state:ON:ON],<[broker:/sonoff/puchary/state:state:OFF:OFF]"}
/etc/openhab2/sitemaps/default.sitemap
sitemap default label="Chata"{
Frame label="PokĂłj"{
Switch item=sonoff_puchary
}
}
/etc/openhab2/rules/default.rules
rule "Reczna zmiana wartosci sonoff_puchary"
when
Item sonoff_puchary_status changed
then
if (sonoff_puchary_status.state!=sonoff_puchary.state) {
if (sonoff_puchary_status.state==ON) {
sendCommand(sonoff_puchary,ON)
} else {
sendCommand(sonoff_puchary,OFF)
}
}
end
Konfiguracja Sonoff (w zalaczniku)
Co robie nie tak, lub czego jeszcze nie zrobiłem?
Jakiś pomysł dlaczego connection refused? Bo już teraz nic mi nie działa :/
root@debian:/var/log/mosquitto# service mosquitto status
● mosquitto.service - LSB: mosquitto MQTT v3.1 message broker
Loaded: loaded (/etc/init.d/mosquitto; generated; vendor preset: enabled)
Active: active (exited) since Tue 2018-02-20 18:52:32 CET; 1min 16s ago
Docs: man:systemd-sysv-generator(8)
Process: 1878 ExecStop=/etc/init.d/mosquitto stop (code=exited, status=0/SUCCESS)
Process: 1885 ExecStart=/etc/init.d/mosquitto start (code=exited, status=0/SUCCESS)
Feb 20 18:52:32 debian systemd[1]: Stopped LSB: mosquitto MQTT v3.1 message broker.
Feb 20 18:52:32 debian systemd[1]: Starting LSB: mosquitto MQTT v3.1 message broker...
Feb 20 18:52:32 debian mosquitto[1885]: Starting network daemon:: mosquitto.
Feb 20 18:52:32 debian systemd[1]: Started LSB: mosquitto MQTT v3.1 message broker.
root@debian:/var/log/mosquitto# mosquitto_pub -h localhost -u login -P pass -t /house -m test
Error: Connection refused
log
1519147708: mosquitto version 1.4.10 (build date Mon, 29 May 2017 13:43:29 +0100) starting
1519147708: Config loaded from /etc/mosquitto/mosquitto.conf.
1519147708: Opening ipv4 listen socket on port 1883.
1519147708: Opening ipv6 listen socket on port 1883.
1519147724: New connection from 192.168.1.41 on port 1883.
1519147724: New client connected from 192.168.1.41 as Sonoff1 (c1, k15, u'login').
1519147725: Error in poll: Interrupted system call.
1519147725: mosquitto version 1.4.10 terminating
1519147725: mosquitto version 1.4.10 (build date Mon, 29 May 2017 13:43:29 +0100) starting
1519147725: Config loaded from /etc/mosquitto/mosquitto.conf.
1519147725: Opening ipv4 listen socket on port 1883.
1519147725: Error: Address already in use
jak ubijesz procesy mosquitto i uruchomisz mosquitto jeszcze raz to co się dzieje?
ps -ef | grep mosquitto
dostaniesz number np 111
sudo kill 111
Postawiłem system od nowa tym razem na ubuntu, MQTT działa gdy testuje poleceniami mosquitto_sub / mosquitto_pub
W logach też widzę że sonoff łączy się z Brokerem:
1519155252: New connection from 192.168.1.41 on port 1883.
1519155252: New client connected from 192.168.1.41 as Sonoff (c1, k15, u'login').
1519155346: New connection from ::1 on port 1883.
1519155346: New client connected from ::1 as mosqsub/26965-debian (c1, k60, u'login').
1519155367: New connection from ::1 on port 1883.
natomiast nie mam pojęcia dlaczego nie działa sterowanie z openhab2? Jakieś wskazówki?
a masz w logach do mosquitto ze openHab podłączył się?
Polecenia z konsoli działają:
root@debian:~# mosquitto_pub -h localhost -p 1883 -u 'nazwa-usera' -P 'hasło-usera' -t '/sonoff/puchary/switch/cmd' -m 'off'
root@debian:~# mosquitto_pub -h localhost -p 1883 -u 'nazwa-usera' -P 'hasło-usera' -t '/sonoff/puchary/switch/cmd' -m 'on'
Zmodyfikowałem plik items:
Switch sonoff_puchary "puchary" {mqtt=">[broker:/sonoff/puchary/switch/cmd:command:ON:ON],>[broker:/sonoff/puchary/switch/cmd:command:OFF:OFF]"}
Switch sonoff_puchary_status {mqtt="<[broker:/sonoff/puchary/state:state:ON:ON],<[broker:/sonoff/puchary/state:state:OFF:OFF]"}
Zrobiłem restert usługi openhab, ale bez efektu, może gdzieś tu jest jeszcze jakiś błąd?
Czy wystarczy zainstalowac bindings i ustawić plik mqtt.cfg? Czy trzeba coś jeszcze w openhubie zrobić? Szukałem poradników, ale nic konkretnego nie umiem znaleźć i tak powoli na chybił trafił działam...
EDIT: problem rozwiązany, trzeba było zmienić wielkość liter "ON"->"on"
ten
login:pass
to nie jest prawdziwe tak?
na potrzeby testu prawdziwe, tak jak napisałem w edytowenym przedchwilą moim przedostatnim poście problem rozwiązany - wina wielkość liter... Może warto w AFE zastosować lowcase() dla parametrów? Bo widzę, że nie tylko ja miałem przez ten szczegół łamigłówkę 🙂
nie mam lekko 🙂
trochę chcę oszczędzić na rozmiarze firmware ze względu na ograniczenia wielkości pamięci - dlatego zdecydowałem się nie robić walidacji danych oraz takich konwersji, bo nie wiem komu to może w jakiś sytuacjach przeszkadzać.
generalnie przed zainstalowaniem lub w trakcje sugeruje przeglądnąć dokumentację 😉 może zrobię teraz bardziej na czerwono, żeby rzucało się w oczy.
Jeszcze mam pytanie, ponieważ sterowanie z BASIC UI działa, natomiast gdy przełączę zewnętrznym przyciskiem sonoffa to zmieniony stan nie odświeża się w GUI (przez przeglądarkę). Czy tutaj mam wszystko ok?
ITEMS
Switch sonoff_puchary "puchary" {mqtt=">[broker:/sonoff/puchary/switch/cmd:command:on:on],>[broker:/sonoff/puchary/switch/cmd:command:off:off]"}
Switch sonoff_puchary_status {mqtt="<[broker:/sonoff/puchary/switch/state:state:on:on],<[broker:/sonoff/puchary/switch/state:state:off:off]"}
RULES
rule "Reczna zmiana wartosci sonoff_puchary"
when
Item sonoff_puchary_status changed
then
if (sonoff_puchary_status.state!=sonoff_puchary.state) {
if (sonoff_puchary_status.state==on) {
sendCommand(sonoff_puchary,on)
} else {
sendCommand(sonoff_puchary,off)
}
}
end
Znaki < > mam inaczej w dwóch wierszach, ale kopiowałem z Twojego przykładu więc chyba ok? Nie rozumiem zasady ich stosowania
hey, zobacz dokumentację
https://www.smartnydom.pl/afe-firmware-pl/konfiguracja/openhab/
masz wciąż trochę źle z dużymi / małymi literami
ON:on, OFF:off
zarówno w items jaki regułach
o super - dzięki - już poprawiam
ja w sonoff touch stany rozwiązuję tak .
Switch Sonoff "Światło [%s]" <lamp> {
mqtt="
>[mybroker:/sonoff/switch1/cmd:command:ON:on],
>[mybroker:/sonoff/switch1/cmd:command:OFF:off],
<[mybroker:/sonoff/switch1/state:state:MAP(sonoff.map)]"
}
sonoff.map
off=OFF
on=ON