Wechselschaltung in Code erstellen

Begonnen von Deckoffizier, 04 Dezember 2025, 11:34:43

Vorheriges Thema - Nächstes Thema

Deckoffizier

Hallo in die Runde,

bin langsam am verzweifeln, etliche Stunden probiere ich eine Wechselschaltung mit DOIF,notify
zu erstellen. Frage mich ob mein hohes Alter Schuld ist oder ich irgend etwas grundlegendes übersehe.

Zur Sache, am Garagentor ist ein 1Wire Schalter  der mir das Reading sensed.A mit Wert 1 oder 0 liefert.
Am anderen Ende der Garage ist auch ein 1Wire Schalter der mir auch Reading sensed.A mit Wert 1 oder 0 liefert je nach Schalterstellung.
In meinen Augen könnte ein Problem das Pollen alle 3s bei 1Wire sein, aber der state bleibt aber nach jeden schalten entsprechend stehen also ändert sich entsprechend.

Frage mich, muss ich den Zustand(state) der Lampe on oder off auswerten geht, es auch nur über die Schalter alleine, auf event der Schalter reagieren oder den Zustand der Schalter auswerten usw. ?
Brauche ich mehrere DOIFs notifys etc.
Hier mal ein Versuch von vielen mit DOIF

([1WSchalter_ga_tuer:sensed.A:d]  or [1WSchalter_ga_tor:sensed.A:d])
(IF ([Ga_Licht_Tor:state] eq "off") (set Ga_Licht_Tor on))
DOELSE
(set Ga_Licht_Tor off)
Möchte auch wie bei einer klassischen Wechselschaltung am selben Schalter das Licht an bzw. ausschalten.

Mir gehen leider nach suchen im FHEM Forum, KI suche etc. die Ideen aus,
kann mir jemand bitte unter die Arme greifen.

Mit freundlichen Gruß
Hans-Jürgen
FHEM 5.8 auf "yakkaroo Emu A1FL.1" mit CUL 868MHz, SIGNALduino,2 1Wire USB Busmaster, diverse 1 Wire Sensoren,Landroid,Aeotec USB Dongle Z-Wave Plus

betateilchen

#1
Bauchgefühl sagt mir, dass das großgeschriebene IF an dieser Stelle falsch sein könnte.

Das IF ist ein FHEM Befehl und wahrscheinlich gar nicht das, was Du an der Stelle wirklich haben möchtest.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Damian

Was verstehst du unter Wechselschaltung?

Für mich bedeutet Wechselschaltung, dass ich an einer Stelle einschalten kann und dann an einer anderen Stelle ausschalten kann, unabhängig vom Zustand des jeweiligen Schalters.

Was du programmiert hast, ist: Sobald ein Schalter auf on geht, dann soll Licht einschalten, wenn es nicht an war. Wolltest du das?


Pseudocode für Wechselschaltung lt. ChatGPT:

if schalter1_geaendert oder schalter2_geaendert:
    lampe = nicht(lampe)

"geändert" bedeutet irgendein Event und keine bestimmte Zustandsabfrage, also eher:

([1WSchalter_ga_tuer:"sensed.A"]  or [1WSchalter_ga_tor:"sensed.A"])
  (IF ([Ga_Licht_Tor:state] eq "off") (set Ga_Licht_Tor on) ELSE (set Ga_Licht_Tor off))

Attr do always
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

betateilchen

Zitatif schalter1_geaendert oder schalter2_geaendert:
    lampe = nicht(lampe)

define n_wechsel notify 1WSchalter_ga_(tuer|tor):sensed.* set Ga_Licht_Tor toggle
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Deckoffizier

