FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: dev0 am 09 Februar 2017, 11:31:43

Titel: JSON -> Readings
Beitrag von: dev0 am 09 Februar 2017, 11:31:43
Im [HowTo] Sonoff POW an Fhem anbinden Thread (https://forum.fhem.de/index.php/topic,60336.msg578102.html#msg578102) 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.
Titel: Antw:JSON -> Readings
Beitrag von: Reinhart 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
Titel: Antw:JSON -> Readings
Beitrag von: dev0 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.
Titel: Antw:JSON -> Readings
Beitrag von: SamNitro am 09 Februar 2017, 19:24:55
Vielen Dank läuft super :)
Titel: Antw:JSON -> Readings
Beitrag von: octek0815 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.


Titel: Antw:JSON -> Readings
Beitrag von: P.A.Trick am 09 Februar 2017, 22:13:18
Cool Danke Dev0!
Titel: Antw:JSON -> Readings
Beitrag von: dev0 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.
Titel: Antw:JSON -> Readings
Beitrag von: octek0815 am 10 Februar 2017, 09:48:25
Zitat von: dev0 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.

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

LG
Olli
Titel: Antw:JSON -> Readings
Beitrag von: octek0815 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.

?!*#*???
Titel: Antw:JSON -> Readings
Beitrag von: Mickbaer 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 ;)
Titel: Antw:JSON -> Readings
Beitrag von: dev0 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.
Titel: Antw:JSON -> Readings
Beitrag von: Mickbaer 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
Titel: Antw:JSON -> Readings
Beitrag von: Mickbaer 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
Titel: Antw:JSON -> Readings
Beitrag von: dev0 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
Titel: Antw:JSON -> Readings
Beitrag von: Mickbaer 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






Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 11 Februar 2017, 19:50:07
Kannst Du deinen Beitrag zB. mit code tags so formatieren, dass es für mich lesbarer wird?
Titel: Antw:JSON -> Readings
Beitrag von: Mickbaer am 11 Februar 2017, 23:20:29
Hallo, Dev0
Zitat von: dev0 am 11 Februar 2017, 19:50:07
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
Zitat von: dev0 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.
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
Titel: Antw:JSON -> Readings
Beitrag von: dev0 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.

Zitat von: Mickbaer am 11 Februar 2017, 23:20:29
Was prüfst Du hier ab?
Ob eval einen Fehlercode erzeugt hat.

Edit: Anhang entfernt
Titel: Antw:JSON -> Readings
Beitrag von: Mickbaer 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)
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 12 Februar 2017, 09:43:51
Zitat von: Mickbaer am 12 Februar 2017, 09:40:02
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.
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 12 Februar 2017, 10:48:12
Die aktualisierte Version 1.04 habe ich eingecheckt: https://github.com/ddtlabs/FHEM-Snippets
Titel: Antw:JSON -> Readings
Beitrag von: Mickbaer 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.
Titel: Antw:JSON -> Readings
Beitrag von: dev0 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/
Titel: Antw:JSON -> Readings
Beitrag von: Reinhart 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

Titel: Antw:JSON -> Readings
Beitrag von: Billy am 21 Februar 2017, 14:12:56
Zitat von: Reinhart am 21 Februar 2017, 13:13:26
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
Titel: Antw:JSON -> Readings
Beitrag von: Reinhart 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


