FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Doneli am 29 September 2016, 09:31:04

Titel: [gelöst] Hilfe - FHEM2FHEM Schalten auf Sekundärem Fhem endet in einer Schleife
Beitrag von: Doneli am 29 September 2016, 09:31:04
Hallo Community,
ich habe vor 3 Jahren mit FHEM begonnen und hab in der Zeit immer weiter aufgerüstet, Geräte hinzugenommen, Aktoren und Sensoren zu meiner Installation hinzugefügt und bin total begeistert von den Möglichkeiten. Aber nach etlichen Versuchen und Abenden mein aktuelles Projekt zum Erfolg bin ich nun am Verzweifeln.
Ich hab folgendes vor:
Im Wohnzimmer hab ich 3 Lichtschalter die nun durch Taster ersetzt werden sollen. Das Schalten soll eine zweite FHEM-Instanz auf einem Raspberry Pi übernehmen da der Primäre zu weit weg ist und ich beim letzten Umbau eine gute Möglichkeit geschaffen habe diesen unterzubringen. Die Schaltzustände der drei Lichtschalter bzw. zukünftig Taster sowie die Möglichkeit des Schaltens der Lichter soll außer von der sekundären FHEM Instanz auch auf der primären Instanz möglich sein.
Den Aufbau selbst hab ich hier erstmal auf meinem Schreibtisch realisiert.

Die Realisierung der Schaltzustände und Schaltung über Taster auf der sekundären FHEM-Instanz war sehr einfach. Die Kontrolle der Taster und Schalten der entsprechenden Relais wurde über die GPIO-Ports realisiert:

FHEMSec:

define WZ_Licht_01 RPI_GPIO 22
attr WZ_Licht_01 active_low yes
attr WZ_Licht_01 direction output
attr WZ_Licht_01 restoreOnStartup off
attr WZ_Licht_01 room 1
attr WZ_Licht_01 toggletostate yes

define WZ_Licht_02 RPI_GPIO 23
attr WZ_Licht_02 active_low yes
attr WZ_Licht_02 direction output
attr WZ_Licht_02 restoreOnStartup off
attr WZ_Licht_02 toggletostate yes

define WZ_Licht_03 RPI_GPIO 24
attr WZ_Licht_03 active_low yes
attr WZ_Licht_03 direction output
attr WZ_Licht_03 restoreOnStartup off
attr WZ_Licht_03 toggletostate yes

define WZ_Licht_04 RPI_GPIO 25
attr WZ_Licht_04 active_low yes
attr WZ_Licht_04 direction output
attr WZ_Licht_04 restoreOnStartup off
attr WZ_Licht_04 toggletostate yes

define WZ_LichtSchalter_01 RPI_GPIO 4
attr WZ_LichtSchalter_01 active_low yes
attr WZ_LichtSchalter_01 debounce_in_ms 50
attr WZ_LichtSchalter_01 direction input
attr WZ_LichtSchalter_01 interrupt both
attr WZ_LichtSchalter_01 pud_resistor up

define WZ_LichtSchalter_02 RPI_GPIO 17
attr WZ_LichtSchalter_02 active_low yes
attr WZ_LichtSchalter_02 debounce_in_ms 50
attr WZ_LichtSchalter_02 direction input
attr WZ_LichtSchalter_02 interrupt both
attr WZ_LichtSchalter_02 pud_resistor up

define WZ_LichtSchalter_03 RPI_GPIO 27
attr WZ_LichtSchalter_03 active_low yes
attr WZ_LichtSchalter_03 debounce_in_ms 50
attr WZ_LichtSchalter_03 direction input
attr WZ_LichtSchalter_03 interrupt both
attr WZ_LichtSchalter_03 pud_resistor up

define WZ_toggle_1 notify WZ_LichtSchalter_01:on set WZ_Licht_01 toggle
define WZ_toggle_2 notify WZ_LichtSchalter_02:on set WZ_Licht_02 toggle
define WZ_toggle_3 notify WZ_LichtSchalter_03:on set WZ_Licht_03 toggle

