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

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
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

  • Hero Member
  • *****
  • Beiträge: 1044
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 Raspy3 mit Stretch + SSD, mit FS20, Homematic, ESP8266, Sonoff, Electrodragon, 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: 2725
    • _.:|:._
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: 270
  • Kölner Wimpelbeauftragter
Antw:JSON -> Readings
« Antwort #3 am: 09 Februar 2017, 19:24:55 »
Vielen Dank läuft super :)
Gruß Patrick
------------------------
Usertreffen Köln 16.09.2017
------------------------
(Rpi 2, Jessie) (HM-LGW) (CUL868) (CUL433) (HM-LC-Bl1PBU-FM) (HM-SEC-SCo) (FS20-ST-4) (SONOFF) (ESP8266)

Online octek0815

  • Full Member
  • ***
  • Beiträge: 242
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: 1610
  • 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: 2725
    • _.:|:._
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.

Online octek0815

  • Full Member
  • ***
  • Beiträge: 242
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

Online octek0815

  • Full Member
  • ***
  • Beiträge: 242
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 »
Hilfreich Hilfreich x 1 Liste anzeigen

Offline Mickbaer

  • New Member
  • *
  • Beiträge: 17
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: 2725
    • _.:|:._
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: 17
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: 17
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: 2725
    • _.:|:._
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: 17
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







Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #15 am: 11 Februar 2017, 19:50:07 »
Kannst Du deinen Beitrag zB. mit code tags so formatieren, dass es für mich lesbarer wird?

Offline Mickbaer

  • New Member
  • *
  • Beiträge: 17
Antw:JSON -> Readings
« Antwort #16 am: 11 Februar 2017, 23:20:29 »
Hallo, Dev0
Kannst Du deinen Beitrag zB. mit code tags so formatieren, dass es für mich lesbarer wird?
Ich vesuch es mal.
hier ein Ausschnitt meiner Logdatei, in die FHEM die EVENTS vom SONOFFPOW schreibt,
um sie dann als Plot anzeigen zu können.
Diese beiden Zeilen sind das original.(kommt so aus Tasmota -> MQTT Broker auf PI -> FHEM)
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"}}

Diese beiden Zeilen sind die vom J2R.pm erzeugt.
2017-02-11_17:17:01 sonoffpow1842 DS18B20_Temperature: 16.0
2017-02-11_17:17:01 sonoffpow1842 Time: 2017-02-11T17:17:00
Also alles gut, so soll es aussehen.

(Ich denke Du wunderst Dich, warum der SONOFFPOW hier die Temperatur vom DS18B20 anzeigt?) 8)
Ich habe an den GPIO4 des SONOOFPOW einen DS18B20 drangehängt und über die online Menüs eingeschaltet.
und siehe da, Tasmota sendet fleißig die oben als original bezeichten Zeilen.(auch alles so wie es sein soll.)

Damit erfüllt
@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.
deine neue Version alles zur vollsten Zufriedenheit.

Ich war auch schon recht weit auf der Spur, die Du, etwas schneller als Ich,
ja nun schon umgesetzt hast.
Hier ein Auszug aus dem Internet, wo beschrieben wird was zu tun ist,
wie du es ja nun auch getan hast,
wenn aus einem NOTIFY heraus, readings erzeugt werden und kein LOG-EVENT ausgelöst wird.
------------------------------------------------------------------------------
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 in this case.
sleep 0.1;
setreading X Y Z

------------------------------------------------------------------------------
Du warst nur schneller mit der Umsetzung als Ich. 8)
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 ( /opt/fhem/log/fhem-2017-02.log)
immer diese Meldung:
2017.02.11 17:15:03 2: MQTT_DEVICE sonoffpow1842: WARNING: deformed JSON data, check your config.Bei allen von Tasmota gesendeten MQTT Strings im JSON Format.

Bei deinem J2r.pm wurde jetzt ein Bezug zum Code angezeigt.
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
Das bezieht sich auf den code in deiner ./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";
  }
Was prüfst Du hier ab?

Ich hatte Theo schon gefragt, der sagt, an seinem MQtt String
SENSOR,{"Time":"2017-02-11T17:15:00", "DS18B20":{"Temperature":"16.0"}},liegt es nicht.
Denn dort wurde diskutiert, das bei ,{"Time":   {   "2017-02-11T17:15:00"   }   , evtl. Klammern fehlen.

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 zum Plotten der Ergebnisse lösen,
ehe ich auf die Version 3.9.14 hoch setze.

Hast Du eine Idee was das sein kann? das diese Fehler Meldung auslöst?
Ich hoffe es ist nun besser zu lesen.
Gruß Mickbaer aus Berlin :D

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #17 am: 12 Februar 2017, 07:59:18 »
Viel Text ;)

Ich lese heraus, dass alle Werte korrekt geschrieben werden, aber diese Fehlermeldung erscheint:
Zitat
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.
Hier ist zu sehen, dass kein JSON String übergeben wurde, sondern: "incoming publish rec..."
Vermutlich hast Du die regexp für das Notify nicht eng genug gefasst. Zeig mal bitte ein list von Deinem notify (in Code Tags ;) )

Oder hat sonst noch jemand diesen Effekt?

Um die FHEM Systemresourcen zu schonen habe ich das testweise eingebaute "sleep/setreading" Konstrukt wieder ersetzt. Bitte die angehängte Version noch einmal testen. Wenn alles ok ist, dann check ich sie so auf Github ein.

Was prüfst Du hier ab?
Ob eval einen Fehlercode erzeugt hat.

Edit: Anhang entfernt
« Letzte Änderung: 12 Februar 2017, 10:48:55 von dev0 »

Offline Mickbaer

  • New Member
  • *
  • Beiträge: 17
Antw:JSON -> Readings
« Antwort #18 am: 12 Februar 2017, 09:40:02 »
Hallo Dev0,
Ich habe deine Version von Heute Morgen ausprobiert,
und es kommt alles wie gewünscht an.
Ich denke wenn das noch jemand bestätigt, kannst Du es einchecken. (Danke coole Arbeit)

Zu dem AufrufFehler:
Ich poste mal hier den Ausschnitt aus meiner FHEM.cfg.
Vielleicht kannst Du daran sehen was Ich da falsch aufrufe.
#############################################################
#Sonoffpow 1842   IP 63 sonoffpow1842
#############################################################
define sonoffpow1842 MQTT_DEVICE
attr sonoffpow1842 IODev MyBroker
attr sonoffpow1842 eventMap ON:on OFF:off
attr sonoffpow1842 icon measure_power
attr sonoffpow1842 publishSet ON OFF cmnd/sonoffpow1842/POWER/set
attr sonoffpow1842 room 0_MQTT1
attr sonoffpow1842 stateFormat {sprintf("akutelle Leistung: %.1f W Tagesverbrauch: %.3f kW/h", ReadingsVal($name,"CURRENT_POWER",undef), ReadingsVal($name,"TODAY_ENERGY",undef))}
attr sonoffpow1842 subscribeReading_AKTUELL stat/sonoffpow1842/POWER
attr sonoffpow1842 subscribeReading_ENERGY tele/sonoffpow1842/ENERGY
attr sonoffpow1842 subscribeReading_SENSOR tele/sonoffpow1842/SENSOR
attr sonoffpow1842 subscribeReading_STATE tele/sonoffpow1842/STATE
attr sonoffpow1842 webCmd ON:OFF

define no_sonoffpow1842 notify sonoffpow1842:.* { j2r($NAME,$EVENT) }
attr no_sonoffpow1842 room 0_MQTT1

