Autor Thema: JSON -> Readings  (Gelesen 4755 mal)

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2552
    • _.:|:._
JSON -> Readings
« am: 09 Februar 2017, 11:31:43 »
Im [HowTo] Sonoff POW an Fhem anbinden Thread kam die Frage auf, wie man Werte eines JSON Strings in individuelle Readings schreibt.
Eine mögliche Variante ist hier zu finden.

EDIT: Das Modul expandJSON ist ab morgen früh (16.03.2017) über das FHEM Update verfügbar.
« Letzte Änderung: 15 März 2017, 13:06:10 von dev0 »
Gefällt mir Gefällt mir x 3 Liste anzeigen

Offline Reinhart

  • Sr. Member
  • ****
  • Beiträge: 949
Antw:JSON -> Readings
« Antwort #1 am: 09 Februar 2017, 12:12:52 »
Hallo dev0!

Das geht ja bei dir superschnell und es funktioniert! Danke für deine Mühe, das Modul ist ja sehr universell einsetzbar.
Ich habe jetzt folgendes bei einem Sonoff Modul mit Originalsoftware Tasmota getestet.

Das Attribut in Fhem:
attr TestSwitch subscribeReading_Sensor tele/TestSwitch/SENSOR

{"Time":"2017-02-09T12:05:01", "DHT":{"Temperature":"20.7", "Humidity":"28.7"}}und das ist der übergebene String vom Modul mit der Topic "tele/TestSwitch/SENSOR"

define n_j2r notify TestSwitch:Sensor:.* { j2r($NAME,$EVENT) }dann habe ich diesen Notify angelegt und erhalte wie im Bild unten dargestellt die darin enthaltenen Messdaten als Reading.

- DHT_Humidity
- DHT_Temperature
- Time



Vielen Dank für dieses sehr nützliche universelle Tool!

LG
Reinhart
« Letzte Änderung: 09 Februar 2017, 12:18:51 von Reinhart »
FHEM auf Raspberry mit FS20, Homematic, ESP8266, Sonoff, eBus, RPi mit COC,NanoCUL, HM-CFG-LAN Adapter, MQTT, ESPEasy Bridge, Alexa + Custom Skills
Gefällt mir Gefällt mir x 2 Liste anzeigen

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2552
    • _.:|:._
Antw:JSON -> Readings
« Antwort #2 am: 09 Februar 2017, 12:34:21 »
Ich habe im ersten Beistrag noch ein Beispiel für einen Dummy hinzugefügt, um die Arbeitsweise vielleicht noch etwas klarer zu machen.

Offline SamNitro

  • Full Member
  • ***
  • Beiträge: 238
  • Kölner Wimpelbeauftragter
Antw:JSON -> Readings
« Antwort #3 am: 09 Februar 2017, 19:24:55 »
Vielen Dank läuft super :)
Gruß Patrick
------------------------
Computer dienen uns zur Lösung von Problemen, die wir ohne sie nicht hätten.
------------------------
(Rpi 2, Jessie) (HM-LGW) (CUL868) (CUL433) (HM-LC-Bl1PBU-FM) (HM-SEC-SCo) (FS20-ST-4) (SONOFF) (ESP8266)

Offline octek0815

  • Full Member
  • ***
  • Beiträge: 241
Antw:JSON -> Readings
« Antwort #4 am: 09 Februar 2017, 19:54:04 »
Da die v3.2.13 von arendst EOL ist habe nun auch auf Tasmota umgestellt.
Im FHEM Log tauchen beim Laden von dem j2r Modul folgende Meldungen auf, ist das Ok?

2017.02.09 18:40:37 1: PERL WARNING: each on reference is experimental at ./FHEM/99_j2r.pm line 74.
2017.02.09 18:40:37 1: PERL WARNING: each on reference is experimental at ./FHEM/99_j2r.pm line 79.
2017.02.09 18:40:37 1: PERL WARNING: main::j2r_update() called too early to check prototype at ./FHEM/99_j2r.pm line 73.
2017.02.09 18:40:37 1: PERL WARNING: Scalar value @_[0] better written as $_[0] at ./FHEM/99_j2r.pm line 91.



Offline P.A.Trick

  • Hero Member
  • *****
  • Beiträge: 1605
  • Love it, change it or leave it
Antw:JSON -> Readings
« Antwort #5 am: 09 Februar 2017, 22:13:18 »
Cool Danke Dev0!
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2552
    • _.:|:._
