Shell-Command ausführen und JSON-Response in Readings anbieten?

Begonnen von bgewehr, 14 Januar 2018, 12:40:43

Vorheriges Thema - Nächstes Thema

dev0

ZitatFunktioniert das Beispiel bei Dir?
Die Antwort steht noch aus.

Zitatdefine on_testdummy_act testdummy.* {
Da fehlt zumindest der Modulname im define.

Zitatfhem "set testdummywert = $result";;
Das "=" Zeichen würde dazu führen, dass das expandJSON Modul überhaupt nicht auf den Wert triggern würde.

Deine Angaben (lists, logs) sind zu ungenau bzw. nicht vorhanden, dass ich das ohne weitere exakte Angaben etwas analysieren kann...

bgewehr

Sorry für die schlechten inputs, ich versuche es oft unterwegs vom iPhone - mit mäßigem Ergebnis.

Das Beispiel von Dir funktioniert wie angegeben.

Zitat
define on_testdummy_act testdummy.* {
Da fehlt zumindest der Modulname im define.
Das war ein Kopierfehler von mir:


define act_on_testdummy notify testdummy.* {
my $result = qx "python /home/bananapi/carnet/volkswagen-carnet-client/vw_carnet_web.py getVehicleDetails";;
fhem "setreading testdummywert json $result";;
}

So ist der notify definiert.

Der epandJSON triggert NICHT, wenn ich set testdummy 1 ausführe, was ja auch richtig ist.
Hole ich aber den wert für json aus dem python Script, dann verklemmt sich fhem irgendwo so sehr, dass nur noch ein Neustart oder hartnäckiges sudo killall perl hilft.
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

bgewehr

Ich habe das python script nun umgeschrieben und erhalte die carnet-Infos jetzt per MQTT alle 10 Minuten.

Dafür ist das expandJSON EIN HAMMER! es bildet mir aus den ca. 20 JSONs von Carnet so um die 200 Readings - ein Traum!

Danke, dev0!
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

bgewehr

Hmmm.

Mein JSON ist brav nach key:value aufgeteilt, aber dennoch kommen values, die z.B. false sind, nicht korrekt durch:


{"errorCode":"0","timerCount":3,"remoteAuxiliaryHeating":
{"status":{"active":false,"operationMode":"HEATING","outdoorTemp":"9,5 °C","remainingTime":30},
"timers":[
{"timerId":1,"active":false,"weekDay":7,"time":{"hours":6,"minutes":40},"nextActivationDate":"29.01.2018"},
{"timerId":2,"active":false,"weekDay":1,"time":{"hours":6,"minutes":40},"nextActivationDate":"29.01.2018"},
{"timerId":3,"active":false,"weekDay":6,"time":{"hours":0,"minutes":0},"nextActivationDate":"03.02.2018"}
]}
}


"active":false,

wird ignoriert und weggelassen, obwohl es gültig ist.

Muss ich mal im Modul expandJSON nachschauen, warum. @Dev0, hilfst Du mir?
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

CoolTux

Es kann sein das true und false als 0 und 1 gewandelt werden bei decode_json()
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

bgewehr

Ich fürchte, es ist schlimmer:

https://stackoverflow.com/questions/6792173/in-perl-checking-a-json-decoded-boolean-value


Part of the confusion probably comes from Perl itself - Perl does not have boolean types in the language. It only has truthiness.
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

bgewehr

#21
Auf alle Fälle hier mal ein Zwischenstand.

Lesehilfe:


  • Die aktuelle Außentemperatur ist 12 Grad am Auto
  • Die Zieltemperatur ist immer 10, unwichtig
  • Der Modus der Standheizung ist HEATING, sie ist aber nicht aktiv ({"active":false} das ist ja mein aktuelles Problem)
  • Ich  kann noch 85 km mit dieser Tankfüllung fahren
  • Der Kilometerstand ist 10.203 km
  • in 614 Tagen oder 19.800 km ist Wartung angesagt
  • Es ist ein Arteon Elegance

FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

dev0

Zitat von: bgewehr am 29 Januar 2018, 21:18:55
Ich fürchte, es ist schlimmer:
https://stackoverflow.com/questions/6792173/in-perl-checking-a-json-decoded-boolean-value
Part of the confusion probably comes from Perl itself - Perl does not have boolean types in the language. It only has truthiness.
Ich komme im Moment nicht dazu mich dort einzuarbeiten. Artikel in dieser Art und auch die Doku zu JSON und JSON::XS haben mich nicht wirklich weiter gebracht um Dir ad hoc eine Lösung/Erweiterung zu bieten. Vielleicht verstehe ich die Formulierungen einfach auch nur nicht...

Kennt jemand anderes vielleicht die Lösung, wie man ein true/false als Text dekodieren lassen kann?

dev0

@bgewehr: Teste bitte mal die angehängte Version, die sollte true/false als 1/0 in das entsprechende Reading schreiben.

bgewehr

Perfekt - funktioniert.

Ich habe wieder 35 neue Readings, alle brav in 0 und 1.

Vielen Dank!
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

bgewehr

Noch ein letzter Gedanke:

würde hier ein encode() der Ergebnisse helfen?


Höherweg 85 Düsseldorf 40233
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

dev0

@bgewehr: Magst Du das mal testen und berichten?

  eval { $h = decode_json(encode_utf8($dvalue)); 1; };

statt der jetzigen decode_json Zeile (~178)

bgewehr

Sieht gut aus:


Wir möchten Sie darüber informieren, dass Ihr Fahrzeug Bernd's Arteon am 02.02.2018 um 08:43 in das Gebiet das Dorf eingefahren ist.
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

dev0

Kann ich dann so bei Gelegenheit einchecken? Ich hab's selbst nicht getestet.

Anbei das angepasste Modul. Vielleicht findest sich noch jemand der es auch testen mag.

Edit: angehängtes Modul entfernt