FHEM Forum

FHEM => Automatisierung => Thema gestartet von: fretti am 13 November 2016, 19:45:09

Titel: Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: fretti am 13 November 2016, 19:45:09
Hallo,

ich habe folgende Situation:
2 FHEM-Server, einer zum Schalten mit PCA301, RFXTRX und HMLAN (FHEM1) und der zweite(FHEM2) mit LaCrosse und Ausgabe an Tablet.

Ich möchte mit TabletUI einige Switche bedienen, die auf FHEM1 angeschlossen und geschaltet werden. Dabei sind alle 3 Übertragungsmodule im Einsatz.

Dabei soll aber am Tablet immer der Aktuelle Switch-Zustand angezeigt werden: z.B.
Ich komme nach Hause schalte Lampe1 am Tablet an, FHEM1 schlatet Lampe1 in der Nacht wieder aus und dieses soll zurück an die Tabletanzeige.

Dafür habe ich folgendes Konstrukt gebaut: (läuft alles am FHEM2)

Dummy fürs Tablet zum Schalten

define swBaum dummy
attr swBaum setList on off

Notify gibt Schaltbefehl vom Tablet an FHEM1 weiter

define notify_swBaum notify swBaum {system ("echo 'set PCA301_036055 $EVENT' | socat - TCP:192.168.100.232:7072");;}


AT checkt alle Minute über system-get-Funktion in 99_myUtils den Zustand des PCA-Switches an FHEM1

define atGet_swBaum at +*00:01:00 { if (MyGetStatus("PCA301_036055") eq "on") {fhem("set Get_swBaum on")} else {fhem("set Get_swBaum off")}}\


Dummy und Notify geben den Zustand weiter an Tablet-Switch

define Get_swBaum dummy
attr Get_swBaum setList on off
define notify_GetswBaum notify Get_swBaum set swBaum $EVENT



Das funktioniert soweit alles ganz gut.

Das schein mir aber sehr umständlich ?! Ich hab aber keine andere Lösung, mit allen drei Übertragungs-Devices funktioniert gefunden.  Das Problemkind waren HMLAN und RFXTRX, PCA ging über FHEM2FHEM.


Jetzt die Frage an die Profis. Gibt dafür vielleicht doch eine elegantere Lösung.

LG Tom
Titel: Antw:Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: CoolTux am 13 November 2016, 20:23:23
Ich habe genau das mit meinen BT Candles.
Auf Fhem2 sind die Devices. Auf fhem1 die Dummys. Beide fhems sind mit fhem2fhem auf beiden fhem Instanzen verbunden. Wichtig ist das Du eine enge RegEx für das Log auf beiden Instanzen verwendest.
Titel: Antw:Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: fretti am 14 November 2016, 08:07:23
Ja und genau das wird das Prblem sein, die RegEx (nicht mein Spezialgebiet).

Muss dann auf beiden Fhem-Servern je eine FHEM2FHEM-Kopplung laufen? Und wie könnte man die RegEx z.B. für obiges Beispiel gestalten?

Danke
Titel: Antw:Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: CoolTux am 14 November 2016, 08:22:24
Ja auf beiden Seiten muss dann fhem2fhem laufen.

Ganz einfach. set Befehle haben im Gegensatz zu Readings keine :

Somit also unterschiedliche Events.

Dein Device ist eingerichtet auf fhem2 und schalten willst du von fhem1

set dummy1 on

Als Event würde kommen

dummy1 dummy1 on
Deine Log Regex wäre also dummy1.on
Deine Regex für ein Notify auf fhem2 wäre also

define bla Notify dummy1.on set Device on

Als Event vom Device auf fhem2 kommt nun

Device device: on

Also ist deine Regex für Log auf fhem1

Device:.on


Ich habe sowas in Betrieb und kann versuchen dir ein Beispiel später zu posten.
Titel: Antw:Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: fretti am 14 November 2016, 10:23:58
Ja, das wäre schön.

