Seite 1 von 1

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 11:33
von mamoel
Ersetze mal das Komma durch einen Punkt.

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 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:

Code: Alles auswählen

Text item=NTP_String label="NTP Datum/Zeit [%s]"

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.