Problem mit devstateIcon und Commands | Aktualisierung Icons nur über Reload

Begonnen von Bubbles71, 28 Dezember 2020, 13:46:51

Vorheriges Thema - Nächstes Thema

Bubbles71

Hallo,

ich habe aktuell zwei Probleme:
1) Kombination aus state => '%devStateIcon' und der Ausführung von commands in einer ReadingsGroup
2) Aktualisierung eines Icons nur über Reload de Seite (Floorplan)

Zu 1)
Die Devices in der ReadingsGroup sind HM Schalter, welche die Gartenbwässerung steuern. Damit die Gartenpumpe nicht stundenlang läuft, habe ich die Commands in der Readingsgroup so eingerichtet, dass ein on-for-timer ausgelöst wird. Parallel dazu läuft ein Timer, welcher mir die verbleibende Laufzeit anzeigt.

In meiner ersten ReadingsGoup funktioniert dies. Beet_dummy zeigt mir die restliche Zeit des Timers an. Das command {'state.off' => 'set $DEVICE on-for-timer 3600;; setreading $DEVICE startTimer 1', 'state.on' => 'set $DEVICE off'} setzt die notwendigen Befehle ab. Auszug aus der Readingsgroup:
define rg_bewaesserung readingsGroup Bew_Beet:state,state@Beet_dummy,<Beet>\
    Bew_Rasen:state,state@Rasen_dummy,<Rasen>\
    Bew_Seitenstreifen:state,state@Seite_dummy,<Seitenstreifen>\
    Gartenpumpe:state,state@Pumpe_dummy,<Gartenpumpe>
attr rg_bewaesserung commands {'state.off' => 'set $DEVICE on-for-timer 3600;; setreading $DEVICE startTimer 1', 'state.on' => 'set $DEVICE off'}
attr rg_bewaesserung valueIcon {'state.on' => 'lcars_rg_1a@02B8A9' , 'state.off' => 'lcars_rg_1a@90B0D6' , 'state.set_on' => 'lcars_rg_1a@F7CD9F' , 'state.set_off' => 'lcars_rg_1a@F7CD9F'}


Das Bild rg_bewässerung_v1 zeigt die Darstellung in der Readingsgroup. Drücke ich auf den linken Knopf, wird der on-for-timer Befehl abgesetzt und der Timer läuft. Alles gut.

Jetzt habe ich einen neue Darstellung erarbeitet. Hierbei erzeuge ich ein SVG Icon in der myUtils für das zu schaltende Device:
attr Bew_Beet devStateIcon{Bew_timer("Beet","Bew_Beet","state","#1B8B9A","#a0caec","Beet_dummy","state","60")}
Bild rg_bewässerung_v2 zeigt die neue Darstellung. Mein Ziel ist es, alles über dieses Icon zu steuern und zu visualisieren.
Die verbleibende Zeit wird mit über die Kästchen angezeigt (siehe rg_bewässerung_v2b). Dies funktioniert auch, wenn ich das Device über die erste Readingsgroup schalte. Der Timer startet und der zweiten neuen ReadingsGroup wird das Icon mit dem Timer Balken korrekt angezeigt.

Schalte ich aber über die neue ReadingsGroup funktioniert dies nicht.
Die ReadingsGroup ist in großen Teilen unverändert, insbesondere die Commands (Auszug aus der Definition):

define_bewaesserung_EG readingsGroup Bew_Beet:state\
   Bew_Rasen:state\
   Bew_Seitenstreifen:state\
   Gartenpumpe:state
attr rg_bewaesserung_EG commands {'state.off' => 'set $DEVICE on-for-timer 3600;; setreading $DEVICE startTimer 1', 'state.on' => 'set $DEVICE off'}
attr rg_bewaesserung_EG valueIcon { state => '%devStateIcon' }


Drücke ich nun auf den Schalter (nun das gesamte Icon), wird statt on-for-timer und der anderen in Commands definierten Befehle nur ein "on" abgesetzt, und bei erneutem Drücken ein "off".
Ein- und Ausschalten funktioniert also, nur werden die definierten Commands leider nicht genutzt.

zu 2) die Darstellung des Timers im Icon funktioniert sehr gut. Die einzelnen Kästchen werden dunkler mit Ablauf der Zeit, das letzte Helle Kästchen Blinkt. Sie schön aus ;-)
Aber für ein Update der Zeit muss ich die Seite neu Laden. Die Änderung des SVG Icons löst also kein Event aus. Gibt es eine Möglichkeit, dies einfach zu lösen?

LG,

Roland



Bubbles71

Hallo,

zu 1) habe ich nun eine Lösung gefunden. Bei der Generierung des Icons in der myUtils muss ich die Kommandos in ein a href selber packen:
return "<div><a href=\"/fhem?cmd.dummy=".$command."&XHR=1\">".$svg."</a></div>"
In der Funktion selber kann ich dann unterschiedliche Befehle für entsprechende "state" des Device definieren.
Schöner wäre es, die Funktionalität des ReadingsGroup atrr commands zu nutzen, aber so geht es auch. So muss ich eben einen Parameter mehr mit dem Befehl bzgl. den Befehlen an die Funktion in myUtils übergeben.

Jetzt fehlt mir nur noch eine Lösung für 2) um die Icons zu aktualisieren, wenn sie sich ändern / ändern sollen über den herunterzählenden Timer.
Bisher muss ich dazu einen manuellen Reload der Floorplan Seite im Browser auslösen.
Bei den SVG Plots gibt es ein attr refreshSVG. Lässt sich eine solche oder eben genau diese Funktion auch bei eigenen Icons, welche in einer myUtils erstellt werden, übernehmen?

LG,

Roland