Mqtt Werte vom ADS1115 auslesen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
frankydee
Beiträge: 4
Registriert: 11. Mär 2019 11:16
Answers: 0

Mqtt Werte vom ADS1115 auslesen

Beitrag von frankydee »

Hallo Zusammen,

ich hab einen Wemos D1 mit Tasmota und einen ADS1115 welcher mir Werte von mehreren Feuchtigkeitssensoren ausliest.

Das Ergebnis von der Tasmota Konsole sieht so aus:

MQT: tele/Wemos1/SENSOR = {"Time":"2019-03-31T12:53:10","BH1750":{"Illuminance":3592},"ADS1115":[{"A0":3151,"A1":12654,"A2":16312,"A3":2360}],"SHT3X-0x45":{"Temperature":23.3,"Humidity":67.8},"TempUnit":"C"}

Die Werte für Temperatur und so weiter sind mir klar und funktionieren. Aber wie bekomme ich die Analogwerte A0 bis A3 richtig angezeigt?
Bei der Json Transformierung habe ich es soweit mit JSONPATH($ADS1115[0].A1) hinbekommen, dass er mir alle vier Werte anzeigt. Speziell einen Wert bekomme ich nicht hin.
Im Log steht dann "ADWandler changed from {A0=2774, A1=12218, A2=14933, A3=2230} to {A0=3638, A1=12230, A2=15262, A3=2193}"


Bin dankbar für Ideen und Lösungen.



Gruß frankydee

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

Re: Mqtt Werte vom ADS1115 auslesen

Beitrag von udo1toni »

Nach dem $ fehlt da noch ein Punkt. Im Online Evaluator sieht es eigentlich gut aus:

Code: Alles auswählen

Type number :ads1115a0 "A0" [stateTopic="tele/Wemos1/SENSOR", transformationPattern="JSONPATH:$.ADS1115[0].A0" ]
Type number :ads1115a0 "A1" [stateTopic="tele/Wemos1/SENSOR", transformationPattern="JSONPATH:$.ADS1115[0].A1" ]
Type number :ads1115a0 "A2" [stateTopic="tele/Wemos1/SENSOR", transformationPattern="JSONPATH:$.ADS1115[0].A2" ]
Type number :ads1115a0 "A3" [stateTopic="tele/Wemos1/SENSOR", transformationPattern="JSONPATH:$.ADS1115[0].A3" ]
falls das - aus welchen Gründen auch immer - nicht funktioniert, könntest Du versuchen, den Teil mit den vier Sensorwerten in ein String Item zu schreiben. Anschließend könntest Du innerhalb einer Rule bei Änderung die vier Werte extrahieren.

Code: Alles auswählen

Type string :ads1115 "Messwerte roh" [stateTopic="tele/Wemos1/SENSOR", transformationPattern="JSONPATH:$.ADS1115[0]" ]

Code: Alles auswählen

String ads1115json { channel="mqtt:topic:broker:wemos1:ads1115" }
Number ads1115a0 "A0 [%d]"
Number ads1115a1 "A1 [%d]"
Number ads1115a2 "A2 [%d]"
Number ads1115a3 "A3 [%d]"

Code: Alles auswählen

rule "wemos messwerte aufteilen"
when
    Item ads1115json changed
then
    var myJson = ads1115json.state.toString.subString(2,ads1115json.state.toString.size - 2)
    ads1115a0.postUpdate(int::parseInt(transform("JSONPATH","$.A0",myJson)))
    ads1115a1.postUpdate(int::parseInt(transform("JSONPATH","$.A1",myJson)))
    ads1115a2.postUpdate(int::parseInt(transform("JSONPATH","$.A2",myJson)))
    ads1115a3.postUpdate(int::parseInt(transform("JSONPATH","$.A3",myJson)))
end
Natürlich sollte man ein paar Prüfungen einbauen, dass da auch wirklich gültige Werte raus kommen.

Ich hab das jetzt nicht wirklich ausprobiert ;) könnte also sein, dass da noch Fehler lauern.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

frankydee
Beiträge: 4
Registriert: 11. Mär 2019 11:16
Answers: 0

Re: Mqtt Werte vom ADS1115 auslesen

Beitrag von frankydee »

Danke für die Antwort. :)

Den Punkt beim Jsnon String hab ich vergessen zu schreiben. Der war in der switch.items drin. Was mich wundert ist, wenn ich den Json Transformer Tester nehme und ich den String eintrage, ich auch immer den passenden einzelnen Wert für A0, A1 usw. bekomme. Nur in Openhab funktioniert es nicht.

Ich habe jetzt deine Vorlage genommen für die Umwandlung des Strings. Er meckert bei bei der Zeile"var myJson = ads1115json.state.toString,subString(2,ads1115json.state.toString.size - 2)" und zwar wegen dem "," zwischen toString und subString.

Configuration model 'default.rules' has errors, therefore ignoring it: [5,44]: mismatched input ',' expecting 'end'

Was bedeutet das genau?