Titel: Antw:JSON -> Readings
Beitrag von: Billy am 21 Februar 2017, 19:48:50
@Reinhart
Danke vielmals für deine Definitionen.
Habs getestet, klappt hervorragend.
ZitatEin 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
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 22 Februar 2017, 11:17:12
Zitat von: dev0 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/

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.
Titel: Antw:JSON -> Readings
Beitrag von: Reinhart 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
Titel: Antw:JSON -> Readings
Beitrag von: Reinhart 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 (https://forum.fhem.de/index.php/topic,67461.msg589138.html#msg589138)

LG
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 23 Februar 2017, 09:17:07
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.
Titel: Antw:JSON -> Readings
Beitrag von: Reinhart 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
Titel: Antw:JSON -> Readings
Beitrag von: dev0 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.
Titel: Antw:JSON -> Readings
Beitrag von: Reinhart 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
Titel: Antw:JSON -> Readings
Beitrag von: jdear75 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
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 03 März 2017, 20:31:50
Vmtl. hast Du das Modul nicht korrekt von Github runter geladen.
Titel: Antw:JSON -> Readings
Beitrag von: jdear75 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
Titel: JSON -> Readings - Wie nutzen?
Beitrag von: AutomationBaer 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 (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
Titel: Antw:JSON -> Readings - Wie nutzen?
Beitrag von: dev0 am 06 März 2017, 08:52:57
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.
Titel: Antw:JSON -> Readings
Beitrag von: dev0 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...
Titel: JSON -> Readings - Probleme mit expandJSON
Beitrag von: AutomationBaer 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:.{.*}


Titel: Antw:JSON -> Readings
Beitrag von: dev0 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

Titel: Antw:JSON -> Readings
Beitrag von: AutomationBaer 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
Titel: Antw:JSON -> Readings
Beitrag von: dev0 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?
Titel: Antw:JSON -> Readings
Beitrag von: AutomationBaer 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...
Titel: Antw:JSON -> Readings
Beitrag von: dev0 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.
Titel: Antw:JSON -> Readings
Beitrag von: octek0815 am 08 März 2017, 18:09:12
Funktioniert weiterhin mir der neuen Version einwandfrei.

Grüße
Olli
Titel: Antw:JSON -> Readings
Beitrag von: Reinhart 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
Titel: Antw:JSON -> Readings
Beitrag von: AutomationBaer 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.
Titel: Antw:JSON -> Readings
Beitrag von: alex885 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
Titel: Antw:JSON -> Readings
Beitrag von: dev0 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.
Titel: Antw:JSON -> Readings
Beitrag von: dev0 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.
Titel: Antw:JSON -> Readings
Beitrag von: alex885 am 15 März 2017, 13:16:03
Oops.

jetzt läufts merci. A
Titel: Antw:JSON -> Readings
Beitrag von: dirkcx 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
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 23 März 2017, 21:06:11
Zeige bitte auch noch ein list vom MQTT Device, das das JSON Reading enthält.
Titel: Antw:JSON -> Readings
Beitrag von: Reinhart 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
Titel: Antw:JSON -> Readings
Beitrag von: Reinhart 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
Titel: Antw:JSON -> Readings
Beitrag von: dev0 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.
Titel: Antw:JSON -> Readings
Beitrag von: Reinhart am 23 März 2017, 21:26:46
ok, brauchst du von mir Daten?

LG
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 23 März 2017, 21:43:01
Nur dann, wenn Du auch ein Problm mit der offiziellen Version hast.
Titel: Antw:JSON -> Readings
Beitrag von: Reinhart 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
Titel: Antw:JSON -> Readings
Beitrag von: dirkcx 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
Titel: Antw:JSON -> Readings
Beitrag von: dev0 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.
Titel: Antw:JSON -> Readings
Beitrag von: dirkcx 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.
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 25 März 2017, 07:24:39
Ist Dein FHEM auf dem aktuellen Stand? Was zeigt der Befehl:
version fhem.pl
Titel: Antw:JSON -> Readings
Beitrag von: dirkcx 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.
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 25 März 2017, 12:18:39
Zitat von: dirkcx am 25 März 2017, 12:05:22
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 ;)
Titel: Antw:JSON -> Readings
Beitrag von: dirkcx 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?
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 26 März 2017, 08:37:37
Zitat von: dirkcx am 24 März 2017, 03:12:18

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.
Titel: Antw:JSON -> Readings
Beitrag von: dirkcx am 26 März 2017, 11:45:26
das war nur ein Beispiel, Energy war drin, aber es funktioniert trotzdem nicht
Titel: Antw:JSON -> Readings
Beitrag von: dev0 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.
Titel: Antw:JSON -> Readings
Beitrag von: Dlay 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ß
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 15 Juni 2017, 08:50:29
Zeig ein list vom expandJSON Device und vom betroffenen Device, wenn eocr gesetzt ist.
Titel: Antw:JSON -> Readings
Beitrag von: Dlay 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:
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 18 Juni 2017, 23:33:59
Das Reading Sensor fehlt im eocr Attribut.
Titel: Antw:JSON -> Readings
Beitrag von: Dlay 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.
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 19 Juni 2017, 08:05:31
Das siehst Du falsch, die Events werden benötigt.
Titel: Antw:JSON -> Readings
Beitrag von: Dlay 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 !
Titel: Antw:JSON -> Readings
Beitrag von: tobox 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.
Titel: Antw:JSON -> Readings
Beitrag von: CoolTux am 27 Juni 2017, 08:49:09
Nein das geht nicht!
Titel: Antw:JSON -> Readings
Beitrag von: Dlay am 27 Juni 2017, 23:36:47
Zitat von: tobox 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.

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
Titel: Antw:JSON -> Readings
Beitrag von: Christian Uhlmann 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
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 09 August 2017, 06:33:24
ZitatGibt 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, ...).
Titel: Antw:JSON -> Readings
Beitrag von: mynameisfu 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
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 14 August 2017, 07:25:53
Zitat von: mynameisfu am 13 August 2017, 23:23:12

     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.
