globale events und longpoll

Begonnen von justme1968, 17 Januar 2016, 15:52:09

Vorheriges Thema - Nächstes Thema

justme1968

mit dem angehängten patch werden die globalen events für ATTR, DEFINED, DELETED, ... auch per longpoll weiter gegeben.

das global device wird hierzu automatisch in die liste der inform devices eingefügt.

hintergrund: ich baue gerade in dem homebridge shim ein das neue devices und änderungen an der konfiguration automatisch erkannt werden ohne das man hierzu komponenten neu starten muss.

ich könnte mir vorstellen das das auch für andere frontends interessant ist.

damit könnte man auch fhemweb so umbauen das das SAVE auf js seite erkannt wird um das ? rot zu machen statt den js code ans frontend zu schicken.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Markus Bloch

Was genau soll das bringen, wenn man diese Events im FHEMWEB Frontend hat? Abgesehen vom roten Fragezeichen bei Save Config erschließt sich mir kein weiterer Use Case.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

justme1968

fhemweb ist nicht das einzige frontend und es gibt noch andere clients die den longpoll mechanismus verwenden.

mein konkreter anwendungsfall ist gerade der homebridge shim für die siri integration. hier ist es zur zeit nötig bei der änderung homebridge neu zu starten. mit der änderung tauchen neu angelegte devices einfach automatisch auf.

andere anwendungsfälle sind im frontend direkt anzeigen zu können ob ein device disabled wurde, auf änderungen von räumen oder gruppen zu reagieren ohne jedes im haus verteilte tablet anzufassen, ...

jedes frontend das die aktuelle konfiguration so genau wie möglich darstellen will sollte interesse daran haben mit zu bekommen das devices hinzugekommen oder verschwunden sind oder ob es andere änderungen an der konfiguration gegeben hat. neu einlesen der konfiguration von hand oder sogar neustarts sind altmodisch :).

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

betateilchen

Zeichensetzung erleichtert Lesbarkeit.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Markus Bloch

Damit würde im Event-Monitor aber immer global-Events auftauchen, obwohl man vielleicht nur auf ein bestimmtes Device filtert, oder liege ich da falsch?

Ich finde es falsch, wenn man via inform nur bestimmte Devices bestellt und dann trotzdem global mit dazu bekommt. Ich würde es besser finden, wenn man global als Frontend explizit mitbestellt.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

justme1968

mit dem event monitor hat das nichts zu tun. an dem ändert sich nichts. auch an inform ändert sich nichts.

es geht nur um fhemweb longpoll verbindungen.

im prinzip könnte man sagen das frontend muss die global events extra bestellen aber das problem mit dem explizit hinzufügen ist: manche frontends erlauben dem anwender den filter selber zu setzen. da der filter aber eine beliebig komplexe regex ist ist es nicht trivial bis fast unmöglich die regex automatisch um ein zusätzliches device zu erweitern.

zum anderen sind es im normalbetireb wirklich nur sehr wenige solche events.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Markus Bloch

Zitat von: justme1968 am 17 Januar 2016, 17:01:46
im prinzip könnte man sagen das frontend muss die global events extra bestellen aber das problem mit dem explizit hinzufügen ist: manche frontends erlauben dem anwender den filter selber zu setzen. da der filter aber eine beliebig komplexe regex ist ist es nicht trivial bis fast unmöglich die regex automatisch um ein zusätzliches device zu erweitern.

wieso?

$old_regexp = "^device[ABC]";

$new_regexp = "(?:^global|$old_regexp)";


Würde doch funktionieren?
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

herrmannj

Zitat von: Markus Bloch am 17 Januar 2016, 16:54:44
Damit würde im Event-Monitor aber immer global-Events auftauchen, obwohl man vielleicht nur auf ein bestimmtes Device filtert, oder liege ich da falsch?

Ich finde es falsch, wenn man via inform nur bestimmte Devices bestellt und dann trotzdem global mit dazu bekommt. Ich würde es besser finden, wenn man global als Frontend explizit mitbestellt.

Gruß
Markus

Den use-case von Andre kann ich bestätigen. In fronthem/smartVisu benötige und nutze ich das. Damit kann man zb ber Button ein ein notify deaktivieren (disable) und wenn das von wo anders passiert zieht der button den status passend mit.

vg
joerg

betateilchen

Zitat von: herrmannj am 17 Januar 2016, 17:11:07
Damit kann man zb ber Button ein ein notify deaktivieren (disable)

Das mache ich im InfoPanel schon lange. Wobei ich da nicht das Attribut disable auf 1 setze, sondern per toggle umschalte: attr <device> disable toggle Und im InfoPanel erscheint auf der "Schaltfläche" zusätzlich ein roter Punkt, wenn das notify enabled ist. Das funktioniert auch geräteübergreifend.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

@Markus Bloch: regex war ungenau ausgedrückt.

der filter muss ein ausdruck sein den devspec2array versteht. also z.b. auch TYPE=HUEDevice oder room=homebridge. diese ausdrücke lassen sich aber nicht erweitern. unter anderem weil devspec2array schon etwas im prinzip einfaches wie TYPE=HUEDevice|NAME=global nicht mehr versteht.

die alternative wäre eine zweite longpoll verbindung aufzumachen die dann nur für global da ist. das braucht aber unterm strich mehr ressourcen als die handvoll global events.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

herrmannj

Zitat von: betateilchen am 17 Januar 2016, 17:31:17
Das mache ich im InfoPanel schon lange. Wobei ich da nicht das Attribut disable auf 1 setze, sondern per toggle umschalte: attr <device> disable toggle Und im InfoPanel erscheint auf der "Schaltfläche" zusätzlich ein roter Punkt, wenn das notify enabled ist. Das funktioniert auch geräteübergreifend.
ja. Aber fremde clients erfahren das nur nach page refresh oder liege ich da falsch

vg
joerg

betateilchen

Zitat von: herrmannj am 17 Januar 2016, 17:37:07
ja. Aber fremde clients erfahren das nur nach page refresh oder liege ich da falsch

Wenn ich das notify vom Laptop aus disable, wird es auf dem Tablet sofort (ok - mit der longpoll-üblichen minimalen Verzögerung) geändert.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

das geht aber nur weil notify state auf disabled setzt und das ein readings ist über das du per longpoll informiert wirst.

wenn das setzen eines attributs keinen einfluss auf readings hat ist es per longpoill genau so unsichtbar wie alle anderen globalen events.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

rudolfkoenig

Ich fuehle mich unwohl beim Gedanken, jedem ungefragt die global Events zuzuschieben. Eigentlich vertrete ich die Meinung von Markus: wenn ein Client die Events sehen will, dann soll sie die bestellen. Ich sehe es aber ein, dass eine Erweiterung der devspec2array Parameter nicht trivial ist.

Vorschlag: der Client muss ein zusaetzliches Attribut "addglobal=1" beim Bestellen der longpolldaten (inform=...) setzen.

@Andre: verwendet "homebridge shim fuer siri" die von FHEMWEB generierte Seite/fhemweb.js, oder braucht sie nur die HTTP-Server-Faehigkeiten von FHEMWEB (habe keine Hintergedanken, nur als Info fuer mich :) ).

justme1968

addglobal=1 beim bestellen per inform ist ok. die idee finde ich gut.

es wird nur die http fähigkeit verwendet. das ganze ist ein node js modul das initial per jsonlist den aktuellen zustand holt und dann per var query = "/fhem.pl?XHR=1"+
              "&inform=type=status;filter="+filter+";since="+since+";fmt=JSON"+
              "&timestamp="+Date.now();
auf alle updates lauscht.

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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