[gelöst] Floorplan-Seite refresh per notify auslösen?

Begonnen von joginet, 30 März 2014, 16:40:07

Vorheriges Thema - Nächstes Thema

joginet

Hallo Forum,

ich habe gerade die Fernbedienung meiner Aussenlampe mit einem HM-SCI3-3-FM syncronisiert:

http://forum.fhem.de/index.php?topic=21826.msg152902#msg152902

Auf dem Floorplan habe ich einen dummy, der einen DECT200 schaltet (der wiederum bei Zustandsänderung eine Kippstufe schaltet)
und zusätzlich setzt der abgefragte Status des HM-SCI-3-FM (open/closed) in der Lampenleitung den Status dieses dummys per stateFormat auf on/off:

define Aussenlichtswitch dummy
attr Aussenlichtswitch room Aussenanlage
attr Aussenlichtswitch setList off on
define Aussenlichtswitch_an notify Aussenlichtswitch:on set Aussenbeleuchtung on
define Aussenlichtswitch_aus notify Aussenlichtswitch:off set Aussenbeleuchtung off

attr Aussenlicht_sync room Aussenanlage
define AussenlichtsyncAn notify Aussenlicht_sync:closed attr Aussenlichtswitch stateFormat on
define AussenlichtsyncAus notify Aussenlicht_sync:open attr Aussenlichtswitch stateFormat off


Das klappt wunderbar, das fp-icon tut was es soll - es ändert den Status jetzt auch, wenn ich meine Lampen über
die nicht in FHEM eingebundene JUNG-Fernbedienung einschalte.
Nur:
leider funktioniert das longpoll für dieses Icon (alle anderen gehen) jetzt nicht mehr ich muß jedesmal den browser refreshen.
Automatisches refresh (alle x Sekunden) möchte ich wenn möglich vermeiden.

Frage also:

1) kann ich per fhem befehl den Floorplan zum aktualisieren bewegen und diesen Befehl mit in die notifys packen?
Oder evt. einfach die fp-URL neu aufrufen mit GetHttpFile?? Das bekomme ich nicht hin, irgendwie stimmt meine Syntax nicht...
Probiert habe ich ausserdem schon  "attr WEB refresh x" im Notify. Im FHEM-Frontend geht es, im Notify nicht.

2) warum geht longpoll nicht? Hat das etwas mit dem stateFormat zu tun? Gibt es eine Alternative?

Gruß, Jochen
Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

UliM

Hi,
lies mal das Einteiger-pdf, die ersten beiden notify kannst Du zusammenfassen zu
define Aussenlichtswitch_an notify Aussenlichtswitch set Aussenbeleuchtung $EVENT

Was möchtest Du denn durch diese stateFormats erreichen? Wäre da nicht set oder setstate das richtigere?
Und ja, longpoll funzt nicht wg stateFormat.
=8-)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

joginet

Hmm - jetzt mal abgesehen von den notifys -
hab's gerade mal mit setstate probiert: auch hier geht kein longpoll.

ZitatWas möchtest Du denn durch diese stateFormats erreichen?

Nochmal die gegebene Situation und was ich erreichen will:
Ich schalte meine Aussenlampen über einen Jung Schaltaktor mit FB außerhalb von FHEM. Das soll/muß auch so bleiben.
Der JUNG-Aktor schaltet ein Stromstossrelais, welches die Lampen eion/ausschaltet.

Zusätzlich schalte ich die Lampen über meinen Floorplan mit einem Dect200.
Dieser schaltet bei Zustandsänderung eine Kippstufe, die ihrerseits einen Tastimpuls f.d. Stromstossschalter auslöst.
Klingt kompliziert - ist aber eigentlich ganz simpel  :)

Wenn jetzt z.B. über das fp-icon die Geschichte angeschaltet wird und über die JUNG-FB wieder aus, dann ist das icon natürlich nicht mehr "synchron". Und dafür habe ich am Ende der Lampenleitung einen jetzt HM-Sensor hängen - der meldet "closed" bei "Lampen an" und "open" bei Lampen aus"

ZitatWäre da nicht set oder setstate das richtigere?

Der Ausgelesene Zustand des HM-Sensors soll nur das fp-Icon verändern und darf keinesfalls einen 2. Set-Befehl geben
(weil: dann wieder Zustandsänderung am Dect 200 --> Lampen wieder aus)

Das hat mit stateFormat alles geklappt, bis auf das fehlende longpoll. Nach Browserrefresh ist da icon aktuell..
Daher die Frage, ob ich iregendwie einen Befehl zum "refresh" in das Notify packen kann - dann wäre alles erledigt...

