[98_JsonMod.pm] Wunschliste von neuen Funktionen

Begonnen von yersinia, 24 Mai 2020, 14:46:22

Vorheriges Thema - Nächstes Thema

yersinia

Hallo zusammen,

herrmannjs Modul zum Auslesen von JSON[P] Quellen ermöglicht vielerlei neue Optionen. Weiterhin gibt es auch neue Ideen - wie zB die Interval Definition in Anlehnung an cron(tab).
Hier eine Auswahl an bereits bestehenden Anwendungsideen:

FHEM-Wiki Eintrag: JsonMod.

Natürlich ist das Modul noch jung und sicher Ausbaufähig. Bei der Benutzung des Moduls haben sich bei mir folgende Wünsche ergeben - bzw. habe ich folgende Funktionen vermisst.
  • Status-Ausgabe (error, success), raw (Thread)
  • Herausfiltern von spezifischen Array-Elementen (Thread, Thread und Thread)
  • HTTP Version einstellbar (#20)
  • Templates analog zu httpmod und mqtt (post)
Habt ihr noch weitere Ideen oder Wünsche? Wie ist der sonstige Bedarf? Gibt es noch Dinge/Funktionen zu verbessern?

@herrmannj: wie stehen die Chancen, dass du noch Erweiterungen und Verbesserungen (jeweils bei Bedarf) einfliessen lassen kannst?

Danke vorab. :)

Stand: 2024-03-18


Bereits umgesetzte, gewünschte Funktionen (Danke an herrmannj!):
  • Nachbearbeiten von gefundenen Readingnamen mit Perlfunktionen wie uc() oder lc() bevor sie erstellt werden (oder Readings standardmässig in uc/lc schreiben). Es gibt bereits Funktionen wie [tt]JsonPathf[/tt] oder [tt]propertyf[/tt], die gefundene Werte limitiert konvertieren können.
    implementiert mit Revision 22651 - Änderungen siehe auch im Post #8 vom Beta-Test
  • WebCmd Funktionen wie zB ein reread, analog zu HTTPMOD
    implementiert mit Revision 22651 - Änderungen siehe auch im Post #8 vom Beta-Test
  • Die optionale Möglichkeit, einen Json[P] String komplett extrahieren zu können anstelle manuell mehrere [tt]single()[/tt] JsonPath Elemente als readingList definieren zu müssen (analog zu HTTPMODs ExtractAllJson)
    implementiert mit Revision 22651 - Änderungen siehe auch im Post #8 vom Beta-Test
  • Aggregat-Funktionen wie avg() oder sum() (Anforderung von All-Ex)
    implementiert mit Revision 22651 - Änderungen siehe auch im Post #8 vom Beta-Test
  • kleinere Abfragezeiten als 1 Minute (Anforderung von Rewe2000)
    Zitat von: herrmannj am 25 Juli 2020, 12:59:00Am cron habe ich nichts geändert weil man jetzt in dem angefragten, exotischen ;) Fall (Zeiten unter einer Minute) alternativ ein "at" verwenden kann. Dort dann reread aufrufen.
  • Ersetzen und Umrechnen von Werten (Anforderung von Rewe2000)
    implementiert mit Revision 22651 - Änderungen siehe auch im Post #8 vom Beta-Test
  • maintainer.txt anpassen (#22)
    implementiert mit Revision 24361
  • Suchen und Herausfiltern von bestimmten Elementen (Thread)
    implementiert mit Revision 24360 - weitere Infos
  • enable/disable Funktion (post von FHEMAN (#27))
    Attribut disable ist implementiert
  • Mitgeben von dynamischen parametern in der Url, analog zu HTTPMOD (Thread von Otto123)
    Ist implementiert als [tt]secret[/tt] - Beitrag von hermannj
    Zitat von: herrmannj am 10 Juni 2021, 22:25:44man kann set <name> secret <identifier> <value> dafür nehmen. Anstelle von <identifier> halt IP und in der URL dann ..[IP].. einfügen. Will man die IP wechseln dann per "secret" setzen.
    Zitat von: herrmannj am 11 Juni 2021, 09:31:49Es kann mehrere benannte secrets geben - das eine schließt das andere also auch nicht aus
  • verschiedene Bedingungen/logische Verknüpfungen in einer JsonPath Abfrage (post)
    Umsetzung wäre zu aufwändig (post).
  • Support für POST requests (Thread & patch)
    gelöst durch https://forum.fhem.de/index.php?topic=133765.msg1277381#msg1277381
  • korrekte Implementierung des Intervals auch für Wochentage (Thread, weitere cron-Themen: Thread)
    implementiert mit Revision 27916
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

herrmannj

Moin,
Zitat
@herrmannj: wie stehen die Chancen, dass du noch Erweiterungen und Verbesserungen (jeweils bei Bedarf) einfliessen lassen kannst?
Klar :) (disclaimer: ich bin die kommenden 3-4 Wochen "ausgebucht", danach gern)

ZitatNachbearbeiten von gefundenen Readingnamen mit Perlfunktionen wie uc() oder lc() bevor sie erstellt werden (oder Readings standardmässig in uc/lc schreiben). Es gibt bereits Funktionen wie JsonPathf oder propertyf, die gefundene Werte limitiert konvertieren können
Das ist leider progammiertechnisch nicht trivial. Aktuell muss ich jede funktion einzeln implementieren. Auf Dauer würde das absehbar nicht skalieren. Dafür muss ich mir was cleveres einfallen lassen. Generell: klar
ZitatWebCmd Funktionen wie zB ein reread, analog zu HTTPMOD
check!
ZitatDie optionale Möglichkeit, einen Json[P] String komplett extrahieren zu können anstelle manuell mehrere single() JsonPath Elemente als readingList definieren zu müssen (analog zu HTTPMODs ExtractAllJson)
Aktuell ist die Abgrenzung zu HttpMod ja dass man gezieht auf einzelne Elemente des JSON zugreift, aber "ja", lässt sich einfach implementieren.

vg
Joerg

yersinia

Zitat von: herrmannj am 25 Mai 2020, 14:25:46Moin,Klar :) (disclaimer: ich bin die kommenden 3-4 Wochen "ausgebucht", danach gern)
Gut zu wissen. Danke. :)
Zitat von: herrmannj am 25 Mai 2020, 14:25:46Das ist leider progammiertechnisch nicht trivial. Aktuell muss ich jede funktion einzeln implementieren. Auf Dauer würde das absehbar nicht skalieren. Dafür muss ich mir was cleveres einfallen lassen. Generell: klar
Mir würde es schon reichen, wenn ich die Funktionen aufrufen könnte. In etwa so:
multi(jsonPath('$[*]'), lc(property('type')), property('version'));
Zitat von: herrmannj am 25 Mai 2020, 14:25:46Aktuell ist die Abgrenzung zu HttpMod ja dass man gezieht auf einzelne Elemente des JSON zugreift, aber "ja", lässt sich einfach implementieren.
Daher das optional - ich hab zumindest den Bedarf, kleinere JSON Strings dann dynamischer auszulesen (pihole statistiken als Beispiel). ;)

