Seite 1 von 1
Mqtt Werte vom ADS1115 auslesen
Verfasst: 1. Apr 2019 13:16
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
Re: Mqtt Werte vom ADS1115 auslesen
Verfasst: 1. Apr 2019 23:23
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.
Re: Mqtt Werte vom ADS1115 auslesen
Verfasst: 2. Apr 2019 09:07
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
Re: Mqtt Werte vom ADS1115 auslesen
Verfasst: 2. Apr 2019 11:33
von mamoel
Ersetze mal das Komma durch einen Punkt.
Re: Mqtt Werte vom ADS1115 auslesen
Verfasst: 2. Apr 2019 12:59
von frankydee
Das mit den Punkt war die Fehlerquelle. Leider werden immer noch keine Werte angezeigt. Auf der Sitemap bleibt nur ein Strich.
Re: Mqtt Werte vom ADS1115 auslesen
Verfasst: 2. Apr 2019 20:00
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.
Re: Mqtt Werte vom ADS1115 auslesen
Verfasst: 3. Apr 2019 09:52
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!
Re: Mqtt Werte vom ADS1115 auslesen
Verfasst: 3. Apr 2019 10:10
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:
Re: Mqtt Werte vom ADS1115 auslesen
Verfasst: 3. Apr 2019 12:04
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.