Das Problem ist das Schalten bei Zustandsänderung des DECT200:
1x  "set Aussenbeleuchtung on" schaltet ein, nochmal "set Aussenbeleuchtung on" schaltet aus. Der Zustand on/off des DECT200 ist also eigentlich egal. Und für mich ist nur die Änderung des fp icon wichtig...


Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

UliM

setstate setzt den Status ohne ein Event auszulösen.
=8-)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

joginet

Hab's sicherheitshalber gerade nochmal probiert: auch setstate löst kein longpoll aus - nur nach browser-refresh ändert sich das icon...

Gruß, Jochen
Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

UliM

Stimmt, longpoll braucht nen Event.
Also musst Du Dir wohl nen dummy bauen, der den richtigen Status mit set verbraten kriegt und im FP diesen Anzeigen.
=8-)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

joginet

ZitatAlso musst Du Dir wohl nen dummy bauen, der den richtigen Status mit set verbraten kriegt und im FP diesen Anzeigen.

Hab ich ja - geht aber dann auch nicht per longpoll.
Wie ist das eigentlich mit longpollSVG ?

ZitatReloads an SVG weblink, if an event should modify its content. Since an exact determination of the affected events is too complicated, we need some help from the #FileLog definition in the .gplot file: the filter used there (second parameter) must either contain only the deviceName or have the form deviceName.event or deviceName.*. This is always the case when using the Plot editor. The SVG will be reloaded for any event triggered by this deviceName. Default is off.

Kann mir das helfen? Und wenn ja wie?  :)
Alternativ nochmal die Frage: wie kann ich ein refresh der floorplan URL per Befehl auslösen?
Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

UliM

Zitat von: joginet am 31 März 2014, 21:05:30
Alternativ nochmal die Frage: wie kann ich ein refresh der floorplan URL per Befehl auslösen?
Mit Bordmitteln gar nicht.
Es gibt entsprechende Funktionen in fhemweb.pm und floorplan.pm, such im Code nach 'redirectCmd'
Weiß aber nicht ob sich das auch von 'außerhalb' aufrufen lässt. Vmtl nicht.

Vll muss hier jemand anderes ran, ich versteh Dein Problem nicht.
Wenn ein dummy per set einen neuen Wert kriegt, dann wird das auch per longpoll aktualisiert.
Wenn du was mit stateFormat setzt, dann nicht. Mein Vorschlag war dafür einen weiteren dummy anzulegen, der immer mit set gesetzt wird. Wenn das für Dich nicht pAsst weiß ich auch nicht weiter.

Gruß Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

joginet

Hätte nicht gedacht, dass das so schwierig zu lösen ist... ::)

Zitatich versteh Dein Problem nicht.
Wenn ein dummy per set einen neuen Wert kriegt, dann wird das auch per longpoll aktualisiert.

Hab's gerade (sicherheitshalber) nochmal probiert:
set --> longpoll
setstate --> kein longpoll, icon wechselt nur nach browserrefresh

Hier nochmal mein dummy-Versuch:

define Aussenlichtswitch dummy
attr Aussenlichtswitch room Aussenanlage
attr Aussenlichtswitch setList off on
define Aussenlichtswitch_an notify Aussenlichtswitch:on set Aussenbeleuchtung on
define Aussenlichtswitch_aus notify Aussenlichtswitch:off set Aussenbeleuchtung off

attr Aussenlicht_sync room Aussenanlage
define AussenlichtsyncAn notify Aussenlicht_sync:closed setstate Aussenlichtswitch on
define AussenlichtsyncAus notify Aussenlicht_sync:open setstate Aussenlichtswitch off


Und aprospos reload:
Ich habe in diesem Thread http://forum.fhem.de/index.php?topic=19138.0
ein Beispiel für GetFileFromURL gefunden.
In meiner (grenzenlosen) Naivität habe ich gedacht, ich könnte damit auf die fp-URL verweisen und so einen reload auslösen.
Oder auf eine beliebige html Seite verweisen, die Ihrerseits wieder auf den fp "redirectet" und so das ganze neu lädt.

Dazu habe ich zu Testzwecken einen weiteren Dummy gebaut:
define browserrefresh_an notify browserrefresh:on {GetFileFromURL("http://meine_ip:8083/fhem/floorplan") }
Im log steht dann das hier:
ZitatCustomGetFileFromURL http://meine_ip:8083/fhem/floorplan: Select timeout/error:
Egal welche URL ich da eintrage..

