[gelöst] Problem beim Dimmer Widget mit Data-get/set

Begonnen von tante ju, 27 September 2017, 00:07:27

Vorheriges Thema - Nächstes Thema

tante ju

Hi,

Ich habe ein Device, welches zwei Reading hat: onoff und vstatus. Mit onoff wird der neue Status angefordert (gesetzt) und in vstatus steht dann letztlich der Status des Devices.

Diese Definition:
<div data-type="dimmer" class="top-narrow"
        data-device='Aussen.Terrasse.Group16'
        data-get="vstatus" data-get-on="1"
        data-get-off="0"
        data-set="onoff"
        data-set-on="1"
        data-set-off="0"
        data-dim="pct">
</div>


sollte also eigentlich dafür sorgen, daß eine Betätigung (tippen) das Device ein- oder ausschaltet und sich die Darstellung abhängig von vstatus ändert.

Was funktioniert:
Betätigung des Widgets sendet die on und off Befehle
Wenn ich extern den Status verändere (also sich vstatus ändert), dann ändert sich die Darstellung.

ABER: Wenn ich das Widget antippe (und z.B. on gesendet wird), dann ändert sich immer die Darstellung, unabhängig vom vstatus. Das führt aber dazu, daß das Device als "Ein" angezeigt wird, obwohl es nie den "on" Befehl bestätigt hat. Wird jetzt wieder das Widget betätigt, dann wird ja off gesendet, obwohl on richtig wäre (das Device ist ja noch nicht eingeschaltet).

Sieht für mich wie ein Fehler aus.

setstate

Was wäre denn deiner Meinung nach besser:
- der Schalter reagiert visuell nicht auf die Betätigung, sendet aber trotzdem das Umschalten?
- oder: der Schaltet bei Betätigung um und ein Timeout-Timer wartet 5 Sekunden? Wenn bis dahin kein Bestätigung des Zustandes gekommen ist, wird der alte Zustand wieder hergestellt?

tante ju

Zitat von: setstate am 27 September 2017, 07:29:19
Was wäre denn deiner Meinung nach besser:
- der Schalter reagiert visuell nicht auf die Betätigung, sendet aber trotzdem das Umschalten?
- oder: der Schaltet bei Betätigung um und ein Timeout-Timer wartet 5 Sekunden? Wenn bis dahin kein Bestätigung des Zustandes gekommen ist, wird der alte Zustand wieder hergestellt?

Hab es jetzt mehrmals durchgespielt und glaube, der zweite Vorschlag wäre besser. Eventuell mit einem konfigurierbaren Timeout.

Grund:
Wenn ein Device etwas länger zum Umschalten benötigt (z.B. ein Schieber), dann sollte dennoch die Aktion angezeigt werden. Erst wenn sicher ist, daß dieses Umschalten, aus welchem Grund auch immer, fehlerhaft war, sollte er wieder auf den ursprünglichen Zustand zurückgehen. Eine andere Anwendung: Ich überlege noch, wie ich ein notify bauen kann, welches feststellt, daß so ein Schaltbefehl nicht akzeptiert wurde und dann ggf einen weiteren sendet. Das Skript muß ja auch erstmal eine Sekunde oder so warten. Wäre unschön, wenn in der Zeit der Schalter schon zurücktoggelt und jemand da wieder drauftippt.

Ach ja: Das Verhalten ist bei dimmer und switch gleich :)

setstate

ich habe das mal eingebaut.

data-timeout Zeit in Millisekunden, bis der alte Zustand wieder wiederhergestellt wird (default=0 [disabled])

So kann man das testen: Mit data-set="gibtesnicht" läuft der Befehl ins Leere, es erfolgt kein Feedback per Longpoll und nach 2 Sekunden (data-timeout=2000) erfolgt das Zurücksetzen des Schalters.

data-timeout=2000 data-set="gibtesnicht"

tante ju

Zitat von: setstate am 27 September 2017, 21:18:51
ich habe das mal eingebaut.

data-timeout Zeit in Millisekunden, bis der alte Zustand wieder wiederhergestellt wird (default=0 [disabled])

So kann man das testen: Mit data-set="gibtesnicht" läuft der Befehl ins Leere, es erfolgt kein Feedback per Longpoll und nach 2 Sekunden (data-timeout=2000) erfolgt das Zurücksetzen des Schalters.

data-timeout=2000 data-set="gibtesnicht"

Super. Funktioniert. Danke!

Ein kleiner Schönheitsfehler. Wenn man Dimmer nimmt und einschaltet, dann wird beim einschalten der Dim-Bar und das Symbol hell, aber nach der Zeit nur das Symbol wieder dunkel. Der Dim-Bar bleibt hell.
Aber damit kann ich leben, stört nicht weiter.

Standarduser

#5
Zitat von: setstate am 27 September 2017, 21:18:51
ich habe das mal eingebaut.

data-timeout Zeit in Millisekunden, bis der alte Zustand wieder wiederhergestellt wird (default=0 [disabled])

So kann man das testen: Mit data-set="gibtesnicht" läuft der Befehl ins Leere, es erfolgt kein Feedback per Longpoll und nach 2 Sekunden (data-timeout=2000) erfolgt das Zurücksetzen des Schalters.

data-timeout=2000 data-set="gibtesnicht"

Könnten wir das auch beim Slider-Widget bekommen?

Und könnte nochmal jemand prüfen, ob ich das richtig verstanden/erklärt habe?
https://wiki.fhem.de/wiki/FTUI_Widget_Dimmer#Hinweise

setstate

das data-timeout ist nur für die on-off (toggle) Funktion von switch und dimmer, nicht fürs Dimmen.

Das Problem: Am Switch wird eingeschaltet, der Knopf wird hell und ON an FHEM gesendet. Aber die Hardware reagiert nicht, geht nicht auf ON.
Wenn sie das machen würde, käme auch eine Bestätigung per Longpoll. Mit data-timeout wird die eingestellte Zeit gewartet und bei Ausbleiben der Bestätigung fällt der Switch zum ursprünglichen Status zurück, geht also wieder aus. Nur wenn innerhalb der x Sekunden das Longpoll-Event kommt, wird der Fallbacktimer gestoppt.


Standarduser

Achso, naja, dann muss ich das normal überarbeiten.

Aber meine Variante gefällt mir auch gut [emoji6]

texel


Hi,

habe soeben das data-timeout=2000 ausprobiert. Hintergrund war, dass der Schalter flackert, wenn man ihn drückt.
Allerdings scheint das Flag nichts zu bewirken. Egal auf welchen Wert ich ihn setze, es flackert nach wie vor.

Hier mein Code:

<div data-type="switch" data-device='HM_Bewaesserung_Garten_Sicherheitsventil' data-timeout=4000 data-icon="oa-sani_water_tap" data-on-background-color="#0075FF" data-off-background-color="#444444" data-off-color="#000000" style="margin-top:0px margin-bottom:0px"></div>


Viele Grüße,

Texel