JSON -> Readings

Begonnen von dev0, 09 Februar 2017, 11:31:43

Vorheriges Thema - Nächstes Thema

dev0

Zitat von: Reinhart am 23 Februar 2017, 08:42:04
Da dies indirekt mit Json zu tun hat, möchte ich dich fragen ob sich da eventuell irgendwas in die Quere kommt?

Unwahrscheinlich. Sieht für mich nach einer nicht berücksichtigen Fehlersituation im netatmo Modul aus, wenn "internal_error" zurückgeliefert wird. Frag mal den netatmo Autor.

Reinhart

OK, Danke!

Dann sehe ich es spätestens morgen ob es das Netatmo Modul ist.
Es ist immer unsicher, wenn man mehrere Änderungen an FHEM gleichzeitig macht und das waren in diesem Fall doch sehr viele.

LG
Reinhart
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

dev0

Zitat
Can't use string ("internal_error") as a HASH ref while "strict refs" in use at ./FHEM/38_netatmo.pm line 2027.
Ist in diesem Fall aber recht eindeutig.

Reinhart

Ja, habe es Markus schon gemeldet und er hat eine neue Version gepostet. Ich teste bereits ob es stabil läuft, hat dann sicher nichts mit deinem JSON Reader zu tun.

LG
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

jdear75

Hallo,

erstmal vielen Dank für die tolle Arbeit.
Ich kann leider das Modul "98_expandJSON.pm" nicht in Fhem laden.

Unrecognized character \xC2; marked by <-- HERE after at master <-- HERE near column 48 at ./FHEM/98_expandJSON.pm line 23.

Kommt als Fehlermeldung, wenn ich reload 98_expandJSON.pm eingebe.
Das libjson-perl Paket ist installiert.
Ich nutze einen Raspberry Pi2 mit RASPBIAN JESSIE.

Hat jemand eine Idee?
Viele grüße
Max

dev0

Vmtl. hast Du das Modul nicht korrekt von Github runter geladen.

jdear75

Bingo,

Danke für die schnelle Antwort und Hilfe. Ich habe es jetzt direkt per Git Clone gezogen und es funktioniert.

Grüße
Max

AutomationBaer

Ich würde gerne die die JSON-Ausgabe meines DIY-Sensors 'zerlegen'. Auf der Suche nach dem richtigen Weg JSON in Readings zu überführen bin ich zu erst über j2r gestolpert und haben dann diesen Thread und expandJSON entdeckt. Allerdings waren meine Versuche bisher von keinerlei Erfolg gekrönt. Ich habe wohl die prinzipielle Vorgehensweise noch nicht verstanden und würde mich über entsprechende Guidance sehr freuen ;)

