"Informid" für Dummies

Begonnen von KernSani, 04 Januar 2023, 21:45:11

Vorheriges Thema - Nächstes Thema

KernSani

Hallo zusammen,
ein Gutes Neues Jahr euch allen. Ich habe mich die Tage mal wieder etwas näher mit meiner Hausautomatisierung beschäftigt und bin dabei eine Idee umzusetzen (vielleicht wird auch mal ein Modul daraus), die mich dazu zwingt, mich mit der InformID zu beschäftigen. Ich könnte mich nun durch FHEMWEB und Readingsgroups und ähnliche Module wühlen und versuchen das zu verstehen, aber vielleicht hat ja jemand eine einfache Erklärung/Beispielcoding.

Folgendes (Ich vereinfache stark): Ich habe ein Device A, das abhängig vom Zustand verschiedener anderer Devices seinen Zustand ändert und damit die Darstellung in FHEMWEB. Der darzustellende Zustand ist nun kein einfaches DevStateIcon, sondern Teil einer umfangreicheren eigenen SummaryFn mit mehreren verschachtelten DIVs etc... Aktuell habe ich das wie folgt gelöst:
1.) Device A hat ein Reading "mein_spezielles_Reading"
2.) In der SummaryFn von Device A gibt es ein Element mit Informid "DeviceA-mein_spezielles_Reading"
3.) Wenn der Zustand von Device B (oder C oder D) sich ändert, bekommt das die NotifyFn von Device A mit, berechnet den Zustand neu, baut das HTML zusammen und schreibt dieses in "mein_spezielles_Reading". Damit wird ein Event getriggert und der "Value" von "mein_spezielles_Reading" am Frontend aktualisiert.

Das funktioniert soweit, ist aber irgendwie unschön, da ich dadurch in "mein_spezielles_Reading" (und davon kann es viele geben) einen Haufen HTML stehen habe. Zudem dient "mein_spezielles_Reading" eigentlich nur dem Zweck, das Frontend zu aktualisieren. Ansonsten bräuchte ich das Reading garnicht.

Gibt es einen Weg, dass ich mir eine beliebige informid erfinde und diese dann (ohne den Umweg über das Reading) aus der notifyFN heraus direkt update? Eine Funktion der Art updateInformID($informID,$html)?

Vielen Dank,

Schöne Grüße,

Oli   
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

rudolfkoenig

ZitatIch könnte mich nun durch FHEMWEB und Readingsgroups und ähnliche Module wühlen und versuchen das zu verstehen, aber vielleicht hat ja jemand eine einfache Erklärung/Beispielcoding.
Das wuerde mich wundern.
Um irgendetwas Hilfreiches zu sagen, muss ich auch Code schauen:

in fhemweb.js/FW_doUpdate.js steht:
  // d[0]: informid
  // d[1]: if the informid Widget has setValueFn, arg for this
  // d[2]: else replace the html with this

Bei der Benachrichtigung ueber ein Event wird informid fest formatiert (<device>-<reading> bzw. <device>-<reading>-ts).
Es existiert aber in 01_FHEMWEB.pm ein FW_directNotify, mit dem man diese drei Parameter direkt weitergeben kann.

Thorsten Pferdekaemper

Hi,
so ganz verstehe ich nicht, was hier das Problem ist. Gibt man nicht in der summaryFn einfach den anzuzeigenden HTML Code zurück? Der Refresh sollte ja immer erfolgen, wenn sich irgend etwas am Device ändert. ...oder?
Gruß,
   Thorsten
FUIP

KernSani

#3
Zitat von: rudolfkoenig am 05 Januar 2023, 12:22:07
Das wuerde mich wundern.
Um irgendetwas Hilfreiches zu sagen, muss ich auch Code schauen:

in fhemweb.js/FW_doUpdate.js steht:
  // d[0]: informid
  // d[1]: if the informid Widget has setValueFn, arg for this
  // d[2]: else replace the html with this

Bei der Benachrichtigung ueber ein Event wird informid fest formatiert (<device>-<reading> bzw. <device>-<reading>-ts).
Es existiert aber in 01_FHEMWEB.pm ein FW_directNotify, mit dem man diese drei Parameter direkt weitergeben kann.


Hallo Rudi,

Vielen Dank, das hat mich schonmal deutlich weiter gebracht, aber irgendwie bin ich zu doof dafür :-S
Wenn ich das richtig interpretiere würde FW_doUpdate zwar eine beliebige informID aktualisieren, FW_directNotify erwartet aber einen Devicenamen als ersten Parameter, damit scheitere ich damit, Informid "DeviceA-mein_spezielles_Reading" zu aktualisieren. Bleibt vermutlich nur der Weg, der offensichtlich auch in Readingsgroup genutzt wird - mit einer angepassten Kopie von FW_directNotify zu arbeiten, oder kann man da in FW_directNotify machen? Vermutlich würde es ja schon reichen, für $dev nur den Teil vor einem Bindestrich zu berücksichtigen...

Danke,

Grüße,

Oli

Edit: Habe genau das gemacht: Kopie (im eigenen package) von FW_directNotify in der ich das Device für $dev von der informID wegsplitte - Dann klappt's :-)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

rudolfkoenig

ZitatVermutlich würde es ja schon reichen, für $dev nur den Teil vor einem Bindestrich zu berücksichtigen...
Das klingt nicht so gefaehrlich, habs deswegen eingebaut und eingecheckt.

KernSani

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...