Werte an MQTT senden

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

iTob
Beiträge: 57
Registriert: 8. Mär 2020 19:58
Answers: 0

Werte an MQTT senden

Beitrag von iTob »

Hallo,
ich habe ein thing definiert:

Code: Alles auswählen

Thing topic gaszaehler "Gaszaehler"{
        Channels:
        Type string:wert "Gaszaehler Wert" [stateTopic="Gaszaehler/Wert", commandTopic="Gaszaehler/Wert", retained=true]
    }
}
und dazu ein Item:

Code: Alles auswählen

Number gz_mqtt_wert "Gaszaehler" {channel="mqtt:topic:MQTTBrokerGZ:gaszaehler:wert" [profile="transform:DSL", toItemScript="| input.replace(' ','')"]}
Ein Arduino liest diesen Wert immer am MQTT Server aus und zählt bei der Umdrehung des Gaszählers eines hoch.

Ich hatte den Wert im Openhab immer nachts in der Influxdb gespeichert und zurück auf 0 gesetzt:

Code: Alles auswählen

gz_mqtt_wert.sendCommand(0)
Seit geraumer Zeit kommt diese Wertänderung nicht mehr auf dem MQTT Mosquitto Server an. Nur innerhalb vom Openhab wird der Wert auf 0 gesetzt, sobald der Server die Zahl ändert, dann kommt der geänderte Wert wieder vom Server im Openhab an.

Der Arduino kann den Wert nach wie vor ändern und per mqtt-spy kann ich auch manuell den Wert einstellen.

Ich finde einfach keine Ursache für das Phänomen, warum openhab die Änderung nicht an den Server sendet. Kann mir jemand helfen?

VG, Tobais

Harka
Beiträge: 592
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Werte an MQTT senden

Beitrag von Harka »

Moin,
commandTopic Ist nie gleich stateTopic.

iTob
Beiträge: 57
Registriert: 8. Mär 2020 19:58
Answers: 0

Re: Werte an MQTT senden

Beitrag von iTob »

OK,
und wie kann ich dann den Wert an den MQTT Server senden?
Er soll mir hier den Inhalt MQTT vom Pfad Gaszaehler/Wert anzeigen und ggf genau diesen Wert auch setzen.
VG, Tobias

Harka
Beiträge: 592
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Werte an MQTT senden

Beitrag von Harka »

Moin,
habe mir jetzt mal die Zeit genommen und ein wenig rum gespielt. Das mit dem gleichem Topic ist zwar falsch aber hier nicht die Ursache. Sieht so aus als wenn hier im Profil noch ein commandFromItemScript hin muß. Versuch mal

Code: Alles auswählen

[profile="transform:DSL", toItemScript="| input.replace(' ','')", commandFromItemScript="| input" ]
PS: so richtig kapier ich Deine ganze Herangehensweise aber nicht.

iTob
Beiträge: 57
Registriert: 8. Mär 2020 19:58
Answers: 0

Re: Werte an MQTT senden

Beitrag von iTob »

Vielen Dank.
Ich glaube, das funktioniet so wirklich. Wo bzw wie finde ich denn dazu eine Anleitung im Internet?

Kurz zur Erklärung:
Der Gaszähler hat keinen digitalen Ausgang. Er kann bei jeder Umdrehung einen reed-Kontakt auslösen. Dazu habe ich einen Arduino verwendet. Der liest einen mqtt Wert und rechnet immer eins dazu. Im openhab speicher ich nachts immer den Tagesverbrauch und setze diesen Wert zurück. So ist das enstanden.
Daher kommt auch der Gedanke, den Wert zu lesen, zu speichern und zurückzusetzen. Und das ist dann eben immer der eine Wert.

Harka
Beiträge: 592
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Werte an MQTT senden

Beitrag von Harka »

Super
War eine Lösungssuche nach Schema Versuch und Irrtum. Info: https://www.openhab.org/docs/configurat ... igurations
Ich fand den Weg mit dem Zurücksetzen des Zählers einfach zu aufwändig. Mit der Persistenz kann man den Tagesverbrauch ja auch so bestimmen. Wichtig ist, dass du erreicht hast, was du wolltest.

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

Re: Werte an MQTT senden