#--- Log datei fuer sonoffpow1842 ----------------------
define log_sonoffpow1842 FileLog ./log/sonoffpow-%Y-%m-%d.log sonoffpow1842.*:(DS18B20_Temperature|Power|Voltage|Today|Current|Period|Yesterday|Uptime|Factor|POWER|Wifi_RSS).*
attr log_sonoffpow1842 room 0_MQTT1


Gruß Mickbaer 8)

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #19 am: 12 Februar 2017, 09:43:51 »
define no_sonoffpow1842 notify sonoffpow1842:.* { j2r($NAME,$EVENT) }

Wie ich schon schrieb: die regexp des Notify ist zu weit gefasst, jedes Reading triggert das Notify. Ein korrektes Beispiel findest Du im ersten Beitrag.

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #20 am: 12 Februar 2017, 10:48:12 »
Die aktualisierte Version 1.04 habe ich eingecheckt: https://github.com/ddtlabs/FHEM-Snippets

Offline Mickbaer

  • New Member
  • *
  • Beiträge: 17
Antw:JSON -> Readings
« Antwort #21 am: 12 Februar 2017, 19:51:13 »
Hallo Dev0,
Ich habe die Readings für den Notify angepasst,
und nun sind auch die Fehler Meldungen verschwunden.

Gruß Mickbaer.

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #22 am: 21 Februar 2017, 09:16:54 »
Ich habe die Funktionen aus dem 99er Modul, dass per Norify ausgerufen werden mußte, in ein eigenständiges Modul verpackt:

https://github.com/ddtlabs/expandJSON/

Offline Reinhart

  • Hero Member
  • *****
  • Beiträge: 1044
Antw:JSON -> Readings
« Antwort #23 am: 21 Februar 2017, 13:13:26 »
Hallo dev0!

Danke für diese Implementierung in ein eigenes Modul und vor allem für die gut dargestellten Beispiele der unterschiedlichen Regexp im Github Wiki!

Ich bin gerade am Testen der verschiedenen Regexp und am Ausloten ihrer Möglichkeiten, sieht aber gut aus und es kommen alle Readings die ich möchte in Fhem an. Mit den Regexp hat nun wirklich jeder die Möglichkeit genau das zu erhalten was er braucht und der Rest kommt erst gar nicht.

Übrigens, die 4 Links für die Attribute im Wiki gehen noch ins Leere!

LG
Reinhart

FHEM auf Raspy3 mit Stretch + SSD, mit FS20, Homematic, ESP8266, Sonoff, Electrodragon, eBus, RPi mit COC,NanoCUL, HM-CFG-LAN Adapter, MQTT, ESPEasy Bridge, Alexa + Custom Skills

Offline Billy

  • Sr. Member
  • ****
  • Beiträge: 946
Antw:JSON -> Readings
« Antwort #24 am: 21 Februar 2017, 14:12:56 »
Ich bin gerade am Testen der verschiedenen Regexp und am Ausloten ihrer Möglichkeiten, sieht aber gut aus und es kommen alle Readings die ich möchte in Fhem an.

@Reinhart
Könntest du wenn du mit dem Testen durch bist die für das 98_expandJSON.pm und den Sonoff POW
notwendige Config mal anhängen?

Gruß
Billy
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink 13x PCA 301;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 1x KFM100, 3x HM-LC-SW1-PL2, ESP8266, Sonoff

Offline Reinhart

  • Hero Member
  • *****
  • Beiträge: 1044
Antw:JSON -> Readings
« Antwort #25 am: 21 Februar 2017, 18:16:01 »
ich bin zwar immer noch mit den vielen Möglichkeiten der Regexp beim Test, aber für mich hat sich diese Variante am Besten und einfachsten geeignet. Meine Module haben alle Namen die mit "Sonoff..." beginnen, also wählte ich die Regexp:

define ej3 expandJSON Sonoff.*:.*:.{.*}diese Regexp ist ja ziemlich global gehalten und durchforstet alles was für "Sonoff.*" so daherkommt, zum testen ideal. Ich habe noch keine negativen Symptome feststellen können wenn man so global filtert. Vermutlich werden bei vielen unterschiedlichen Sonoff Modulen mit allen möglichen Sensoren auch viele an nicht unbedingt benötigten Readings angelegt, dann sollte man eine andere Regexp wählen. Trotz globaler Filterung hat man ja noch Einfluß mit dem subscribeReading_xxxx. Aber das kann jeder selbst entscheiden was für seinen Anwendungszweck dann besser passt.

Die typische Definition für das POW Modul sieht dann für meine Zwecke so aus:

define Sonoff_Pow2 MQTT_DEVICE
attr Sonoff_Pow2 IODev myBroker
attr Sonoff_Pow2 publishSet ON OFF cmnd/sonoffpow2/LIGHT
attr Sonoff_Pow2 stateFormat {sprintf("aktuell: %.1f W Tag: %.2f Kw/h avg: %.1f W", ReadingsVal($name,"Power",undef), ReadingsVal($name,"Today",undef), ReadingsVal($name,"Power_avg_day",undef))}
attr Sonoff_Pow2 subscribeReading_ENERGY tele/sonoffpow2/ENERGY
attr Sonoff_Pow2 subscribeReading_LIGHT stat/sonoffpow2/LIGHT
attr Sonoff_Pow2 subscribeReading_state cmnd/sonoffpow2/LIGHT
ist eigentlich gegenüber früher sehr schlank geworden, dank JSON sind einige Attribute sehr global gehalten. ENERGY alleine beinhaltet schon 8 Readings.

ENERGY  {"Time":"2017-02-21T17:48:32", "Yesterday":"2.224", "Today":"1.714", "Period":8, "Power":101, "Factor":"0.99", "Voltage":228, "Current":"0.447"} das Reading ENERGY beinhaltet eigentlich alle relevanten Daten die ich vom Energiemesser erwarte und das neue Modul generiert brav alle darin enthaltenen Readings und aktualisiert sie mit frischen Daten, alles ohne notify!
LIGHT und state benötige ich nur zum schalten, bzw. Update des Status.

Das Bild im Anhang zeigt die generierten Readings, die Power_xxx kommen vom Modul average. Alles was rot ist, kommt im Zyklus von Teleperiod und wird ständig aktuell gehalten.

Ein Top Modul mit sehr universellen Einsatzmöglichkeiten und sehr flexible Anpassungsmöglichkeiten mit dem Regexp.

LG
Reinhart


« Letzte Änderung: 21 Februar 2017, 18:17:32 von Reinhart »
FHEM auf Raspy3 mit Stretch + SSD, mit FS20, Homematic, ESP8266, Sonoff, Electrodragon, eBus, RPi mit COC,NanoCUL, HM-CFG-LAN Adapter, MQTT, ESPEasy Bridge, Alexa + Custom Skills

Offline Billy

  • Sr. Member
  • ****
  • Beiträge: 946
Antw:JSON -> Readings
« Antwort #26 am: 21 Februar 2017, 19:48:50 »
@Reinhart
Danke vielmals für deine Definitionen.
Habs getestet, klappt hervorragend.
Zitat
Ein Top Modul mit sehr universellen Einsatzmöglichkeiten und sehr flexible Anpassungsmöglichkeiten mit dem Regexp.
Kann ich bestätigen.

@dev0
Vielen Dank für deine Arbeit!

Billy
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink 13x PCA 301;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 1x KFM100, 3x HM-LC-SW1-PL2, ESP8266, Sonoff

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #27 am: 22 Februar 2017, 11:17:12 »
Ich habe die Funktionen aus dem 99er Modul, dass per Norify ausgerufen werden mußte, in ein eigenständiges Modul verpackt:
https://github.com/ddtlabs/expandJSON/

