Kopplung zweier FHEM-Server - Statusruckgabe an TabletUI

Begonnen von fretti, 13 November 2016, 19:45:09

Vorheriges Thema - Nächstes Thema

fretti

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
promox, debian, rpi, homematic, mqtt, dect, z2m

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

fretti

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
promox, debian, rpi, homematic, mqtt, dect, z2m

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

fretti

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?
promox, debian, rpi, homematic, mqtt, dect, z2m

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

fretti

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
promox, debian, rpi, homematic, mqtt, dect, z2m

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

fretti

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  :)
promox, debian, rpi, homematic, mqtt, dect, z2m

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

fretti

#10
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?

promox, debian, rpi, homematic, mqtt, dect, z2m

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux


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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

fretti

soweit so gut.

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

Das Icon ändert sich, das Reading onoff auch.
promox, debian, rpi, homematic, mqtt, dect, z2m

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net