Antw:JSON -> Readings
« Antwort #6 am: 10 Februar 2017, 08:32:43 »
@octek0815: Teste mal bitte ob die aktualisierte Version die Warnungen immer noch bringt. Nach dem Update FHEM bitte neu starten.

Offline octek0815

  • Full Member
  • ***
  • Beiträge: 241
Antw:JSON -> Readings
« Antwort #7 am: 10 Februar 2017, 09:48:25 »
@octek0815: Teste mal bitte ob die aktualisierte Version die Warnungen immer noch bringt. Nach dem Update FHEM bitte neu starten.

Perfekt, die Meldungen sind nun weg. Vielen Dank dafür!

LG
Olli

Offline octek0815

  • Full Member
  • ***
  • Beiträge: 241
Antw:JSON -> Readings
« Antwort #8 am: 10 Februar 2017, 16:14:48 »
Ich habe nun noch was entdeckt. Die Readings die durch das j2r Modul erzeugt werden lassen sich nicht loggen.
Ich habe zumindest nicht raus gefunden warum. Die werden im SONOFF Device schön erzeugt und aktualisiert wandern aber leider nicht ins FileLog.
Kann das Jemand bestätigen?

Nachtrag: Wenn ich mit setreading etwas bzw. einen Event im Device erzeuge taucht es im FileLog auf.

?!*#*???
« Letzte Änderung: 10 Februar 2017, 16:37:18 von octek0815 »

Offline Mickbaer

  • New Member
  • *
  • Beiträge: 14
Antw:JSON -> Readings
« Antwort #9 am: 10 Februar 2017, 20:21:08 »
Hallo,
zuerst einen großen Dank an dev0 :) :) :) für die Perl Funktion.
Die Readings kommen alle sauber in FHEM an.
(siehe Anhang)

Das die hinzugefügten Readings, keinen EVENT auslösen, habe ich gerade auch festgestellt,
darum werden die neuen Readings nicht in die LOG-Datei geschrieben.

Ich habe das auch noch nicht gefunden,
wie FHEM dazu zu bewegen ist beim Schreiben der Readings einen Event auszulösen.

Für einen Tip wäre Ich hier auch dankbar.
Grüße aus Berlin sagt der Mickbaer ;)

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2552
    • _.:|:._
Antw:JSON -> Readings
« Antwort #10 am: 10 Februar 2017, 20:44:35 »
Die fehlenden Events werden wegen der FHEM Event loop detection nicht generiert. Ich werde einen Workaround einbauen, sobald ich dazu komme.

Offline Mickbaer

  • New Member
  • *
  • Beiträge: 14
Antw:JSON -> Readings
« Antwort #11 am: 11 Februar 2017, 02:04:16 »
Hallo Dev0,
kann man die fehlenden Events nicht nach dem hier beschriebene Muster,
https://wiki.fhem.de/wiki/Plot-Abriss_vermeiden
like addlock lösen?
siehen hier:
#### Log-abriss vermeiden
# called by
# define addLog notify addLog {addLog("ez_Aussensensor","state");;\
#            addLog("ez_FHT","actuator");;\
#            addLog("MunichWeather","humidity");;\
#            addLog("MunichWeather","pressure");;\
#            addLog("MunichWeather","temperature");;\
#            addLog("MunichWeather","wind_chill");;}
# define a_midnight1 at *23:59 trigger addLog
# define a_midnight2 at *00:01 trigger addLog
sub
addLog($$) {
  my ($logdevice, $reading) = @_; # device and reading to be used
  my $logentry = ReadingsVal($logdevice,$reading,"addLog: invalid reading");
  if ($reading =~ m,state,i) {
    fhem "trigger $logdevice $logentry   << addLog";
  } else {
    fhem "trigger $logdevice $reading: $logentry   << addLog";
  }
}

die benötigten Variablen für $logdevice & $logentry sind ja in der J2r.pm vorhanden.
damit müsste sich doch ein Trigger pro reading in FHEM auslösen lassen.?
Mir fehlen dazu leider die nötigen Perl & FHEM Kenntnisse :'(

Gruß Mickbaer

Offline Mickbaer

  • New Member
  • *
  • Beiträge: 14
