(gelöst) Serienschalter mit Aktor soll Aktor in Wechselschaltung schalten

Begonnen von lestat.le, 03 April 2017, 09:18:06

Vorheriges Thema - Nächstes Thema

lestat.le

Hallo,

ich habe folgendes vor und wollte es mit DOIF realisieren.
Ich habe einen Schalter mit einem Fibaro 223. Der Kanal 1 hat allerdings keinen Verbraucher dran. Es wird nur der Zustand des 223 geschaltet (hier on und off). Das Event schaltet dann einen weiteren Aktor in einer Wechselschaltung mit Verbraucher.
Ich möchte nun unabhängig von der Schalterstellung den Verbraucher schalten. Also egal ob der Schalter den Fibaro 223 "on" oder "off" schaltet, soll der Verbraucher in den jeweiligen anderen Zustand gesetzt werden (Lampe an oder aus).

Ich habe schon seit Tagen jede Menge probiert aber ich bekomme es nicht hin. Problem ist das ich im DOIF 4 Zweige habe die sich dann gegenseitig ablösen, da sich die Zustände ändern.
Mit dem folgenden Code hatte ich begonnen. Da wird zwar klar was ich machen möchte aber eben auch das sich die Zweige gegenseitig schalten.

Internals:
   DEF        ([?Licht_indoor_FlurEG_AktorFlurEG01] eq "on" and [Licht_indoor_FlurEG_AktorFlurOG01] eq "on") (set Licht_indoor_FlurEG_AktorFlurEG01 off) DOELSEIF ([?Licht_indoor_FlurEG_AktorFlurEG01] eq "on" and [Licht_indoor_FlurEG_AktorFlurOG01] eq "off") (set Licht_indoor_FlurEG_AktorFlurEG01 off) DOELSEIF ([?Licht_indoor_FlurEG_AktorFlurEG01] eq "off" and [Licht_indoor_FlurEG_AktorFlurOG01] eq "on") (set Licht_indoor_FlurEG_AktorFlurEG01 on) DOELSEIF ([?Licht_indoor_FlurEG_AktorFlurEG01] eq "off" and [Licht_indoor_FlurEG_AktorFlurOG01] eq "off") (set Licht_indoor_FlurEG_AktorFlurEG01 on)
   NAME       Licht_indoor_FlurEG_AktorFlurOG02_steuert_Licht_indoor_FlurEG_AktorFlurEG01
   NR         422
   NTFY_ORDER 50-Licht_indoor_FlurEG_AktorFlurOG02_steuert_Licht_indoor_FlurEG_AktorFlurEG01
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2017-04-03 08:31:07   Device          Licht_indoor_FlurEG_AktorFlurOG01
     2017-04-03 07:59:48   cmd             2
     2017-04-03 07:59:48   cmd_event       Licht_indoor_FlurEG_AktorFlurOG01
     2017-04-03 07:59:48   cmd_nr          2
     2017-04-03 08:31:07   e_Licht_indoor_FlurEG_AktorFlurOG01_STATE off
     2017-04-03 00:34:03   mode            enable
     2017-04-03 07:59:48   state           cmd_2
     2017-04-03 08:27:15   waitsame        cmd_3
   Condition:
     0          InternalDoIf($hash,'Licht_indoor_FlurEG_AktorFlurEG01','STATE') eq "on" and InternalDoIf($hash,'Licht_indoor_FlurEG_AktorFlurOG01','STATE') eq "on"
     1          InternalDoIf($hash,'Licht_indoor_FlurEG_AktorFlurEG01','STATE') eq "on" and InternalDoIf($hash,'Licht_indoor_FlurEG_AktorFlurOG01','STATE') eq "off"
     2          InternalDoIf($hash,'Licht_indoor_FlurEG_AktorFlurEG01','STATE') eq "off" and InternalDoIf($hash,'Licht_indoor_FlurEG_AktorFlurOG01','STATE') eq "on"
     3          InternalDoIf($hash,'Licht_indoor_FlurEG_AktorFlurEG01','STATE') eq "off" and InternalDoIf($hash,'Licht_indoor_FlurEG_AktorFlurOG01','STATE') eq "off"
   Devices:
     0           Licht_indoor_FlurEG_AktorFlurOG01
     1           Licht_indoor_FlurEG_AktorFlurOG01
     2           Licht_indoor_FlurEG_AktorFlurOG01
     3           Licht_indoor_FlurEG_AktorFlurOG01
     all         Licht_indoor_FlurEG_AktorFlurOG01
   Do:
     0:
       0          set Licht_indoor_FlurEG_AktorFlurEG01 off
     1:
       0          set Licht_indoor_FlurEG_AktorFlurEG01 off
     2:
       0          set Licht_indoor_FlurEG_AktorFlurEG01 on
     3:
       0          set Licht_indoor_FlurEG_AktorFlurEG01 on
     4:
   Helper:
     event      power:  0 W
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Licht_indoor_FlurEG_AktorFlurOG01
     timerevent power:  0 W
     triggerDev Licht_indoor_FlurEG_AktorFlurOG01
     timerevents:
       power:  0 W
     timereventsState:
       power:  0 W
     triggerEvents:
       power:  0 W
     triggerEventsState:
       power:  0 W
   Internals:
     0           Licht_indoor_FlurEG_AktorFlurEG01:STATE Licht_indoor_FlurEG_AktorFlurOG01:STATE
     1           Licht_indoor_FlurEG_AktorFlurEG01:STATE Licht_indoor_FlurEG_AktorFlurOG01:STATE
     2           Licht_indoor_FlurEG_AktorFlurEG01:STATE Licht_indoor_FlurEG_AktorFlurOG01:STATE
     3           Licht_indoor_FlurEG_AktorFlurEG01:STATE Licht_indoor_FlurEG_AktorFlurOG01:STATE
     all         Licht_indoor_FlurEG_AktorFlurEG01:STATE Licht_indoor_FlurEG_AktorFlurOG01:STATE
   Itimer:
   Readings:
   Regexp:
     0:
     1:
     2:
     3:
     All:
   State:
   Trigger:
Attributes:
   group      Licht Innen Aktor FlurOG
   room       Licht
   waitsame   2:2:2:2


Licht_indoor_FlurEG_AktorFlurEG01 = ist der Aktor welcher die  Lampe /Verbraucher am Wechselschalters schaltet und nur zeigen soll wie ihr Zustand ist bzw. dann "on" oder "off" geschaltet werden soll je nach DOIF Zweig
Licht_indoor_FlurEG_AktorFlurOG01 = Ist der Aktor der durch den Schalter geschaltet wird und dann den Aktor (Licht_indoor_FlurEG_AktorFlurEG01) in der Wechselschaltung mit Verbraucher schalten soll


Es müsste das DOIF nicht erneut nachschauen ob ein Event wahr oder falsch ist, nach dem es einmal sein cmd geändert hat. Erst nach einem aktiven ändern eines Readings müsste es erneut nachsehen welcher Zweig wahr ist. Ich glaube das dies so nicht vorgesehen ist. Das Attribute waitsame habe ich aus diesem Grund drin, da es nach meinem Verständis die Abfrage aussetzten würde. Macht es aber nicht.

Viele Kniffe aus unendlichen Einträgen habe probiert aber leider ohne Erfolg bzw. war es für mioch nicht mehr nachvollziehbar. Mein Fhem wächst und wächst. In zwei Jahren weiß ich dann nicht mehr was ich da mit copy und paste reingebaut habe ;)

Ich könnte auch einfach einen Taster verbauen, dann wäre es ok, allerdings handelt es sich bei dem Schalter um einen Doppelwechselschalter (Kanal 2 schaltet eine andere Lampe) den ich gerade gekauft habe. Dachte es muss auch so gehen.

Hat jemand eine Idee oder sowas schon gebaut.

Ich danke euch und VG Andreas

Otto123

Hallo Andreas,

ohne ansehen Deines DOIF, nur mit der Beschreibung Deines Problems, würde ich die Lösung "einfach" mit mit einem notify auf den "Schalter den Fibaro 223" ohne Filter auf den Zustand triggern und ein Toggle an den "Verbraucher" senden.

Ich bin mir noch nicht ganz sicher ob ich Deine Bezeichnungen verstanden habe, deswegen habe ich das mal symbolisch ausgedrückt.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

lestat.le