Vielen Dank für deine Rückmeldung. Dann bin ich gespannt was nach deiner ausgebuchten Zeit noch kommt. :)
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

herrmannj

Zitatmulti(jsonPath('$
  • '), lc(property('type')), property('version'));
Wenn lc/uc ausreicht (wir hatten da ja schonmal drüber gesprochen), dann brauch ich keine Klimmzüge zu machen und kann das "einfach" implementieren.

yersinia

Zitat von: herrmannj am 25 Mai 2020, 15:17:15Wenn lc/uc ausreicht (wir hatten da ja schonmal drüber gesprochen), dann brauch ich keine Klimmzüge zu machen und kann das "einfach" implementieren.
Also mir würde das erstmal reichen. Auch gern sowas wie
propertyf('type', lc())
Damit macht es mir den eq3 fw check einfacher.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

yersinia

Beta-Tester gesucht (aus diesem Thread):
Zitat von: herrmannj am 21 Juli 2020, 12:27:59
Weil wir einmal dabei sind; damit die Wünsche umgesetzt werden können muss ich einen Teil des Moduls neu schreiben (der Block wo multi und singe definiert ist), Ich versuche dass das kompatibel zum jetzigen Verhalten ist. Weil ich aber Nebeneffekte nicht komplett ausschließen kann würde ich das gern vorab zum testen in den "JsonMod Wunschthread" und erst danach ins update geben.

Wer Interesse hat, abonniert doch schon mal bitte den "JsonMod Wunschthread" um die Beta dann zu sehen und, im Idealfall, dann auch zu testen. Wird so im Lauf der Woche werden.

Danke, vg
Joerg
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Rewe2000

Hallo,

danke für die Mühe, bin gerne bereit zu testen.

Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

herrmannj

#8
Im Anhang ein update welches einen Teil der gewünschten Funktionen bereitstellt.

Ich musste einiges umschreiben und möchte mit dieser Version die Sicherheit haben, dass die Änderungen abwärtskompatibel sind bevor ich sie ins fhem svn gebe.

Änderungen:
- set reread (selbsterklärend)

zu "single(...)" und "multi(...)" kommt "complete()". "complete()" wandelt das komplette json in readings. Die Namen der Readings werden automatisch erstellt und entsprechen der Position im json. Will meinen das der JsonPath Ausdruck der zu dem ein Element gehört in den Namen des readings konvertiert wird.

Beispiel:
JsonPath -> "$.data[0].temperature.celsius"
Reading -> "data.0.temperature.celsius"

Innerhalb von single(...) und multi(...) können ab jetzt beliebige perl Funktionen und Ausdrücke verwendet werden.

Beispiele:
"uc(property('foo')), ..." (Groß- Kleinschreibung)
"sprintf('foo: %.2f', property('foo') / 100), ..."  (Werte skalieren und auf 2 Dezimalstellen runden)
"POSIX::strftime('%Y-%m-%d %H:%M', gmtime(property('updated')/1000))), ..." (Wandelt einen timestamp in ein lesbares Datum)

Ersetzen und Umrechnen von Werten (Anforderung von Rewe2000): Weil jetzt beliebige perl Ausdrücke verwendet werden können problemlos. Ich würde mir eine kleine Funktion in eine 99.my.. schreiben, zum Beispiel

sub convELWA {
  my $val = shift;
  my $lookup = {
    '1' => 'Betriebsbereit',
  };
  if (exists($lookup->{$val}) {
    return $lookup->{$val};
  } else {
    return $val;
  };
};


und dann im JsonMod "convELWA(property('...')), ..." verwenden.

Um auf die Nummer von array Elementen zu zugreifen hatte ich "index()" implementiert. Das war unklug weil es index() als perl (String) Funktion gibt. Ich habe das daher durch "count()" ersetzt. "index()" kann noch verwendet werden, erzeugt aber eine Log Meldung (Fehler) mit der Bitte den Ausdruck durch "count()" zu ersetzen.

Am cron habe ich nichts geändert weil man jetzt in dem angefragten, exotischen ;) Fall (Zeiten unter einer Minute) alternativ ein "at" verwenden kann. Dort dann reread aufrufen.

Mit der Bitte um Feedback, insbesondere im Hinblick auf Abwärts Kompatibilität

Danke, vg
Joerg

Rewe2000

#9
Hallo Jörg,

vielen Dank, dass du die Änderungen so schnell umgesetzt hast.

Leider kann ich die Abwärtskompatibilität nicht testen, da ich dein Modul erst mit dieser Anwendung neu verwende.
Bisher konnte ich in meiner Installation keine Abweichungen erkennen, das Modul läuft bei mir so wie es soll.

Grundsätzlich habe ich (als einfacher Anwender) aber noch Probleme die neuen Funktionen in die readinglist mit einzubauen, könntest du bitte noch ein Beispiel mit angeben wie ich z.B. das sprintf() in die komplette Syntax korrekt mit einbinden muss.
Die Funktion in 99_myutils.pm habe ich erstellt, diese selbst funktioniert (getestet mit userreading), aber wie ich den Aufruf direkt aus der readinglist durchführe, da brauche ich noch einen Denkanstoss.

JsonMod Modul:
defmod AC_ELWA_E JsonMod http://192.168.50.55/data.jsn
attr AC_ELWA_E DbLogExclude .*
attr AC_ELWA_E disable 0
attr AC_ELWA_E icon sani_boiler_temp
attr AC_ELWA_E interval */1 * * * *
attr AC_ELWA_E readingList single(jsonPath('$.device'), 'Geraet', 'N/A');;\
single(jsonPath('$.fwversion'), 'Firmwareversion', 'N/A');;\
single(jsonPath('$.status'), 'Status', 'N/A');;\
single(jsonPath('$.power'), 'Leistung', 'N/A');;\
single(jsonPath('$.temp1'), 'Speicher_Istwert', 'N/A');;\
single(jsonPath('$.ww1target'), 'Speicher_Sollwert', 'N/A');;\
single(jsonPath('$.ctrlstate'), 'Status_Ansteuerung', 'N/A');;\
single(jsonPath('$.tempchip'), 'Prozessortemperatur', 'N/A');;
attr AC_ELWA_E room Hauskraftwerk
attr AC_ELWA_E userReadings Status_Text {convELWA (ReadingsNum($name,"Status",0))}

setstate AC_ELWA_E 2020-07-26 11:37:00 .computedReadings Status,Speicher_Istwert,Leistung,Prozessortemperatur,Geraet,Firmwareversion,Status_Ansteuerung,Speicher_Sollwert
setstate AC_ELWA_E 2020-07-26 11:37:00 Firmwareversion 00200.01
setstate AC_ELWA_E 2020-07-26 11:37:00 Geraet AC ELWA-E
setstate AC_ELWA_E 2020-07-26 11:37:00 Leistung 0
setstate AC_ELWA_E 2020-07-26 11:37:00 Prozessortemperatur 30
setstate AC_ELWA_E 2020-07-26 11:37:00 Speicher_Istwert 235
setstate AC_ELWA_E 2020-07-26 11:37:00 Speicher_Sollwert 526
setstate AC_ELWA_E 2020-07-26 11:37:00 Status 3
setstate AC_ELWA_E 2020-07-26 11:37:00 Status_Ansteuerung Modbus Read received
setstate AC_ELWA_E 2020-07-26 11:37:00 Status_Text Standby



Funktion:

sub convELWA {
  my $val = shift;
  my $lookup = {
    '2' => 'Heizen',
'3' => 'Standby',
'4' => 'Boost Mode',
'5' => 'Temperatur erreicht',
'9' => 'Setup Modus',
'21' => 'Abgeschaltet',
'201' => 'Temperatursicherung ausgelöst',
'202' => 'Übertemperatur Warmwasser',
'203' => 'Übertemperatur Elektronik',
'204' => 'Hardwarefehler',
'205' => 'Temperatursensor angesprochen',
  };
  if (exists($lookup->{$val})) {
    return $lookup->{$val};
  } else {
    return $val;
  }
}


JSON Rohdaten:
{
"device":"AC ELWA-E",
"status":3,
"power":0,
"temp1":235,
"boostactive":0,
"loctime":"11:44:14",
...
...
...
"tempchip":30
}


Der Umweg eines zeitlich kürzeren Aufrufs über reread und ein at ist eine Lösung für meinen Awendungsfall.
Ich denke aus Sicht der Ressourcenschonung sollte ich hier 2 JosonMod Module verwenden und nur das eine Modul, mit dem einen Reading in z.B. 5 Sekunden mit reread antriggern und das zweite mit cron z.B. alle 5 Minuten die restlichen Readings zu holen. Oder ist es besser nur ein Modul zu verwenden und in dieser kurzen Zeit alle Daten (max. 10 Readings) auszulesen?

Auch fehlt mir generell noch das Gefühl dafür, weshalb man hier besser JosonMod und nicht gleich das HTTPMOD Modul verwenden sollte.

Ich hoffe du verzeihst mir die blöden Fragen, aber ich denke zukünftig werden diese auch noch von anderen Anfängern gestellt.

Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

herrmannj

Moin,

Status;
single(jsonPath('$.status'), 'Status', 'N/A') -> single(convELWA(jsonPath('$.status')), 'Status', 'N/A')

Temperatur:
single(jsonPath('$.temp1'), 'Speicher_Istwert', 'N/A')
  -> single(jsonPath('$.temp1') / 10, 'Speicher_Istwert', 'N/A')
- oder -
  -> single(sprintf('%.1f °C', jsonPath('$.temp1') / 10), 'Speicher_Istwert', 'N/A')

(*ungetestet)

Interval:
5 Sekunden sind insgesamt ein häufiger Interval. Nimm ein device, die CPU Zeit ist nicht linear zur Anzahl der Readings.

HTTPMOD oder JsonMod:
your choice. JsonMod ist HTTPMOD speziell für JSON Quellen.
vg
Joerg

yersinia

#11
Danke, herrmannj, geile Sache. Hab es mal getestet auf einem FHEM mit heutigem Update. Abwärtskompatibilität sieht erstmal gut aus, ich lass' das jetzt mal laufen.
Zitat von: herrmannj am 25 Juli 2020, 12:59:00
Änderungen:
- set reread (selbsterklärend)
Funktioniert, auch bei bestehenden JsonMod-Devices.

Zitat von: herrmannj am 25 Juli 2020, 12:59:00
zu "single(...)" und "multi(...)" kommt "complete()". "complete()" wandelt das komplette json in readings. Die Namen der Readings werden automatisch erstellt und entsprechen der Position im json. Will meinen das der JsonPath Ausdruck der zu dem ein Element gehört in den Namen des readings konvertiert wird.
Funktioniert, hier mit piHole getestet:
Internals:
   API_LAST_RES 1595774400.02556
   API__LAST_MSG 200
   CFGFN     
   DEF        http://[piholeip]/admin/api.php
   FUUID      5f1d9524-f33f-3151-9e28-e0d67637d24d81c2
   NAME       PiHoleInfo_JM
   NEXT       2020-07-26 16:45:00
   NOTIFYDEV  global
   NR         554
   NTFY_ORDER 50-PiHoleInfo_JM
   SOURCE     http://[piholeip]/admin/api.php (200)
   STATE      <div style="text-align:left;"><font style="color:limegreen;">5632&nbsp;<font style="font-weight:bold;">DNS Anfragen heute</font></font><br /><font style="color:DarkOrange;">654&nbsp;<font style="font-weight:bold;">Geblockte Domains heute</font>&nbsp;(11.6%)</font><br />2436785&nbsp;Domains in Blocklist&nbsp;(Alter:&nbsp;0&nbsp;12:37)</div>
   SVN        Testversion 2020-07-23 13:00 $
   TYPE       JsonMod
   .attraggr:
   .attrminint:
   CONFIG:
     IN_REQUEST 0
     SOURCE     http://[piholeip]/admin/api.php
     SECRET:
   READINGS:
     2020-07-26 16:40:00   .computedReadings privacy_level,gravity_last_updated.relative.days,unique_domains,gravity_last_updated.relative.minutes,gravity_last_updated.file_exists,gravity_last_updated.relative.hours,dns_queries_all_types,gravity_last_updated.absolute,queries_forwarded,reply_NXDOMAIN,reply_NODATA,clients_ever_seen,ads_blocked_today,reply_IP,queries_cached,status,reply_CNAME,domains_being_blocked,dns_queries_today,unique_clients,ads_percentage_today
     2020-07-26 16:40:00   ads_blocked_today 654
     2020-07-26 16:40:00   ads_percentage_today 11.612216
     2020-07-26 16:40:00   clients_ever_seen 2
     2020-07-26 16:40:00   dns_queries_all_types 5632
     2020-07-26 16:40:00   dns_queries_today 5632
     2020-07-26 16:40:00   domains_being_blocked 2436785
     2020-07-26 16:40:00   gravity_last_updated.absolute 1595728963
     2020-07-26 16:40:00   gravity_last_updated.file_exists 1
     2020-07-26 16:40:00   gravity_last_updated.relative.days 0
     2020-07-26 16:40:00   gravity_last_updated.relative.hours 12
     2020-07-26 16:40:00   gravity_last_updated.relative.minutes 37
     2020-07-26 16:40:00   privacy_level   0
     2020-07-26 16:40:00   queries_cached  1389
     2020-07-26 16:40:00   queries_forwarded 3589
     2020-07-26 16:40:00   reply_CNAME     963
     2020-07-26 16:40:00   reply_IP        2792
     2020-07-26 16:40:00   reply_NODATA    119
     2020-07-26 16:40:00   reply_NXDOMAIN  61
     2020-07-26 16:40:00   status          enabled
     2020-07-26 16:40:00   unique_clients  2
     2020-07-26 16:40:00   unique_domains  1496
Attributes:
   interval   */5 * * * *
   readingList complete();
   stateFormat { my $ret = '<div style="text-align:left;">';
$ret .= '<font style="color:limegreen;">'.ReadingsVal($name,'dns_queries_today','-');
$ret .= '&nbsp;<font style="font-weight:bold;">DNS Anfragen heute</font></font><br />';
$ret .= '<font style="color:DarkOrange;">'.ReadingsVal($name,'ads_blocked_today','-');
$ret .= '&nbsp;<font style="font-weight:bold;">Geblockte Domains heute</font>';
$ret .= '&nbsp;('.sprintf("%.1f", ReadingsNum($name,'ads_percentage_today',0)).'%)</font><br />';
$ret .= ReadingsVal($name,'domains_being_blocked','-').'&nbsp;Domains in Blocklist';
$ret .= '&nbsp;(Alter:&nbsp;';
$ret .= ReadingsVal($name,'gravity_last_updated.relative.days','-').'&nbsp;';
$ret .= ReadingsVal($name,'gravity_last_updated.relative.hours','-').':';
$ret .= ReadingsVal($name,'gravity_last_updated.relative.minutes','-').')';
$ret .= '</div>';
return $ret;
}
   webCmd     reread


Zitat von: herrmannj am 25 Juli 2020, 12:59:00Innerhalb von single(...) und multi(...) können ab jetzt beliebige perl Funktionen und Ausdrücke verwendet werden.

Beispiele:
"uc(property('foo')), ..." (Groß- Kleinschreibung)
"sprintf('foo: %.2f', property('foo') / 100), ..."  (Werte skalieren und auf 2 Dezimalstellen runden)
"POSIX::strftime('%Y-%m-%d %H:%M', gmtime(property('updated')/1000))), ..." (Wandelt einen timestamp in ein lesbares Datum)
Funktioniert, getestet im HM-FW Check mit uc() und lc():
attr HM_FW_Check readingList multi(jsonPath('$[*]'), uc(property('type')), property('version'));;

Zitat von: herrmannj am 25 Juli 2020, 12:59:00Um auf die Nummer von array Elementen zu zugreifen hatte ich "index()" implementiert. Das war unklug weil es index() als perl (String) Funktion gibt. Ich habe das daher durch "count()" ersetzt. "index()" kann noch verwendet werden, erzeugt aber eine Log Meldung (Fehler) mit der Bitte den Ausdruck durch "count()" zu ersetzen.
Funktioniert. Sowohl die Warning im Log als auch count() anstelle von index(). Ich frage mich, ob count() hier die richtige Wahl ist - wäre nicht readingsIndex() oder irgendwas anderes, JsonMod-spezifisches besser? (count ist ja irgendwie auch vorbelegt und ersetzt index nicht wirklich mMn)

Zitat von: herrmannj am 25 Juli 2020, 12:59:00Am cron habe ich nichts geändert
Aber Wochentag-Definition ignoriert interval immernoch?

Ansonsten: DANKE!!! :D
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

herrmannj

Danke fürs Feedback!

zu count, stimmt schon, auch noch nicht komplett optimal. Ich nehme mal idx|idx().

Wochentage: geht halt nicht alles auf einmal ;)

Zum piHole: da würde noch folgender 'Hack' gehen; wenn Du nach complete() noch eine Zeile single(POSIX::strftime('%Y-%m-%d %H:%M', gmtime(jsonPath ('$.gravity_last_updated.absolute')), 'gravity_last_updated.absolute', undef);einbaust, müsste sich der ts formatieren lassen. (*ungetestet)

vg
Joerg

yersinia

#13
Zitat von: herrmannj am 27 Juli 2020, 15:14:18zu count, stimmt schon, auch noch nicht komplett optimal. Ich nehme mal idx|idx().
Ja, das klingt besser. :)

Zitat von: herrmannj am 27 Juli 2020, 15:14:18Wochentage: geht halt nicht alles auf einmal ;)
Kein Stress. War nur eine Frage. Und ist -für mich- auch nicht dringend. ;)