Antw:JSON -> Readings
« Antwort #12 am: 11 Februar 2017, 12:16:07 »
Hallo,
Ich habe jetzt noch einmal genauer nachgesehen.
Das J2r Modul erzeugt schön die Readings im Device.(J2R_B.JPG)
Auch im EVENT-Monitor sind die Events zu sehen.(J2R_C.JPG), gelb und blau markiert.
nur bei dem Auswahl menu für die Regexp parts ,(J2R_D.JPG)
sind die selbst erzeugten readings nicht gelistet. in J2R_C.JPG gelb markiert nicht gelistet.
es werden nur die in J2R_C.JPG blau markiert gelistet.

Das scheint mir der Grund zu sein warum die selbst erstellten Readings nicht in die Logdatei geschrieben werden.

Kann hier jemand weiter helfen, ist warscheinlich nur eine Kleinigkeit.

Gruß Mickbaer

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2552
    • _.:|:._
Antw:JSON -> Readings
« Antwort #13 am: 11 Februar 2017, 16:21:12 »
@Mickbaer,octek0815: Testet mal bitte die angehängte Version. Wenn das Problem damit beseitigt ist, dann werde ich das noch ordentlich einbauen. Zum Testen sollte es reichen, wenn meine Vermutung richtig ist.

Ins Modul Verzeichnis kopieren und 'reload 99_j2r' tippern oder FHEM neu starten.

Edit: Anhang entfernt
« Letzte Änderung: 12 Februar 2017, 08:00:09 von dev0 »

Offline Mickbaer

  • New Member
  • *
  • Beiträge: 14
Antw:JSON -> Readings
« Antwort #14 am: 11 Februar 2017, 17:36:29 »
Hallo Dev0,
das sieht gut aus. mit der neuen J2R.pm.
jetzt kommen die readings in der log Datei an. :D :D :D

hier meine Logdatei Ausschnitt.
Die ersten beiden Zeilen sind die vom Original,
Die untern beiden Zeilen sind die vom J2R.pm erzeugten.
2017-02-11_17:17:01 sonoffpow1842 transmission-state: incoming publish received
2017-02-11_17:17:01 sonoffpow1842 SENSOR: {"Time":"2017-02-11T17:17:00", "DS18B20":{"Temperature":"16.0"}}
2017-02-11_17:17:01 sonoffpow1842 DS18B20_Temperature: 16.0
2017-02-11_17:17:01 sonoffpow1842 Time: 2017-02-11T17:17:00

Ich hatte auch schon gelesen:
-------------------------------------------------
setreading <devspec> <reading> <value>

 Set the reading <reading> for the device <name> to <value> without sending out commands to the device, but triggering events and eventMap/stateFormat transformations as usual. See the set command documentation for replacement description.

 Examples: setreading lamp state on Note: setreading won't generate an event for device X, if it is called from a notify for device X. Use "sleep 0.1; setreading X Y Z" in this case.
-------------------------------------------------
Du warst nur schneller mit  Use "sleep 0.1; setreading X Y Z"

Danke für die tolle Unterstützung. 8) 8)

Jetzt kann ich alle meine Sonoff / Sonoffpow auf das Json Format umstellen.

Eine frage bleibt noch:
Ich bekomme in den FEHM Log immer diese Meldung:
2017.02.11 17:15:03 2: MQTT_DEVICE sonoffpow1842: WARNING: deformed JSON data, check your config.
2017.02.11 17:15:03 2: MQTT_DEVICE sonoffpow1842: malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "incoming publish rec...") at ./FHEM/99_j2r.pm line 51.

2017.02.11 17:15:03 3: no_sonoffpow1842 return value: deformed or no JSON
2017.02.11 17:15:03 5: calling readingsSingleUpdate(sonoffpow1842,SENSOR,{"Time":"2017-02-11T17:15:00", "DS18B20":{"Temperature":"16.0"}},1
--------------------------------------------
./FHEM/99_j2r.pm line 51. sieht so aus:

  eval { $h = decode_json($j); 1; };
  if ( $@ ) {
    Log3 $name, 2, "$type $name: WARNING: deformed JSON data, check your config.";
    Log3 $name, 2, "$type $name: $@";
    return "deformed or no JSON";
  }
-----------------------------------------


Ich hatte Theo schon gefragt, der sagt an seinem MQtt String liegt es nicht.
Ich nutze die Version 3.9.11 Theo ist schon bei 3.9.14 ganz frisch von heute Nachmittag,
Ich wollte aber erst das mit den Logfiles lösen ehe ich die Version hoch setze.

Hast Du eine Idee was das sein kann?

Danke und Gruß Mickbaer aus Berlin :D







 

decade-submarginal