define WZ_Longpress_1 notify WZ_LichtSchalter_01.Longpress:.on set WZ_Licht_01,WZ_Licht_02,WZ_Licht_03 off
define WZ_Longpress_2 notify WZ_LichtSchalter_02.Longpress:.on set WZ_Licht_01,WZ_Licht_02,WZ_Licht_03 off
define WZ_Longpress_3 notify WZ_LichtSchalter_03.Longpress:.on set WZ_Licht_01,WZ_Licht_02,WZ_Licht_03 off



Die Log-Einträge beim Schalten auf der sekundären FHEM Instanz werden über FHEM2FHEM auf die primäre Instanz übernommen und dies über Dummy's signalisiert. Bis dahin funktioniert es einwandfrei. Der Plan ist, das Schalten der Relais von der primären FHEM Instanz per RFHEM (von chris1284 - vielen Dank an Chris für dieses tolle Modul) auf den sekundären zu schicken.

FHEMPri

define Remote_WZ_Licht_01 dummy
attr Remote_WZ_Licht_01 group Remote Event
define Remote_WZ_Licht_02 dummy
attr Remote_WZ_Licht_02 group Remote Event
define Remote_WZ_Licht_03 dummy
attr Remote_WZ_Licht_03 group Remote Event

define FHEMSec FHEM2FHEM 192.168.182.35:7072 LOG:WZ_Licht.*
define Remote_WZ_SetLight_01 notify WZ_Licht_01 { fhem "set Remote_WZ_Licht_01 $EVENT" }
define Remote_WZ_SetLight_02 notify WZ_Licht_02 { fhem "set Remote_WZ_Licht_02 $EVENT" }
define Remote_WZ_SetLight_03 notify WZ_Licht_03 { fhem "set Remote_WZ_Licht_03 $EVENT" }

define WZ_MainLight_01 cloneDummy Remote_WZ_Licht_01
attr WZ_MainLight_01 addStateEvent 1
attr WZ_MainLight_01 alias Wohnzimmer Lichtschalter 1
attr WZ_MainLight_01 group Lichtschalter
attr WZ_MainLight_01 icon light_ceiling
attr WZ_MainLight_01 room Wohnzimmer
attr WZ_MainLight_01 webCmd on:off
define WZ_MainLight_02 cloneDummy Remote_WZ_Licht_02
attr WZ_MainLight_02 addStateEvent 1
attr WZ_MainLight_02 alias Wohnzimmer Lichtschalter 2
attr WZ_MainLight_02 group Lichtschalter
attr WZ_MainLight_02 icon light_ceiling
attr WZ_MainLight_02 room Wohnzimmer
attr WZ_MainLight_02 webCmd on:off
define WZ_MainLight_03 cloneDummy Remote_WZ_Licht_03
attr WZ_MainLight_03 addStateEvent 1
attr WZ_MainLight_03 alias Wohnzimmer Lichtschalter 3
attr WZ_MainLight_03 group Lichtschalter
attr WZ_MainLight_03 icon light_ceiling
attr WZ_MainLight_03 room Wohnzimmer
attr WZ_MainLight_03 webCmd on:off

define FHEMSecTarget RFHEM 192.168.182.35
#define FHEMSec_WZ_SetLight_01 notify WZ_MainLight_01 { fhem "set FHEMSecTarget cmd set WZ_Licht_01 $EVENT" }
#define FHEMSec_WZ_SetLight_02 notify WZ_MainLight_02 { fhem "set FHEMSecTarget cmd set WZ_Licht_02 $EVENT" }
#define FHEMSec_WZ_SetLight_03 notify WZ_MainLight_03 { fhem "set FHEMSecTarget cmd set WZ_Licht_03 $EVENT" }




Wenn ich das tue (auskommentierte notify's am Ende des Codes) läuft meine Konstellation hier bislang immer in eine Endlosschleife. Alle meine bisherigen Versuche waren erfolglos und jetzt weiß ich nicht mehr weiter.

Wie würdet Ihr das lösen?

Besten Dank im Voraus für eure Hilfe.

Titel: Antw:Hilfe - FHEM2FHEM Schalten auf Sekundärem Fhem endet in einer Schleife
Beitrag von: Otto123 am 29 September 2016, 21:50:05
Hallo Doneli,

tut mir leid dien Konstrukt ist mir zu kompliziert um mich da trocken rein zu denken.

Hast Du mal mit dem Eventmonitor geschaut was passiert? Eigentlich wird es da immer schnell klar wo das Problem liegt.

Gruß Otto
Titel: Antw:Hilfe - FHEM2FHEM Schalten auf Sekundärem Fhem endet in einer Schleife
Beitrag von: Doneli am 30 September 2016, 14:27:01
Ja, im Event Monitor hab ich schon geschaut... dort sehe ich ja, wie das Log permanent die Devices on und off schaltet sobald ich auf der primären Instanz einen Schaltvorgang auslöse. Ich bin bis jetzt nur leider noch nicht weiter gekommen.

Vielleicht kann mir irgend jemand hier Hilfestellung geben?
Titel: Antw:Hilfe - FHEM2FHEM Schalten auf Sekundärem Fhem endet in einer Schleife
Beitrag von: Otto123 am 30 September 2016, 14:32:22
Naja weil Dein notify den eigenen event sicher immer wieder einfängt.
Du musst den trigger vom notify schärfer eingrenzen, oder andere Namen verwenden.
Und du solltest den Eventmonitor in beiden FHEM Instanzen offen haben.
Bau in Dein notify ein sleep ein damit es nicht so schnell in Schleife rennt.

Gruß Otto
Titel: Antw:Hilfe - FHEM2FHEM Schalten auf Sekundärem Fhem endet in einer Schleife
Beitrag von: Doneli am 30 September 2016, 17:14:12
Was lange währt wird endlich gut. Bin draufgekommen wie ich das Problem löse:
Die Weiterleitung der Schaltzustände der sekundären FHEM Instanz mache ich nun per notify während das tatsächliche Schalten der Relais der sekundären Instanz von der primären Instanz aus mit DOIF getätigt wird. So funktioniert es und ich laufe nicht in eine Schleife.
Anbei der Code:

Primäre Instanz:

define Remote_WZ_Licht_01 dummy
attr Remote_WZ_Licht_01 alias Wohnzimmer Lichtschalter 1
attr Remote_WZ_Licht_01 genericDeviceType switch
attr Remote_WZ_Licht_01 group Lichtschalter
attr Remote_WZ_Licht_01 icon light_ceiling
attr Remote_WZ_Licht_01 room Wohnzimmer
attr Remote_WZ_Licht_01 webCmd on:off

define Remote_WZ_Licht_02 dummy
attr Remote_WZ_Licht_02 alias Wohnzimmer Lichtschalter 2
attr Remote_WZ_Licht_02 genericDeviceType switch
attr Remote_WZ_Licht_02 group Lichtschalter
attr Remote_WZ_Licht_02 icon light_ceiling
attr Remote_WZ_Licht_02 room Wohnzimmer
attr Remote_WZ_Licht_02 webCmd on:off

define Remote_WZ_Licht_03 dummy
attr Remote_WZ_Licht_03 alias Wohnzimmer Lichtschalter 3
attr Remote_WZ_Licht_03 genericDeviceType switch
attr Remote_WZ_Licht_03 group Lichtschalter
attr Remote_WZ_Licht_03 icon light_ceiling
attr Remote_WZ_Licht_03 room Wohnzimmer
attr Remote_WZ_Licht_03 webCmd on:off

define FHEMSec FHEM2FHEM 192.168.182.35:7072 LOG:WZ_Licht_0.
define Remote_WZ_SetLight_01 notify WZ_Licht_01 { fhem "setreading Remote_WZ_Licht_01 state $EVENT" }
define Remote_WZ_SetLight_02 notify WZ_Licht_02 { fhem "setreading Remote_WZ_Licht_02 state $EVENT" }
define Remote_WZ_SetLight_03 notify WZ_Licht_03 { fhem "setreading Remote_WZ_Licht_03 state $EVENT" }

define FHEMSecTarget RFHEM 192.168.182.35
define FHEMSec_WZ_SetLight_01 DOIF ([Remote_WZ_Licht_01] eq "on") (set FHEMSecTarget cmd set WZ_Licht_01 on) DOELSE (set FHEMSecTarget cmd set WZ_Licht_01 off)
define FHEMSec_WZ_SetLight_02 DOIF ([Remote_WZ_Licht_02] eq "on") (set FHEMSecTarget cmd set WZ_Licht_02 on) DOELSE (set FHEMSecTarget cmd set WZ_Licht_02 off)
define FHEMSec_WZ_SetLight_03 DOIF ([Remote_WZ_Licht_03] eq "on") (set FHEMSecTarget cmd set WZ_Licht_03 on) DOELSE (set FHEMSecTarget cmd set WZ_Licht_03 off)


Sekundäre Instanz:

define WZ_Licht_01 RPI_GPIO 22
attr WZ_Licht_01 active_low yes
attr WZ_Licht_01 direction output
attr WZ_Licht_01 restoreOnStartup off
attr WZ_Licht_01 room 1
attr WZ_Licht_01 toggletostate yes

define WZ_Licht_02 RPI_GPIO 23
attr WZ_Licht_02 active_low yes
attr WZ_Licht_02 direction output
attr WZ_Licht_02 restoreOnStartup off
attr WZ_Licht_02 toggletostate yes

define WZ_Licht_03 RPI_GPIO 24
attr WZ_Licht_03 active_low yes
attr WZ_Licht_03 direction output
attr WZ_Licht_03 restoreOnStartup off
attr WZ_Licht_03 toggletostate yes

define WZ_Licht_04 RPI_GPIO 25
attr WZ_Licht_04 active_low yes
attr WZ_Licht_04 direction output
attr WZ_Licht_04 restoreOnStartup off
attr WZ_Licht_04 toggletostate yes

define WZ_LichtSchalter_01 RPI_GPIO 4
attr WZ_LichtSchalter_01 active_low yes
attr WZ_LichtSchalter_01 debounce_in_ms 50
attr WZ_LichtSchalter_01 direction input
attr WZ_LichtSchalter_01 interrupt both
attr WZ_LichtSchalter_01 pud_resistor up

define WZ_LichtSchalter_02 RPI_GPIO 17
attr WZ_LichtSchalter_02 active_low yes
attr WZ_LichtSchalter_02 debounce_in_ms 50
attr WZ_LichtSchalter_02 direction input
attr WZ_LichtSchalter_02 interrupt both
attr WZ_LichtSchalter_02 pud_resistor up

define WZ_LichtSchalter_03 RPI_GPIO 27
attr WZ_LichtSchalter_03 active_low yes
attr WZ_LichtSchalter_03 debounce_in_ms 50
attr WZ_LichtSchalter_03 direction input
attr WZ_LichtSchalter_03 interrupt both
attr WZ_LichtSchalter_03 pud_resistor up

define WZ_toggle_1 notify WZ_LichtSchalter_01:on set WZ_Licht_01 toggle
define WZ_toggle_2 notify WZ_LichtSchalter_02:on set WZ_Licht_02 toggle
define WZ_toggle_3 notify WZ_LichtSchalter_03:on set WZ_Licht_03 toggle

define WZ_Longpress_1 notify WZ_LichtSchalter_01.Longpress:.on set WZ_Licht_01,WZ_Licht_02,WZ_Licht_03 off
define WZ_Longpress_2 notify WZ_LichtSchalter_02.Longpress:.on set WZ_Licht_01,WZ_Licht_02,WZ_Licht_03 off
define WZ_Longpress_3 notify WZ_LichtSchalter_03.Longpress:.on set WZ_Licht_01,WZ_Licht_02,WZ_Licht_03 off


Jipieeeehh! Funktioniert endlich!  ;D