httpmod unterstuetzt XPath um XML-Dateien zu interpretieren.
Gibt es das vergleichbare auch fuer JSON-Dateien ?
Ich weiss, dass es z. B. jsonpath gibt, aber im WIKI von httpmod finde ich wenig ueber eine moegliche Syntax fuer komplexere Abfragen bzw. Zuweisung eines Readings bei json.
Kann ich mich irgendwo informieren ?
Ein Beispiel :
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
5.6206,
58.9987,
29
]
},
"properties": {
"meta": {
"updated_at": "2021-04-27T07:55:35Z",
"units": {
"air_pressure_at_sea_level": "hPa",
"air_temperature": "celsius",
"air_temperature_max": "celsius",
"air_temperature_min": "celsius",
"cloud_area_fraction": "%",
"cloud_area_fraction_high": "%",
"cloud_area_fraction_low": "%",
"cloud_area_fraction_medium": "%",
"dew_point_temperature": "celsius",
"fog_area_fraction": "%",
"precipitation_amount": "mm",
"precipitation_amount_max": "mm",
"precipitation_amount_min": "mm",
"probability_of_precipitation": "%",
"probability_of_thunder": "%",
"relative_humidity": "%",
"ultraviolet_index_clear_sky": "1",
"wind_from_direction": "degrees",
"wind_speed": "m/s",
"wind_speed_of_gust": "m/s"
}
},
"timeseries": [
{
"time": "2021-04-27T08:00:00Z",
"data": {
"instant": {
"details": {
"air_pressure_at_sea_level": 1018,
"air_temperature": 6.9,
"cloud_area_fraction": 8.8,
"cloud_area_fraction_high": 7.8,
"cloud_area_fraction_low": 0,
"cloud_area_fraction_medium": 1.1,
"dew_point_temperature": 0.7,
"fog_area_fraction": 0,
"relative_humidity": 65.5,
"ultraviolet_index_clear_sky": 1.6,
"wind_from_direction": 327,
"wind_speed": 0.9,
"wind_speed_of_gust": 3.2
}
},
"next_12_hours": {
"summary": {
"symbol_code": "partlycloudy_day",
"symbol_confidence": "certain"
},
"details": {
"probability_of_precipitation": 0
}
},
"next_1_hours": {
"summary": {
"symbol_code": "fair_day"
},
"details": {
"precipitation_amount": 0,
"precipitation_amount_max": 0,
"precipitation_amount_min": 0,
"probability_of_precipitation": 0.6,
"probability_of_thunder": 0
}
},
"next_6_hours": {
"summary": {
"symbol_code": "partlycloudy_day"
},
"details": {
"air_temperature_max": 9.5,
"air_temperature_min": 7.8,
"precipitation_amount": 0,
"precipitation_amount_max": 0,
"precipitation_amount_min": 0,
"probability_of_precipitation": 0
}
}
}
},
{
"time": "2021-04-27T09:00:00Z",
"data": {
"instant": {
"details": {
"air_pressure_at_sea_level": 1018,
"air_temperature": 7.8,
"cloud_area_fraction": 25.2,
"cloud_area_fraction_high": 25,
"cloud_area_fraction_low": 0.2,
"cloud_area_fraction_medium": 0,
"dew_point_temperature": 1.6,
"fog_area_fraction": 0,
"relative_humidity": 65.7,
"ultraviolet_index_clear_sky": 2.3,
"wind_from_direction": 312.4,
"wind_speed": 2.1,
"wind_speed_of_gust": 4.7
}
},
"next_12_hours": {
"summary": {
"symbol_code": "partlycloudy_day",
"symbol_confidence": "certain"
},
"details": {
"probability_of_precipitation": 0
}
},
"next_1_hours": {
"summary": {
"symbol_code": "fair_day"
},
"details": {
"precipitation_amount": 0,
"precipitation_amount_max": 0,
"precipitation_amount_min": 0,
"probability_of_precipitation": 0,
"probability_of_thunder": 0
}
},
"next_6_hours": {
"summary": {
"symbol_code": "partlycloudy_day"
},
"details": {
"air_temperature_max": 9.5,
"air_temperature_min": 8.6,
"precipitation_amount": 0,
"precipitation_amount_max": 0,
"precipitation_amount_min": 0,
"probability_of_precipitation": 0
}
}
}
},
Die einzelnen Bloecke, etwa
"time": "2021-04-27T11:00:00Z",
"data": {
"instant": {
"details": {
.
.
.
.
.
unterscheiden sich nur im Datum.
Wie kann ich jetzt das erste, zweite oder auch 10. Auftreten eines Elements heraussuchen, unabhaengig vom Datum ?
Mit XML und XPath weiss ich das, aber mit JSON komme ich so nicht weiter.
Das Beispiel in der Dokumentation :
reading[0-9]+JSON
defines a path to the JSON object wanted by concatenating the object names with an underscore as delimiter (see the example below)
verstehe ich, die Frage ist, welche komplexeren Operation kann ich da reinlegen ( wenn ueberhaupt ) ?
Etwa, wie finde ich Bloecke, die zu 12 Uhr mittags gehoeren und nur die ?
Es gibt ein JsonMod, das in Automation behandelt wird.
Leider ist sie nicht in MAINTAINER.txt eingetragen :(
Danke, muss ich probieren.
Der Wetterbericht, der mir diese Daten liefert, hat schon angekuendigt, die XML-Version irgendwann einzustellen.
Das gibt eine Menge 'try and error '......
Bei obigem Beispiel gibt das hier ein Ergebnis :
single(jsonPath('$..time'), 'time0', 'default value');
das hier aber nicht :
single(jsonPath('$..time[1]'), 'time0', 'default value');
Ersteres liefert mir den Wert des erste 'time'-Eintrags,
letzteres sollte nach meinem Verstaendnis den Wert des 2. 'time'-Eintrags liefern.
Tut es aber nicht, was sicher an mir liegt.
Zitat von: Wolfgang Hochweller am 27 April 2021, 12:36:44das hier aber nicht :
single(jsonPath('$..time[1]'), 'time0', 'default value');
Ersteres liefert mir den Wert des erste 'time'-Eintrags,
letzteres sollte nach meinem Verstaendnis den Wert des 2. 'time'-Eintrags liefern.
Tut es aber nicht, was sicher an mir liegt.
Nope, das ist schlicht (noch) nicht implementiert.
ZitatHerausfiltern von spezifischen Array-Elementen (Thread (https://forum.fhem.de/index.php/topic,109413.msg1087544.html#msg1087544) & Thread (https://forum.fhem.de/index.php/topic,117534.0.html))
[98_JsonMod.pm] Wunschliste von neuen Funktionen (https://forum.fhem.de/index.php/topic,111489.msg1057154.html#msg1057154)
Edit: ich sehe gerade, dass es bei dir anders gelagert sein könnte; versuche mal:
single(jsonPath('$.timeseries.[1]'), 'time0', 'default value');
Danke, geht aber auch nicht.
Denke, alles, was
- benutzt, geht noch nicht.
Das Problem liegt eher an meiner Annahme bzgl. JSONPath.
Ich habe natuerlich versucht, herauszufinden, was es mit JSONPath auf sich hat, dann stoesst man schnell auf eine
Bibliothek : jasonpath.js
Und habe die Beispiele dazu versucht, anzuwenden.
am besten dort lernen: https://goessner.net/articles/JsonPath/
Im Netz gibt es diverse tools bei denen Du Dein JSON reinkopierst und die query online und direkt testen kannst (google: jsonpath tester)
Array literal ".[1]" wird von JsonMod unterstützt, Array indirekt ".[-1]" etc nicht
Danke, mache ich gerade.
Gibt es die umgekehrte Richtung auch irgendwo ?
Ich markiere ein Element und bekomme die Pfadbeschreibung ?
Gefunden !
Aus reiner Neugier, was hat denn jetzt eigentlich zum Erfolg geführt?
single(jsonPath('$.timeseries.[1]'), 'time0', 'default value');
single(jsonPath('$.timeseries[1]'), 'time0', 'default value');
single(jsonPath('$..times.[1]'), 'time0', 'default value');
single(jsonPath('$..times[1]'), 'time0', 'default value');
Das hier geht :
single(jsonPath('$.properties.timeseries[0].time'), 'time', 'time0');
egal ob
- oder eine andere Zahl.
Grenzen gehen aber nicht, jedenfalls nicht so :
single(jsonPath('$.properties.timeseries[0:2].time'), 'time', 'time0');
Ich habe jetzt bei meinen Versuchen sowohl einen Pathfinder als auch Pathchecker verwendet, funktioniert prinzipiell prima.
Im Vergleich zu XML sind die Ergebnisse aber noch ernuechternd :
Es passiert eigentlich alles, was passieren koennte :
Pathfinder geht nicht, dann geht auch jsonmod nicht : war zu erwarten
Pathfinder geht, aber nicht jsonmod : Nicht vewunderlich, daran wird ja noch gearbeitet.
Pathfinder geht nicht, obwohl ich meine, dass es funktionieren muesste :
Beispiel :
Das geht in Pathfinder, generiert aber einen Fehler in jsonmod:
$.properties.timeseries[?(@.time == '2021-04-27T15:00:00Z')].time
das geht weder in Pathfinder noch in jsonmod :
$.properties.timeseries[?( '15:00:00' in @.time )].time
oder
$.properties.timeseries[?( @.time contains '15:00:00' )].time
Dafuer geht das hier in Pathfinder, aber man muss FHEM neu starten, wenn man das in jsonmod versucht:
$.properties.timeseries[?(/15:00:00/ .test (@.time ))].time
poste (oder schicke) doch bitte einmal ein komplettes JSON.
ZitatGrenzen gehen aber nicht
Das ist ok ((noch) nicht implementiert).
$.properties.timeseries[?(/15:00:00/ .test (@.time ))].time
Das soll auch nicht gehen. Allerdings werte ich es als BUG wenn da ein Neustart fällig wird. Das muss ich mir mit Deinem JSON mal nachstellen und anschauen.
Als ich JsonMod geschrieben habe, gab es keine JSONPath lib für perl und ich habe (musste) das komplett implementieren. Referenz für mich ist Goessner, aber es gibt diverse Varianten "in the wild". Der Syntax ist nicht komplett implementiert sondern die 80% die für 98% der Anwendungen ausreichen. Arrays vervollständige ich noch (bei Gelegenheit) - Script Filter und logische Operatoren werden beliebig komplex, dafür müsste man lexer und parser implementieren (da fehlt mir Kosten/Nutzen)
Schick mal das JSON (gern nochmal mit der Erklärung was genau in die Readings soll) dann schau ich mir das an.
vg, joerg
Klar, hier ist ein Beispiel :
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
5.6206,
58.9987,
29
]
},
"properties": {
"meta": {
"updated_at": "2021-04-27T13:57:45Z",
"units": {
"air_pressure_at_sea_level": "hPa",
"air_temperature": "celsius",
"cloud_area_fraction": "%",
"precipitation_amount": "mm",
"relative_humidity": "%",
"wind_from_direction": "degrees",
"wind_speed": "m/s"
}
},
"timeseries": [
{
"time": "2021-04-27T14:00:00Z",
"data": {
"instant": {
"details": {
"air_pressure_at_sea_level": 1017.5,
"air_temperature": 10.3,
"cloud_area_fraction": 20.1,
"relative_humidity": 58.2,
"wind_from_direction": 293.6,
"wind_speed": 4.9
}
},
"next_12_hours": {
"summary": {
"symbol_code": "fair_day"
}
},
"next_1_hours": {
"summary": {
"symbol_code": "partlycloudy_day"
},
"details": {
"precipitation_amount": 0
}
},
"next_6_hours": {
"summary": {
"symbol_code": "partlycloudy_day"
},
"details": {
"precipitation_amount": 0
}
}
}
},
{
"time": "2021-04-27T15:00:00Z",
"data": {
"instant": {
"details": {
"air_pressure_at_sea_level": 1017.1,
"air_temperature": 10.3,
"cloud_area_fraction": 63.5,
"relative_humidity": 57.9,
"wind_from_direction": 299.2,
"wind_speed": 5.4
}
},
"next_12_hours": {
"summary": {
"symbol_code": "fair_day"
}
},
"next_1_hours": {
"summary": {
"symbol_code": "partlycloudy_day"
},
"details": {
"precipitation_amount": 0
}
},
"next_6_hours": {
"summary": {
"symbol_code": "fair_day"
},
"details": {
"precipitation_amount": 0
}
}
}
},
{
"time": "2021-04-27T16:00:00Z",
"data": {
"instant": {
"details": {
"air_pressure_at_sea_level": 1016.7,
"air_temperature": 9.8,
"cloud_area_fraction": 91.3,
"relative_humidity": 61.1,
"wind_from_direction": 305.5,
"wind_speed": 5.5
}
},
"next_12_hours": {
"summary": {
"symbol_code": "clearsky_day"
}
},
"next_1_hours": {
"summary": {
"symbol_code": "partlycloudy_day"
},
"details": {
"precipitation_amount": 0
}
},
"next_6_hours": {
"summary": {
"symbol_code": "fair_day"
},
"details": {
"precipitation_amount": 0
}
}
}
},
{
"time": "2021-04-27T17:00:00Z",
"data": {
"instant": {
"details": {
"air_pressure_at_sea_level": 1016.3,
"air_temperature": 9.3,
"cloud_area_fraction": 80.7,
"relative_humidity": 59.8,
"wind_from_direction": 310.2,
"wind_speed": 5
}
},
"next_12_hours": {
"summary": {
"symbol_code": "clearsky_night"
}
},
"next_1_hours": {
"summary": {
"symbol_code": "fair_day"
},
"details": {
"precipitation_amount": 0
}
},
"next_6_hours": {
"summary": {
"symbol_code": "clearsky_night"
},
"details": {
"precipitation_amount": 0
}
}
}
},
{
"time": "2021-04-27T18:00:00Z",
"data": {
"instant": {
"details": {
"air_pressure_at_sea_level": 1016.1,
"air_temperature": 8.7,
"cloud_area_fraction": 36.1,
"relative_humidity": 60.9,
"wind_from_direction": 316.9,
"wind_speed": 4.7
}
},
"next_12_hours": {
"summary": {
"symbol_code": "clearsky_night"
}
},
"next_1_hours": {
"summary": {
"symbol_code": "clearsky_day"
},
"details": {
"precipitation_amount": 0
}
},
"next_6_hours": {
"summary": {
"symbol_code": "clearsky_night"
},
"details": {
"precipitation_amount": 0
}
}
}
},
{
"time": "2021-04-27T19:00:00Z",
"data": {
"instant": {
"details": {
"air_pressure_at_sea_level": 1016,
"air_temperature": 7.9,
"cloud_area_fraction": 10.5,
"relative_humidity": 69.4,
"wind_from_direction": 320.1,
"wind_speed": 3.6
}
},
"next_12_hours": {
"summary": {
"symbol_code": "clearsky_day"
}
},
"next_1_hours": {
"summary": {
"symbol_code": "clearsky_night"
},
"details": {
"precipitation_amount": 0
}
},
"next_6_hours": {
"summary": {
"symbol_code": "clearsky_night"
},
"details": {
"precipitation_amount": 0
}
}
}
},
{
"time": "2021-04-27T20:00:00Z",
"data": {
"instant": {
"details": {
"air_pressure_at_sea_level": 1015.9,
"air_temperature": 7,
"cloud_area_fraction": 4.4,
"relative_humidity": 76.4,
"wind_from_direction": 326,
"wind_speed": 3.4
}
},
"next_12_hours": {
"summary": {
"symbol_code": "clearsky_day"
}
},
"next_1_hours": {
"summary": {
"symbol_code": "clearsky_night"
},
"details": {
"precipitation_amount": 0
}
},
"next_6_hours": {
"summary": {
"symbol_code": "clearsky_night"
},
"details": {
"precipitation_amount": 0
}
}
}
},
{
"time": "2021-04-27T21:00:00Z",
"data": {
"instant": {
"details": {
"air_pressure_at_sea_level": 1015.8,
"air_temperature": 6.1,
"cloud_area_fraction": 2,
"relative_humidity": 88.1,
"wind_from_direction": 331.8,
"wind_speed": 2.7
}
},
"next_12_hours": {
"summary": {
"symbol_code": "clearsky_day"
}
},
"next_1_hours": {
"summary": {
"symbol_code": "clearsky_night"
},
"details": {
"precipitation_amount": 0
}
},
"next_6_hours": {
"summary": {
"symbol_code": "clearsky_night"
},
"details": {
"precipitation_amount": 0
}
}
}
},
{
"time": "2021-04-27T22:00:00Z",
"data": {
"instant": {
"details": {
"air_pressure_at_sea_level": 1015.7,
"air_temperature": 4.9,
"cloud_area_fraction": 3.9,
"relative_humidity": 92.3,
"wind_from_direction": 327.6,
"wind_speed": 2.2
}
},
"next_12_hours": {
"summary": {
"symbol_code": "clearsky_day"
}
},
"next_1_hours": {
"summary": {
"symbol_code": "clearsky_night"
},
"details": {
"precipitation_amount": 0
}
},
"next_6_hours": {
"summary": {
"symbol_code": "clearsky_night"
},
"details": {
"precipitation_amount": 0
}
}
}
}
]
}
}
https://jsonpath.herokuapp.com/
ist eine interessante Seite zum Checken.
Vier verschiedene Patchchecker, die Resultate sind schon verblueffend.
In dem Beispiel taucht jeder Zeitstempel genau einmal auf, kann man ja mal aendern.
Die Logik fuer die Readings , z. B.
ein Reading fuer jedes 'data.instant.details.air_temperature', wenn der Zeitstempel 12:00:00 enthaelt.
Das entspricht dann jeweils der Mittagstemperatur fuer die kommenden Tage.
Also , erstes Auftreten waere die Temperatur heute ( oder morgen , je nachdem, wann man fragt ), das naechste der Tag danach, usw.
Welche readings sollen erzeugt werden?
Ich war noch am aendern .....
Reicht die Erklaerung oben ?
Einen kompletten Datensatz bekommt man unter :
https://api.met.no/weatherapi/locationforecast/2.0/compact?lat=58.9987&lon=5.62055
JsonMod kann sehr viel - aber nicht alles und das ist auch ok:). Das hier ist ein Grenzfall.
Der Reihe nach:
Die Daten die Du suchst sind innerhalb der JSON Source als Array/Liste organisiert. Daher ist die readingList ein multi()
Der JsonPath '$.properties.timeseries.[*]'
löst auf das gesuchte Array auf.
Testweise die Zeit als Reading Name: property('time') und die Temperatur als Value: property('data.instant.details.air_temperature').
Die readingList
multi(jsonPath('$.properties.timeseries.[*]'), property('time'), property('data.instant.details.air_temperature'));
ergibt:
Readings
2021-04-28T200000Z 7.1
2021-04-28T210000Z 5.8
2021-04-28T220000Z 5.1
...
Jetzt zum Problem: Du möchtest _nur_ die Werte wo der Zeitstempel 12:00:00Z _enthält_. Das braucht einen Filter, allerdings passt keiner der zur Verfügung stehenden Filter (>,=,<, 'in' ...). Du bräuchtest ein 'enthält' oder 'endet auf' etc. Da gibt es nichts passendes. Da ich nicht ausschließen möchte, dass es innerhalb der kommenden 25 Jahre einen weiteren Anwendungsfall dafür geben könnte, habe ich einen regex operator (=~) eingebaut.
Der JsonPath mit Filter sieht dann so aus (Jetzt in doppelten Hochkomma weil man die einfachen für den Filter benötigt. Daher müssen $ und @ escaped werden!): jsonPath("\$.properties.timeseries.[?(\@.time =~ '12:00:00Z')]")
ergibt:
Readings
2021-04-29T120000Z 13.3
2021-04-30T120000Z 11
...
Jetzt noch hübsch machen:
multi(jsonPath("\$.properties.timeseries.[?(\@.time =~ '12:00:00Z')]"), substr(property('time'), 0, 10), sprintf('%.1f°', property('data.instant.details.air_temperature')));
ergibt:
Readings
2021-04-29 13.3°
2021-04-30 11.0°
2021-05-01 7.9°
...
Das braucht den JsonMod im Anhang, bitte testen und wenn es keine Nebenwirkungen gibt, dann checke ich das in den kommenden Tagen ein.
@Yersinia: falls Du mitliest, Du hattest einige Male einen ungeklärten Bug auf OS oder perl Ebene. JSON::XS wäre eine mögliche Ursache. In dieser Version habe ich JSON::XS durch Cpanel::JSON::XS ersetzt. Das müsste installiert sein, ansonsten wird das pure perl fallback verwendet.
Mit der Bitte um Feedback, Danke
Joerg
Nachtrag:
Hier wäre noch eine leicht modifizierte readingsList, plus Summary:
multi(jsonPath("\$.properties.timeseries.[?(\@.time =~ '12:00:00Z')]"), substr(property('time'), 0, 10), sprintf('%.1f° (%s)', property('data.instant.details.air_temperature'), property('data.next_12_hours.summary.symbol_code')));
2021-04-29 7.6° (rain)
2021-04-30 10.7° (cloudy)
2021-05-01 11.3° (cloudy)
Super, danke, teste ich.
In allen Beschreibungen tauchen sowohl 'in' als auch 'contains' auf, die, soweit ich sehe, auf substrings testen sollten.
Sowas :
$.properties.timeseries[?(@.time contains '16:00:00')].time
funktioniert bei Jayway,aber nicht bei Goessner
Bei
$.properties.timeseries[?(/16:00:00/ .test (@.time ))].time
ist es genau umgekehrt.
Man muss also genau aufpassen, welchen 'Auswerter' man verwendet.
ja, das ist so. Schau mal hier auf das Kleingedruckte: https://support.smartbear.com/alertsite/docs/monitors/api/endpoint/jsonpath.html
Die möglichen Filter hängen von der engine ab. Vielleicht mag jemand die für JsonMod im Wiki dokumentieren.
Danke, vg
joerg
Zitat von: herrmannj am 29 April 2021, 09:51:08
Die möglichen Filter hängen von der engine ab. Vielleicht mag jemand die für JsonMod im Wiki dokumentieren.
Ich hätte ja schon mit Doku im Wiki begonnen ... wenn denn JSONMod mal in der Maintainer.txt aufgetaucht wäre ;)
Getestet und fuer gut befunden :)
Super, danke !
Das hier :
multi(jsonPath("\$.properties.timeseries.[?(\@.time =~ '12:00:00Z')]"), concat('temp_',count),property('data.instant.details.air_temperature')) );
liefert mir jetzt :
READINGS:
2021-04-29 10:27:10 temp_0 12.3
2021-04-29 10:27:10 temp_1 10.5
2021-04-29 10:27:10 temp_2 9.1
2021-04-29 10:27:10 temp_3 7.8
2021-04-29 10:27:10 temp_4 6.9
2021-04-29 10:27:10 temp_5 8.5
2021-04-29 10:27:10 temp_6 7.5
2021-04-29 10:27:10 temp_7 7.5
2021-04-29 10:27:10 temp_8 8.8
Genau das brauche ich fuer meine Widgets in FTUI.
Zitat von: ph1959de am 29 April 2021, 10:14:10
Ich hätte ja schon mit Doku im Wiki begonnen ... wenn denn JSONMod mal in der Maintainer.txt aufgetaucht wäre ;)
Ok, ok ... :D &Danke!!
Ab heute im fhem Update
Zitat von: herrmannj am 29 April 2021, 00:47:37@Yersinia: falls Du mitliest, Du hattest einige Male einen ungeklärten Bug auf OS oder perl Ebene. JSON::XS wäre eine mögliche Ursache. In dieser Version habe ich JSON::XS durch Cpanel::JSON::XS ersetzt. Das müsste installiert sein, ansonsten wird das pure perl fallback verwendet.
Sorry, konnte gestern nicht testen - habe aber deine Version jetzt eingespielt (via normalen FHEM Update). Erstmal funktioniert es anscheinend weiter.
Die SEGV Probleme (https://forum.fhem.de/index.php/topic,119301.0.html) konnte ich lösen indem ich ein (!) JsonMod Device gelöscht habe, seitdem ist das nicht mehr aufgetreten. Ich werde es beobachten.
Weiterhin läuft es, ohne Cpanel::JSON::XS bewusst installiert zu haben, bisher auch unauffällig. Wäre eigtl JSON::MaybeXS (https://metacpan.org/pod/JSON::MaybeXS) eine Option für dich gewesen?
[sOT]Irgendwie überzeugt mich CPAN (https://wiki.fhem.de/wiki/CPAN) noch nicht, neben (auf raspi OS) apt noch mit cpan rumhantieren um alle FHEM Module zum Laufen zu bewegen, ich weiß nicht. Vor allem muss ich die Aktualsierungen dann auch noch neben apt über cpan(minus) abfragen. ::)
EDIT: es gibt allerdings ein
libcpanel-json-xs-perl Paket - und (EDIT II) das scheint auch zu funktionieren.[sOT]
schau sicherheitshalber nochmal auf die version, fhem update verteilt das erst an einer bestimmten Zeit. (8:00, 10:00? dont know...)
JSON::XS vs Cpanel:JSON::XS: beides schnelle C Implementierungen. JSON::XS ist bekannt für teilweise zickiges (bug) Verhalten, Cpanel ist der neuere und verbesserte fork. JSON::MaybeXS ist nur ein loader und wenn man Pech hat wird dann eben doch JSON::XS verwendet. Macht keinen Sinn.
Da JSON die Kernkompetenz von JsonMod ist, bringt das Modul eine schnelle (pure perl) JSON Implementierung mit. Wenn Cpanel::JSON::XS vorhanden ist, dann wird das verwendet und falls nicht die pure perl Implementierung. In diesem Fall findest Du eine Nachricht im Log (... JSON ist pure perl, consider installing Cpanel::JSON::XS)
libcpanel-json-xs-perl, -> der empfohlene Weg auf Systemen die das haben. (sudo apt-get install libcpanel-json-xs-perl)
Zitat von: herrmannj am 30 April 2021, 09:16:33schau sicherheitshalber nochmal auf die version, fhem update verteilt das erst an einer bestimmten Zeit. (8:00, 10:00? dont know...)
seit 7:45 heute morgen:
98_JsonMod.pm 24360 2021-04-29 21:17:23Z herrmannj
8)
Ja, ich hatte ich gestern auch gelesen, dass Cpanel::JSON::XS
wesentlich schneller als JSON:XS oder JSON:PP sein soll. Opbjektiv ist dies auch so. Schön.
Zitat von: herrmannj am 30 April 2021, 09:16:33libcpanel-json-xs-perl, -> der empfohlene Weg auf Systemen die das haben. (sudo apt-get install libcpanel-json-xs-perl)
Genau das! :D Läuft auch.
Seite JsonMod im Wiki (https://wiki.fhem.de/wiki/JsonMod) ist angelegt und mit ersten Informationen (insbesondere auch Liste der Anwendungsbeispiele) gefüllt.