Mein Sensor liefert über MQTT - das wiederum eine eigene Baustelle ist (https://forum.fhem.de/index.php/topic,32528.msg598480.html#msg598480) - zyklisch seine Meßwerte:

{ "Timestamp" : "2017-03-06 05:26:57", "Temperature" : { "Value" : 26.600, "Fractional" : 26, "Decimal" : 600 }, "Humidity" : { "Value" : 37.300, "Fractional" : 37, "Decimal" : 300 }, "Light" : { "Value" : 1024 } }


Das entsprechende Reading ist Environment und das Device heißt environment_Treppenhaus. Für eine erste Zerlegung habe ich ein expandJSON definiert:
environment_Treppenhaus:Environment:.{.*}

Beim Empfang wird die Regel entsprechend 'gezogen'

2017.03.06 06:11:58 5: Starting notify loop for environment_Treppenhaus, 1 event(s), first is Environment: {\n\t"Timestamp" : "2017-03-06 05:11:57",\n\t"Temperature" : {\n\t\t"Value" : 25.200,\n\t\t"Fractional" : 25,\n\t\t"Decimal" : 200\n\t},\n\t"Humidity" : {\n\t\t"Value" : 36.899,\n\t\t"Fractional" : 36,\n\t\t"Decimal" : 899\n\t},\n\t"Light" : {\n\t\t"Value" : 1024\n\t}\n}
2017.03.06 06:11:58 5: End notify loop for environment_Treppenhaus


allerdings ohne das ich in einem der Devices entsprechende Readings finden könnte. Nach den Beispielen aus diesem Thread habe ich erwartet, daß zumindest ein Reading Namens Timestamp mit dem UTC-Timestamp-String als Inhalt generiert würde...

Muß ich j2r und expandJSON kombinieren? Wenn ja, wie? Oder wo liegt mein Fehler?


Vielen Dank,
thomas

dev0

Zitat von: AutomationBaer am 06 März 2017, 06:46:06
Muß ich j2r und expandJSON kombinieren? Wenn ja, wie? Oder wo liegt mein Fehler?

Nein j2r ist obsolet, expandJSON ist das aktuelle Modul.

Ich vermute aber, dass Du die eigentliche Fehlermeldung im Log verschwiegen hast. Auf Github findest Du die aktualisierte Version 1.04, in der ich einen Bug gefixed habe, der dazu führte, dass ein Teil vom JSON String, unter bestimmten Bedingungen, abgeschnitten wurde.

Sollte die Version bei Dir auch nicht funktionieren, dann bitte ein list vom Device environment_Treppenhaus hier, in Code-Tags, zeigen.

dev0

Nochmals aktualisiert (v1.05), da ich vergessen hatte eine Zeile mit Debugausgaben ins Log zu löschen...

AutomationBaer

Vielen Dank für die rasche Reaktion. Ich hatte die Version 1.04 aus GIThub installiert und es gab keine weiteren Meldungen im Log. Jatzt habe ich die aktualisierte Version 'gezogen'. Den Versuch des Modul Re-Loads wird allerdings mit einer Fehlermeldung quittiert:
Too many arguments for main::expandJSON_do at ./FHEM/98_expandJSON.pm line 151, near "$value) "

Hier die Definition meines Devices dessen Reading ich umwandeln möchte:

# Messwerte Treppenhaus EG
define environment_Treppenhaus MQTT_DEVICE
attr environment_Treppenhaus IODev vertxMQTT
attr environment_Treppenhaus icon weather_light_meter
attr environment_Treppenhaus room Treppenhaus
attr environment_Treppenhaus stateFormat transmission-state
attr environment_Treppenhaus subscribeReading_Environment sensor/indoor/treppenhaus/eg/environment

define ej1 expandJSON environment_Treppenhaus:Environment:.{.*}



dev0

FHEM bitte einmal neu starten, danach sollte der Meldung verschwinden.
Bitte ein list vom Device zeigen und kein Auszug aus der .cfg:

list environment_Treppenhaus


AutomationBaer

Aktuelles Modul aus dem GIThub und Neustart: Verhalten unverändert  :-\

Hier die Ausgabe von list environment_Treppenhaus

Internals:
   IODev      vertxMQTT
   NAME       environment_Treppenhaus
   NR         203
   STATE      incoming publish received
   TYPE       MQTT_DEVICE
   qos        0
   retain     0
   Readings:
     2017-03-07 18:41:58   Environment     {
"Timestamp" : "2017-03-07 17:41:57",
"Temperature" : {
"Value" : 27.800,
"Fractional" : 27,
"Decimal" : 800
},
"Humidity" : {
"Value" : 34.600,
"Fractional" : 34,
"Decimal" : 600
},
"Light" : {
"Value" : 1004
}
}
     2017-03-07 18:41:58   transmission-state incoming publish received
   Message_ids:
   Sets:
   subscribe:
     sensor/indoor/treppenhaus/eg/environment
   subscribeExpr:
     ^sensor\/indoor\/treppenhaus\/eg\/environment$
   Subscribereadings:
     sensor/indoor/treppenhaus/eg/environment Environment
Attributes:
   IODev      vertxMQTT
   icon       weather_light_meter
   room       Treppenhaus
   stateFormat transmission-state
   subscribeReading_Environment sensor/indoor/treppenhaus/eg/environment


Im Log sieht es unverändert aus;

2017.03.07 18:41:58 5: calling readingsSingleUpdate(environment_Treppenhaus,Environment,{
"Timestamp" : "2017-03-07 17:41:57",
"Temperature" : {
"Value" : 27.800,
"Fractional" : 27,
"Decimal" : 800
},
"Humidity" : {
"Value" : 34.600,
"Fractional" : 34,
"Decimal" : 600
},
"Light" : {
"Value" : 1004
}
},1
2017.03.07 18:41:58 5: Starting notify loop for environment_Treppenhaus, 1 event(s), first is Environment: {\n\t"Timestamp" : "2017-03-07 17:41:57",\n\t"Temperature" : {\n\t\t"Value" : 27.800,\n\t\t"Fractional" : 27,\n\t\t"Decimal" : 800\n\t},\n\t"Humidity" : {\n\t\t"Value" : 34.600,\n\t\t"Fractional" : 34,\n\t\t"Decimal" : 600\n\t},\n\t"Light" : {\n\t\t"Value" : 1004\n\t}\n}
2017.03.07 18:41:58 5: End notify loop for environment_Treppenhaus


Und auch im Event Monitor gibt es nichts zu entdecken:

2017-03-07 18:41:47 MQTT vertxMQTT connection: active
2017-03-07 18:41:58 MQTT_DEVICE environment_Treppenhaus transmission-state: incoming publish received
2017-03-07 18:41:58 MQTT_DEVICE environment_Treppenhaus Environment: { "Timestamp" : "2017-03-07 17:41:57", "Temperature" : { "Value" : 27.800, "Fractional" : 27, "Decimal" : 800 },  "Humidity" : { "Value" : 34.600, "Fractional" : 34, "Decimal" : 600 }, "Light" : { "Value" : 1004 } }
2017-03-07 18:42:47 MQTT vertxMQTT connection: active


Was kann ich noch zur weiteren Eingrenzung eruieren?


Vielen Dank,
thomas

dev0

Was heißt "Verhalten unverändert"? Wird das Modul nicht geladen oder werden nur keine Readings erzeugt?

AutomationBaer

Da ich FHEM neu gestartet habe und keine Fehlermeldung im Log entdecken kann gehe ich davon aus, daß das Modul geladen wurde. Läßt sich das irgendwie direkt verifizieren? Ich habe das expandJSON Device entfernt und nochmal angelegt. Auch hier keinerlei Fehlermeldung. In der GIThub Version ist im Sourcecode nach wie vor die Version 1.04 annotiert...

Und ja, mit unverändert meine ich das Fehlen zusätzlicher Readings im Device...