Zitat von: herrmannj am 27 Juli 2020, 15:14:18Zum piHole: da würde noch folgender 'Hack' gehen; wenn Du nach complete() noch eine Zeile single(POSIX::strftime('%Y-%m-%d %H:%M', gmtime(jsonPath ('$.gravity_last_updated.absolute')), 'gravity_last_updated.absolute', undef);einbaust, müsste sich der ts formatieren lassen. (*ungetestet)
Danke für den Tipp, funktioniert mit:
single(POSIX::strftime('%Y-%m-%d %H:%M', gmtime(jsonPath ('$.gravity_last_updated.absolute'))), 'gravity_last_updated_abs_human', '');
->
2020-07-27 17:00:00   gravity_last_updated_abs_human 2020-07-26 02:02
Soweit hatte ich noch gar nicht gedacht neben complete auch noch single() (oder gar multi()) zu nutzen - was aber durchaus sinnvoll ist um einige Readings zusätzlich umzurechnen. :)
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

herrmannj

Ohne das _hum sollte das funktionieren. Dann würde das Reading das complete generiert theoretisch einfach überschrieben werden

yersinia

Zitat von: herrmannj am 27 Juli 2020, 18:07:51Ohne das _hum sollte das funktionieren. Dann würde das Reading das complete generiert theoretisch einfach überschrieben werden
Halte ich _persönlich_ für unschön - ich hätte gern ein extra Reading. :)
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Raemsna