Ich habe das Modul noch um eine weitere regexp ergänzt, mit der man bestimmen kann ob das konvertierte Reading geschrieben werden soll oder nicht. Enthält ein JSON String beispielsweise 10 Werte, man benötigt aber nur 2 oder 3 davon, dann kann man das jetzt optional angeben. Ohne diese 2. regexp verhält sich das Modul so wie vorher.

Offline Reinhart

  • Hero Member
  • *****
  • Beiträge: 1044
Antw:JSON -> Readings
« Antwort #28 am: 22 Februar 2017, 12:29:26 »
gute Idee, danke dev0!

ich habe das jetzt bei meinen POW's so eingestellt und funktioniert perfekt.

define ej3 expandJSON Sonoff.*:ENERGY.*:.{.*} (Power|Current|Voltage|Yesterday|Today)
somit wird Time, Period und Factor nicht erfasst. Eigentlich ist bei der Energiemessung ja Voltage und Current auch schon Luxus, da erstens die Spannung des Elektrizitätsversorgers kaum schwankt und der Strom ebenso wie die Spannung ja nur zur Berechnung der Leistung erforderlich ist. Für Kontrollzwecke steht ja immer noch der gesamte ungefilterte JSON String als Reading "ENERGY" zur Verfügung.

define ej3 expandJSON Sonoff.*:ENERGY.*:.{.*} (Power|Yesterday|Today)die meisten würden daher mit dieser Regexp auskommen.

Was dabei wichtig ist, bei allen Modulen wird ja der Schaltstatus als reine Legacy Meldung übertragen, somit beeinflusst das Modul von dev0 diesen Ein/Aus Status nicht weiter und braucht auch nicht separat gefiltert werden.

LG
Reinhart
« Letzte Änderung: 22 Februar 2017, 12:34:27 von Reinhart »
FHEM auf Raspy3 mit Stretch + SSD, mit FS20, Homematic, ESP8266, Sonoff, Electrodragon, eBus, RPi mit COC,NanoCUL, HM-CFG-LAN Adapter, MQTT, ESPEasy Bridge, Alexa + Custom Skills

Offline Reinhart

  • Hero Member
  • *****
  • Beiträge: 1044
Antw:JSON -> Readings
« Antwort #29 am: 23 Februar 2017, 08:42:04 »
@dev0

Ich möchte dich um Rat fragen, seit 2 Tagen (Nächte) hängt sich FHEM bei mir komplett auf.

Can't use string ("internal_error") as a HASH ref while "strict refs" in use at ./FHEM/38_netatmo.pm line 2027.
es geht dabei um diese Codezeilen:

    my $json;
    $json = JSON->new->utf8(0)->decode($data);

    Log3 "unknown", 4, "unknown ".Dumper($hash) if(!defined($name));
    Log3 $name, 4, "$name: dispatch return: ".$param->{type};
    Log3 $name, 6, Dumper($json);

    if( $json->{error} ) {
      if($json->{error} =~ /invalid_grant/)
      {
        $hash->{status} = "invalid grant";
        $hash->{STATE} = "LOGIN FAILED";
        return undef;
      }

      $hash->{status} = $json->{error}{message};
      InternalTimer(gettimeofday()+1800, "netatmo_poll", $hash, 0) if($hash->{status} =~ /usage/);

      return undef if($hash->{status} =~ /usage/);
    }

Da dies indirekt mit Json zu tun hat, möchte ich dich fragen ob sich da eventuell irgendwas in die Quere kommt?
Ich kann das leider nicht genau sagen, da vor 2 Tagen auch gleichzeitig der Update auf FHEM 5.8 war.

Ich habe jetzt zur Auffindung des Übeltäters einmal die 38_netatmo.pm gegen die alte Version getauscht. Wenn das nicht hilft, dann gehe ich einmal zurück auf FHEM 5.7. Der Fehler kommt meist erst nach 20 Stunden.

Meinst du kann da ein Zusammenhang sein oder hängt es nur damit zusammen: https://forum.fhem.de/index.php/topic,67461.msg589138.html#msg589138

LG
FHEM auf Raspy3 mit Stretch + SSD, mit FS20, Homematic, ESP8266, Sonoff, Electrodragon, eBus, RPi mit COC,NanoCUL, HM-CFG-LAN Adapter, MQTT, ESPEasy Bridge, Alexa + Custom Skills

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #30 am: 23 Februar 2017, 09:17:07 »
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.

Offline Reinhart

  • Hero Member
  • *****
  • Beiträge: 1044
Antw:JSON -> Readings
« Antwort #31 am: 23 Februar 2017, 10:53:14 »
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 Raspy3 mit Stretch + SSD, mit FS20, Homematic, ESP8266, Sonoff, Electrodragon, eBus, RPi mit COC,NanoCUL, HM-CFG-LAN Adapter, MQTT, ESPEasy Bridge, Alexa + Custom Skills

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #32 am: 23 Februar 2017, 11:34:20 »
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.

Offline Reinhart

  • Hero Member
  • *****
  • Beiträge: 1044
Antw:JSON -> Readings
« Antwort #33 am: 23 Februar 2017, 12:44:52 »
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 Raspy3 mit Stretch + SSD, mit FS20, Homematic, ESP8266, Sonoff, Electrodragon, eBus, RPi mit COC,NanoCUL, HM-CFG-LAN Adapter, MQTT, ESPEasy Bridge, Alexa + Custom Skills

Offline jdear75

  • Newbie
  • Beiträge: 2
Antw:JSON -> Readings
« Antwort #34 am: 03 März 2017, 20:19:29 »
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

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #35 am: 03 März 2017, 20:31:50 »
Vmtl. hast Du das Modul nicht korrekt von Github runter geladen.

Offline jdear75

  • Newbie
  • Beiträge: 2
Antw:JSON -> Readings
« Antwort #36 am: 03 März 2017, 20:40:55 »
Bingo,

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

Grüße
Max

Offline AutomationBaer

  • New Member
  • *
  • Beiträge: 11
JSON -> Readings - Wie nutzen?
« Antwort #37 am: 06 März 2017, 06:46:06 »
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

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings - Wie nutzen?
« Antwort #38 am: 06 März 2017, 08:52:57 »
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.

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #39 am: 06 März 2017, 10:36:41 »
Nochmals aktualisiert (v1.05), da ich vergessen hatte eine Zeile mit Debugausgaben ins Log zu löschen...

Offline AutomationBaer

  • New Member
  • *
  • Beiträge: 11
JSON -> Readings - Probleme mit expandJSON
« Antwort #40 am: 06 März 2017, 19:54:59 »
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:.{.*}


Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #41 am: 06 März 2017, 20:42:54 »
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

Offline AutomationBaer

  • New Member
  • *
  • Beiträge: 11
Antw:JSON -> Readings
« Antwort #42 am: 07 März 2017, 18:48:08 »
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

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #43 am: 07 März 2017, 18:52:48 »
Was heißt "Verhalten unverändert"? Wird das Modul nicht geladen oder werden nur keine Readings erzeugt?

Offline AutomationBaer

  • New Member
  • *
  • Beiträge: 11
Antw:JSON -> Readings
« Antwort #44 am: 07 März 2017, 21:43:41 »
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...

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #45 am: 08 März 2017, 13:31:53 »
Version 1.06 liegt auf Github bereit:
- fixed state handling
- added multi line JSON handling (pretty, indent, spaces)
- add logging (verbose 5)