Gruß frankydee

mamoel
Beiträge: 137
Registriert: 12. Jan 2019 19:56
Answers: 0

Re: Mqtt Werte vom ADS1115 auslesen

Beitrag von mamoel »

Ersetze mal das Komma durch einen Punkt.
openHAB 2.5 (M1) in Docker auf NAS: Synology DS418play
mit Homematic, Hue, TP-Link, AVM Fritz!, FritzboxTR064, Nuki, Amazon Echo, Sonos, Harmony, zigbee2mqtt, Denon/Marantz, ...

frankydee
Beiträge: 4
Registriert: 11. Mär 2019 11:16
Answers: 0

Re: Mqtt Werte vom ADS1115 auslesen

Beitrag von frankydee »

Das mit den Punkt war die Fehlerquelle. Leider werden immer noch keine Werte angezeigt. Auf der Sitemap bleibt nur ein Strich.

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

Re: Mqtt Werte vom ADS1115 auslesen

Beitrag von udo1toni »

Jep, Tippfehler meinerseites (das Komma). Ich korrigiere das mal im Originalposting.

Dann ginge es jetzt an Fehleranalyse.

Ein logInfo() erzeugt eine Ausgabe on openhab.log. Hier mal als Beispiel:

Code: Alles auswählen

rule "wemos messwerte aufteilen"
when
    Item ads1115json changed
then
    var myJson = ads1115json.state.toString.subString(2,ads1115json.state.toString.size - 2)
    logInfo("wemos","Teilstring: {}",myJson)
    logInfo("wemos","Teilstring A0: {}",transform("JSONPATH","$.A0",myJson))
    logInfo("wemos","Teilstring A1: {}",transform("JSONPATH","$.A1",myJson))
    logInfo("wemos","Teilstring A2: {}",transform("JSONPATH","$.A2",myJson))
    logInfo("wemos","Teilstring A3: {}",transform("JSONPATH","$.A3",myJson))
    ads1115a0.postUpdate(int::parseInt(transform("JSONPATH","$.A0",myJson)))
    ads1115a1.postUpdate(int::parseInt(transform("JSONPATH","$.A1",myJson)))
    ads1115a2.postUpdate(int::parseInt(transform("JSONPATH","$.A2",myJson)))
    ads1115a3.postUpdate(int::parseInt(transform("JSONPATH","$.A3",myJson)))
end
Das wäre erst mal, um zu schauen, ob denn die Werte korrekt abgetrennt werden.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

frankydee
Beiträge: 4
Registriert: 11. Mär 2019 11:16
Answers: 0

Re: Mqtt Werte vom ADS1115 auslesen

Beitrag von frankydee »

Puh, ich glaube ich hab da was Missverstanden. Ich hab bisher meine Items immer über die switch.items angelegt und die PaperUI nicht genutzt. Nur zur Kontrolle.
Wenn ich den ADS1115 über die PaperUI und die Json Transformation anlege, bekomme ich die Werte tatsächlich einzeln angelegt! Aber wie bekomme ich diese in die Sitemap? Den Weg bin ich noch nie gegangen.

Edit: habe es geschafft. PaperUI erzeugt andere Item Namen.

Danke für die Hilfe!

Benutzeravatar
sihui
Beiträge: 1827
Registriert: 11. Apr 2018 19:03
Answers: 21

Re: Mqtt Werte vom ADS1115 auslesen

Beitrag von sihui »

string_channel.PNG
frankydee hat geschrieben: 3. Apr 2019 09:52 Aber wie bekomme ich diese in die Sitemap? Den Weg bin ich noch nie gegangen.
Hier am Beispiel eines String im MQTT Bindung:

Das Thing aufrufen, den Channel Teil kopieren (geht auch mit dem Symbol rechts daneben), ein String Item in der Items Datei kreieren, den Channel linken:

Code: Alles auswählen

String NTP_String <time> { channel="ntp:ntp:local:string" }
dann in der Sitemap ein Text Element einfügen:

Code: Alles auswählen

Text item=NTP_String label="NTP Datum/Zeit [%s]"
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.

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

Re: Mqtt Werte vom ADS1115 auslesen

Beitrag von udo1toni »

frankydee hat geschrieben: 3. Apr 2019 09:52 Puh, ich glaube ich hab da was Missverstanden.
Ich denke eher nicht.

Grundsätzlich ist es egal, ob man Bridge, Thing oder Item über Paper UI oder über Textfiles anlegt. Man könnte all diese Elemente auch über die Karaf Konsole oder die Rest API erzeugen.
Eine Ausnahme gibt es doch, man kann openHAB1 Bindings nur in einer *.items Datei mit einem Item verbinden.
Paper UI bietet keine Möglichkeit, ein Item zu taggen, auch das geht also am ehesten über eine *.items Datei.

Wenn ein über eine Datei angelegtes Things (bzw. deren Channel) sich anders verhält, stimmt "einfach" etwas mit der textlichen Konfiguration nicht.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten