[Gelöst] Dummy Toggle auf On/Off umsetzen

Begonnen von ShawnSteinfeger, 06 Januar 2018, 18:20:46

Vorheriges Thema - Nächstes Thema

ShawnSteinfeger

Hallo, ich muss jetzt doch mal in die Runde fragen.
Irgendwie finde ich wohl nicht die richtigen Suchbegriffe für mein Problem.

Und zwar habe ich einen Elektrokamin mit Funkfernbedienung (Infrarot), auf der es eine Power-Taste gibt.
Jetzt habe ich diesen Befehl über das Harmony Hub eingelernt.
Einen Dummy für den Toggle Befehl habe ich mir schon gebaut, er ist auch mit dem Wandschalter verbunden.
define wz_Kamin dummy
attr webCmd toggle

define wz_Kamin_toggle notify wz_Kamin:toggle set Harmony command FuegoKamin Power

define wz_KaminSchalter1_Btn_06 notify wz_Schalter1_Btn_06:Short.* set wz_Kamin toggle


Jetzt mein Problem, ich habe mir eine Sequenz für "Schlafen gehen" angelegt, welches im Wohnzimmer alle Lichter durch "set off" abschaltet.
Jetzt müsste praktisch der Kamin mit ausgeschaltet werden, aber nur wenn er an ist.
Ich würde also gern den Zustand (on oder off) in den Dummy schreiben lassen, wie mache ich das?
Der Dummy soll dann auch über WebCmd on:off geschaltet werden können.
Der Toggle Befehl dürfte praktisch nur einmal ausgelöst werden wenn der Status gewechselt wird.
Ich hoffe jemand kann mir ein wenig weiterhelfen.


KernSani

ein dummy ist ein dummy, weil man in ihn alles reinschreiben darf,

du kannst also einfach

set wz_kamin on (oder off) rein schreiben, eleganter ist's mit setlist (https://fhem.de/commandref.html#setList). Beim toggle musst du dann dafür sorgen, dass immer der richtige status im dummy gesetzt wird.

Grüße,

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

ShawnSteinfeger

Hallo Oli,
vielen Dank schonmal, aber vielleicht habe ich mich etwas unglücklich ausgedrückt.
Ich suche eher nach einem Lösungsansatz wie der toggle den on/off Wert rotiert.
Und das wenn z.B. der Kamin schon off ist und ein weiteres mal off getriggert wird, der Infrarotbefehl nicht nochmal gesendet wird, da der Kamin ja sonst wieder an geht.

Gruß Maik

betateilchen

In der Datei 99_Utils.pm gibt es die Funktion UntoggleDirect() die genau dafür vorgesehen ist


######## UntoggleDirect ###########################################
# What  : For devices paired directly, converts state 'toggle' into 'on' or 'off'
# Call  : { UntoggleDirect("myDevice") }
#         define untoggle_myDevice notify myDevice { UntoggleDirect("myDevice") }
# Source: http://www.fhemwiki.de/wiki/FS20_Toggle_Events_auf_On/Off_umsetzen

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

ShawnSteinfeger

Vielen Dank, das funktioniert schonmal super. Der state on/off rotiert jetz bei toggle.

Jetzt steige ich aber noch nicht dahinter, wie dann das notify für das auslösen des Infrarotsignals aussehen muss.
Warum geht das hier nicht:
define wz_Kamin_IR_Signal notify wz_Kamin:state:.* set Harmony command Logitech.Z-5500 KaminPower
Sollte hiermit nicht bei jeder Veränderung von state der set Befehl ausgeführt werden?
Oder sollte man ein DOIF für diesen Vorgang nutzen?

KernSani

nimm das "state:" weg, bei "state" events wird state nicht mitgesendet...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

ShawnSteinfeger

Das Problem ist aber, das auch toggle in den state geschrieben und darauf reagiert wird.
Dann kommt der tatsächliche Status wieder durcheinander wenn mal über on oder off geschaltet wird.