@all: wäre nett, wenn Ihr die Version testen könntet und ein kurzes feedback gebt.
@AutomationBaer: Deine (human readable) JSON Readings sollten nun auch verarbeitet werden.

Online octek0815

  • Full Member
  • ***
  • Beiträge: 242
Antw:JSON -> Readings
« Antwort #46 am: 08 März 2017, 18:09:12 »
Funktioniert weiterhin mir der neuen Version einwandfrei.

Grüße
Olli

Offline Reinhart

  • Hero Member
  • *****
  • Beiträge: 1044
Antw:JSON -> Readings
« Antwort #47 am: 08 März 2017, 20:15:08 »
auch von mir nichts negatives, kann keine Ungereimheiten feststellen und alles läuft perfekt. Die Strings werden wie gewohnt aufgedröselt und  die Readings upgedatet.

Ich habe auch kurz verbose 5 getestet und das logt auch schön mit.

2017.03.08 20:06:58 5: expandJSON ej3: Found Sonoff_Pow3:ENERGY: {"Time":"2017-03-08T20:06:57", "Yesterday":0.082, "Today":0.069, "Period":0, "Power":3, "Factor":0.18, "Voltage":228, "Current":0.079}
2017.03.08 20:06:58 5: expandJSON ej3: Yield expandJSON_do: HASH(0x4fc5fd8) | Sonoff_Pow3 | ENERGY | {"Time":"2017-03-08T20:06:57", "Yesterday":0.082, "Today":0.069, "Period":0, "Power":3, "Factor":0.18, "Voltage":228, "Current":0.079}
2017.03.08 20:07:11 5: expandJSON ej3: Found Sonoff_Pow:ENERGY: {"Time":"2017-03-08T20:07:11", "Yesterday":"1.248", "Today":"1.052", "Period":0, "Power":0, "Factor":"0.00", "Voltage":0, "Current":"0.000"}
2017.03.08 20:07:11 5: expandJSON ej3: Yield expandJSON_do: HASH(0x4fc5fd8) | Sonoff_Pow | ENERGY | {"Time":"2017-03-08T20:07:11", "Yesterday":"1.248", "Today":"1.052", "Period":0, "Power":0, "Factor":"0.00", "Voltage":0, "Current":"0.000"}
2017.03.08 20:07:28 5: expandJSON ej3: Found Sonoff_Pow3:ENERGY: {"Time":"2017-03-08T20:07:27", "Yesterday":0.082, "Today":0.069, "Period":0, "Power":3, "Factor":0.19, "Voltage":227, "Current":0.077}
2017.03.08 20:07:28 5: expandJSON ej3: Yield expandJSON_do: HASH(0x4fc5fd8) | Sonoff_Pow3 | ENERGY | {"Time":"2017-03-08T20:07:27", "Yesterday":0.082, "Today":0.069, "Period":0, "Power":3, "Factor":0.19, "Voltage":227, "Current":0.077}

Danke für deine Verbesserungen im Modul!

LG
Reinhart
FHEM auf Raspy3 mit Stretch + SSD, mit FS20, Homematic, ESP8266, Sonoff, Electrodragon, eBus, RPi mit COC,NanoCUL, HM-CFG-LAN Adapter, MQTT, ESPEasy Bridge, Alexa + Custom Skills

Offline AutomationBaer

  • New Member
  • *
  • Beiträge: 11
Antw:JSON -> Readings
« Antwort #48 am: 09 März 2017, 05:35:24 »
Wunderbar: Der JSON Pretty-Print wird sauber in Einzel-Readings überführt. Vielen Dank, jetzt muß ich noch mein tieferliegendes MQTT Kommunikationsproblem lösen.

Offline alex885

  • Jr. Member
  • **
  • Beiträge: 70
Antw:JSON -> Readings
« Antwort #49 am: 15 März 2017, 11:58:36 »
Hallo,

Wenn ich das Beispiel aus post #1 ausführe,
erhalte ich nach setreading d... folgende Fehlermeldung

2017.03.15 11:54:58 3: n return value: Undefined subroutine &main::j2r called at (eval 2882) line 1.

2017.03.15 11:54:58 1: ERROR evaluating my $EVTPART5='"SSID":"xxxxxx",';my $EVTPART6='"RSSI":96}}';my $EVTPART3='"POWER":"ON",';my $EVTPART1='{"Time":"2017-02-08T20:13:31",';my $EVTPART4='"Wifi":{"AP":1,';my $EVTPART2='"Uptime":0,';my $TYPE='dummy';my $SELF='n';my $NAME='d';my $EVENT='json: {"Time":"2017-02-08T20:13:31", "Uptime":0, "POWER":"ON", "Wifi":{"AP":1, "SSID":"xxxxxx", "RSSI":96}}';my $EVTPART0='json:';{ j2r($NAME,$EVENT) }: Undefined subroutine &main::j2r called at (eval 2882) line 1.

mein Fhem läuft auf OSX. Benötige ich für 98_expandJSON evtl noch was was ich installieren muss?

merci, A
FHEM auf Hackintosh-NUC, 5 x Rpi mit Fhem2Fhem & Shairport-Sync , FB7390, CUL, HMLAN, ZWave, Zigbee, RfxTrx, Rollotron, mySensors, Xiaomi mi, div Zeuchs..

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #50 am: 15 März 2017, 12:39:34 »
Bitte lies den ganzen Thread. Das Beispiel aus Post #1 bezieht sich auf das Modul 99_j2r, das durch 98_expandJSON abgelöst wurde. Beispiele zum Aufruf findest Du auf Github: https://github.com/ddtlabs/expandJSON/

Ich werde Modul aber auch zeitnah einchecken, dann findest Du die Beispiele auch in der commandref.

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #51 am: 15 März 2017, 13:03:09 »
Ich habe das expandJSON Modul gerade ins FHEM Repository eingecheckt. Es ist ab morgen 8:00 Uhr per FHEM Update verfügbar.

Offline alex885

  • Jr. Member
  • **
  • Beiträge: 70
Antw:JSON -> Readings
« Antwort #52 am: 15 März 2017, 13:16:03 »
Oops.

jetzt läufts merci. A
FHEM auf Hackintosh-NUC, 5 x Rpi mit Fhem2Fhem & Shairport-Sync , FB7390, CUL, HMLAN, ZWave, Zigbee, RfxTrx, Rollotron, mySensors, Xiaomi mi, div Zeuchs..

Offline dirkcx

  • New Member
  • *
  • Beiträge: 11
Antw:JSON -> Readings
« Antwort #53 am: 23 März 2017, 20:56:41 »
Hallo zusammen,
ich stehe auf dem Schlauch, das expandJSON Beispiel funktionierte einen Tag lang und nun nicht mehr. Ich kann mich nicht daran erinnern, zwischenzeitlich was geändert zu haben.
Meine beiden Sonoff POW liefern mit der aktuellsten Firmware von Arends folgende mqtt Meldungen:
tele/sonoff4802/ENERGY, {"Time":"2017-03-23T20:02:59", "Yesterday":0.000, "Today":0.000, "Period":0, "Power":0, "Factor":0.00, "Voltage":222, "Current":0.000}
tele/sonoff3884/ENERGY, {"Time":"2017-03-23T20:01:44", "Yesterday":2.782, "Today":2.526, "Period":0, "Power":0, "Factor":0.00, "Voltage":220, "Current":0.000}
Das regex lautet sonoff.*:.*:.{.*}aber auch das hier funktioniert nicht:
sonoff.*:ENERGY.*:.{.*} (Power|Current|Voltage|Yesterday|Today)Diverse online regex tester bestätigen auch, dass mit den regex strings und den mqtt Nachrichten kein Matching ist.
Leider kenne ich mich mit Regex nicht aus und versuche alle möglichen Kombinationen, ohne Erfolg.
Kann mir bitte jemand einen Tipp geben?
Verbose des ist auf 5, trotzdem keine Einträge im Log?!?