D.h. aber auch, ich brauche für jeden dummy je eine FHEM2FHEM-Kopplung auf jedem FHEM-Server, also bei 3 Dummys 3 FHEM2FHEM auf FHEM1 und 3 FHEM2FHEM auf FHEM2, oder versteh ich da was falsch?
Titel: Antw:Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: CoolTux am 14 November 2016, 10:43:28
Nein. Nur eine Verbindung pro Richtung. Welche Daten er dann auf schnappt entscheidet deine RegEx.
Wenn zum Beispiel alle Dummys mit Licht beginnen. Dann halt
LichtDummy[1-9].*
So lauscht die Verbindung auf alle Lichtdummys von 1-9
Ich gebe zu es ist nicht einfach und man muss etwas überlegen. Aber es geht.
Titel: Antw:Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: fretti am 14 November 2016, 10:59:54
Ok. Das werd ich mal heute Abend mit einem Dummy zu Hause testen.
Ich dachte die FHEM2FHEM-Kopplung ist nur unidirektional, weil in vielen Postings immer die Rede von Rückkopplungen und Endlosschleifen die Rede ist.

Vielleicht könntest Du mir doch noch ein Beispiel posten.

Danke
Titel: Antw:Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: CoolTux am 14 November 2016, 12:31:59
Wenn man nicht auf passt dann kann sowas passieren. Du musst halt eben ganz genau darauf achten wie Du was machst.

Das hier ist mein FHEM01 Hauptgerät

Internals:
   CFGFN
   DEF        10.6.6.20:7072 LOG:(ELANKlm|ESSOTeltow|JETMahlowerStr|JETReihnstr|SHELLStahnsdorf|SPRINTBerlin|SYSMON_Webapp01|calendarBrbGermanyFeiertage|calendarBrbFerien|Candle[1-9].(on|off|unreachable|rgb:|color:|battery:|onoff:|effect:|sat:|speed:)).*
   FD         36
   Host       10.6.6.20:7072
   NAME       FHEM01toFHEM02
   NR         505
   PARTIAL
   STATE      connected
   TYPE       FHEM2FHEM
   informType LOG
   regexp     (ELANKlm|ESSOTeltow|JETMahlowerStr|JETReihnstr|SHELLStahnsdorf|SPRINTBerlin|SYSMON_Webapp01|calendarBrbGermanyFeiertage|calendarBrbFerien|Candle[1-9].(on|off|unreachable|rgb:|color:|battery:|onoff:|effect:|sat:|speed:)).*
Attributes:
   room       EDV

Hier beachten wir bitte nur den Eintrag für Candle[1-9] mit samt der Readings. Die entsprechenden Devices liegen ja auf dem FHEM02 Server

Internals:
   BTMAC      AC:E6:4B:07:93:DD
   DEF        AC:E6:4B:07:93:DD
   NAME       Candle2
   NR         22
   STATE      off
   TYPE       PlayBulbCandle
   VERSION    0.8.1
   Readings:
     2016-11-12 18:28:19   battery         100
     2016-11-12 18:28:19   color           on
     2016-11-12 18:28:19   effect          Candle
     2016-11-12 18:28:19   onoff           0
     2016-11-12 16:54:14   rgb             ff0000
     2016-11-12 16:54:14   sat             0
     2016-11-12 18:28:19   speed           120
     2016-11-12 18:28:19   state           off
   Helper:
     effect     Candle
     onoff      0
     rgb        ff0000
     sat        0
     speed      120
Attributes:
   alias      Candle green
   devStateIcon unreachable:light_question
   event-on-change-reading .*
   model      BTL300_v5
   room       PLAYBULB
   webCmd     rgb:rgb FF0000:rgb 00FF00:rgb 0000FF:rgb FFFFFF:rgb F7FF00:rgb 00FFFF:rgb F700FF:effect

bedeutet. Wenn sich auf FHEM02 der Status des Devices Candle2 ändert wird ein Event aus gelöst welches dann von der FHEM2FHEM Verbindung auf FHEM01 erfasst wird und auf FHEM01 als Event wieder gegeben wird. Man kann auch sagen es wird durchgereicht wenn man so will. So nun haben wir auf FHEM01 Events welche wir weiter verarbeiten können. So konnen wir zum Beispiel ein Notify bauen das die Events vom FHEM02 triggert.