Bei den Internals steht bei STATE immer nur on oder off, kann ich auch darauf reagieren?

KernSani

Mach mal ein list von allen beteiligten Devices (außer der harmony),



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

ShawnSteinfeger

Internals:
   NAME       wz_Kamin
   NR         141
   STATE      off
   TYPE       dummy
   READINGS:
     2018-01-07 13:17:34   on             
     2018-01-07 18:52:24   state           off
Attributes:
   group      Licht
   room       Wohnzimmer
   setList    on off
   webCmd     on:off:toggle
##########
Internals:
   CFGFN     
   DEF        wz_Kamin:.* set Harmony command Logitech.Z-5500 KaminPower
   NAME       wz_Kamin_IR_Signal
   NOTIFYDEV  wz_Kamin
   NR         2567
   NTFY_ORDER 50-wz_Kamin_IR_Signal
   REGEXP     wz_Kamin:.*
   STATE      2018-01-07 18:52:24
   TYPE       notify
   READINGS:
     2018-01-07 18:10:08   state           active
Attributes:
##########
Internals:
   CFGFN     
   DEF        wz_Kamin {UntoggleDirect("wz_Kamin")}
   NAME       wz_Kamin_on_off_notify
   NOTIFYDEV  wz_Kamin
   NR         2464
   NTFY_ORDER 50-wz_Kamin_on_off_notify
   REGEXP     wz_Kamin
   STATE      2018-01-07 18:52:24
   TYPE       notify
   READINGS:
     2018-01-07 16:29:16   state           active
Attributes:

betateilchen

hast Du den oben angegebenen WIKI Eintrag gelesen?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ShawnSteinfeger

Ja schon, aber ich finde den Fehler bei mir nicht.
Dürfte denn mit diesem Programm im reading state nur on oder off auftauchen?
Und würde das notify nicht jedesmal auslösen wenn z.B. mehrmals hintereinander off gedrückt wird?
Auch die Reihenfolge der notifys bringt keine Besserung.

KernSani

ich habe das gerade mal nachgestellt... betateilchen darf mich gerne korrigieren, aber aber die Untoggle-Funktion (die ich auch nicht kannte) funktioniert hier meines Erachtens nicht... Meine vorgeschlagene Vorgehensweise wäre wie folgt:

* notify auf "toggle" des Wandschalters, state von wz_Kamin abfragen und jeweils umgekehrt setzen (also wenn "off", dann "on" und vice versa)
* event-on-change-reading für wz_kamin setzen, wz_kamin kann nur on und off (kein toggle)
* bestehendes notify um harmony hub zu triggern sollte funktionieren, da nur ein event ausgelöst wird, wenn wz_kamin sich ändert.

Grüße,

Oli

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

ShawnSteinfeger

Vielen Dank Oli, so schwer war es ja gar nicht.
Da hätte ich auch selber drauf kommen können, aber manchmal sieht man halt den Wald vor lauter Bäumen nicht  :)

Ich habe es jetzt so, ohne toggle-Befehl gelöst:

notify Wandschalter:
define n1_wz_Kamin_on_off notify wz_Schalter1_Btn_06:Short.* IF ([wz_Kamin] eq "on") (set wz_Kamin off) ELSE (set wz_Kamin on)

Im Device wz_Kamin habe ich noch ein event-on-change-reading erstellt:

attr event-on-change-reading .*

so werden nur Änderungen protokoliert

Gruß, Maik



KernSani

Freut mich (und freut mich, dass du  - mit einem Schubs in die richtige Richtung - selbst auf die Lösung gekommen bist) :-)

Schreibst du bei Gelegenheit dann noch vor das Subject des ersten Posts: [Gelöst]?

Ich hoffe es kommt dann auch mal Winterwetter bei dem der Kamin sich lohnt ;-)

Grüße,

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