Vielen Dank

Internals:
   CFGFN      ./conf/fhem_sonoff.cfg
   DEF        sonoff.*:ENERGY.*:.{.*} (Power|Current|Voltage|Yesterday|Today)
   NAME       ej3
   NR         315
   NTFY_ORDER 50-ej3
   STATE      active
   TYPE       expandJSON
   s_regexp   sonoff.*:ENERGY.*:.{.*}
   t_regexp   (Power|Current|Voltage|Yesterday|Today)
   version    1.10
   Readings:
     2017-03-23 20:47:00   state           active
Attributes:
   verbose    5
« Letzte Änderung: 23 März 2017, 21:01:17 von dirkcx »

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #54 am: 23 März 2017, 21:06:11 »
Zeige bitte auch noch ein list vom MQTT Device, das das JSON Reading enthält.

Offline Reinhart

  • Hero Member
  • *****
  • Beiträge: 1044
Antw:JSON -> Readings
« Antwort #55 am: 23 März 2017, 21:13:53 »
ich habe die Version aus dem Github vom 15.03 geladen und die funktioniert bei mir ohne Probleme.

Sonoff.*:.*:.{.*} (Power|Current|Voltage|Yesterday|Today|AnalogInput0|RSSI|.*Humidity|.*Temperature)das ist meine Regexp den ich bei den Pow und den anderen Modulen einsetze. Zusätzlich wird hier noch ein Analogwert und Temperatur und Feuchtigkeit erfasst.

Auch mein Energy String gleicht dem deinen.
{"Time":"2017-03-23T21:06:48", "Yesterday":"0.788", "Today":"1.105", "Period":0, "Power":0, "Factor":"0.00", "Voltage":0, "Current":"0.000"}
Sonst lade zur Sicherheit nochmals die Version aus dem Git.

LG
Reinhart
FHEM auf Raspy3 mit Stretch + SSD, mit FS20, Homematic, ESP8266, Sonoff, Electrodragon, eBus, RPi mit COC,NanoCUL, HM-CFG-LAN Adapter, MQTT, ESPEasy Bridge, Alexa + Custom Skills

Offline Reinhart

  • Hero Member
  • *****
  • Beiträge: 1044
Antw:JSON -> Readings
« Antwort #56 am: 23 März 2017, 21:18:00 »
ich habe gerade gesehen, die Version aus dem Git ist 1.11!

Internals:
   DEF        Sonoff.*:.*:.{.*} (Power|Current|Voltage|Yesterday|Today|AnalogInput0|RSSI|.*Humidity|.*Temperature)
   NAME       ej3
   NR         2380
   NTFY_ORDER 50-ej3
   STATE      2017-03-23 21:16:49
   TYPE       expandJSON
   s_regexp   Sonoff.*:.*:.{.*}
   t_regexp   (Power|Current|Voltage|Yesterday|Today|AnalogInput0|RSSI|.*Humidity|.*Temperature)
   version    1.11
   Readings:
     2017-03-22 09:53:25   state           active
   Helper:
Attributes:
   room       Entwicklung
   verbose    0
FHEM auf Raspy3 mit Stretch + SSD, mit FS20, Homematic, ESP8266, Sonoff, Electrodragon, eBus, RPi mit COC,NanoCUL, HM-CFG-LAN Adapter, MQTT, ESPEasy Bridge, Alexa + Custom Skills

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #57 am: 23 März 2017, 21:18:20 »
Es wird nicht an der Version liegen, selbst wenn, dann bitte nicht auf die Gitversion wechseln, sondern mit mir den Fehler suchen.

Offline Reinhart

  • Hero Member
  • *****
  • Beiträge: 1044
Antw:JSON -> Readings
« Antwort #58 am: 23 März 2017, 21:26:46 »
ok, brauchst du von mir Daten?

LG
FHEM auf Raspy3 mit Stretch + SSD, mit FS20, Homematic, ESP8266, Sonoff, Electrodragon, eBus, RPi mit COC,NanoCUL, HM-CFG-LAN Adapter, MQTT, ESPEasy Bridge, Alexa + Custom Skills

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #59 am: 23 März 2017, 21:43:01 »
Nur dann, wenn Du auch ein Problm mit der offiziellen Version hast.

Offline Reinhart

  • Hero Member
  • *****
  • Beiträge: 1044
Antw:JSON -> Readings
« Antwort #60 am: 23 März 2017, 22:04:16 »
ok, ich habe jetzt einen Downgrade auf die 1.10 durchgeführt und die funktioniert ebenfalls, auch das Logging.

LG
FHEM auf Raspy3 mit Stretch + SSD, mit FS20, Homematic, ESP8266, Sonoff, Electrodragon, eBus, RPi mit COC,NanoCUL, HM-CFG-LAN Adapter, MQTT, ESPEasy Bridge, Alexa + Custom Skills

Offline dirkcx

  • New Member
  • *
  • Beiträge: 11
Antw:JSON -> Readings
« Antwort #61 am: 24 März 2017, 03:12:18 »
hier das "list" des relevanten mqtt device
Das Reading ENERGY wird aktuell befüllt, siehe Uhrzeit ;-)

Internals:
   CFGFN      ./conf/fhem_sonoff.cfg
   CHANGED
   IODev      mqtt
   NAME       sonoff3884
   NR         213
   STATE      [ON] aktuell: 0 W, heute: 0.752 Kw/h
   TYPE       MQTT_DEVICE
   qos        0
   retain     0
   Readings:
     2017-03-22 08:06:01   Current         0
     2017-03-24 03:06:52   Energy          {"Time":"2017-03-24T03:06:52", "Yesterday":2.943, "Today":0.131, "Period":118, "Power":1424, "Factor":1.00, "Voltage":222, "Current":6.046}
     2017-03-22 08:06:01   Factor          0
     2017-03-23 20:06:10   Light           ON
     2017-03-22 08:06:01   Period          0
     2017-03-22 08:06:01   Power           0
     2017-03-22 08:06:01   Time            2017-03-22T08:06:01
     2017-03-22 08:06:01   Today           0.752
     2017-03-22 08:06:01   Voltage         221
     2017-03-22 08:06:01   Yesterday       6.383
     2017-03-23 20:06:10   state           ON
     2017-03-24 03:06:52   transmission-state incoming publish received
   Message_ids:
   Publishsets:
     :
       topic      cmnd/sonoff3884/LIGHT
       values:
         ON
         OFF
   Sets:
     OFF
     ON
   subscribe:
     tele/sonoff3884/ENERGY
     stat/sonoff3884/LIGHT
     cmnd/sonoff3884/LIGHT
   subscribeExpr:
     ^tele\/sonoff3884\/ENERGY$
     ^stat\/sonoff3884\/LIGHT$
     ^cmnd\/sonoff3884\/LIGHT$
   Subscribereadings:
     cmnd/sonoff3884/LIGHT state
     stat/sonoff3884/LIGHT Light
     tele/sonoff3884/ENERGY Energy