Gruß, Jochen

Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

joginet

#9
Ich glaube ich bin ganz kurz vorm "Durchbruch"  :)

Beschränken wir uns doch mal bitte auf das automatisierte Browser-Reload - damit wäre ich schon sehr glücklich.

Ich mir habe laut dieser Anleitung:

http://www.fhemwiki.de/wiki/Browsersteuerung,_Seiten_per_JS_autom._aufrufen

eine fhemweb_pageswap.js und einen Pageswap-Dummy erstellt.

Dann habe ich mir selbst einen dummy erstellt und damit den pageswap-dummy veranlasst, den fp "Erdgeschoss" neu zu laden:

define browserrefresh dummy
attr browserrefresh setList off on
define browserrefresh_an notify browserrefresh:on set Dum_pageswap_D /fhem/floorplan/Erdgeschoss
define browserrefresh_aus notify browserrefresh:off set Dum_pageswap_D /fhem/floorplan/Erdgeschoss


Mit "set browserrefresh on/off" wird jetzt der fp neu geladen.(Hurrah !)

Jetzt zu meinem Sync:

Es wird ja der Status des HM-SCI-3-FM abgefragt und per notify eine Aktion aufgerufen.
Das sollte dann so aussehen:
1) setstate meines Aussenlicht-Dummys "Aussenlichtswitch" (on bzw. off)
2) danach "set browserrefresh on" weil longpoll nach setstate nicht geht

Ich habe es so versucht (der HM-SCI-3-FM heisst "Aussenlicht_sync"):

define AussenlichtsyncAn notify Aussenlicht_sync:closed setstate Aussenlichtswitch on;;
set browserrefresh on
define AussenlichtsyncAus notify Aussenlicht_sync:open setstate Aussenlichtswitch off;;
set browserrefresh off


Leider passiert nichts bei Änderung open/closed.
Im log steht:"Can't modify single ref constructor in scalar assignment at (eval 389) line 1, at EOF"

Aber: Der Befehl setstate alleine im notify geht.
Ich habe "browserrefresh" und testweise auch andere dummys ("radio_an") alleine im
notify probiert - keiner der dummys schaltet.
Wenn ich aber einen physikalisch vorhandenen Schalter  (z.B."Licht_Wohnzimmer1" ) ins notify packe,
dann geht das und reagiert auch auf open/close - nur dummys werden halt nicht angesprochen...

Warum nur ist das so??
In meiner Not habe ich dann mal testweise einen FS20 dummy gebaut (dachte, der tut so, als wäre er Hardware) -
aber auch der reagiert nicht.
Im webfrontend reagiert alles sofort. "set browserrefresh on", "setstate Aussenlichtswitch on", der FS20-Probedummy -
alles kein Problem - nur das blöde notify will nicht.
Es ist zum Mäusemelken - mir fehlt da nur noch der letzte Schritt aber ich komme einfach nicht auf die Lösung...

Gruß, Jochen





Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

joginet

#10
Aha:
Zitat2014.04.01 17:11:32 3: Func_pageswap_N return value: Can't modify single ref constructor in scalar assignment at (eval 466) line 1, at EOF
syntax error at (eval 466) line 1, near "\    if"
syntax error at (eval 466) line 1, at EOF

Betroffen sind nicht alle dummys, sondern nur dummys, die mein "set browserrefresh" enthalten - obwohl es funktioniert, gibt es eine Fehlermeldung. Kennt sich jemand aus?

Es müsste doch am notify für pageswap liegen, oder? Hab's einfach kopiert:

define Func_pageswap_N notify Dum_pageswap_D { \
\
  my $ps_Val = (Value("Dum_pageswap_D"));;\
\
   if ($ps_Val ne "none") { \
      fhem("define reset_pageswap at +00:00:01 set Dum_pageswap_D none");;\
   }\
}



Hier die fhemweb_pageswap.js so, wie sie im wiki steht:

// Datei: fhemweb_pageswap.js
// Von FHEM aus initiiertes Wechseln der angezeigten Seite:

function
FW_pageswapUpdateLine(d){

var id = d[0];                                  // id der Objekte auf der Seite
var val = d[1];                                 // Wert der Objekte auf der Seite

  if (id == "Dum_pageswap_D" && val != "none"){
     window.location.href = ""+val               // wenn Dummy Wert enthaelt, wechseln zu neuer Seite
                                                 // Variable "val" wird nicht geprueft und muss sinnvollen Wert enthalten
  }

}


FW_widgets['pageswap'] = {
  updateLine:FW_pageswapUpdateLine
};


Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

