list <device> und JSON::Boolean

Begonnen von Wuehler, 21 Januar 2018, 12:49:16

Vorheriges Thema - Nächstes Thema

Wuehler

Hallo zusammen,

bei der Mitentwicklung am Unifi-Modul ist mit aufgefallen, dass im list des devices einige Werte nicht angezeigt werden. Immer wenn im hash der Wert JSON::true oder JSON::false ist (also nicht "true" oder "false") wird der Wert nicht mit ausgegeben. Beispiel: Folgende Werte bei enabled:
{
  "data": [
    {
      "_id": "5834d11dccf2c31658bdafd4",
      "bc_filter_enabled": false,
      "dtim_na": 3,
      "dtim_ng": 3,
      "enabled": true,
...


Ich habe versucht das in der fhem.pl zu verstehen, dazu reichen meine perl-Kenntnisse aber (leider) noch nicht aus.
Ich vermute in PrintHash() müsste dazu auch auf "isa(JSON::BOOLEAN)" usw. abgefragt werden. Da man dann auch auf alle möglichen anderen in packages refernzierten Objekte abfragen müsste ist diese "Einschränkung" denke ich in Ordnung.

Mit JsonList2 <device> werden nur Readings und Attribute ausgegeben.

Meine Fragen dazu:
1. Habe ich das so richtig verstanden?
2. Gibt es einen einfachen Weg sich solche Werte trotzdem anzeigen zu lassen? Damit ich im Unifi-Thread von den Modul-Usern besseren Input bekommen kann.
3. Oder sollte man im Modul anders entwicklen?

Danke schonmal für Hilfe und Gruß,
Dirk


justme1968

#1
unabhängig von der ausgabe der json boolean werte: list folgt referenzen nur eine ebene tief. d.h. komplizierte datanstrukturen lassen sich damit sowieso nicht ausgeben.

mit {Dumper $defs{<name>}} bekommt man rekursiv alles ausgegeben.

das kann man dem anwender auch einfacher machen in dem man im modul bei verbose 5 Ausgaben mit Data::Dumper logt oder eine get routine anbietet die dann Data::Dumper zur ausgabe verwendet.

für unifi könnte ich mir z.b. auch ein get <name> deviceDetail <xyz> um gezielt die daten zu einem device (oder mehreren) abzufragen vorstellen. die ausgabe der kompletten internen struktur kann bei vielen devices einige kb gross und ziemlich unübersichtlich werden.

wenn ein modul sowieso json verwendet kann man statt Data::Dumper natürlich auch encode_json verwenden um die daten zu serialisieren.

das man beide varianten bei bedarf auch automatisch wieder einlesen und in eine perl datenstruktur verwandeln kann ist noch ein vorteil gegenüber list.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Wuehler

Danke. Ist dann so wie von mir erwartet. Wollte halt nicht unnötig code erzeugen, falls es dazu schon build-in etwas gibt. Und ausserdem den Fragestellern korrekte Antworten geben können.
Werde mir das Logging im Modul mal genauer ansehen und mit encode_json dann vermutlich ein paar Stellen erweitern.