Beitrag von udo1toni »

iTob hat geschrieben: 6. Mär 2026 15:52 Der Gaszähler hat keinen digitalen Ausgang. Er kann bei jeder Umdrehung einen reed-Kontakt auslösen.
Viel digitaler als ein Impulsausgang geht es nicht. ;)

Du zählst Impulse, wobei ein Impuls einer vollen Umdrehung der letzten Stelle des Zählwerks entspricht, also üblicherweise 10 Litern Gas (die dritte Nachkommastelle zeigt Liter an, eine Umdrehung entspricht also 10 Liter)
Durch das tägliche Zurücksetzen des Zählers kannst Du (ohne zusätzlichen Aufwand) nur die tägliche Gasmenge anzeigen (und für den aktuellen Tag die seit 0 Uhr kumulierte Gasmenge).
Sinnvoller wäre vermutlich, den Zähler gar nicht, oder nur selten zurückzusetzen. Dazu muss der Zähler in BigInteger zählen, oder Long oder so was in der Richtung. Dafür kannst Du aber auch den aktuellen Zählerstand direkt im Arduino hinterlegen, und vorausgesetzt, der Impuls wird zuverlässig erkannt, erhältst Du die korrekte Zähleranzeige. Der Arduino braucht nur wenig Energie, Du kannst ihn also auch bequem mit einer Batterie puffern, so dass selbst bei einem längeren Stromausfall der Zählerstand nicht verloren geht, lediglich die zeitliche Auflösung funktioniert dann nicht, aber wenn der Strom wieder da ist (und der mqtt-Server und openHAB wieder laufen) bekommst Du den aktuellen Zählerstand übermittelt und alles passt.

Nun musst Du in openHAB nur den Zahlenwert mit everyChange persistieren und kannst danach ab dem ersten erfassten Zeitpunkt beliebige Zeiträume betrachten, also z.B. Monatsverbrauch letzter Februar verglichen mit Monatsverbrauch dieser Februar, oder auch den durchschnittlichen stündlichen Verbrauch der letzten 7 Tage usw.
openHAB5.1.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.1.6 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte

iTob
Beiträge: 57
Registriert: 8. Mär 2020 19:58
Answers: 0

Re: Werte an MQTT senden

Beitrag von iTob »

Das wäre durchaus auch sinnvoll, aber ich hatte von Anfang an gelegentlich Probleme mit dem Reed-Kontakt und wenn nicht jede Umdrehung mitgezählt wird, dann müsste ich meinen gespeicherten Zählerstand ja immer wieder "nachstellen".
Deshalb hatte ich mich erst mal für den täglichen Wert entschieden.

PS: Ich glaube, ich sollte mir doch mal die Zeit nehmen, blockly anzusehen... :-)

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

Re: Werte an MQTT senden

Beitrag von udo1toni »

Hast Du einen "Eigenbau" Reed Kontakt?
Damit hatte ich auch immer wieder Probleme.
Ich habe (auch wenn das Modul unverschämt teuer ist... damals knapp 20 €) einen "Original" Reedkontakt erworben, damit läuft der Zähler perfekt.
Ich hatte tatsächlich nicht den Nerv, meine wackelige Eigenkonstruktion mechanisch perfekt auszurichten.
Das Modul enthält zwar auch nur den Reedkontakt und "ein bisschen Draht", aber dafür ist der Kontakt exakt an der richtigen Position und exakt ausgerichtet (und das Kunststoffgehäuse bietet mechanischen Schutz)

Hätte ich einen 3D-Drucker, hätte ich vielleicht mehr Arbeit investiert :)
openHAB5.1.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.1.6 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte

mad-mike
Beiträge: 510
Registriert: 6. Jan 2021 18:05
Answers: 4

Re: Werte an MQTT senden

Beitrag von mad-mike »

Moin zusammen,

Frage zu der Einbindung: kann man den reedkontakt am gaszähler auch mit dem:
Serial Button Binding
which emits PRESSED events (no RELEASED events though) whenever data is available on the serial port
unter obenHAB auslesen? :?:
Gruss mad-mike

openHABian 5.1.3 auf Raspberry Pi 4 Mod. b (8GB) ;)

Antworten