MQTT und Tasmota - Stehe auf dem Schlauch

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Morph.
Beiträge: 20
Registriert: 4. Mär 2019 12:48
Answers: 0

MQTT und Tasmota - Stehe auf dem Schlauch

Beitrag von Morph. »

Hallo,
ich suche seit 3 Tage eine Lösung und drehe mich mehr als Wahrscheinlich im Kreis mit meinen Tasmota Steckdosen.

Ich habe auf meinem Raspi Mosquitto installiert und konnte testweise auch per mosquito_pub einen Befehl zur Steckdose schicken.
Nachdem ich in PaperUI irgendwie nicht zurecht gekommen war, habe ich die Seite von Herrn Krivanek gefunden, der dort eine gute Beschreibung hinterlassen hat.

Ich habe

Code: Alles auswählen

// Items for SHP2:
Switch Stecker1 "Brunnen"  { mqtt=">[mosquitto:Aussen/Brunnen/cmnd/POWER:command:*:default],<[mosquitto:Aussen/Brunnen/stat/POWER:state:default]" }
Number Power_Total "Energie Total: [%.3f kWh]"  { mqtt="<[mosquitto:Aussen/Brunnen/tele/SENSOR:state:JSONPATH($.ENERGY.Total)]" }
Number Power_Today "Energie Heute: [%.3f kWh]"  { mqtt="<[mosquitto:Aussen/Brunnen/tele/SENSOR:state:JSONPATH($.ENERGY.Today)]" }
Number Power_Yesterday "Energie Gestern: [%.3f kWh]"  { mqtt="<[mosquitto:Aussen/Brunnen/tele/SENSOR:state:JSONPATH($.ENERGY.Yesterday)]" }
Number Power "Leistung: [%.1f Watt]"  { mqtt="<[mosquitto:Aussen/Brunnen/tele/SENSOR:state:JSONPATH($.ENERGY.Power)]" }
Number Voltage "Spannung: [%.0f V]"  { mqtt="<[mosquitto:Aussen/Brunnen/tele/SENSOR:state:JSONPATH($.ENERGY.Voltage)]" }
Number Current "Strom: [%.3f A]"  { mqtt="<[mosquitto:Aussen/Brunnen/tele/SENSOR:state:JSONPATH($.ENERGY.Current)]" }
Number Factor "Leistungsfaktor: [%.2f]"  { mqtt="<[mosquitto:Aussen/Brunnen/tele/SENSOR:state:JSONPATH($.ENERGY.Factor)]" }
in eine items-Datei geladen

und

Code: Alles auswählen