Hallo Otto,

geb dir recht. Notify war auch mein erster Gedanke und hatte ich schon probiert. Wahrscheinlich aber nicht gut programmiert und deshalb verworfen. Ich mach fast alles mit DOIF. Ist für mich am besten zu verstehen. Mit Notify hab ich noch kaum was gemacht. Da ich jetzt den Ehrgeiz hatte es mit DOIF hinzubekommen hatte ich das Notify komplett vergessen. Ich werd es nochmal angehen. Könnte übersichtlicher werden.

VG
Andreas

Per

1. Was notify kann, kannst du auch mit DOIF machen.
2. kannst du einfach die Logik des Wechselschalters nachbilden:
([Schalter01] eq [Schalter02])(set Licht on)
DOELSEIF (set Licht off)

lestat.le

Hallo Per,

das versteh ich leider nicht.
Was ist mit Schalter01 und Schalter02 gemeint?
Ich habe ja nur einen Aktor in der Wechselschaltung. Der andere Aktor bekommt nur durch den Schalter ein on oder off gesetzt. Dieser Status soll dann den Aktor in der Wechselschaltung schalten. Bin mit dem Thema jetzt auch echt verklopst ;(

Ich hab mich mal am Notify versucht. Aber im Prinzip bekomm ich da selbiges Ergebnis. Die Lampe geht nach dem Schaltbefehl dann nochmal in einen anderen Status. Also Lampe an und dann schaltet Sie wieder aus.
Notify
Licht_indoor_FlurEG_AktorFlurOG01.* IF ([Licht_indoor_FlurEG_AktorFlurEG01] eq "on") (set Licht_indoor_FlurEG_AktorFlurEG01 off) ELSE (set Licht_indoor_FlurEG_AktorFlurEG01 on)

Otto123

Hi,
schau Dir bitte im Eventmonitor an was passiert, welche Events liefert Licht_indoor_FlurEG_AktorFlurOG01 ?
Einen pro Schaltvorgang? Mehrere? Unterschiedliche?

Dein Licht_indoor_FlurEG_AktorFlurEG01 kann kein toggle?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ellert

Zitat von: lestat.le am 03 April 2017, 15:08:05
Hallo Per,

das versteh ich leider nicht.
Was ist mit Schalter01 und Schalter02 gemeint?
Ich habe ja nur einen Aktor in der Wechselschaltung. Der andere Aktor bekommt nur durch den Schalter ein on oder off gesetzt. Dieser Status soll dann den Aktor in der Wechselschaltung schalten. Bin mit dem Thema jetzt auch echt verklopst ;(

Ich hab mich mal am Notify versucht. Aber im Prinzip bekomm ich da selbiges Ergebnis. Die Lampe geht nach dem Schaltbefehl dann nochmal in einen anderen Status. Also Lampe an und dann schaltet Sie wieder aus.
Notify
Licht_indoor_FlurEG_AktorFlurOG01.* IF ([Licht_indoor_FlurEG_AktorFlurEG01] eq "on") (set Licht_indoor_FlurEG_AktorFlurEG01 off) ELSE (set Licht_indoor_FlurEG_AktorFlurEG01 on)

ZitatIch hab mich mal am Notify versucht. Aber im Prinzip bekomm ich da selbiges Ergebnis. Die Lampe geht nach dem Schaltbefehl dann nochmal in einen anderen Status. Also Lampe an und dann schaltet Sie wieder aus.

Das sieht so aus, als würden nacheinander 2 Events auslösen, das Erste schaltet ein, das zweite wieder aus.

Welche Events sind bei einem Schaltvorgang im Eventmonitor zusehen?

lestat.le

Hallo Otto,

doch er kann toggle aber wenn ich "set  Licht_indoor_FlurEG_AktorFlurEG01 toggle" setze dann blitz einmal kurz die Lampe. Evtl. muss ich da was am Aktor anders einstellen.
Es könnte sein dass das Notify so doch funktioniert. Ich schalte wie wild alle Möglichkeiten und da geht bei bestimmter Konstellation die Lampe an und gleich wieder aus. Allerdings bin ich nicht sicher ob ich das in der Praxis am Schalter auch so provozieren kann. Ich muss das mal in Ruhe testen ob es doch so geht.

VG Andreas

lestat.le

Also es schaltet tatsächlich ab und an ein zweitesmal.
Ich kann aber keine Logik erkennen.

Eventmonitor:

2017-04-03 15:35:36 ZWave Licht_indoor_FlurEG_AktorFlurOG01 on
2017-04-03 15:35:36 ZWave Licht_indoor_FlurEG_AktorFlurOG01 reportedState: on
2017-04-03 15:35:37 DUOFERN Licht_indoor_FlurEG_AktorFlurEG01 on
2017-04-03 15:35:38 ZWave Licht_indoor_FlurEG_AktorFlurOG01 power:  0 W
2017-04-03 15:35:40 DUOFERN Licht_indoor_FlurEG_AktorFlurEG01 off


Also der Aktor  "Licht_indoor_FlurEG_AktorFlurEG01" schaltet einfach ein zweitesmal nachdem sich "Licht_indoor_FlurEG_AktorFlurOG01" mit dem Reading power gemeldet hat.
Power ist dort immer 0W da kein Verbraucher dran hängt. Eben nur der Habtische Schalter

Otto123

Das ist ein Schaltvorgang? das letzte off gehört dazu?
Naja das sind mindestens 4 Events, klar das er kurz an und wieder aus geht. Es gilt jetzt den Event zu finden der einmalig pro Schaltvorgang ist.
Das notify dazu kannst Du direkt im Eventmonitor erzeugen  8)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

lestat.le

Sorry, nee da hab ich noch den ungewollten zweiten Schaltvorgang mit gelistet.
Also eigentlich ist der Schaltvorgang so:
2017-04-03 15:35:36 ZWave Licht_indoor_FlurEG_AktorFlurOG01 on
2017-04-03 15:35:36 ZWave Licht_indoor_FlurEG_AktorFlurOG01 reportedState: on
2017-04-03 15:35:37 DUOFERN Licht_indoor_FlurEG_AktorFlurEG01 on

danach wurde ungewollt das geschaltet:2017-04-03 15:35:38 ZWave Licht_indoor_FlurEG_AktorFlurOG01 power:  0 W
2017-04-03 15:35:40 DUOFERN Licht_indoor_FlurEG_AktorFlurEG01 off


interessanterweise hatte ich es auch schon so:
ZWave Licht_indoor_FlurEG_AktorFlurOG01 on
ZWave Licht_indoor_FlurEG_AktorFlurOG01 reportedState: on
ZWave Licht_indoor_FlurEG_AktorFlurOG01 power:  0 W
DUOFERN Licht_indoor_FlurEG_AktorFlurEG01 on

hier kam es dann nicht zum zweiten Vorgang "DUOFERN Licht_indoor_FlurEG_AktorFlurEG01 off"

Kann also sein, das wenn der ZWave zeitlich nach dem Schalten des Duofern noch Power Status schickt, der Duofern nochmal getriggert wird.
Kann ich das Notify so gestalten das nur der "state" Auslöser ist?

Ich hatte es so probiert:
Licht_indoor_FlurEG_AktorFlurOG01:state.* IF ([Licht_indoor_FlurEG_AktorFlurEG01] eq "on") (set Licht_indoor_FlurEG_AktorFlurEG01 off) ELSE (set Licht_indoor_FlurEG_AktorFlurEG01 on)
Aber da wird dann gar nix mehr geschaltet.

Es bin ich hier bei DOIF und rede die ganze Zeit über Notify. Bitte nicht böse sein. DOIF ist für die Sache auch noch interessant.

VG
Andreas

Ellert

(["^Licht_indoor_FlurEG_AktorFlur(E|O)G01$:^reportedState: on$"])
   (
     IF ([Licht_indoor_FlurEG_AktorFlurEG01] eq "on")
           (set Licht_indoor_FlurEG_AktorFlurEG01 off)
     ELSE
           (set Licht_indoor_FlurEG_AktorFlurEG01 on)
    )


und das Attribut
do always

So triggerst Du auf ein einmaliges Ereignis eines Schaltvorganges.

Was mich wundert ist, dass Du 2 Geräte mit gleichen Namen hast, einmal TYPE ZWave
Licht_indoor_FlurEG_AktorFlurEG01 als Schalter
und einmal TYPE DUOFERN
Licht_indoor_FlurEG_AktorFlurEG01 als Aktor.

Otto123

Zitat
Was mich wundert ist, dass Du 2 Geräte mit gleichen Namen hast, einmal TYPE ZWave
Licht_indoor_FlurEG_AktorFlurEG01 als Schalter
und einmal TYPE DUOFERN
Licht_indoor_FlurEG_AktorFlurEG01 als Aktor.
Das verwundert mich auch :o

@Andreas Du schreibst ich habe es so probiert: Licht_indoor_FlurEG_AktorFlurOG01:state.* - wie kommst Du denn darauf? Hast Du irgendeinen Event wo so etwas auch nur ähnlich drin steht?
Hast Du schon verstanden, wie das mit dem Event und dem Trigger funktioniert?
Hast Du Dir das im Eventmonitor mal mit der Erzeugung von notify & co angeschaut?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

lestat.le

Der Zwave und der Duofern haben verschiedene Namen. Aber schnell zu verwechseln.

TYPE ZWave Licht_indoor_FlurEG_AktorFlurOG01
TYPE DUOFERN Licht_indoor_FlurEG_AktorFlurEG01

@ Ellert
Deinen Code probiere ich dann gleich noch aus.
@ Otto
Ich habe ja am Anfang schon erwähnt das ich notify versucht habe zu meiden und wo es ging DOIF benutzt. Ich habe heute noch etwas gelesen um mit notify warm zu werden. Aber das dauert bis ich es verstehe.
Ich bin auf Licht_indoor_FlurEG_AktorFlurOG01:state.* gekommen, weil es mir bei RegexpPart als Auswahl geboten wurde. Ich hatte es mir nur vorgestellt dass das was bewirken könnte. Ich kann ganz ehrlich sagen das ich keinen Schimmer habe wie es mit den Events und Trigger funktioniert. Da muss ich mich erst einlesen und Beispiele versuchen nachzuvollziehen.

Ich hatte mir das mit dem EventMonitor vorgenommen und angeschaut aber dann beim setzen gibt es Probeme mit dem EventMonitor. Ich bekomme eine Fehlermeldung:console.js line 81:
SyntaxError: An invalid or illegal string was specified

Wollte jetzt nicht die nächste Baustelle aufmachen aber hatte noch keine Zeit dafür.

Danke das Ihr hier mit mir auf Forschung geht. Wenn ich überlege was ich alles schon in Fhem realisiert habe, dann hätte ich nicht gedacht das dieses Schalterkonstrukt so detailreich wird.

VG Andreas

Otto123

#14
Ich frage ja deswegen, ist ja nicht böse gemeint. Ich kann nicht wissen was Du weißt :)