Attributes:
   IODev      mqtt
   event-on-change-reading Yesterday,Today,Power,Current,Voltage,Light
   publishSet ON OFF cmnd/sonoff3884/LIGHT
   room       Warmwasser
   stateFormat [state] aktuell: Power W, heute: Today Kw/h
   subscribeReading_Energy tele/sonoff3884/ENERGY
   subscribeReading_Light stat/sonoff3884/LIGHT
   subscribeReading_state cmnd/sonoff3884/LIGHT
   verbose    1
   webCmd     ON:OFF

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #62 am: 24 März 2017, 06:44:44 »
Laut Deiner lists heißt das Reading Energy aber die Regex verwendet ENERGY. Gibt mal folgendes per copy/past in die FHEM command line ein (wenn das expandJSON Modul noch ej3 heißt):
defmod ej3 expandJSON sonoff.*:.*:.*

Wenn Du bei verbose 5 nichts im Log siehst, dann heißt das, das die regexp nicht matched.
Falls Du das Modul aktualisiert hast und noch keinen Neustart von FHEM gemacht hast, dann kann es auch nicht schaden FHEM einmal neu zu starten.

Offline dirkcx

  • New Member
  • *
  • Beiträge: 11
Antw:JSON -> Readings
« Antwort #63 am: 24 März 2017, 10:14:01 »
leider bringt keine der Maßnahmen eine Lösung :-(
Restart usw. hatte ich schon mehrfach gemacht

Bis auf Weiteres nutze ich jetzt ein notify das eine Funktion aufruft:

sub sonoffReadings($) {
my ($NAME) = @_;   
my $json = ReadingsVal($NAME, "Energy", "{}");
my $decoded_json = decode_json( $json );
fhem("setreading $NAME Time $decoded_json->{'Time'}");
fhem("setreading $NAME Yesterday $decoded_json->{'Yesterday'}");
fhem("setreading $NAME Today $decoded_json->{'Today'}");
fhem("setreading $NAME Power $decoded_json->{'Power'}");
fhem("setreading $NAME Period $decoded_json->{'Period'}");
fhem("setreading $NAME Factor $decoded_json->{'Factor'}");
fhem("setreading $NAME Voltage $decoded_json->{'Voltage'}");
fhem("setreading $NAME Current $decoded_json->{'Current'}");
}

und das notify:
sonoff3884:.* {
sonoffReadings("sonoff3884");; 
}

Aber das ist nicht die schönste Lösung. Ich hoffe, dass ich den Fehler noch finde. Bislang schmeißt das 98_expandJSON.pm einfach keine Logfiles. Ich denke, dass das nicht richtig aktiviert ist.
« Letzte Änderung: 24 März 2017, 17:30:46 von dirkcx »

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #64 am: 25 März 2017, 07:24:39 »
Ist Dein FHEM auf dem aktuellen Stand? Was zeigt der Befehl:
version fhem.pl

Offline dirkcx

  • New Member
  • *
  • Beiträge: 11
Antw:JSON -> Readings
« Antwort #65 am: 25 März 2017, 12:05:22 »
Ich habe die Version ist 5.8, schon eine Weile.
Ich habe zwischenzeitlich neu gebootet und weitere Dinge versucht. Hat alles nichts gebracht.
Außerdem habe ich das Modul mit Log3-Ausgaben an allen möglichen Stellen bestückt, aber das Modul wurde einfach nicht erkannt. Nicht einmal beim Initialisieren wurden Logs geschmissen.

Mittlerweile klappt es, letztendlich nachdem ich alle Readings gelöscht habe mit
deletereading sonoff3884 Voltage
deletereading sonoff3884 Current
usw.
Danach hat es auf wundersame Weise wieder geklappt. Bis jetzt läuft es stabil.
Ob es nur am Löschen der readings lag oder an allem, keine Ahnung.

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #66 am: 25 März 2017, 12:18:39 »
Ob es nur am Löschen der readings lag oder an allem, keine Ahnung.

Das Löschen der Readings kann damit nichts zu tun haben, der Ursache warum es nicht funktionierte muss eine andere Ursache haben...
Egal, jetzt tut es ja ;)

Offline dirkcx

  • New Member
  • *
  • Beiträge: 11