sitemap Wlan-Steckdose label="Tasmota 1"
{
	Frame {
		Text item=actDate icon="time"
	}
	Frame label="Brunnen" {
        Switch item=BlitzwoIFSHP2 icon="switch" mappings=[OFF="Aus",ON="Ein"]		
		Text item=Power icon="energy"
		Text item=Voltage icon="energy"
		Text item=Current icon="energy"
		Text item=Factor icon="energy"
		Text item=Power_Total icon="energy"
		Text item=Power_Today icon="energy"
		Text item=Power_Yesterday icon="energy" usw...
	}
in meine Default.Sitemap gesetzt.
Die Seite wird mir auch angezeigt, Werte sind nicht vorhanden, Schalten nicht möglich.
Die Steckdosen sind unter "Messung/stecker1/etc..." per Konsole erreichbar, der Code ist oben entsprechend ergänzt worden.

Unter PaperUI habe ich das MQTT2.5.5 installiert, im Verzeichnis "things" habe ich eine Datei gespeichert mit dem Inhalt:

Code: Alles auswählen

Bridge mqtt:broker:mosquitto "MQTT Broker Pandora" @ "Keller" [
  host="127.0.0.1",
  port=1883,
  secure=false,
  clientID="OH2MQTT2Thing",
  keep_alive_time=30000,
  reconnect_time=60000]
Dieser wird mir auch "online" angezeigt.

Könnt Ihr mir den Gordischen Knoten entwirren?
Mit freundlichen Grüßen

Locke
Beiträge: 251
Registriert: 14. Apr 2020 11:35
Answers: 3
Wohnort: bei Hamburg

Re: MQTT und Tasmota - Stehe auf dem Schlauch

Beitrag von Locke »

Hi Morph,
ich hatte da auch Probleme, habe es dann aber hinbekommen mit Paper UI.
Schau mal hier https://openhabforum.de/viewtopic.php? ... 500#p18500 vielleicht hilft es Dir.

Wichtig ist das du die JSON Path Transformation installiert hast.
thnx
____Sven_________________________________________________________________________________________
System 1, Raspberry Pi 4, 4GB RAM, openHAB 2.5.10 / System 2, Raspberry Pi 4, 2GB RAM, openHAB 3.3.0 /
System 3, Raspberry Pi 4, 2GB RAM, openHAB 4.0.2 / System 4 (Testsystem), Raspberry Pi 4, 2GB RAM, openHAB 4.1.1 / System 5, (als NAS) Raspberry PI 4, 4 GB RAM, openmediavault 6.8.0-1 (Shaitan)

Morph.
Beiträge: 20
Registriert: 4. Mär 2019 12:48
Answers: 0

Re: MQTT und Tasmota - Stehe auf dem Schlauch

Beitrag von Morph. »

Hallo Locke,

das JSON Path Trans. ist installiert, ich bekomme aber es nochnicht einmal hin, das die Steckdose schaltet, von den Werten bin ich also noch weit entfernt.
Ich denke, das ich einfach ein Grundlegendes Kommunikationsproblem habe; Der Mosquitto-Dienst auf dem Raspi läuft, mein MQTT-Explorer auf einem Rechner im Netz kann die Telegramme sehen, die die beiden Steckdosen schicken. Nur denke ich, das ich irgendwas mit den Konfiguriert-Dateien falsch habe.
-Ich nutze gerne die Konfiguration-Dateien, damit ich diese einzeln sicher kann und im Bedarfsfall schnell wieder zurück spielen kann, falls das System defekt ist ( hatte ich bereits durch mehrere SD-Karten-Fehler) -

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: MQTT und Tasmota - Stehe auf dem Schlauch

Beitrag von udo1toni »

Es ist ganz einfach. Du vermischst hier Konfiguration für mqtt1 und mqtt2.

Das ist ein großes Problem mit den tollen Anleitungen im weiten Netz, sie sind weder mit einem Datum versehen, noch werden sie zuverlässig überprüft oder gar regelmäßig an die aktuellen Bedingungen angepasst.

MQTT ist ein M2M Protokoll (machine to machine). Es hat einen zentralen Ansatz, das heißt, des gibt einen Server (z.B. Mosquitto), der die Kommunikation steuert. Jedes Gerät, welches per MQTT kommunizieren will, muss sich als Client am Server anmelden. Tasmota bietet einen eingebauten MQTT Client, dem man nur die Zugangsdaten geben muss, damit die Kommunikation klappt.
Für den Desktop gibt es verschiedene Apps, die ebenfalls mit dem MQTT Server kommunizieren können, z.B. MQTT.fx oder mqtt spy. Auch für Android und iOS gibt es solche Apps, sie sind vor allem zur Fehlersuche sehr hilfreich, da man so die Kommunikation mit dem Server live beobachten kann und auch selbst beliebig Topics versenden kann. Ist eigentlich ein Muss, wenn man sich mit MQTT beschäftigt.
openHAB schließlich tritt ebenfalls als Client auf, das heißt, auch hier braucht es eine Stelle, wo die Kommunikation angebunden wird. Das ist die MQTT Bridge (wenn man mit mqtt2 arbeitet). Bitte nicht auf die Idee kommen, den System Broker zu verwenden, das hat nichts(!) mit dem normalen mqtt zu tun.
Nun steht zwar die Verbindung zum MQTT Server, aber das ist ja auch nur ein Teil. Es müssen noch Topics abonniert werden. mqtt2 ist ein OHv2 Binding, welches entsprechend das Thing-Modell nutzt, das heißt, es gibt für jedes Device am Bus ein Thing. Die Bridge ist überigens auch ein Thing, aber mit speziellen Eigenschaften, weil sie ja Bindeglied zwischen Kommunikationsbus und normalen Things ist, das heißt, man kann im gewöhnlichen Thing auswählen, dass die Kommunikation über eine bestimmte Bridge erfolgt (natürlich stehen hier immer nur die Bridges des entsprechenden Protokolls zur Verfügung, gewöhnlich hat man nur eine Bridge pro Protokoll, aber man könnte halt auch mehrere MQTT Server parallel betreiben, dann bräuchte man für jeden Server eine eigene Bridge)
In jedem gewöhnlichen Thing (also nicht bei der Bridge), gibt es Channel, die die eigentlichen Informationen tragen, also z.B. Schaltbefehle entgegennehmen oder Zustände melden. Wenn Du z.B. ein Sonoff Basic mit Tasmota geflasht hast, hast Du einen Channel für das Relais, welches vom Typ Switch ist. Weiterhin kannst Du auch Channel für andere Informationen anlegen, z.B. ob das device online ist (mit dem Topic LWT) oder wie die Anbindung zum WLAN ist (ein Detail aus dem JSON Objekt unter tele/.../status.
Ob Du die Konfiguration über Paper UI oder per *.things Datei erledigst, ist egal. wenn Du aber die Bridge über *.things anlegst, ist es natürlich besser, auch die eigentlichen Things über diese Datei anzulegen, einfach, damit alles an einer Stelle konfiguriert ist. Sieht dann so aus:
Things:

Code: Alles auswählen

Bridge mqtt:broker:mosquitto "MQTT Broker Pandora" @ "Keller" [
    host="127.0.0.1",
    port=1883,
    secure=false,
    clientID="OH2MQTT2Thing",
    //  keep_alive_time=30000, // Der Parameter ist falsch 
    //  reconnect_time=60000   // dieser ebenso
    keepAlive=30000, 
    reconnectTime=60000
 ] {
    Thing topic myThing "Brunnen" {
    Channels:
        Type switch : ch1                "Schaltkanal"     [ stateTopic="Aussen/Brunnen/stat/POWER", commandTopic="Aussen/Brunnen/cmnd/POWER" ]
        Type number : ch1PowerTotal      "Energie Total"   [ stateTopic="Aussen/Brunnen/tele/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Total" ]
        Type number : ch1PowerToday      "Energie Heute"   [ stateTopic="Aussen/Brunnen/tele/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Today" ]
        Type number : ch1PowerYesterdday "Energie Gestern" [ stateTopic="Aussen/Brunnen/tele/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Yesterday" ]
        Type number : ch1Power           "Leistung"        [ stateTopic="Aussen/Brunnen/tele/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Power" ]
        Type number : ch1Voltage         "Spannung"        [ stateTopic="Aussen/Brunnen/tele/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Voltage" ]
        Type number : ch1Current         "Strom"           [ stateTopic="Aussen/Brunnen/tele/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Current" ]
        Type number : ch1Factor          "Leistungsfaktor" [ stateTopic="Aussen/Brunnen/tele/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Factor" ]
    }
}
Items:

Code: Alles auswählen

// Items for SHP2:
Switch Stecker1 "Brunnen"                            { channel="mqtt:topic:mosquitto:myThing:ch1" }
Number Power_Total "Energie Total: [%.3f kWh]"       { channel="mqtt:topic:mosquitto:myThing:ch1PowerTotal" }
Number Power_Today "Energie Heute: [%.3f kWh]"       { channel="mqtt:topic:mosquitto:myThing:ch1PowerToday" }
Number Power_Yesterday "Energie Gestern: [%.3f kWh]" { channel="mqtt:topic:mosquitto:myThing:ch1PowerYesterdday" }
Number Power "Leistung: [%.1f Watt]"                 { channel="mqtt:topic:mosquitto:myThing:ch1Power" }
Number Voltage "Spannung: [%.0f V]"                  { channel="mqtt:topic:mosquitto:myThing:ch1Voltage" }
Number Current "Strom: [%.3f A]"                     { channel="mqtt:topic:mosquitto:myThing:ch1Current" }
Number Factor "Leistungsfaktor: [%.2f]"              { channel="mqtt:topic:mosquitto:myThing:ch1Factor" }
EDIT: In der Konfiguration das Wort device gegen das Wort topic getauscht...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Morph.
Beiträge: 20
Registriert: 4. Mär 2019 12:48
Answers: 0

Re: MQTT und Tasmota - Stehe auf dem Schlauch

Beitrag von Morph. »

Hallo Toni,
erstmal vielen Dank für die Ausführliche Antwort; damit bin ich zumindest im Geiste einen Schritt weiter.

Einen MQTT Client zu installieren war sehr hilfreich, damit sehe ich jetzt die Telegramme der beiden Steckdosen, die Sie selbstständig schicken.
Ich habe die Bridge soweit auch in der Konfig. übernommen, diese wird mir auch direkt unter dem PaperUI angezeigt.
Jedoch werden meine beiden Steckdosen, bei Dir im Beispiel Stecker1 nicht im PaperUI aufgeführt?
Nachdem ich in der Sitemap den Status per Knopfdruck des Switches geändert habe, bekomme ich aber kein Update in meinem MQTT Client; ich denkendes hier noch ein Kommunikationsproblem steht.
Der Server selber sollte in Ordnung sein, da ich meinen Grafischen Client kontaktieren kann und auch Telegramme lesen kann zb:
192.168.2.220->Messung->tele-STATE="Time etc...."
Wenn ich per Konsole einen Befehl mit mosquito_pub an die Steckdose absetze, dann wird dieser auch dem Client angezeigt.

Ist hier ein Problem, das das "Thing" Stecker1 noch nichtmal in der PaperUI auftaucht und damit Kranich genutzt werden kann?


Nachtrag:
Nachdem ich nun unter "things" das geändert habe:
Thing device ..... zu
Thing topic....
und das dann auch in den Items, schickt zumindest der Broker etwas... zwar auf dem Flaschen Kanal, aber das ist ja erstmal ein Anfang, oder bin ich da auf der falschen Spur?

Nachtrag2:
Nachdem ich nun beide Steckdosen unter Bridges.Things abgeändert habe zu "Tonic" statt "device" und das auch unter den Items gemacht habe, komme ich soweit, das das Status der Steckdosen ausgelesen werden kann und mir angezeigt wird. Das Schalten jedoch funktioniert noch nicht, da die Befehle irgendwie auf dem falschen Channel senden...
Nun tauchen auch die Items und deren Channel im PaperUI auf..

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: MQTT und Tasmota - Stehe auf dem Schlauch

Beitrag von udo1toni »

Ja, das kommt davon, wenn man aus dem Gedächtnis schreibt... bei mqtt ist es natürlich das Schlüsselwort topic.

Ein Stecker1 habe ich meines Wissens in meinem Beispiel nicht drin...
Prüfe bitte, ob Deine angegebenen Topics (stateTopic und commandTopic) korrekt sind. Am besten geht das über einen Client für Desktop/Handy, da kannst Du das exakte Topic sehen. Du musst dazu nur das Topic # abonnieren (die Raute steht für: alles nachfolgende ist egal) und schon siehst Du alles, was so an Kommunikation mit Mosquitto passiert, auch z.B., was Tasmota sendet, wenn Du die Steckdose manuell umgeschaltet hast (da kommt ziemlich sicher ein Status Update)



Gesendet von meinem SM-G973F mit Tapatalk


openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: MQTT und Tasmota - Stehe auf dem Schlauch

Beitrag von udo1toni »

Ich hoffe, Du hast in Tasmota das fullTopic korrekt gesetzt...

Gesendet von meinem SM-G973F mit Tapatalk

openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Morph.
Beiträge: 20
Registriert: 4. Mär 2019 12:48
Answers: 0

Re: MQTT und Tasmota - Stehe auf dem Schlauch

Beitrag von Morph. »

Hallo Udo,
nachdem ich nochmal alles kontrolliert habe und Fehler wie "automatische Anführungszeichen beseitigen" in meinem Textprogramm entfernt habe, konnte ich nun folgende Konfiguration bei mir zum laufen bringen.
Ich poste sie hier nochmal komplett, damit andere eine Funktionsfähige Lösung daraus ableiten können. Am Ende war es beim MQTT das "TOPIC" und man muss beim commandTopic noch hinzufügen, das ein ON,OFF übertragen wird, sonst wird eine 0 oder 1 übertragen, was die Gegenstelle nicht als Command versteht.

Und was man auch machen sollte ist, das man bei den Änderungen an den Things öfters mal ein "sudo systemctl restart openhab.service"; ich hatte viele Versuche probiert und der Service hatte die Änderungen nicht übernommen -> zu Sehen in den Logs /var/log/openhab/openhab.log!
Fazit: Leute die mit MQTT arbeiten wollen ist zwingend ein Client zu empfehlen, der die Telegramme mitplottet, damit man die richtigen Commands etc. abonniert. Und man sollte sich gut überlegte Namen für Items etc. ausdenken, ich hatte leider stecker1 und stecker2 mehrfach vergeben und dadurch wurden keine Items "erzeugt"...

Danke für die Unterstützung.

Als kurze Info dabei:
FullTopic vom MQTT ist bei mir im Tasmota-Gerät: Messung/%prefix%/%topic%/

Code: Alles auswählen

Bridge mqtt:broker:mosquitto "MQTT Broker Pandoras Fluch" @ "Keller" [
  host="127.0.0.1",
  port=1883,
  secure=false,
  clientID="OH2MQTT2Thing",
  keepAlive=30000,
  reconnectTime=60000]

{
    Thing topic stecker1 "Steckdose1" {
    Channels:
        Type switch : ch1                "Schaltkanal"     [ stateTopic="Messung/stat/stecker1/POWER", commandTopic="Messung/cmnd/stecker1/POWER", on="ON", off="OFF" ]
        Type number : ch1PowerTotal      "Energie Total"   [ stateTopic="Messung/tele/stecker1/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Total" ]
        Type number : ch1PowerToday      "Energie Heute"   [ stateTopic="Messung/tele/stecker1/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Today" ]
        Type number : ch1PowerYesterdday "Energie Gestern" [ stateTopic="Messung/tele/stecker1/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Yesterday" ]
        Type number : ch1Power           "Leistung"        [ stateTopic="Messung/tele/stecker1/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Power" ]
        Type number : ch1Voltage         "Spannung"        [ stateTopic="Messung/tele/stecker1/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Voltage" ]
        Type number : ch1Current         "Strom"           [ stateTopic="Messung/tele/stecker1/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Current" ]
        Type number : ch1Factor          "Leistungsfaktor" [ stateTopic="Messung/tele/stecker1/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Factor" ]
    }

Thing topic stecker2 "Steckdose2" {
    Channels:
        Type switch : ch2                "Schaltkanal"     [ stateTopic="Messung/stat/stecker2/POWER", commandTopic="Messung/cmnd/stecker2/POWER", on="ON", off="OFF" ]
        Type number : ch2PowerTotal      "Energie Total"   [ stateTopic="Messung/tele/stecker2/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Total" ]
        Type number : ch2PowerToday      "Energie Heute"   [ stateTopic="Messung/tele/stecker2/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Today" ]
        Type number : ch2PowerYesterdday "Energie Gestern" [ stateTopic="Messung/tele/stecker2/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Yesterday" ]
        Type number : ch2Power           "Leistung"        [ stateTopic="Messung/tele/stecker2/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Power" ]
        Type number : ch2Voltage         "Spannung"        [ stateTopic="Messung/tele/stecker2/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Voltage" ]
        Type number : ch2Current         "Strom"           [ stateTopic="Messung/tele/stecker2/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Current" ]
        Type number : ch2Factor          "Leistungsfaktor" [ stateTopic="Messung/tele/stecker2/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Factor" ]
    }
Und Items:

Code: Alles auswählen

// Items for SHP2:
Switch WlanS1 "Steckdose 1"                            { channel="mqtt:topic:mosquitto:stecker1:ch1" }
Number Power_Total "Energie Total: [%.3f kWh]"       { channel="mqtt:topic:mosquitto:stecker1:ch1PowerTotal" }
Number Power_Today "Energie Heute: [%.3f kWh]"       { channel="mqtt:topic:mosquitto:stecker1:ch1PowerToday" }
Number Power_Yesterday "Energie Gestern: [%.3f kWh]" { channel="mqtt:topic:mosquitto:stecker1:ch1PowerYesterdday" }
Number Power "Leistung: [%.1f Watt]"                 { channel="mqtt:topic:mosquitto:stecker1:ch1Power" }
Number Voltage "Spannung: [%.0f V]"                  { channel="mqtt:topic:mosquitto:stecker1:ch1Voltage" }
Number Current "Strom: [%.3f A]"                     { channel="mqtt:topic:mosquitto:stecker1:ch1Current" }
Number Factor "Leistungsfaktor: [%.2f]"              { channel="mqtt:topic:mosquitto:stecker1:ch1Factor" }

// Items for SHP2:
Switch WlanS2 "Steckdose 2"                            { channel="mqtt:topic:mosquitto:stecker2:ch2" }
Number Power_Total2 "Energie Total: [%.3f kWh]"       { channel="mqtt:topic:mosquitto:stecker2:ch2PowerTotal" }
Number Power_Today2 "Energie Heute: [%.3f kWh]"       { channel="mqtt:topic:mosquitto:stecker2:ch2PowerToday" }
Number Power_Yesterday2 "Energie Gestern: [%.3f kWh]" { channel="mqtt:topic:mosquitto:stecker2:ch2PowerYesterdday" }
Number Power2 "Leistung: [%.1f Watt]"                 { channel="mqtt:topic:mosquitto:stecker2:ch2Power" }
Number Voltage2 "Spannung: [%.0f V]"                  { channel="mqtt:topic:mosquitto:stecker2:ch2Voltage" }
Number Current2 "Strom: [%.3f A]"                     { channel="mqtt:topic:mosquitto:stecker2:ch2Current" }
Number Factor2 "Leistungsfaktor: [%.2f]"              { channel="mqtt:topic:mosquitto:stecker2:ch2Factor" }

Antworten