Hallo zusammen,

möglicherweise habe ich einen kleinen Bug gefunden (oder es liegt an mir).

Das interval "* */1 * * *" sollte mWn eine Aktualisierung alle 1h hervorrufen. Bei mir passiert das aber minütlich.

Für Tipps bin ich sehr dankbar!
Vielen Dank für das tolle Modul!

P.S.: Die Webseite hab ich mal ge-X-t :)

Internals:
   API_LAST_RES 1597489140.13338
   API__LAST_MSG 200
   CFGFN     
   DEF        XXXXX
   FUUID      5f367aa2-f33f-ac4d-0985-4f8eee732c3fd2f6
   NAME       XXXXX
   NEXT       2020-08-15 13:00:00
   NOTIFYDEV  global
   NR         212
   NTFY_ORDER 50-XXXXX
   SOURCE     XXXXX (200)
   STATE      ???
   SVN        21711 2020-04-17 23:29:22 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     XXXXX
     SECRET:
   READINGS:
     2020-08-15 12:59:00   ISIN            US00971T1016
     2020-08-15 12:59:00   description     Akamai ist der führende Anbieter von Cloud-Diensten, über die Unternehmen Inhalte und Anwendungen schnell und sicher an beliebige Geräte liefern können – unabhängig von ihrem Standort. Das Unternehmen bietet Lösungen, für die Beschleunigung von Online-Anwendungen und Geschäftsprozessen. So koordiniert und optimiert der Konzern etwa die Lastverteilung von Web-Inhalten. Dieser Dienst läuft beim Surfen im Internet im Hintergrund und ist für den Anwender kaum spürbar. Neben Web-Performance-Lösungen und Lösungen für die Online-Lieferung von Content bietet Akamai auch Cloud-Sicherheitslösungen, Cloud-Networking und Lösungen für Netzbetreiber. Kunden kommen zum Beispiel aus dem Einzelhandel und der Konsumgüterindustrie, der Software- und Technologiesparte, den Medien und der Unterhaltungsindustrie, der Touristik und dem öffentlichen Sektor.
