[BUG] jsonlist2 ROOMS

Begonnen von Respig, 04 Mai 2015, 13:42:25

Vorheriges Thema - Nächstes Thema

Respig

Hallo liebe Gemeinschaft.

Für die Erweiterung meiner Oberfläche benötige ich alle Räume, die in Fhem eingerichtet sind. Laut Commandref sollte das ganze mittels eines "jsonstlist2 ROOMS" zu bewerkstelligen sein. Allerdings bekomme ich dabei eine leere Ergebnisliste zurück:

{
  "Arg":"ROOMS",
  "Results": [
  ],
  "totalResultsReturned":1
}


Ich denke, das ist nicht das erwartete Verhalten und stelle es daher hier als Bug rein (herzlichen Dank an Hexenmeister für den Tipp, wo ich das Ganze posten soll).

rudolfkoenig

ZitatLaut Commandref sollte das ganze mittels eines "jsonstlist2 ROOMS" zu bewerkstelligen sein.
Kannst du bitte die Stelle zitieren?

Respig

#2
Gut, es steht nur bei dem veralteten "jsonlist" drin. Ich dachte dann irrtümlicherweise, dass veraltete Optionen weiterhin unterstützt werden. Mein Fehler. Allerdings gibt auch ein "jsonlist ROOMS" nicht die erwartete Antwort zurück (und das steht noch in der Commandref).

If specifying ROOMS, then a list with the defined rooms will be displayed, e.g.:
  fhem> jsonlist ROOMS
  {
    "ResultSet": "rooms",
    "Results": [
      "Bathroom",
      "Bedroom",
      "Children",
      "Diningroom",
      "Garden",
      "House",
      "Livingroom",
      "Office",
      "hidden"
    ],
    "totalResultsReturned": 15
  }


Diese Funktionalität ist dann also rausgeflogen?

rudolfkoenig

Ich habe zwar JsonList geerbt, da ich es aber nie richtig geblickt habe, habe ich JsonList2 geschrieben, und JsonList als "deprecated" markiert. Anders gesagt: JsonList Bugs werde ich nur in den seltensten Faellen fixen, und ich empfehle JsonList2 zu verwenden.

Ich habe JsonList2 erweitert, und den Syntax mit list gleichgezogen:
Falls man das neue (optionale) zweite Argument spezifiziert, dann wird nur der passende Wert (Internal/Reading/Attribut) zurueckgeliefert. Beispiel:

fhem> JsonList2 TYPE=FS20 room
{
  "Arg":"TYPE=FS20 room",
  "Results": [
  {
    "Name":"Alarm",
    "Attributes": {      "room": "Light"    }
  },
  {
    "Name":"CeilingLight",
    "Attributes": {      "room": "Cinema"    }
  },
  {
    "Name":"Livingroom",
    "Attributes": {      "room": "Light"    }
  },
  {
    "Name":"Office",
    "Attributes": {      "room": "Light"    }
  },
  {
    "Name":"Outdoor",
    "Attributes": {      "room": "Light"    }
  },
  {
    "Name":"ReadingLight",
    "Attributes": {      "room": "Cinema"    }
  }  ],
  "totalResultsReturned":6
}


Das ist zwar immer noch nicht das, was "jsonlist ROOMS" liefern sollte, allerdings ist die Datenmenge stark reduziert, und es sollte trivial sein daraus  in JavaScript das Benoetigte zu erstellen.

igami

#4
Hallo Respig,

hast du nun eine gangbare Lösung? Ich bräcuhte auch eine Liste definierten Räume, wie sie im auch beim Klick auf das room Attribut in jedem Device erscheint.

EDIT: habe mir nun erstmal eine kleine Sub geschrieben

sub rooms{
  my @devices = devspec2array('.*');
  my @rooms;
 
  foreach (@devices){
    my $room = AttrVal($_, 'room', 'unsorted');
    if (!($room ~~ @rooms)){
      push @rooms, $room;
    }
  }
 
  return "@rooms";
}


Grüße
igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

msfox

Ich weiß, dass Thema ist älter. Ich konnte aber keine Lösung finden.
Da mehrer das Problem habe, ist es vielleicht inzwischen irgendwie implementiert.

Ich brauch auch die Räume (oder Gruppen). Aber über JSONLIST2 weiß ich nicht wie ich diese abfragen soll.


fhem?XHR=1&cmd=jsonlist2 rooms

Liefert nix...


fhem?XHR=1&cmd=jsonlist2 TYPE=HM485 room

Liefert zum Type "HM485" die Räume. Aber ich habe ja auch noch andere Typen.

fhem?XHR=1&cmd=jsonlist2 TYPE=* room
Wildcard scheinen für Type auch nicht zu funktionieren.

Ich mag irgendwie nicht bei meinem Programm gleich das ganz "FHEM" mit
fhem?XHR=1&cmd=jsonlist2
auslesen, nur um alle Räume auslesen zu können. Das ist unperformant....

Plan B wäre, die gewünschten Räume festzulegen. Dann ist es aber nicht mehr generisch...

DeeSPe

Zitat von: msfox am 13 November 2017, 18:25:52
Ich weiß, dass Thema ist älter. Ich konnte aber keine Lösung finden.
Da mehrer das Problem habe, ist es vielleicht inzwischen irgendwie implementiert.

Ich brauch auch die Räume (oder Gruppen). Aber über JSONLIST2 weiß ich nicht wie ich diese abfragen soll.


fhem?XHR=1&cmd=jsonlist2 rooms

Liefert nix...


fhem?XHR=1&cmd=jsonlist2 TYPE=HM485 room

Liefert zum Type "HM485" die Räume. Aber ich habe ja auch noch andere Typen.

fhem?XHR=1&cmd=jsonlist2 TYPE=* room
Wildcard scheinen für Type auch nicht zu funktionieren.

Ich mag irgendwie nicht bei meinem Programm gleich das ganz "FHEM" mit
fhem?XHR=1&cmd=jsonlist2
auslesen, nur um alle Räume auslesen zu können. Das ist unperformant....

Plan B wäre, die gewünschten Räume festzulegen. Dann ist es aber nicht mehr generisch...

Wildcard ist .* und nicht * !

Oder auch diese Funktion nutzen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

msfox

PERFEKT: Wieder ein Schritt weiter :-).