Antw:JSON -> Readings
« Antwort #67 am: 25 März 2017, 20:47:25 »
... und gerade bemerke ich, dass seit heute nachmittag wieder keine Daten ankommen :-(
Ich war nicht mal in der Nähe ...

Update: Fehler gefunden!
Wenn ich 'event-on-change-reading' aktiviere mit einzelnen Readings, dann "empfängt" das Device nichts mehr. Lösche ich 'event-on-change-reading', funktioniert es wieder.
Allerdings nutze ich 'event-on-change-reading' gerne, damit die Logfiles kleiner bleiben.
Was kann ich denn da machen?
« Letzte Änderung: 25 März 2017, 21:44:47 von dirkcx »

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #68 am: 26 März 2017, 08:37:37 »
Attributes:
   event-on-change-reading Yesterday,Today,Power,Current,Voltage,Light
Zumidest in deinem list fehlt das Reading Energy in dem event-on-change-reading Attribut. So werden niemals Events für Energy erzeugt und somit auch keine Notifies etc. getriggert.

Offline dirkcx

  • New Member
  • *
  • Beiträge: 11
Antw:JSON -> Readings
« Antwort #69 am: 26 März 2017, 11:45:26 »
das war nur ein Beispiel, Energy war drin, aber es funktioniert trotzdem nicht

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #70 am: 26 März 2017, 12:06:36 »
Kann ich leider nicht reproduzieren:

define dummy dummy
attr dummy event-on-change-reading .*
define ej expandJSON dummy:json:.*
setreading dummy json {"Time":"2017-03-24T03:06:52", "Yesterday":2.943, "Today":0.131, "Period":118, "Power":1424, "Factor":1.00, "Voltage":222, "Current":6.017}

list dummy

Internals:
   CFGFN     
   NAME       dummy
   NR         241
   STATE      ???
   TYPE       dummy
   Readings:
     2017-03-26 12:00:11   Current         6.017
     2017-03-26 12:00:11   Factor          1
     2017-03-26 12:00:11   Period          118
     2017-03-26 12:00:11   Power           1424
     2017-03-26 12:00:11   Time            2017-03-24T03:06:52
     2017-03-26 12:00:11   Today           0.131
     2017-03-26 12:00:11   Voltage         222
     2017-03-26 12:00:11   Yesterday       2.943
     2017-03-26 12:00:11   json            {"Time":"2017-03-24T03:06:52", "Yesterday":2.943, "Today":0.131, "Period":118, "Power":1424, "Factor":1.00, "Voltage":222, "Current":6.017}
Attributes:
   event-on-change-reading .*

Für weitere Tests solltest Du Deine FHEM Installation auf den aktuellen Stand bringen, ob der Stand 5.8 ausreicht weiss ich nicht.

Offline Dlay

  • Jr. Member
  • **
  • Beiträge: 62
Antw:JSON -> Readings
« Antwort #71 am: 15 Juni 2017, 00:03:29 »
Hallo,

ich habe das gleiche Problem.

Sobald ich ein event-on-change-reading auf mein Sonoff Device setze welches mit Tasmota und JSON läuft bekomme ich keine Daten mehr.
Es scheint mir so als wenn die von ej erstellten Readings keine "echten" Readings sind.

Sobald ich das e-o-c-r wieder entferne läuft alles wunderbar.

Gruß
« Letzte Änderung: 15 Juni 2017, 00:07:16 von Dlay »

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #72 am: 15 Juni 2017, 08:50:29 »
Zeig ein list vom expandJSON Device und vom betroffenen Device, wenn eocr gesetzt ist.

Offline Dlay

  • Jr. Member
  • **
  • Beiträge: 62
Antw:JSON -> Readings
« Antwort #73 am: 18 Juni 2017, 22:29:05 »
Sehr gern..

DEF        mqtt_sonoffsc
   IODev      MQTTBroker
   NAME       mqtt_sonoffsc
   NOTIFYDEV  mqtt_sonoffsc
   NR         76
   STATE      incoming publish received
   TYPE       MQTT_DEVICE
   qos        0
   retain     0
   Readings:
     2017-06-18 22:27:17   AirQuality      90
     2017-06-18 22:27:17   Humidity        19
     2017-06-18 22:27:17   Light           10
     2017-06-18 22:27:17   Noise           20
     2017-06-18 22:27:17   Sensor          {"Time":"2017-06-18T22:27:17", "Temperature":24.0, "Humidity":19.0, "Light":10, "Noise":20, "AirQuality":90, "TempUnit":"C"}
     2017-06-18 22:27:17   TempUnit        C
     2017-06-18 22:27:17   Temperature     24
     2017-06-18 22:27:17   Time            2017-06-18T22:27:17
     2017-06-18 22:27:17   transmission-state incoming publish received
   Message_ids:
   Sets:
   subscribe:
     /zuhause/mqtt_sonoffsc/SENSOR
   subscribeExpr:
     ^\/zuhause\/mqtt_sonoffsc\/SENSOR$
   Subscribereadings:
     /zuhause/mqtt_sonoffsc/SENSOR Sensor
Attributes:
   IODev      MQTTBroker
   event-on-change-reading AirQuality,Humidity,Light,Noise,Temperature
   stateFormat transmission-state
   subscribeReading_Sensor /zuhause/mqtt_sonoffsc/SENSOR

Internals:
   DEF        mqtt_.*:.*:.{.*}
   NAME       ej3
   NOTIFYDEV  mqtt_.*
   NR         103
   NTFY_ORDER 50-ej3
   STATE      2017-06-18 22:28:22
   TYPE       expandJSON
   s_regexp   mqtt_.*:.*:.{.*}
   t_regexp   .*
   version    1.10
   Readings:
     2017-06-18 22:10:35   state           active
   Helper:
Attributes:

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #74 am: 18 Juni 2017, 23:33:59 »
Das Reading Sensor fehlt im eocr Attribut.

Offline Dlay

  • Jr. Member
  • **
  • Beiträge: 62
Antw:JSON -> Readings
« Antwort #75 am: 19 Juni 2017, 00:14:46 »
Das macht doch keinen Sinn ?!?

In dem Reading ist die Uhrzeit enthalten. Die ändert sich ja ständig also ist  es doch nicht gut das mit reinzunehmen. Oder sehe ich da etwas falsch ?

Das SENSOR Reading ändert sich doch andauernd wegen der Zeit und erzeut somit auch Events.
« Letzte Änderung: 19 Juni 2017, 00:48:20 von Dlay »

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #76 am: 19 Juni 2017, 08:05:31 »
Das siehst Du falsch, die Events werden benötigt.

Offline Dlay

  • Jr. Member
  • **
  • Beiträge: 62
Antw:JSON -> Readings
« Antwort #77 am: 19 Juni 2017, 14:47:59 »
Ich habe jetzt ein .* bei eocr gesetzt und es ist nun viel ruhiger im Eventlog. Die Readings werden aber trotzdem aktualisiert.

Danke für den Tipp !

Offline tobox

  • New Member
  • *
  • Beiträge: 36
Antw:JSON -> Readings
« Antwort #78 am: 27 Juni 2017, 08:46:36 »
Ich habe mal eine Frage zu j2r: Meine Klimaanlage liefert mir sämtliche Daten als JSON per MQTT, z.B. folgendes:

{
  "power" : "ON",
  "mode" : "COOL",
  "temperature" : 25,
  "fan" : "QUIET",
  "vane" : "1",
  "wideVane" : ">>",
  "iSee" : false
}

Mit j2r kann ich die jetzt als einzelne Readings anzeigen lassen, aber gibt es auch eine Möglichkeit für die Schreibrichtung? D.h., wenn ich power auf OFF stelle, soll das passende JSON hingeschickt werden.

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9509
Antw:JSON -> Readings
« Antwort #79 am: 27 Juni 2017, 08:49:09 »
Nein das geht nicht!
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
Zustimmung Zustimmung x 1 Liste anzeigen

Offline Dlay

  • Jr. Member
  • **
  • Beiträge: 62
Antw:JSON -> Readings
« Antwort #80 am: 27 Juni 2017, 23:36:47 »
Ich habe mal eine Frage zu j2r: Meine Klimaanlage liefert mir sämtliche Daten als JSON per MQTT, z.B. folgendes:

{
  "power" : "ON",
  "mode" : "COOL",
  "temperature" : 25,
  "fan" : "QUIET",
  "vane" : "1",
  "wideVane" : ">>",
  "iSee" : false
}

Mit j2r kann ich die jetzt als einzelne Readings anzeigen lassen, aber gibt es auch eine Möglichkeit für die Schreibrichtung? D.h., wenn ich power auf OFF stelle, soll das passende JSON hingeschickt werden.

Hallo tobox,

also ich sende nach zwei Sekunden ein JSON per MQTT an mein Sonoff IR Modul. Das sollte für dich auch funktionieren.

{ system "mosquitto_pub -h 192\.168\.1\.1 -t /zuhause/schalter/mqtt_sonoff_2/cmnd/IRSend -m \'\{\"protocol\": \"NEC\",\"bits\": 32, \"data\": 1082099831\}\' "}
Musst du halt nur an deine Daten anpassen.

Ist aber eher ein MQTT Thema.

Bei mir schalte ich eine Lampe ein und sende via MQTT JSON den Befehl um die Farbeinstellung der Lampe via Infrarotmodul zu setzen:

Licht_Wohnzimmer:on {
fhem ("set mqtt_sonoff_2 on")};
{ fhem ("sleep 2")};
{ system "mosquitto_pub -h 192\.168\.1\.1 -t /zuhause/schalter/mqtt_sonoff_2/cmnd/IRSend -m \'\{\"protocol\": \"NEC\",\"bits\": 32, \"data\": 1082099831\}\' "}

Gruß
Dlay
« Letzte Änderung: 27 Juni 2017, 23:42:23 von Dlay »

Offline Christian Uhlmann

  • Full Member
  • ***
  • Beiträge: 161
Antw:JSON -> Readings
« Antwort #81 am: 08 August 2017, 23:26:57 »
Hallo zusammen,

@dev0: vielen Dank für deine Arbeit am Modul, nutze es schon eine Weile.

Jetzt bin ich dabei ein wenig zu optimieren und möchte gerne meine Readings auch für die MQTT Devices so haben, wie sie normalerweise in FHEM sind.
Also in meinem Beispiel power und energy für aktueller Verbrauch und Gesamtverbrauch, so kenne ich es von anderen Geräten.

Gibt es eine Möglichkeit, das Zielreading zu bestimmen? bei
Target reading:
.*power.*
(Power|Current|Voltage|.*day)
habe ich kurz gedacht, dass es darüber geht, aber ich denke wohl eher nicht.

Kenne mich mit regex nicht so gut aus, daher die Frage hier in die Runde ob mein vorhaben umsetzbar ist ohne über userReadings zu gehen?
Vielleicht habe ich diese Möglichkeit ja auch einfach nur "übersehen" (den Wald vor lauter Bäumen nicht sehen :) )


Danke und Grüße