Internals:
   CFGFN
   DEF        Candle[1-9].*   {
                    my @v = split(':',$EVENT);
                    my $reading = $v[0];
                    my $value = $v[1];
                    my $device = "dummy".$NAME;

                    fhem "setreading $device $reading $value" if( defined($v[1]) );
                }
   NAME       notifyPlayBulbCandle
   NR         519
   NTFY_ORDER 50-notifyPlayBulbCandle
   REGEXP     Candle[1-9].*
   STATE      2016-11-12 18:42:18
   TYPE       notify
   Readings:
     2016-11-08 13:41:32   state           active
Attributes:

und die erhaltenen Werte des Events in ein dummy schreibt

Internals:
   CFGFN
   NAME       dummyCandle2
   NR         520
   STATE      off
   TYPE       dummy
   Readings:
     2016-11-06 21:42:10   battery         100
     2016-11-05 09:49:54   color           on
     2016-11-05 09:49:54   effect          Candle
     2016-11-12 18:28:22   onoff           0
     2016-11-06 21:42:47   rgb             ff0000
     2016-11-05 09:49:54   sat             0
     2016-11-06 21:42:10   speed           120
     2016-11-12 18:28:08   state           off
Attributes:
   alias      Candle green
   room       Licht to Go
   setList    on:noArg off:noArg rgb:colorpicker,RGB sat:slider,0,5,255 effect:Flash,Pulse,RainbowJump,RainbowFade,Candle,none speed:slider,170,50,20 color:on,off statusRequest:noArg
   webCmd     rgb:rgb FF0000:rgb 00FF00:rgb 0000FF:rgb FFFFFF:rgb F7FF00:rgb 00FFFF:rgb F700FF sat:sat:effect


In die andere Richtung ist es dann einfacher   ;D
Aber versuch mal ob Du hier erstmal durch siehst.

Eiegntlich musst Du wirklich nur darauf achten welche Events Deine Devices auslösen. Angefangen auf der FHEM Instanz wo sich das tatsächliche Moduldevice befindet. Du schaltest also on, schaust im Eventmonitor wie der Event aus schaut und baust Dir auf Deiner anderen FHEM Instanz den entsprechenden LOG RegEx für FHEM2FHEM.
Titel: Antw:Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: fretti am 14 November 2016, 19:35:58
Soweit so gut

Ich hab folgendes gemacht:

define FHEM3toFHEM1 FHEM2FHEM 192.168.100.232:7072 LOG:(Flurlaterne.(on|off)).*
define notifyFlurlaterne notify Flurlaterne set swFlur $EVENT

define swFlur dummy
attr swFlur setList on off



Erklärung: FHEM3 ist der TabletFhem, FHEM1 (100.232) der DeviceFHEM, der Switch ist die Flurlaterne, welche auf dem FHEM3/Tablet als swFlur abgebildet werden soll.

Geht das auch so, oder muss ich den Status (mehr readings gibt es nicht) auch in ein reading des Dummy swFlur schreiben?

Auf jeden Fall, wenn ich jetzt auf dem FHEM1 schalte, ändert sich der Status auf FHEM3  :)
Titel: Antw:Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: CoolTux am 14 November 2016, 20:57:28
Mach mal bei dem Dummy noch ein setList onoff:0,1 und readingslist onoff

Dann machst du die Gegenseite fertig und schreibst aber ins Notify nicht set on oder off als Befehl für den Dummy sondern set Dummy onoff 1 für on und 0 für off. So kommst du nicht in eine Schleife und in Dein TabletUI nimmst als data-get onoff und data-get-on 1
Titel: Antw:Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: fretti am 16 November 2016, 19:22:34
Sorry bin erst heute wieder zum weiterbasteln gekommen.

Ich habe jetzt auf der Gegenseite folgendes definiert:
define FHEM1toFHEM3 FHEM2FHEM 192.168.100.241:7072 LOG:(swFlur.(onoff:)).*

und das Notify (schein aber so nicht zu gehen)

define notifyswFlur notify swFlur:(onoff).1 set swFlurlaterne 1

ich steh da ein bisschen auf dem Schlauch.
Das Notify soll ja eigentlich die Flurlaterne (s.o) anschalten, also brauche ich doch den dummy swFlurlaterne gar nicht und kann direkt die Flurlaterne schalten?? Aber wie komme ich da von onoff:1 zu on?

Titel: Antw:Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: CoolTux am 16 November 2016, 19:36:16
Zitat von: fretti am 16 November 2016, 19:22:34
Sorry bin erst heute wieder zum weiterbasteln gekommen.