Titel: Antw:JSON -&gt; Readings
Beitrag von: mynameisfu am 15 August 2017, 07:02:59
Zitat von: dev0 am 14 August 2017, 07:25:53
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

Titel: Antw:JSON -&gt; Readings
Beitrag von: dev0 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

Zitat von: mynameisfu am 15 August 2017, 07:02:59
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.
Titel: Antw:JSON -> Readings
Beitrag von: Reinhart 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
Titel: Antw:JSON -> Readings
Beitrag von: mynameisfu 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.
Titel: Antw:JSON -> Readings
Beitrag von: SamNitro am 16 September 2017, 20:44:21
Habe ein problem beim zerlegen der Daten meiner S20 Steckdosen alle anderen sonoff funktionieren (basic, pow)

expandJSON
defmod ej_sonoff expandJSON sonoff.*:.*:.{.*}
attr ej_sonoff room MQTT

setstate ej_sonoff 2017-09-16 20:38:02
setstate ej_sonoff 2017-09-16 20:21:16 state active


sonoff_pow funktioniert
defmod sonoff_pow MQTT_DEVICE
attr sonoff_pow IODev MQTT
attr sonoff_pow autoSubscribeReadings +/sonoff_pow/+
attr sonoff_pow event-on-change-reading .*
attr sonoff_pow eventMap ON:on OFF:off
attr sonoff_pow publishSet ON OFF cmnd/sonoff_pow/power
attr sonoff_pow room MQTT
attr sonoff_pow stateFormat state
attr sonoff_pow subscribeReading_ENERGY tele/sonoff_pow/ENERGY
attr sonoff_pow subscribeReading_LWT tele/sonoff_pow/LWT
attr sonoff_pow subscribeReading_POWER stat/sonoff_pow/POWER
attr sonoff_pow subscribeReading_RESULT stat/sonoff_pow/RESULT
attr sonoff_pow subscribeReading_STATE tele/sonoff_pow/STATE
attr sonoff_pow subscribeReading_UPTIME tele/sonoff_pow/UPTIME
attr sonoff_pow subscribeReading_power cmnd/sonoff_pow/power
attr sonoff_pow webCmd ON:OFF

setstate sonoff_pow on
setstate sonoff_pow 2017-09-16 20:39:02 Current 0.14
setstate sonoff_pow 2017-09-16 20:39:02 ENERGY {"Time":"2017-09-16T19:39:01", "Total":10.298, "Yesterday":0.846, "Today":0.707, "Period":0, "Power":0, "Factor":0.00, "Voltage":230, "Current":0.140}
setstate sonoff_pow 2017-09-16 20:39:02 Factor 0
setstate sonoff_pow 2017-09-16 20:39:02 POWER on
setstate sonoff_pow 2017-09-16 20:39:02 Period 0
setstate sonoff_pow 2017-09-16 20:39:02 Power 0
setstate sonoff_pow 2017-09-16 20:22:06 RESULT {"POWER":"ON"}
setstate sonoff_pow 2017-09-16 20:39:02 STATE {"Time":"2017-09-16T19:39:01", "Uptime":511, "Vcc":3.182, "POWER":"ON", "Wifi":{"AP":2, "SSID":"Garage", "RSSI":68, "APMac":"xx:xx:xx:xx:xx:xx"}}
setstate sonoff_pow 2017-09-16 20:39:02 Time 2017-09-16T19:39:01
setstate sonoff_pow 2017-09-16 20:39:02 Today 0.707
setstate sonoff_pow 2017-09-16 20:39:02 Total 10.298
setstate sonoff_pow 2017-09-16 20:39:02 Uptime 511
setstate sonoff_pow 2017-09-16 20:39:02 Vcc 3.182
setstate sonoff_pow 2017-09-16 20:39:02 Voltage 230
setstate sonoff_pow 2017-09-16 20:39:02 Wifi_AP 2
setstate sonoff_pow 2017-09-16 20:39:02 Wifi_APMac xx:xx:xx:xx:xx:xx
setstate sonoff_pow 2017-09-16 20:39:02 Wifi_RSSI 68
setstate sonoff_pow 2017-09-16 20:39:02 Wifi_SSID Garage
setstate sonoff_pow 2017-09-16 20:39:02 Yesterday 0.846
setstate sonoff_pow 2017-09-16 20:22:06 power ON
setstate sonoff_pow 2017-09-16 20:22:06 state ON
setstate sonoff_pow 2017-09-16 20:39:02 transmission-state incoming publish received


sonoff_s20 funktioniert nicht
defmod sonoff_s20 MQTT_DEVICE
attr sonoff_s20 IODev MQTT
attr sonoff_s20 autoSubscribeReadings +/sonoff_s20/+
attr sonoff_s20 event-on-change-reading state.*,Set.*
attr sonoff_s20 eventMap ON:on OFF:off
attr sonoff_s20 publishSet ON OFF cmnd/sonoff_s20/power
attr sonoff_s20 room Küche,MQTT
attr sonoff_s20 stateFormat state
attr sonoff_s20 subscribeReading_INFO1 tele/sonoff_s20/INFO1
attr sonoff_s20 subscribeReading_INFO2 tele/sonoff_s20/INFO2
attr sonoff_s20 subscribeReading_INFO3 tele/sonoff_s20/INFO3
attr sonoff_s20 subscribeReading_LWT tele/sonoff_s20/LWT
attr sonoff_s20 subscribeReading_POWER cmnd/sonoff_s20/POWER
attr sonoff_s20 subscribeReading_RESULT stat/sonoff_s20/RESULT
attr sonoff_s20 subscribeReading_STATE tele/sonoff_s20/STATE
attr sonoff_s20 subscribeReading_power cmnd/sonoff_s20/power
attr sonoff_s20 webCmd ON:OFF

setstate sonoff_s20 state
setstate sonoff_s20 2017-09-16 20:35:57 INFO1 {"Module":"S20 Socket", "Version":"5.7.1i", "FallbackTopic":"DVES_CCD0A7", "GroupTopic":"sonoffs"}
setstate sonoff_s20 2017-09-16 20:35:57 INFO2 {"WebServerMode":"Admin", "Hostname":"sonoff_s20-4263", "IPAddress":"192.168.1.27"}
setstate sonoff_s20 2017-09-16 20:35:57 INFO3 {"RestartReason":"Software/System restart"}
setstate sonoff_s20 2017-09-16 20:35:56 LWT Online
setstate sonoff_s20 2017-09-16 20:35:58 POWER OFF
setstate sonoff_s20 2017-09-16 20:35:58 RESULT {"POWER":"OFF"}
setstate sonoff_s20 2017-09-16 20:41:05 STATE {"Time":"2017-09-16T19:41:05", "Uptime":0, "Vcc":3.595, "POWER":"OFF", "Wifi":{"AP":1, "SSId":"PC", "RSSI":98, "APMac":"xx:xx:xx:xx:xx:xx"}}
setstate sonoff_s20 2017-09-16 20:41:05 transmission-state incoming publish received

Titel: Antw:JSON -> Readings
Beitrag von: SamNitro am 16 September 2017, 20:53:29
Sorry für den Post:

Fehler selber gefunden
attr sonoff_s20 event-on-change-reading state.*,Set.*

in
attr sonoff_s20 event-on-change-reading .*

und schon geht es  :)
Titel: Antw:JSON -> Readings
Beitrag von: AlexJ am 12 November 2017, 21:41:57
HI,

hab grad expandJSON gefunden, und wollte es aktivieren. Klappt aber nicht.
Habe vorhin JSON-2.94 in perl installiert, jedoch aktivieren von 98_expandJSON.pm geht nicht:

define ej3 expandJSON Sonoff.*:ENERGY.*:.{.*} (Power|Yesterday|Today)
Cannot load module expandJSON


Im log sehe ich noch:


2017.11.12 21:31:54 1: reload: Error:Modul 98_expandJSON deactivated:
Type of arg 1 to each must be hash (not array dereference) at ./FHEM/98_expandJSON.pm line 203, near "} ) "


Hab dann noch das expandJSON aus git probiert, jedoch kommt derselbe Fehler (nur an einer anderen Zeile):

2017.11.12 22:35:09 1: reload: Error:Modul 98_expandJSON deactivated:
Type of arg 1 to each must be hash (not array dereference) at ./FHEM/98_expandJSON.pm line 236, near "} ) "

2017.11.12 22:35:09 0: Type of arg 1 to each must be hash (not array dereference) at ./FHEM/98_expandJSON.pm line 236, near "} ) "


Die Zeile wo das Problem auftacht ist:
"while( my ($key,$value) = each @{ $ref } ) {"

Irgendeine Ahnung was Falsch ist?

PS: ich hab verschiedene define's probiert:
z.B. define ej3 expandJSON Sonoff.*:.*:.{.*}
aber auch ein reload 98_expandJSON bringt denselben Fehler

LG,
Alex
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 13 November 2017, 05:33:39
Welche Perl Version benutzt Du? Dazu in die FHEM Eingabezeile folgendes eingeben:

{$]}


Welches Betriebssystem?
Titel: Antw:JSON -> Readings
Beitrag von: AlexJ am 13 November 2017, 07:19:08
Zitat von: dev0 am 13 November 2017, 05:33:39
Welche Perl Version benutzt Du? Dazu in die FHEM Eingabezeile folgendes eingeben:
{$]}
5.010000