Christian
Host: Debian Stretch als XEN Guest
Gateways: DuoFern Stick, CUL433 Revolt, CUL MAX, CUL FS20, CUL HM, HMLan, HM-USB 2, JeeLink LaCrosse
Devices: 12x Rademacher Rollos, 6x TX 29 DT-HT, 10x HM-CC-RT-DN, 14x MAX Fensterkontakte, Diverse HM Aktoren für Licht, Klingel, Gong, Eingangstür, FS20 und andere

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #82 am: 09 August 2017, 06:33:24 »
Zitat
Gibt es eine Möglichkeit, das Zielreading zu bestimmen?
Bin unsicher was Du genau meinst. Du kannst, mit dem letzen Argument im Define, bestimmen ob ein Reading angelegt wird. Die Namen der Readings sind durch den JSON String vorgegeben und nicht anpassbar. Wenn Du andere Readingnamen benötigst, dann kannst Du diese Readings zusätzlich anlegen (mit userReadings, notify, DOIF, ...).

Offline mynameisfu

  • New Member
  • *
  • Beiträge: 7
Antw:JSON -> Readings
« Antwort #83 am: 13 August 2017, 23:23:12 »
Gude
Ich bin glaube ich ein totaler Trottel oder ich verstehe es nicht so wirklich ich habe einen sonoff basic mit einem dht22, mqtt sendet mir lustig alles was ich auseinander nehmen möchte.

2017-08-13 23:16:59 MQTT_DEVICE Fernseher SENSOR: {"Time":"2017-08-13T22:16:59", "DHT22":{"Temperature":23.1, "Humidity":61.1}, "TempUnit":"C"}

das list von meinem ej3:

nternals:
   DEF        Fernseher.*:.*:.*
   NAME       ej3
   NOTIFYDEV  Fernseher.*
   NR         644
   NTFY_ORDER 50-ej3
   STATE      2017-08-13 23:11:59
   TYPE       expandJSON
   s_regexp   Fernseher.*:.*:.*
   t_regexp   .*
   version    1.11
   Readings:
     2017-08-13 23:05:33   state           active
   Helper:
Attributes:


und das list von meinem sonoff:

Internals:
   IODev      mqtt
   NAME       Fernseher
   NR         642
   STATE      OFF
   TYPE       MQTT_DEVICE
   qos        1
   retain     1
   Readings:
     2017-08-13 23:16:59   DHT22_Humidity  61.1
     2017-08-13 23:16:59   DHT22_Temperature 23.1
     2017-08-13 23:16:59   SENSOR          {"Time":"2017-08-13T22:16:59", "DHT22":{"Temperature":23.1, "Humidity":61.1}, "TempUnit":"C"}
     2017-08-13 23:16:59   TempUnit        C
     2017-08-13 23:16:59   Time            2017-08-13T22:16:59
     2017-08-13 22:59:20   presence        Online
     2017-08-13 22:42:12   state           OFF
     2017-08-13 23:16:59   transmission-state incoming publish received
   Message_ids:
   Publishsets:
     :
       topic      cmnd/Fernseher/POWER
       values:
         On
         Off
   Sets:
     Off
     On
   subscribe:
     tele/Fernseher/SENSOR
     tele/Fernseher/LWT
     stat/Fernseher/POWER
   subscribeExpr:
     ^tele\/Fernseher\/SENSOR$
     ^tele\/Fernseher\/LWT$
     ^stat\/Fernseher\/POWER$
   Subscribereadings:
     stat/Fernseher/POWER state
     tele/Fernseher/LWT presence
     tele/Fernseher/SENSOR SENSOR
Attributes:
   IODev      mqtt
   devStateIcon ON:rc_GREEN:OFF OFF:rc_RED:ON Offline:rc_BLUE:OFF
   group      Schalter_Wonzimmer
   icon       on
   publishSet On Off cmnd/Fernseher/POWER
   qos        at-least-once
   retain     1
   room       01_Haus,1.1 Wohnzimmer,MQTT
   stateFormat {ReadingsVal($name,"presence","") eq "Offline" ? "Offline" : ReadingsVal($name,"state","")}
   subscribeReading_SENSOR tele/Fernseher/SENSOR
   subscribeReading_presence tele/Fernseher/LWT
   subscribeReading_state stat/Fernseher/POWER
   webCmd     On:Off


doch leider Splittet er mir das nicht in die einzelnen Kategorien?
Wo liegt mein Fehler?
Lg Fu

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -> Readings
« Antwort #84 am: 14 August 2017, 07:25:53 »
     2017-08-13 23:16:59   DHT22_Humidity  61.1
     2017-08-13 23:16:59   DHT22_Temperature 23.1
     2017-08-13 23:16:59   SENSOR          {"Time":"2017-08-13T22:16:59", "DHT22":{"Temperature":23.1, "Humidity":61.1}, "TempUnit":"C"}
     2017-08-13 23:16:59   TempUnit        C
     2017-08-13 23:16:59   Time            2017-08-13T22:16:59

Ist doch alles so wie es sein soll, oder?

Btw: zum Posten von Code bitte die Code Tags verwenden (# Button), sonst ist das nur schwer lesbar.

Offline mynameisfu

  • New Member
  • *
  • Beiträge: 7
Antw:JSON -&gt; Readings
« Antwort #85 am: 15 August 2017, 07:02:59 »
Ist doch alles so wie es sein soll, oder?

Btw: zum Posten von Code bitte die Code Tags verwenden (# Button), sonst ist das nur schwer lesbar.
Guten Morgen nein leider nicht... Die Temperatur wird mir mit der Luftfeuchtigkeit zusammen angezeigt ich wollte es aber irgend wie trennen!
LG fu

Gesendet von meinem SM-G950F mit Tapatalk


Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2725
    • _.:|:._
Antw:JSON -&gt; Readings
« Antwort #86 am: 15 August 2017, 07:35:14 »
Zitat
     2017-08-13 23:16:59   DHT22_Humidity  61.1
     2017-08-13 23:16:59   DHT22_Temperature 23.1
Die Temperatur wird mir mit der Luftfeuchtigkeit zusammen angezeigt ich wollte es aber irgend wie trennen!

Die Temperatur und die Luftfeuchtigkeut aus dem JSON String werden korrekt verarbeitet und in zwei getrennte Readings geschrieben. Ich weiss beim besten Willen nicht wo Dein Problem liegt.

Offline Reinhart

  • Hero Member
  • *****
  • Beiträge: 1044
Antw:JSON -> Readings
« Antwort #87 am: 15 August 2017, 09:54:47 »
der MQTT String wird vom deinem Broker kompakt im Json Format unter der Rubrik "SENSOR" empfangen.

2017-08-13 23:16:59   SENSOR          {"Time":"2017-08-13T22:16:59", "DHT22":{"Temperature":23.1, "Humidity":61.1}, "TempUnit":"C"}
Das Modul von dev0 zerlegt dann erst diesen String und schreibt sie als einzelne Readings in Fhem.

2017-08-13 23:16:59   DHT22_Humidity  61.1
2017-08-13 23:16:59   DHT22_Temperature 23.1

Wenn du diese Reading auswertest hast du doch das gewünschte Ergebnis.

LG
FHEM auf Raspy3 mit Stretch + SSD, mit FS20, Homematic, ESP8266, Sonoff, Electrodragon, eBus, RPi mit COC,NanoCUL, HM-CFG-LAN Adapter, MQTT, ESPEasy Bridge, Alexa + Custom Skills

Offline mynameisfu

  • New Member
  • *
  • Beiträge: 7
Antw:JSON -> Readings
« Antwort #88 am: 15 August 2017, 17:38:27 »
oh man  :o ich bin ein blind fisch ;D danke ihr habt recht es steht ja genau oben drüber :DDD
danke nochmal für den hinweis.