Ich habe jetzt auf der Gegenseite folgendes definiert:
define FHEM1toFHEM3 FHEM2FHEM 192.168.100.241:7072 LOG:(swFlur.(onoff:)).*

und das Notify (schein aber so nicht zu gehen)

define notifyswFlur notify swFlur:(onoff).1 set swFlurlaterne 1

ich steh da ein bisschen auf dem Schlauch.
Das Notify soll ja eigentlich die Flurlaterne (s.o) anschalten, also brauche ich doch den dummy swFlurlaterne gar nicht und kann direkt die Flurlaterne schalten?? Aber wie komme ich da von onoff:1 zu on?

Das mit : haben nur Readings. Du machst jetzt einfach on|off Ohne :
Ich schaue heute Abend in Ruhe noch mal und schreibe dir dann noch mal
Titel: Antw:Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: CoolTux am 16 November 2016, 20:39:56

define FHEM3toFHEM1 FHEM2FHEM 192.168.100.232:7072 LOG:(Flurlaterne.(on|off)).*
define notifyFlurlaterne notify Flurlaterne set swFlur $EVENT

define swFlur dummy
attr swFlur setList on off


Um sicher zu gehen das wir keine Schleife bauen machen wir bitte folgende Änderung


define FHEM3toFHEM1 FHEM2FHEM 192.168.100.232:7072 LOG:(Flurlaterne.(on|off))
define notifyFlurlaterne notify Flurlaterne.(on|off) { fhem("setreading swFlur onoff " . ($EVENT == "on" ? "1" : "0")) }

define swFlur dummy
attr swFlur setList on off
attr swFlur stateFormat onoff
attr swFlur devStateIcon 0:light_light_dim_00:on 1:light_light_dim_100:off


Nun wird der Status der Lampe vom anderen Pi auf unserem FTUI Pi im Dummy als Reading onoff star gestellt und durch den stateFormat und das devStateIcon korrekt dargestellt und sogar schaltbar.

Probiere bitte erstmal aus ob das so geht. Also auf dem anderen Pi das Device schalten und schauen ob sich auf dem FTUI Pi das Reading und die Darstellung ändert.
Titel: Antw:Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: fretti am 16 November 2016, 21:06:55
soweit so gut.

In der notifyDefinition war ein kleiner Fehler :-)    eq statt ==

Das Icon ändert sich, das Reading onoff auch.
Titel: Antw:Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: CoolTux am 16 November 2016, 21:12:29
stimmt hast Recht. Sorry.

Super dann haben wir das schon mal korrekt.

Im TabletUI musst du dann

data-get=onoff machen.

So nun die andere Seite. Hier müssen wir nur dafür sorgen das on off vom dummy an kommt und ein notify machen welches $EVENT als set Befehl an Dein tatsächliches Device sendet.
Titel: Antw:Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: fretti am 16 November 2016, 21:41:47
Das scheint jetzt zu funktionieren, ich werde das mal eine zeitlang testen und dann auf die anderen Switche erweitern.

Ein Problem ist noch, dass das TabletUI das Schalten vom FHEM1 erst nach einem reload der Seite anzeigt, ich werd das mal beobachten.

ich hab da folgendes definiert:

data-get="onoff"
data-get-on="1"
data-set-on="on"
Titel: Antw:Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: CoolTux am 16 November 2016, 21:45:41
Schau mal bitte im Eventmonitor ob das setzen des Readings onoff ein Event auslöst.
Titel: Antw:Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: fretti am 16 November 2016, 21:56:08
Ja macht es.

Ich hab jetzt noch

data-get-off="0"
data-set-off="off"


dazugenommen und siehe da, alles hübsch.
Ich kann jetzt schalten und machen sowohl am TabletUI als auch am DeviceFHEM, alle Stati und Anzeigen sind richtig.

Vielen Dank.
Ich werde mich dann mal am WE an die weiteren Schalter machen, mal sehen ob ich es allein hinbekomme  ;D
Titel: Antw:Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI
Beitrag von: CoolTux am 16 November 2016, 22:01:32
Schau mal das du die Benennung der Dummys und Switches so machst du das die RegEx für fhem2fhem und Notify breit auslegen kannst. So das du alle abdeckst und nur ein Notify pro Seite brauchst.