Hallo Damian,
tut mir Leid!
Macht leider nur Disco paar Sekunden an ,dann aus und so on.
Hätte klassische Wechselschaltung besser definieren sollen.
Meinte wie in der Hausinstallation, wenn Dein Elektriker nicht wer weiß wie gepfuscht hat,
kannst Du an dem Schalter an dem Du das Licht eingeschaltet hast auch wieder aus schalten,
ohne von A nach B zu laufen.
Weiß als gelernter Elektriker wovon ich rede, sorry ist in meinem Haus auch so.

Hallo betateilchen,

habe das Notify schnell wieder gelöscht.
LED Strahler glimmt kurz auf und geht wieder aus mit ständiger Wiederholung.
Oder Strahler bleibt paar Sekunden an und geht wieder aus.

Von jedem Schalter aus einzeln zu schalten in meinen Anfangsversuchen hat soweit funktioniert,
also Hardware scheint somit in Ordnung nur an der Logik Umsetzung hapert es soweit.

Könnt Ihr das pollen zyklische ? von 1Wire Bus als Verdacht ausschließen?

Weiß aber trotzdem Eure Mühe Wert zu schätzen!!

Gruß Hans-Jürgen

FHEM 5.8 auf "yakkaroo Emu A1FL.1" mit CUL 868MHz, SIGNALduino,2 1Wire USB Busmaster, diverse 1 Wire Sensoren,Landroid,Aeotec USB Dongle Z-Wave Plus

habl

eine klassische Wechselschaltung ist nur mit xor hinzukriegen, d.h. wenn beide Schalterstellungen "on" oder "off" haben, wird das Licht eingeschaltet und sofern beide eine Unterschiedliche Schalterstellung haben wird ausgeschaltet.

Fertigen Code kann ich gerade nichr Liefern, da ich kein fhem zum testen zur Hand habe.

rabehd

#6
Die Lampe hat keine Verbindung zu den Schaltern und umgekehrt? Alles passiert nur über FHEM?
Welche Events lösen die Schalter aus? Welche Readings haben sie (Status)?

Ich wüßte nicht was in dem Fall das notify von betateilchen permanent triggert.
Zitat von: Deckoffizier am 04 Dezember 2025, 11:34:43in Problem das Pollen alle 3s bei 1Wire sein
Außer Du lässt die Schalter permanet events feuern -> event-on-...?

-> Mehr Infos, bessere Hilfe
Auch funktionierende Lösungen kann man hinterfragen.

rabehd

Auch funktionierende Lösungen kann man hinterfragen.

Deckoffizier

Hallo rabehd,

Danke erstmal...

Lampe und Schalter habe keine direkte Verbindung zu einander.
Lampe wird über ZWave geschaltet.

Reading sensed.A liefert nur 0 oder 1

hier mal ein List vom Schalter

Internals:
   DEF        12.EC207D000000 10
   FUUID      6927194b-f33f-cca1-db84-e5c39aa47615a651
   IODev      myOWServer
   LAST_READ_FAILED 0
   NAME       1WSchalter_ga_tor
   NR         410
   STATE      sensed.A: 1  sensed.B: 0  alarm: 1
   TYPE       OWDevice
   eventCount 1820
   READINGS:
     2025-12-03 18:22:08   IODev           myOWServer
     2025-11-29 11:27:22   PIO.A           0
     2025-11-29 11:27:27   PIO.ALL         0,0
     2025-11-26 20:19:56   PIO.B           0
     2025-11-30 15:12:11   PIO.BYTE        0
     2025-11-29 10:44:44   address         12EC207D00000018
     2025-12-04 14:32:50   alarm           1
     2025-12-01 20:42:44   channels        2
     2025-12-01 20:42:16   crc8            18
     2025-11-26 20:22:01   family          12
     2025-11-27 09:28:05   latch.A         1
     2025-11-27 09:28:12   latch.B         1
     2025-12-01 20:38:56   latch.BYTE      1
     2025-11-27 09:34:12   locator         FFFFFFFFFFFFFFFF
     2025-11-26 21:02:44   power           1
     2025-11-26 21:12:43   r_locator       FFFFFFFFFFFFFFFF
     2025-12-04 14:32:50   sensed.A        1
     2025-11-26 20:20:18   sensed.ALL      0,0
     2025-12-03 18:22:04   sensed.B        0
     2025-11-26 21:03:22   sensed.BYTE     0
     2025-11-27 09:34:57   set_alarm       331
     2025-12-04 14:32:50   state           sensed.A: 1  sensed.B: 0  alarm: 1
   fhem:
     address    12.EC207D000000
     alerting   1
     bus        bus.0
     interfaces state
     interval   10
     getters:
       PIO.A
       PIO.ALL
       PIO.B
       PIO.BYTE
       T8A/volt.0
       T8A/volt.1
       T8A/volt.2
       T8A/volt.3
       T8A/volt.4
       T8A/volt.5
       T8A/volt.6
       T8A/volt.7
       T8A/volt.ALL
       TAI8570/pressure
       TAI8570/sibling
       TAI8570/temperature
       address
       channels
       crc8
       family
       id
       latch.A
       latch.ALL
       latch.B
       latch.BYTE
       locator
       memory
       pages/page.0
       pages/page.1
       pages/page.2
       pages/page.3
       pages/page.ALL
       power
       r_address
       r_id
       r_locator
       sensed.A
       sensed.ALL
       sensed.B
       sensed.BYTE
       set_alarm
       type
     polls:
       sensed.A
     setters:
       PIO.A
       PIO.ALL
       PIO.B
       PIO.BYTE
       latch.A
       latch.ALL
       latch.B
       latch.BYTE
       memory
       pages/page.0
       pages/page.1
       pages/page.2
       pages/page.3
       pages/page.ALL
       sensed.A
       sensed.ALL
       sensed.B
       sensed.BYTE
       set_alarm
     state:
       sensed.A
       sensed.B
Attributes:
   DbLogExclude .*
   model      DS2406
   polls      sensed.A
   room       Heizraum
   sortby     1
   uncached   1

Gruß
Hans-Jürgen
FHEM 5.8 auf "yakkaroo Emu A1FL.1" mit CUL 868MHz, SIGNALduino,2 1Wire USB Busmaster, diverse 1 Wire Sensoren,Landroid,Aeotec USB Dongle Z-Wave Plus

RalfRog

#9
Von der Idee her liegt der Ansatz von betateilchen doch richtig.
Die Lampe / das Licht soll togglen wenn einer der Schalter den Zustand (0>1 / 1>0) wechselt (ähnlich wie mehrere Taster am Eltako Relais oder Wechsel-/Kreuzschaltung).

Das kann doch eigentlich nur schiefgehen wenn mehr als 1 Event beim Drücken kommt.
FHEM VM Debian13 (trixie) auf Proxmox VE9  (Futro S740) - nanoCUL, HM-MOD-RPI-PCB und MAX!Cube über LAN
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder sowie Shelly 3EM, 1PM, PlugS und IT Schaltsteckdosen

rabehd

Zitat von: RalfRog am 04 Dezember 2025, 14:47:58Von der Idee her liegt der Ansatz von betateilchen doch richtig.
Die Lampe / das Licht soll togglen wenn einer der Schalter den Zustand (0>1 / 1>0) wechselt (ähnlich wie mehrere Taster am Eltako Relais oder Wechsel-/Kreuzschaltung).

Das kann doch eigentlich nur schiefgehen wenn mehr als 1 Event beim Drücken kommt.

Genau und selbst mehr als 1 Event gibt es nicht, eher ganz kurz nacheinander. Genauso als ob 2 Personen "gleichzeitig" drücken. Dann gibt es gleich wieder den Ausgangszustand.

Ich würde mal in den Eventmonitor schauen. Meine Vermutung, das kommen ständig welche. Also mal meinem Vorschlag folgen.
Auch funktionierende Lösungen kann man hinterfragen.