Attributes:
   interval   * */1 * * *
   readingList single(jsonPath('$.Facts.4.Values.0.Key'), 'description', 'N/A');
single(jsonPath('$.Facts.0.Values.1.Value'), 'ISIN', 'N/A');

yersinia

Mal abgesehen davon, dass es _hier_ OT ist, aber du hast möglicherweise die cron-Notation nicht verstanden.
Zitat von: Raemsna am 15 August 2020, 13:04:38Das interval "* */1 * * *" sollte mWn eine Aktualisierung alle 1h hervorrufen. Bei mir passiert das aber minütlich.
Natürlich triggert das Intervall dann Menütlich, da die Stunde immer restlos durch 1 teilbar ist. Richtig für deine Anforderung wäre dann zum Beispiel
interval   0 */1 * * *
zu jeder vollen Stunde. Oder stündlich um halb:
interval   30 */1 * * *
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Raemsna

Sorry für OT, war mein Denkfehler!
Und vielen Dank für die schnelle Antwort

Grüße
Raemsna

yersinia

Mit der freigegebenen Revision 22651 (seit heute morgen im Update) sind die Funktionen aus dem Beta-Test (Post #8) umgesetzt worden. Danke herrmannj!
Den ersten Post habe ich aktualisiert - und ich sammel immer noch weitere Wünsche für JsonMod. :)
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Raemsna

Hallo zusammen,

in der Commandref habe ich zu meinem Problem leider nichts gefunden, daher frage ich hier mal nach.

Ich will einen Service nutzen der die HTTP Version 1.1 zwingend voraussetzt.
Wenn ich den JSON-String mit JsonMod abfrage, bekomme ich folgende Antwort:

2020.10.30 20:19:00 5: HttpUtils response header:
HTTP/1.1 426 Upgrade Required


Der Request dazu sieht wie folgt aus (verbose 5):

2020.10.30 20:20:00 5: HttpUtils request header:
GET /1/members/me/boards?fields=name,closed,id,url&key=xxx&token=xxx[b]HTTP/1.0[/b]


mit HTTPMOD schaffe ich es über das Attribut httpversion die Version auf 1.1 zu setzen und die Abfrage läuft OK durch.
Jetzt möchte ich aber die Vorzüge von JsonMod nutzen.

Ich habe schon das Attribut httpHeader auf "HTTP/1.1" gesetzt, aber der Request läuft weiterhin mit HTTP/1.0 durch

2020.10.30 20:20:00 5: HttpUtils request header:
GET /1/members/me/boards?fields=name,closed,id,url&key=xxx&token=xxx[b]HTTP/1.0[/b]
Host: api.trello.com
User-Agent: fhem
Accept-Encoding: gzip,deflate
[b]HTTP/1.1[/b]


Vielleicht kann hier jemand helfen?

Herzlichen dank und Grüße
Raemsna

herrmannj


ph1959de

@hermannj Hallo Jörg,

könntest Du gelegentlich für JsonMod einen Eintrag in der maintainer.txt "beantragen"?

Peter
Aktives Mitglied des FHEM e.V. | Moderator im Forenbereich "Wiki"

pcjogi

Ich habe etwas mit complete() herumgespielt. Damit bekomme ich ja alles aus dem Json als Reading.

Wenn ich so etwas mache complete("departures.*.delayDeparture") bekomme ich schön die Readings für departures.1.delayDeparture, departures.2.delayDeparture und departures.3.delayDeparture.

Ich würde aber gerne auch noch departures.0.scheduledDeparture, departures.1.scheduledDeparture und departures.3.scheduledDeparture bekommen.

complete("departures.*.delayDeparture"|"departures.*.scheduledDeparture") funktioniert leider nicht. Was mache ich falsch, oder geht das nicht.

Zweite Frage: kann ich die Reading so umformatieren, das nicht ein Punkt sondern ein Unterstrich dazwischen ist. Also nicht departures.0.scheduledDeparture sondern departures_0_scheduledDeparture.

Der Jsonstring kommt aus https://dbf.finalrewind.org/Pulheim?mode=json&version=1&via=Köln-Ehrenfeld&version=3&limit=3

Danke
Internals:
   API_LAST_RES 1606244400.36876
   API__LAST_MSG 200
   CFGFN     
   DEF        https://dbf.finalrewind.org/Pulheim?mode=json&version=1&via=Köln-Ehrenfeld&version=3&limit=3
   FUUID      5fbbf2f8-f33f-e398-ea43-360320564c16417b
   NAME       TEST
   NEXT       2020-11-24 21:00:00
   NR         543
   SOURCE     https://dbf.finalrewind.org/Pulheim?mode=json&version=1&via=Köln-Ehrenfeld&version=3&limit=3 (200)
   STATE      ???
   SVN        22987 2020-10-18 13:26:05 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://dbf.finalrewind.org/Pulheim?mode=json&version=1&via=Köln-Ehrenfeld&version=3&limit=3
     SECRET:
   OLDREADINGS:
   READINGS:
     2020-11-24 10:48:47   departures.0.scheduledDeparture 10:45
     2020-11-24 10:48:47   departures.1.scheduledDeparture 11:20
     2020-11-24 10:48:47   departures.2.scheduledDeparture 11:45
Attributes:
   readingList complete("departures.*.delayDeparture"|"departures.*.isCancelled"|"departures.*.scheduledDeparture")
   room       __VERKEHR



Haupt-Fhem (Docker auf Synology), Sub-Fhem (433Mhz und 833Mhz) auf RasPi, Sub-Fhem (Heizungssteuerung) auf RasPi, Sub_Fhem (System) auf RasPi, IoBroker zur Darstellung (Docker auf Synology), alles verbunden über einen MQTT Broker, insgesamt ca. 100 Sensoren/Aktoren

herrmannj

Zitatcomplete("departures.*.delayDeparture"|"departures.*.scheduledDeparture") funktioniert leider nicht. Was mache ich falsch, oder geht das nicht.

zu ->

complete("departures.*.delayDeparture");
complete("departures.*.scheduledDeparture");



pcjogi

Danke funktioniert!
Geht auch das umformatieren von . in _ ?
Danke
Haupt-Fhem (Docker auf Synology), Sub-Fhem (433Mhz und 833Mhz) auf RasPi, Sub-Fhem (Heizungssteuerung) auf RasPi, Sub_Fhem (System) auf RasPi, IoBroker zur Darstellung (Docker auf Synology), alles verbunden über einen MQTT Broker, insgesamt ca. 100 Sensoren/Aktoren

ph1959de

Zitat von: ph1959de am 09 November 2020, 18:50:44
@hermannj Hallo Jörg,

könntest Du gelegentlich für JsonMod einen Eintrag in der maintainer.txt "beantragen"?

Peter

:-[ freundliche Erinnerung  :-[
Aktives Mitglied des FHEM e.V. | Moderator im Forenbereich "Wiki"

yersinia

Zitat von: FHEMAN am 11 Dezember 2020, 10:54:37
Hallo,

wäre es möglich, das Modul um eine enable / disable Funktion zu erweitern? Ich nutze JsonMod zum Einlesen von Umweltsensoren (UV-A,UV-B) und benötige nachts keine Werte bzw. nur in größeren Intervallen. Eine (tägliche) Änderung des interval Attributs führt jedoch zum bekannten Fragezeichen.

Viele Grüße
Ronny
https://forum.fhem.de/index.php/topic,109413.msg1109533.html#msg1109533
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

khk123

#28
Hallo Joerg,

wäre es möglich eine Funktion zum Löschen der nicht mehr benötigter Readings einzubauen?
Bei  dem Modul 93_DbRep.pm gibt es folgende Funktion

set <name> eraseReadings

eraseReadings - Löscht alle angelegten Readings im Device, außer dem Reading "state" und Readings, die in der Ausnahmeliste definiert mit Attribut "readingPreventFromDel" enthalten sind.


Finde ich ganz praktisch, wenn sich die Json-Definitionen ändern.

Außerdem gibt es auch noch eine weitere nützliche Funktion:

set <name> clearReadings

    This function clears readings which were created by different DbLog-functions.


VG
Karlheinz


FHEM6.2, RasPi4, RasPi Zero W,
CUL V3, HM, ZWave, IT, vcontrol, owntracks, alexa

yersinia

Wenn ich das richtig überblicke, werden keine 'alten' readings behalten wenn das JsonMod-Device fehlerfrei die Json-Daten prozessiert - bestehende Readings werden aktualisiert, veraltete gelöscht. Oder irre ich? Wenn nicht, verstehe ich die Anforderung nicht.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

khk123

Stimmt. Hab es nochmal ausprobiert, geht auch bei mir. Da habe ich beim Testen wohl etwas falsch gemacht bzw. die alten Readings blieben beim fehlerhaften Verarbeiten stehen.
FHEM6.2, RasPi4, RasPi Zero W,
CUL V3, HM, ZWave, IT, vcontrol, owntracks, alexa

herrmannj

genau, so wie yersinia sagt. Wenn die Daten nicht geladen werden können, werden natürlich keine Änderungen durchgeführt

yersinia

viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

yersinia

@herrmannj: gibt es noch eine Chance, das du Punkte von der Wunschliste zeitnah noch in Code umwandelst? :)
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

herrmannj


yersinia

Och, ich fänd dies ganz cool:
Zitat von: yersinia am 24 Mai 2020, 14:46:22

  • korrekte Implementierung des Intervals auch für Wochentage (Thread)
  • Herausfiltern von spezifischen Array-Elementen (Thread, Thread und Thread)
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

KyleK

Hallo,

ich würde gerne innerhalb eines Filters 2 Expressions verwenden:

jsonPath("\$.orderDays.*.orderedMeals[?(\@.meal.categoryShortName =~ 'M.+' && \@.quantity == 1)]")

Nutze ich jeweils nur eine der beiden Expressions, ohne &&, funktioniert die query, aber mit beiden zusammen kommt nichts.
Ich gehe daher davon aus dass && und || noch nicht unterstützt werden.

Könnte das noch mit eingebaut werden?

Viele Grüße,
Frank
FHEM on Raspberry Pi 3B+
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

betateilchen

Das lässt sich vermutlich über eine eigene perl-Funktion lösen, die Du in der 99.myUtils.pm unterbringen kannst.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

herrmannj

um das zu implementieren (logische Verknüpfungen wie "and" "or"), müsste ein eigener parser her. Das ist mir zu aufwändig

KyleK

Zitat von: betateilchen am 11 September 2022, 11:02:16
Das lässt sich vermutlich über eine eigene perl-Funktion lösen, die Du in der 99.myUtils.pm unterbringen kannst.
Könntest du das näher erläutern? Ich kenne zwar das Konzept der 99myUtils.pm, aber wüsste nicht wie ich eine dort definierte Funktion in einem JSONPath filter verwenden sollte.
FHEM on Raspberry Pi 3B+
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

yersinia

Zitat von: KyleK am 11 September 2022, 22:08:57Könntest du das näher erläutern? Ich kenne zwar das Konzept der 99myUtils.pm, aber wüsste nicht wie ich eine dort definierte Funktion in einem JSONPath filter verwenden sollte.
Ich würde die Frage in einen eigenen Thread auslagern und ein Beispiel JSON mit erwarteter Ausgabe zur Verfügung stellen.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

KyleK

Hallo,

ich hab noch eine Verständnisfrage, damit ich nicht in der falschen Richtung weiterprobiere.
Ich wollte folgenden jsonPath nutzen zum Filtern von Elementen:

jsonPath('$.orderDays[?(@.date == $.to)].orderedMeals[?(@.quantity==1)]')

Bei Goessner und Jayway funktioniert das, aber hier leider nicht.
Ich vermute mal:

  • 2 filter expressions in einem JsonPath werden nicht unterstützt?
  • Ein Vergleich "@.date == $.to" ist auch nicht möglich, weil $.to eine Referenz außerhalb des aktuellen Kontextes ist?

Leicht reduziertes JSON-Beispiel:

{
    "from": "2022-09-18",
    "to": "2022-09-19",
    "orderDays": [
        {
            "date": "2022-09-19",
            "orderedMeals": [
                {
                    "meal": {
                        "name": "Cremige Karotten-Kokossuppe"
                    },
                    "quantity": 0
                },
                {
                    "meal": {
                        "name": "H\u00fchnerfrikassee, "
                    },
                    "quantity": 1
                },
                {
                    "meal": {
                        "name": "Lachsw\u00fcrfel in Sahneso\u00dfe,"
                    },
                    "quantity": 0
                }
            ]
        }
    ]
}
FHEM on Raspberry Pi 3B+
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

yersinia

Bitte mach' dafür einen neuen Thread auf - du bist hier (in der Wunschliste!) mit deiner Frage OT.
Zitat von: yersinia am 13 September 2022, 09:30:01Ich würde die Frage in einen eigenen Thread auslagern und ein Beispiel JSON mit erwarteter Ausgabe zur Verfügung stellen.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

gestein

Hallo,

wäre es möglich, diesen Patch von Erwin ins Modul zu übernehmen?
https://forum.fhem.de/index.php/topic,127428.msg1219532.html#msg1219532

Bei mir läuft es, aber ich nutze es auch nur für die Abfrage bei Apple's "Wo ist?".
Ich weiß daher nicht, ob dadurch irgendwelche Seiteneffekte auftreten.

Danke, lg, Gerhard

binford6000

Zitat von: gestein am 22 September 2022, 09:24:59
Hallo,

wäre es möglich, diesen Patch von Erwin ins Modul zu übernehmen?
https://forum.fhem.de/index.php/topic,127428.msg1219532.html#msg1219532

Bei mir läuft es, aber ich nutze es auch nur für die Abfrage bei Apple's "Wo ist?".
Ich weiß daher nicht, ob dadurch irgendwelche Seiteneffekte auftreten.

Danke, lg, Gerhard

+1
VG Sebastian