Andreas, das mit dem angesprochenen Trigger hat nichts mit notify zu tun. Das ist allgemein regEx. Die Vorgehensweise ist immer gleich: Eventmonitor schauen, Event auswählen, regEx machen.

Was Du Dir merken musst ist dies:
ZitatHinweise:
<Suchmuster> ist entweder der Name des auslösenden ("triggernden") Gerätes oder die Kombination aus Gerät und auslösendem Ereignis (Event) Gerätename:Event.
Das <Suchmuster> muss exakt (!) entweder dem Gerätenamen entsprechen oder der Zusammenfügung aus Gerätename:Event. Events lassen sich mit "inform" in Telnet oder durch Beobachtung des "Event-Monitors" in FHEMWEB ermitteln.

Nehmen wir Deinen Event: Licht_indoor_FlurEG_AktorFlurOG01 on
Dann ist Gerätename:Event -> Licht_indoor_FlurEG_AktorFlurOG01:on
Fertig.  8) Hinweis: Der Doppelpunkt zwischen Gerät und Event wird von Dir geschrieben. Weiter hinten wird kein Doppelpunkt als "Trenner" verwendet, da steht nur noch der Event. Der kann auch Doppelpunkte enthalten.

Wenn Du jetzt toggle machen kannst wäre Dein notify:
define nty_bla notify Licht_indoor_FlurEG_AktorFlurOG01:(on|off) set <Licht> toggle

Der regEx Wizard kann einiges, aber nicht immer alles  ;)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz