NEWS
MQTT Server oder/und Client oder externen MQTT Server
-
Sorry, jetzt verstehe ich gar nichts mehr.
Du hattest doch oben geschrieben, dass alles zusammen auf 1883 laufen soll?Wie soll ich das denn jetzt einstellen?
Ich brauche den MQTT Adapter als Broker in ioBroker für meine ESPs.Und Mosquitto für wmbusmeters.
-
@hg6806 Nein - du brauchst NUR EINEN Broker für beides. Wer hat Dir denn so ein Mist erzählt, dass Du 2 verschiedene Broker brauchst.
Du brauchst nur die mosquitto clients damit der wmbustmeters überhaupt was über mqtt publishen kann - aber nicht mosquitto als Broker.
Du hast ja gerade gesagt, dass Du mit dem mosquitto_pub Befehl erfolgreich publishen konntest.
So wie Du es jetzt konfiguriert hast, läuft im iobroker - der MQTT Adapter als Broker. Da publishen alle Deine ESPs rein und auch Dein wmbusmeters mit Hilfe des mosquitto_pub Befehls. Das hat aber mit mosquitto als Broker nichts zu tun.
Du hättest beim installieren auch nur die mosquitto-clients installieren können. Du hast somit gar keinen mosquitto Service, der läuft und deshalb auch kein mosquitto Log etc.
Ich glaube deswegen warst Du so verwirrt - das hat auch nicht mit fehlenden Rechten etc. zu tun, wie Du in dem anderen Thread schreibst.
Ich glaube, wenn Du in Deinem wmbusmeters einfach Dein user und Passwort mit großem P einträgst - müsste es bereits laufen.
shell=/usr/bin/mosquitto_pub -h 192.168.178.18 -p 1883 -t wmbusmeters/21200936/Gesamt -m "$METER_TOTAL_M3" -u <userID> -P <Passwort>
Glaube das war der einzige Fehler gewesen mit dem kleinen p - damals in dem anderen Thread.
-
Ahhh, langsam kommt Licht ins Dunkel.
Ich war immer davon ausgegangen dass mosquitto bei mir nur als Client läuft!Wie kann ich feststellen WAS ich nun installiert habe und wie ich den mosquitto broker entferne?
-
@hg6806 Wenn Du das so gemacht hast, wie
https://forum.iobroker.net/topic/38893/wasserzähler-funk-868-auslesen/45?_=1617088837508
@Michi_Pi geschrieben hat nämlich
$ sudo apt install -y mosquitto mosquitto-clients
dann hast Du mit "mosquitto" den Broker/Server installiert und mit "mosquitto-clients" den mosquitto mqtt-client (also mosquitto_pub).
Prüfen kannst Du mit apt list | grep mosquitto
apt list | grep mosquitto WARNING: apt does not have a stable CLI interface. Use with caution in scripts. libmosquitto-dev/stable 1.5.7-1+deb10u1 armhf libmosquitto1/stable 1.5.7-1+deb10u1 armhf libmosquittopp-dev/stable 1.5.7-1+deb10u1 armhf libmosquittopp1/stable 1.5.7-1+deb10u1 armhf mosquitto-clients/stable 1.5.7-1+deb10u1 armhf mosquitto-dev/stable 1.5.7-1+deb10u1 all mosquitto/stable,now 1.5.7-1+deb10u1 armhf [installiert]
Wenn bei den Clients bei Dir sowohl bei mosquitto, als auch bei dem mosquitto-clients installiert steht hast Du beides installiert.
Wegbekommen solltest Du den Broker mit
sudo apt remove mosquitto
Jetzt wird auch klar warum Du hier immer den Fehler bekommst:
https://forum.iobroker.net/topic/38893/wasserzähler-funk-868-auslesen/33?_=1617088837508
Hier wolltest Du immer den Broker installieren und der wollte dann auf Port 1883 starten, das ging aber nicht, weil ja Dein mqtt Adapter im iobroker diesen Port bereits belegt hat.
-
OK, habe jetzt den mosquitto broker deinstalliert.
Sie jetzt so aus, denke das ist ok.
pi@raspberrypi:~ $ sudo apt list | grep mosquitto WARNING: apt does not have a stable CLI interface. Use with caution in scripts. libmosquitto-dev/stable 1.5.7-1+deb10u1 armhf libmosquitto1/stable,now 1.5.7-1+deb10u1 armhf [Installiert,automatisch] libmosquittopp-dev/stable 1.5.7-1+deb10u1 armhf libmosquittopp1/stable 1.5.7-1+deb10u1 armhf mosquitto-clients/stable,now 1.5.7-1+deb10u1 armhf [installiert] mosquitto-dev/stable 1.5.7-1+deb10u1 all mosquitto/stable,now 1.5.7-1+deb10u1 armhf [Konfiguration-verbleibend]
Dann habe ich alles wieder auf 1883 gesetzt, also MQTT Adapter Broker, alle ESPs und mosquitto client und wmbusmsters auch auf 1883.
Dann habe ich nochmal einen RSSI Wert gepublisht, das hatte auch funktioniert und den in die wmbusmeters.config mit aufgenommen.
Jetzt warte ich bis wieder was gesendet wird (leider nur alle paar Stunden) und bin gespannt!
-
Wert kam schon, wurde aber nicht in die ioBroker Datenpunkte eingetragen.
Aaaaahhhhhh - ich drehe noch durch!!!
In der wmbusmeters config ist es wie folgt drin:
shell=/usr/bin/mosquitto_pub -h 192.168.178.18 -p 1883 -u MeinUsername -P meinPasswort -t wmbusmeters/21200936/Gesamt -m "$METER_TOTAL_M3" shell=/usr/bin/mosquitto_pub -h 192.168.178.18 -p 1883 -u MeinUsername -P meinPasswort -t wmbusmeters/21200936/RSSI -m "$METER_RSSI_DBM"
-
@hg6806 sagte in MQTT Server oder/und Client oder externen MQTT Server:
Wert kam schon, wurde aber nicht in die ioBroker Datenpunkte eingetragen.
Aaaaahhhhhh - ich drehe noch durch!!!Nun aber nicht wieder das Haus einreißen, weil die Tür klemmt.
Gib doch mal den Befehl in der Shell manuell auf der Kommandozeile ein und schau ob das tut.
mosquitto_pub -h 192.168.178.18 -p 1883 -u MeinUsername -P meinPasswort -t wmbusmeters/21200936/Gesamt -m "$METER_TOTAL_M3"
Sind denn die entsprechenden Umgebungsvariablen überhaupt gefüllt. Entweder mit vollständigem Pfad oder ohne usw.
gib halt mal
set | grep METER
ein und schau ob die Umgebungsvariablen existieren und ob da was drin steht.
-
Also, der Datenpunkt wurde mit dem händischen publishen ja angelegt.
Dort hatte ich auch mal händisch einen Wert eingetragen, da ich die mit Sourceanalytix erfassen will.nach
mosquitto_pub -h 192.168.178.18 -p 1883 -u MeinUsername -P meinPasswort -t wmbusmeters/21200936/Gesamt -m "$METER_TOTAL_M3"
Wurde der Wert gelöscht.
Es tut sich also was!
Aber er findet keinen Wert.
Hier noch weitere Versuche:pi@raspberrypi:~ $ wmbusmeters --listenvs=iperl METER_JSON METER_ID METER_NAME METER_MEDIA METER_TYPE METER_TIMESTAMP METER_DEVICE METER_RSSI_DBM METER_TOTAL_M3 METER_MAX_FLOW_M3H pi@raspberrypi:~ $ set | grep METER
Nach dem letzten Befehl kommt nichts.
Das Problem ist, dass der Stick halt nur alle 2-4h was sendet.
-
Wenn ich aber folgenden Befehl ausführe gibt es aber einen Wert:
pi@raspberrypi:~ $ wmbusmeters auto:t1 meinwasserzaehler iperl:t1 21200936 2E13xxxxxxxxxxxxxxx92 Started auto cul on /dev/ttyACM1 listening on t1 meinwasserzaehler 21200936 32.488 m3 0 m3/h 2021-03-31 10:42.40
-
@hg6806 Nun das sind doch schon mal eine Menge Erkenntnisse.
==> MQTT Konfig ist sauber - fass die nicht mehr an.
==> Da Dein Wert gelöscht wurde den Du unter wmbusmeters/21200936/Gesamt mal manuell gepublisht hast, weißt Du dass der shell befehl von Deinem wmbusmaster Service auch ordnungsgemäß abgeschickt wurde.
Das Problem ist wohl, dass die Umgebungsvariablen wohl nicht existieren oder gefüllt werden.
Ich habe das mal durchgelesen aber https://linuxize.com/post/how-to-set-and-list-environment-variables-in-linux/
aber das tut bei mir auch nicht.
Vielleicht kann Dir ein UNIX Guru helfen, wie man mit Umgebungsvariablen umgeht - dann könntest Du manuell mal so eine Variable $METER_TOTAL_M3 setzen und dann kann es natürlich noch daran liegen, dass Dein service die Variable nicht anlegen kann. Also der Schlüssel scheint mir das Setzen und Füllen von Umgebungsvariablen zu sein und dass diese in der Shell für den mosquitto_pub Befehl zugänglich sind.
Versuch doch mal auf der Kommandozeile:
echo $METER_TOTAL_M3
ob da was angezeigt wird
Soweit ich mich erinnern kann, gab es unter LINUX globale und lokale Umgebungsvariablen.
-
OK, habe mich da wegen den Variablen auch etwas schlau gemacht.
Das ist nämlich keine Umgebungsvariable, sondern eine Shell Variable.Und die beschreibt man einfach mit
METER_TOTAL_M3='32.550'
über
mosquitto_pub -h 192.168.178.18 -p 1883 -u MeinUsername -P meinPasswort -t wmbusmeters/21200936/Gesamt -m "$METER_TOTAL_M3"
...schreibt er mir den Wert in ioBroker
So weit so gut, jetzt die Frage wieso die Shell Var. nicht befüllt wird.
Ich denke hier kann mir keiner helfen, das geht dann wieder in den anderen Thread
-
@hg6806 Ja so sehe ich das auch - das hat mit MQTT nichts zu tun, sondern ist ein Problem dieses wmbusmeters Service. Ich kann mir das ja mal durchlesen, falls ich eine Idee habe melde ich mich in dem anderen Thread.
-
@mickym
Alles klar, Tausend Dank nachmals!!! -
@mickym
Ich weiß der Thread ist schon alt. Aber wie kann es sein, dass bei mir in einer MQTT Instanz zweo Ports angeführt werden?Aktive Internetverbindungen (Nur Server) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 IOBroker.fritz.bo:42001 0.0.0.0:* LISTEN 17510/io.hm-rpc.0 tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 550/sshd tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN 19095/cupsd tcp 0 0 localhost:omniorb 0.0.0.0:* LISTEN 513/influxd tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN 17819/io.mqtt.2 tcp 0 0 0.0.0.0:1884 0.0.0.0:* LISTEN 17819/io.mqtt.2
-
@m-h-0 sagte in MQTT Server oder/und Client oder externen MQTT Server:
@mickym
Ich weiß der Thread ist schon alt. Aber wie kann es sein, dass bei mir in einer MQTT Instanz zweo Ports angeführt werden?Aktive Internetverbindungen (Nur Server) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 IOBroker.fritz.bo:42001 0.0.0.0:* LISTEN 17510/io.hm-rpc.0 tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 550/sshd tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN 19095/cupsd tcp 0 0 localhost:omniorb 0.0.0.0:* LISTEN 513/influxd tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN 17819/io.mqtt.2 tcp 0 0 0.0.0.0:1884 0.0.0.0:* LISTEN 17819/io.mqtt.2
Das kommt daher, dass Du die websockets Kommunikation ausgewählt hast, dann sucht sich der Adapter dafür den nächsten freien Port.
-
@mickym
ok danke.
Wofür man das braucht weiß ich nicht.
Kann ich wohl deaktivieren. Habe Probleme mit senden per MQTT. MQTT Explorer sieht die Daten, aber mein OpenDTU Stick nur ab und zu. -
@m-h-0 Im Zweifelsfall deaktivieren - WS Kommunikation beherrscht nicht jeder. Ich habe es bei mqtt nie aktiv.
-
@mickym
Danke! Muss ich nur noch rausfinden warum ich manches mal nur per Blockly (sendMessage2Client) und manches mal nur per direkten Eintrag im Datenpunkt per MQTT senden kann -
@m-h-0 sagte in MQTT Server oder/und Client oder externen MQTT Server:
nd manches mal nur per direkten Eintrag im Datenpunkt per MQTT senden kann
Du musst halt darauf achten, dass Du grundsätzlich nie mit ACK Flag sendest. Sauber ist das ganze trotzdem nicht, deswegen gibt es immer wieder Probleme - wenn der Broker quasi gleichzeitig als Client arbeiten soll. Ich empfehle Dir dann lieber eine eigene Instanz als Client zu machen, die sich mit deinem Broker verbindet.
Ich hab das so gemacht, dass mqtt.0 ist der Broker (wenn Du keinen externen verwenden willst) - und mqtt.2 in meinem Beispiel ist der Client.
Den Broker lässt man komplett in Ruhe - und beschreiben zum Publishen macht man nur im mqtt-Client.
-
@mickym
Hmm, ok danke.
Auf diese Variante bin ich noch gar nicht gekommen. Werde ich probieren, danke!Klappt bis jetzt einwandfrei.
Danke für dein Hilfe!