Zitat von: dev0 am 13 November 2017, 05:33:39
Welches Betriebssystem?
Debian lenny 5.0, ist zwar uralt - läuft aber auf meinem LG N2R1 NAS
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 13 November 2017, 09:40:02
Zitat5.010000
Perl 5.10 ist 10 Jahre alt...

Zitat
Die Zeile wo das Problem auftacht ist:
"while( my ($key,$value) = each @{ $ref } ) {"

Hier mal 2 Varianten, die Du stattdessen testen könntest...

while( my ($key,$value) = each @$ref ) {
while( my ($key,$value) = each 0..$#{ $ref } ) {


Edit: 1. Variante angepasst
Titel: Antw:JSON -> Readings
Beitrag von: AlexJ am 13 November 2017, 10:09:37
Zitat von: dev0 am 13 November 2017, 09:40:02
while( my ($key,$value) = each @$ref ) {


2017.11.13 11:08:28 1: reload: Error:Modul 98_expandJSON deactivated:
Type of arg 1 to each must be hash (not array dereference) at ./FHEM/98_expandJSON.pm line 203, near "$ref ) "
2017.11.13 11:08:28 0: Type of arg 1 to each must be hash (not array dereference) at ./FHEM/98_expandJSON.pm line 203, near "$ref ) "





Zitat von: dev0 am 13 November 2017, 09:40:02
while( my ($key,$value) = each 0..$#{ $ref } ) {


2017.11.13 11:06:42 1: reload: Error:Modul 98_expandJSON deactivated:
Type of arg 1 to each must be hash (not constant item) at ./FHEM/98_expandJSON.pm line 203, near "0.."
2017.11.13 11:06:42 0: Type of arg 1 to each must be hash (not constant item) at ./FHEM/98_expandJSON.pm line 203, near "0.."
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 13 November 2017, 10:11:19
Dann habe ich spontan erst einmal keine Idee.
Ein Perlupdate ist unmöglich?
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 13 November 2017, 10:24:43
Versuch bitte noch einmal:

while( my ($key,$value) = each $ref) {
while( my ($key,$value) = each %{ $ref }) {


Ich kann es selbst im Moment nicht testen, ist eher geraten...
Titel: Antw:JSON -> Readings
Beitrag von: AlexJ am 13 November 2017, 10:42:42
Zitat von: dev0 am 13 November 2017, 10:24:43
Versuch bitte noch einmal:

while( my ($key,$value) = each %{ $ref }) {


Mit %{ $ref} hab ich keine Fehler mehr: jetzt muss ich nur noch rausfinden ob es funzt :D (bin noch am lernen)

ich sehe jetzt:
DeviceOverview
ej3                 active

Internals
CFGFN
DEF                 Sonoff.*:.*:.{.*}
NAME               ej3
NOTIFYDEV      Sonoff.*
NR                   482
NTFY_ORDER    50-ej3
STATE              active
TYPE                expandJSON
s_regexp          Sonoff.*:.*:.{.*}
t_regexp          .*
version            1.10

Readings         
state               active         2017-11-13 11:30:21
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 13 November 2017, 10:44:34
ZitatMit %{ $ref} hab ich keine Fehler mehr
OK, ich schaue mir das bei Gelegenheit mal genauer an.
Titel: Antw:JSON -> Readings
Beitrag von: herrmannj am 13 November 2017, 11:30:35
in alten und ganz neuen perl Versionen geht each nicht auf eine Referenz (Zwischendurch experimental).

https://perldoc.perl.org/functions/each.html
ZitatStarting with Perl 5.14, an experimental feature allowed each to take a scalar expression. This experiment has been deemed unsuccessful, and was removed as of Perl 5.24.
Titel: Antw:JSON -> Readings
Beitrag von: AlexJ am 13 November 2017, 19:54:26
Zitat von: dev0 am 13 November 2017, 10:44:34
OK, ich schaue mir das bei Gelegenheit mal genauer an.

Danke nochmals an Dev0, es scheint zu laufen.
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 14 November 2017, 08:26:48
Zitat von: herrmannj am 13 November 2017, 11:30:35
in alten und ganz neuen perl Versionen geht each nicht auf eine Referenz (Zwischendurch experimental).
Danke für den Hinweis, ich hatte die Meldung falsch interpretiert. Ich glaube sogar, dass das ursprüngliche @{ $ref} an der Stelle nicht korrekt ist und nur durch den experimentellen Code nicht aufgefallen ist... Mal schauen, wann ich dazu komme, ab morgen wird es zeitlich für mich eng.
Titel: Antw:JSON -> Readings
Beitrag von: hanswerner1 am 15 November 2017, 15:37:21
Hallo,
ich habe 2 mqtt readings mit gleichen Namen:

tempbed {"actual": 75.6, "target": 75.0}
temphotend {"actual": 229.9, "target": 230.0}

Wie bekomme ich die in unterschiedliche readings ?

Mit
Zitat
define expandJASON_3D_Drucker_temp expandJSON 3D_Drucker:temp.*:.{.*} (actual|target)

bekomme ich 2 readings actual und target und es werden die aus beiden readings (tempbed und temphotend ) die werte abwechselnd eingetragen.

Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 15 November 2017, 16:00:27
addReadingsPrefix
Titel: Antw:JSON -> Readings
Beitrag von: hanswerner1 am 15 November 2017, 16:22:20
Zitat von: dev0 am 15 November 2017, 16:00:27
addReadingsPrefix

wenn ich das auf 1 stelle werden keine readings mehr aktualisiert.
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 15 November 2017, 18:19:02
Bei mir schon. Vermutlich benutzt Du eine target_regex und hast sie nicht angepasst. Falls ich mich irre, dann brache ich konkretere Angaben zum Nachstellen. zB. in Form von den Raw Definitionen eines Dummy und expandJSON Device bei dem das nicht funktioniert.
Titel: Antw:JSON -> Readings
Beitrag von: hanswerner1 am 15 November 2017, 19:04:28
Hier die Raw Definition des MQTT Device:

Zitat
defmod 3D_Drucker MQTT_DEVICE
attr 3D_Drucker IODev myBroker
attr 3D_Drucker event-min-interval temp.*:10
attr 3D_Drucker group Diverses
attr 3D_Drucker icon edit_settings
attr 3D_Drucker room 07_Buero
attr 3D_Drucker stateFormat Temp Hotend soll: target °C ist: actual °C <br> Druckdatei: path
attr 3D_Drucker subscribeReading_x_Shutdown octoprint/event/Shutdown
attr 3D_Drucker subscribeReading_x_clientopened octoprint/event/ClientOpened
attr 3D_Drucker subscribeReading_x_connected octoprint/event/PrinterStateChanged
attr 3D_Drucker subscribeReading_x_printing octoprint/progress/printing
attr 3D_Drucker subscribeReading_x_printstarted octoprint/event/PrintStarted
attr 3D_Drucker subscribeReading_x_slicing octoprint/progress/slicing
attr 3D_Drucker subscribeReading_x_tempbed octoprint/temperature/bed
attr 3D_Drucker subscribeReading_x_temphotend octoprint/temperature/tool0

setstate 3D_Drucker Temp Hotend soll: 0 °C ist: 21.5 °C <br> Druckdatei: Box_unten_v2.gco
setstate 3D_Drucker 2017-11-15 17:40:43 actual 21.5
setstate 3D_Drucker 2017-11-15 15:45:19 path Box_unten_v2.gco
setstate 3D_Drucker 2017-11-15 15:45:19 progress 99
setstate 3D_Drucker 2017-11-15 17:40:43 target 0
setstate 3D_Drucker 2017-11-15 17:40:58 transmission-state incoming publish received
setstate 3D_Drucker 2017-11-15 17:40:58 x_Shutdown {"_event": "Shutdown"}
setstate 3D_Drucker 2017-11-15 17:39:43 x_clientopened {"_event": "ClientOpened", "remoteAddress": "192.168.0.2"}
setstate 3D_Drucker 2017-11-15 17:36:47 x_connected {"state_string": "Operational", "_event": "PrinterStateChanged", "state_id": "OPERATIONAL"}
setstate 3D_Drucker 2017-11-15 17:25:17 x_printing {"progress": 99, "location": "local", "path": "Box_unten_v2.gco"}
setstate 3D_Drucker 2017-11-15 17:25:17 x_slicing {"slicer": "cura", "source_location": "local", "progress": 100, "destination_path": "Box_unten_v2.gco", "source_path": "Box_unten_v2.tmp.1510750939575.stl", "destination_location": "local"}
setstate 3D_Drucker 2017-11-15 17:40:59 x_tempbed {"actual": 21.2, "target": 0.0}
setstate 3D_Drucker 2017-11-15 17:40:43 x_temphotend {"actual": 21.5, "target": 0.0}

expandJSON Device:

Zitat
defmod expandJASON_3D_Drucker_temp expandJSON 3D_Drucker:x_temphotend.*:.{.*} (actual|target)
attr expandJASON_3D_Drucker_temp addReadingsPrefix 1
attr expandJASON_3D_Drucker_temp room 90_System

setstate expandJASON_3D_Drucker_temp 2017-11-15 17:40:43
setstate expandJASON_3D_Drucker_temp 2017-11-15 17:38:37 state active
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 15 November 2017, 19:28:19
Wie ich schon schrieb: die target_regext passt nicht. Lass sie weg, schau was angelegt wird und definiere sie neu.
Titel: Antw:JSON -> Readings
Beitrag von: hanswerner1 am 15 November 2017, 20:10:42

Zitat
defmod expandJASON_3D_Drucker_temp expandJSON 3D_Drucker:x_temp.*:.{.*}

Jetzt hat er mir 4 readings angelegt:
x_tempbed_actual
x_tempbed_target
x_temphotend_actual
x_temphotend_target

Also muß ich im target_regext nicht "actual" angeben wie in string steht sondern "x_tempbed_actual" ?

Kann ich den target readings auch andere Namen geben ?  hätte noch gerne das "x_"im target regext weg.

Titel: Antw:JSON -> Readings
Beitrag von: dieter114 am 07 Dezember 2017, 23:47:58
Hallo dev0
ich bekomme einfach das loggen mit dglog nicht hin.
Habe streng nach Wiki 2 SonoffPOW mit Tasmota am laufen und auch über fhem geht alles.
Wenn ich ein File-Log definiere ist alles dort geloggt - aber in meine Datenbank dblog wird nix geschrieben.
Es werden über 20 verschiedene Loggings von diversen Modulen dort problemlos verarbeitet
nur die Sonoff`s wollen einfach nicht.

Gruß Wolfdieter
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 08 Dezember 2017, 08:46:07
Wenn die Module DbLog und expandJSON auf dem aktuellen Stand sind, dann sind mir keine Probleme bekannt, die das verursachen könnten.
Meine Vermutung: event-on-(change|update)-reading Attribut nicht korrekt gesetzt oder die DbLog Konfiguration ist nicht ok.
Titel: Antw:JSON -> Readings
Beitrag von: dieter114 am 08 Dezember 2017, 17:20:36
Ja wenn man den Wald vor Bäumen nicht sieht...... :(
Die dblog Konfiguration stand auf DbLogType: SampleFill/History.
Dann kommt auch nix im Dropdownmenue für irgendwelche Daten.

Danke dev0  :) :) :)
Titel: Antw:JSON -> Readings
Beitrag von: carlos am 31 Januar 2018, 13:32:56
Hi,
addReadingsPrefix funktioniert bei mir aber nur für den ersten level.
Wenn ich so ein JSON habe:

ENERGY {"Time":"2018-01-31T13:22:52","ENERGY":{"Total":0.000,"Yesterday":0.000,"Today":0.000,"Period":0,"Power":0,"Factor":0.00,"Voltage":0,"Current":0.000}}
dann wird trotz addReadingsPrefix = 0 folgendes generiert.

Time 2018-01-31T13:27:54
ENERGY_Current 0 2018-01-31 13:22:57
ENERGY_Factor 0 2018-01-31 13:22:57
ENERGY_Period 0 2018-01-31 13:22:57
ENERGY_Power 0 2018-01-31 13:22:57
ENERGY_Today 0 2018-01-31 13:22:57
ENERGY_Total 0 2018-01-31 13:22:57
ENERGY_Voltage 0 2018-01-31 13:22:57
ENERGY_Yesterday 0 2018-01-31 13:22:57


Geht das auch anders?

Gruß

Carlos
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 31 Januar 2018, 16:52:08
Zitat von: carlos am 31 Januar 2018, 13:32:56
Geht das auch anders?
Nein, in Deinem Beispiel ist ENERGY ja auch kein Prefix, sondern ein JSON Object.
Titel: Antw:JSON -> Readings
Beitrag von: Spohky am 22 Februar 2018, 18:40:20
Guten Abend,

ich bekomme es einfach nicht hin, dass die Werte aus der JSOn raus kommen.
Folgendes nutze ich um es anzulegen:
define n_j2r notify BU_TemperaturLuftfeuchte:SENSOR:.* { j2r($NAME,$EVENT) }
attr BU_TemperaturLuftfeuchte subscribeReading_Sensor /SH/Wohnung/Buero/Deckenlampe/tele/SENSOR


Ich hoffe mir kann jemand helfen.

Gruß und Danke
Spohky
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 22 Februar 2018, 19:03:41
Nimm bitte das expandJSON Modul, ist Bestandteil von FHEM.
Titel: Antw:JSON -> Readings
Beitrag von: Spohky am 22 Februar 2018, 19:25:24
Okey, Danke.
Und wie verwende ich das? =P
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 22 Februar 2018, 19:36:23
Erwartest Du auf diese Frage eine ernsthafte Antwort?
Titel: Antw:JSON -> Readings
Beitrag von: Spohky am 22 Februar 2018, 20:10:37
Ne, alles gut, habs endlich hinbekommen, hatte nen Schreibfehler drin. =/
Aber Danke. :)
Titel: Antw:JSON -> Readings
Beitrag von: jlu am 23 Februar 2018, 21:38:29
Zitat von: carlos am 31 Januar 2018, 13:32:56
Hi,
addReadingsPrefix funktioniert bei mir aber nur für den ersten level.
Wenn ich so ein JSON habe:

ENERGY {"Time":"2018-01-31T13:22:52","ENERGY":{"Total":0.000,"Yesterday":0.000,"Today":0.000,"Period":0,"Power":0,"Factor":0.00,"Voltage":0,"Current":0.000}}
dann wird trotz addReadingsPrefix = 0 folgendes generiert.

Time 2018-01-31T13:27:54
ENERGY_Current 0 2018-01-31 13:22:57
ENERGY_Factor 0 2018-01-31 13:22:57
ENERGY_Period 0 2018-01-31 13:22:57
ENERGY_Power 0 2018-01-31 13:22:57
ENERGY_Today 0 2018-01-31 13:22:57
ENERGY_Total 0 2018-01-31 13:22:57
ENERGY_Voltage 0 2018-01-31 13:22:57
ENERGY_Yesterday 0 2018-01-31 13:22:57


Geht das auch anders?


Mir haben die Namen von expandJson auch nicht gefallen (u.a. weil ich einen Sensor von NodeMCU auf Tasmota umgestellt habe und die Namen der Readings beibehalten wollte).

Ich hab das ähnlich wie in https://forum.fhem.de/index.php/topic,82293.msg745190.html#msg745190 (https://forum.fhem.de/index.php/topic,82293.msg745190.html#msg745190) gelöst:


define WohnzimmerKlima MQTT_DEVICE
attr WohnzimmerKlima stateFormat temperatur °C/luftfeuchtigkeit %
attr WohnzimmerKlima subscribeReading_JSON { main::myUtils_tasmotaSensorParse( $hash, $name, $topic, $message ) } wohnung/wohnzimmer/klima/tele/SENSOR


und in der 99_myUtils.pm:

use JSON::XS;

sub myUtils_tasmotaSensorParse {
    my ( $hash, $name, $topic, $message ) = @_;

    my $json = decode_json( $message );
    readingsBeginUpdate( $hash );
    readingsBulkUpdate( $hash, 'temperatur', $json->{SI7021}->{Temperature} );
    readingsBulkUpdate( $hash, 'luftfeuchtigkeit', $json->{SI7021}->{Humidity} );
    readingsEndUpdate( $hash, 1 );
}


Könnte man bei mehreren unterschiedlichen Sensoren natürlich noch ergänzen.
Titel: Antw:JSON -> Readings
Beitrag von: Gear am 24 Februar 2018, 06:03:29
Guten Morgen,

ich wollt enoch mal auf das Thema "expandJSON", ich verstehe das einfach nicht.
Kann sein dass ich einfach zu dumm dazu bin oder nur auf dem Schlauch stehe...

Das ist deine "Vorlage":
define <name> expandJSON <source_regex> [<target_regex>]

Das ist meine JSON: (Sen.TemperatureHumidity)
{"Time":"2018.02.24 05:43:58","AM2301":{"Temperature":20.0,"Humidity":37.6},"TempUnit":"C"}

Das würde Ich daraus machen, bzw. ich hab einfahc keine Ahnung was bei "<source_regex>" rein soll, da nichts funktioniert.....
define eJ3 expandJSON <source_regex> (Temperature|Humidity)

Es tut mir leid das ich das frage, aber ich bekomme es einfach nicht hin und was ich bis jetzt im www gefunden habe, das bringt mich nicht weiter.
Ich verstehe es einfach nicht... :(

Grüße und Danke
Gear
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 24 Februar 2018, 07:09:52
Mit der source_regex definierst Du, in welchem Device und Reading sich die JSON Zeichenkette befindet, die benutzt werden soll. Da Du kein list von Deinem Device gezeigt hast, kann ich Dir das nicht genauer sagen. Die Regex ist genau so aufgebaut wie bei einem Notify.
Titel: Antw:JSON -> Readings
Beitrag von: dev0 am 24 Februar 2018, 13:06:40
Ich schließe diesen Thread jetzt, da er seine Schuldigkeit getan hat.

Wenn es Supportbedarf zum expandJSON Modul gibt, dann bitte einen Thread im Bereich "Unterstuetzende Dienste" öffnen.