joginet

#11
Ok, es war ein Formatierungsfehler - hatte einfach aus dem wiki kopiert. So geht es ohne Fehlermeldung:

define Func_pageswap_N notify Dum_pageswap_D { my $ps_Val = (Value("Dum_pageswap_D"));;if ($ps_Val ne "none") { fhem("define reset_pageswap at +00:00:01 set Dum_pageswap_D none");; } }

Aber - nächstes Problem:

hier nochmal mein dummy "browserrefresh"

define browserrefresh dummy
attr browserrefresh setList off on
define browserrefresh_an notify browserrefresh:on set Dum_pageswap_D /fhem/floorplan/Erdgeschoss
define browserrefresh_aus notify browserrefresh:off set Dum_pageswap_D /fhem/floorplan/Erdgeschoss


Im webfrontend: "set browserrefresh on" --> floorplan aktualisiert
Im floorplan als icon angelegt und geklickt --> floorplan aktualisiert
Im notify angelegt --> floorplan aktualisiert nicht

define AussenlichtsyncAn notify Aussenlicht_sync:closed set browserrefresh on;;setstate Aussenlichtswitch on

Der setstate Befehl danach wird ausgeführt, nur der browserrefresh wird im notify einfach nicht ausgeführt...
Wenn ich sowas hier mache:
define AussenlichtsyncAn notify Aussenlicht_sync:closed set Lampe_Arbeitszimmer on;;setstate Aussenlichtswitch on

dann reagiert alles. Liegt also nicht am open/close state

Seufz - ich drehe mich im Kreis, es erschließt sich mir einfach nicht, wo der Fehler liegt, das log sagt jetzt, das alles ok ist.
kann mich evt. jemand erlösen (evt. bevor meine Frau mit Scheidung droht weil ich mit meinem Smarthome verwachsen bin?)  ;D

Nachtrag: habe mir gerade mal testweise einen pushmail-dummy ins notify gelegt. Auch der geht nicht - hat also auch nichts mit dem browserrefresh zu tun. Aber: echte Hardware anstatt dummy im notify schaltet sofort (set Lampe on)
Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

fiedel

Hi Jochen,

probier mal die Perl- Variante, also:

define AussenlichtsyncAn notify Aussenlicht_sync:closed {fhem("set browserrefresh on");;fhem("setstate Aussenlichtswitch on")}

Ist ja an sich ne simple Sache, aber manchmal ist das seltsam. Da geht was nicht, obwohl es gehen müsste.  ;)
Ich gucke dann meistens bei mir selber ab, oder versuche im Forum Beispiele zu finden, wo man sich was ableiten kann.
Bestimmte Sachen gehen z.B. im "notify", im "at" aber nicht, usw.

Freue mich übrigens, dass dir "pageswap" hilft.

Gruß

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

joginet

#13
Hallo Frank,

Perl-Variante hatte ich auch schon probiert - und soeben sicherheitshalber nochmal.
Der Effekt ist leider der gleiche. Das setstate wird ausgeführt, der dummy nicht. Wie gesagt:
würde ich anstelle des dummys "browserrefresh" einen HM-Schalter o.ä.
ansprechen, dann geht es. Auch andere dummys in diesem notify funktionieren nicht. Wie gesagt: nur im notify des HM-SCI-3-FM.

Hatte erst vermutet, es läge am state des HM-SCI-3-FM. Das Gerät hat einmal den state "open/closed" und ein reading "contact" (open/closed).
Ich hatte den Eindruck, das der Wert vom reading "contact" immer ein bischen früher kommt, als der state.

Also habe ich versucht mit dem reading statt mit dem state zu schalten - gleicher Effekt.
Außerdem - siehe oben - "set Lampe on" geht ja sofort mit "state"...

Im Logfile finde ich keinen Fehler - kann ich irgendwo detailliert sehen, was im notify schiefläuft?

ZitatFreue mich übrigens, dass dir "pageswap" hilft.

Damit ist alles bestens - das ist genau das, was ich gesucht habe - rennt wie verrückt  :)
Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

fiedel

#14
Und wenn du den "Zwischendummy" weglässt und direkt den pageswap- Dummy-set mit dem Seitenlink in das notify nimmst? Das wäre sowieso besser, weil direkter. Probier mal das. Ansonsten nimm mal den "Event Monitor" zu Hilfe (ganz unten im FHEM- Menü). Damit siehst du genau was ausgelöst wird, wenn du einen Befehl absetzt, oder wenn ein Ereignis eintritt usw..
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423