[Erledigt] wie am einfachsten: Device soll einem anderen "folgen"

Begonnen von Jogi, 21 November 2019, 17:59:26

Vorheriges Thema - Nächstes Thema

Jogi

Hallo,
ich habe mir eine weitere Hue-Lampe zugelegt und diese soll die bisherigen ergänzen.
Auf die bisherigen Hue wirken einige Regelungen, die z.B. je nach Zustand im Haus die Helligkeit, Lichtfarbe, oder Aus-/Einschaltung realisieren.
Ich könnte die neue Lampe jetzt natürlich in alle Schaltungen einbauen, aber das ist aufwendig und nicht komfortabel. Das muss doch einfacher gehen.
Im Prinzip möchte ich jetzt, dass die neue Lampe sich genauso verhält, wie eine bereits bestehende.
Wie kann ich das am einfachsten realisieren?

Was ich schon weiß:
1. Es gibt den Structure Befehl. Aber dazu müsste ich eine der bestehende Lampen in die Structure überführen, was auch wieder bedeuten würde, dass ich etliche Schaltungen ändern müsste. Will ich vermeiden.
2. Folgendes notify habe ich probiert:
defmod follow1 notify HUEDevice1 set HUEDevice18 $EVENT
Das funktioniert aber nicht richtig. On/off kommt richtig an, aber die Farb- und bri-Werte werden nicht richtig übergeben. Ich vermute, es liegt an der transitiontime. Ist aber nur geraten.

Gibt es eine einfache Möglichkeit, wie ich das gewünschte realisieren kann, oder habe ich etwas (z.B. structure) falsch verstanden und es geht einfacher?

Danke für Tipps,
Jogi


DeeSPe

Es liegt daran weil in $EVENT noch ein Doppelpunkt steckt.
Zitatrgb: 222222

Also entweder den Doppelpunkt entfernen oder gleich lieber mit $EVTPART(s) arbeiten.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Jogi

Zitat von: DeeSPe am 21 November 2019, 19:06:46
Es liegt daran weil in $EVENT noch ein Doppelpunkt steckt.
Also entweder den Doppelpunkt entfernen oder gleich lieber mit $EVTPART(s) arbeiten.

Gruß
Dan

Vielen Dank für den Denkanstoß, doch damit bin ich etwas überfordert.
Ich habe mich mal in der Commadnref zu $EVTPART schlau gemacht. Wenn ich das richtig verstehe werden die Log´s damit getrennt.
Ich habe mal im Eventmonitor  geguckt, was da so alles kommt:
2019-11-23 14:28:29 HUEDevice HUEDevice1 onoff: 1
2019-11-23 14:28:29 HUEDevice HUEDevice1 pct: 5
2019-11-23 14:28:29 HUEDevice HUEDevice1 dim06%
2019-11-23 14:28:29 HUEDevice HUEDevice1 Status: 1
2019-11-23 14:28:31 HUEDevice HUEDevice1 reachable: 1
2019-11-23 14:29:00 HUEDevice HUEDevice1 colormode: xy
2019-11-23 14:29:00 HUEDevice HUEDevice1 bri: 254
2019-11-23 14:29:00 HUEDevice HUEDevice1 xy: 0.1321,0.0284
2019-11-23 14:29:00 HUEDevice HUEDevice1 pct: 100
2019-11-23 14:29:00 HUEDevice HUEDevice1 on
2019-11-23 14:29:01 HUEDevice HUEDevice1 rgb: 0000f9
2019-11-23 14:29:04 HUEDevice HUEDevice1 bri: 33
2019-11-23 14:29:04 HUEDevice HUEDevice1 pct: 13
2019-11-23 14:29:04 HUEDevice HUEDevice1 dim12%
2019-11-23 14:29:04 HUEDevice HUEDevice1 ct: 337 (2967K)
2019-11-23 14:29:04 HUEDevice HUEDevice1 sat: 169
2019-11-23 14:29:04 HUEDevice HUEDevice1 xy: 0.4367,0.3787
2019-11-23 14:29:04 HUEDevice HUEDevice1 rgb: 281d11
2019-11-23 14:29:09 HUEDevice HUEDevice1 bri: 72
2019-11-23 14:29:09 HUEDevice HUEDevice1 pct: 29
2019-11-23 14:29:09 HUEDevice HUEDevice1 dim31%
2019-11-23 14:29:09 HUEDevice HUEDevice1 rgb: 564024
2019-11-23 14:29:09 HUEDevice HUEDevice1 ct: 256 (3906K)
2019-11-23 14:29:09 HUEDevice HUEDevice1 sat: 92
2019-11-23 14:29:09 HUEDevice HUEDevice1 xy: 0.3875,0.3228
2019-11-23 14:29:09 HUEDevice HUEDevice1 rgb: 553f41
2019-11-23 14:29:24 HUEDevice HUEDevice1 bri: 235
2019-11-23 14:29:24 HUEDevice HUEDevice1 pct: 92
2019-11-23 14:29:24 HUEDevice HUEDevice1 dim87%
2019-11-23 14:29:24 HUEDevice HUEDevice1 rgb: f9babf
2019-11-23 14:29:27 HUEDevice HUEDevice1 bri: 198
2019-11-23 14:29:27 HUEDevice HUEDevice1 pct: 78
2019-11-23 14:29:27 HUEDevice HUEDevice1 dim75%
2019-11-23 14:29:27 HUEDevice HUEDevice1 rgb: e9aeb3
2019-11-23 14:29:27 HUEDevice HUEDevice1 ct: 153 (6535K)
2019-11-23 14:29:27 HUEDevice HUEDevice1 sat: 232
2019-11-23 14:29:27 HUEDevice HUEDevice1 xy: 0.2011,0.1114
2019-11-23 14:29:27 HUEDevice HUEDevice1 rgb: 271efa


Wenn ich $EVTPART richtig verstanden habe, dann wäre z.B. bei
2019-11-23 14:29:27 HUEDevice HUEDevice1 bri: 198
$EVTPART0 = bri:
$EVTPART1 = 198
und bei
2019-11-23 14:29:24 HUEDevice HUEDevice1 rgb: f9babf
$EVTPART0 = rgb:
$EVTPART1 = f9babf
Ich bin jetzt echt überfordert, wie ich das in einem (!) notify so verarbeite, dass alles bei meinem HUEDevice18 ankommt.
Ich muss ja beides an das andere Device übermitteln und den Doppelpunkt habe ich auch noch drin.

Da reichen meine Kenntnisse momentan nicht.

Hast Du noch eine Tipp für mich, oder ein Beispiel, wo ich mich einlesen kann.

DeeSPe

Am wirklich einfachsten wird es wohl gehen wenn Du den Doppelpunkt aus $EVENT entfernst, dann sollte es bei Hue eigentlich passen,. z.B. so:
defmod n_Hue_follow notify HUEDevice1:.* {\
my $e = $EVENT;;\
$e =~ s/://;;\
fhem "set HUEDevice18 $e";;\
}


Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Jogi

Zitat von: DeeSPe am 23 November 2019, 15:39:18
Am wirklich einfachsten wird es wohl gehen wenn Du den Doppelpunkt aus $EVENT entfernst, dann sollte es bei Hue eigentlich passen,. z.B. so:
defmod n_Hue_follow notify HUEDevice1:.* {\
my $e = $EVENT;;\
$e =~ s/://;;\
fhem "set HUEDevice18 $e";;\
}


Vielen Dank für Deine Mühe.
Ich habe es gleich ausprobiert, bekomme aber leider folgende Fehlermeldung:
Unrecognized character \xC2; marked by <-- HERE after <-- HERE near column 1 at (eval 167139) line 2.

DeeSPe

Das klingt sehr merkwürdig.
Ich habe es direkt aus einer Raw Def kopiert und es eben in eine Raw Def eingefügt und ausgeführt ohne irgendwelche Fehler.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Jogi

Zitat von: DeeSPe am 24 November 2019, 10:20:00
Das klingt sehr merkwürdig.
Ich habe es direkt aus einer Raw Def kopiert und es eben in eine Raw Def eingefügt und ausgeführt ohne irgendwelche Fehler.

Das habe ich jetzt auch gemacht und es funktioniert  :).
Ich habe es jetzt am Rechner eingegeben, gestern hatte ich es am Tablet übertragen. Wahrscheinlich habe ich dabei einen Fehler gemacht.

Vielen, vielen Dank, das hilft mir super weiter.
Ich weiß zwar nicht, was da in der Definition genau passiert und ich selbst wäre NIE darauf gekommen, aber toll dass es jetzt klappt.

Vielen Dank noch mal,
Jogi

DeeSPe

Zitat von: Jogi am 24 November 2019, 12:13:52
Ich weiß zwar nicht, was da in der Definition genau passiert und ich selbst wäre NIE darauf gekommen, aber toll dass es jetzt klappt.

Ganz einfach!

Das notify hört auf alle Events von HUEDevice1:
HUEDevice1:.*

Dann wird das eintreffende Event der Variablen $e zugewiesen:
my $e = $EVENT;

Danach wird mittels RegEx der erste gefundene Doppelpunkt aus dem Event heraus substituiert:
$e =~ s/://;

Und als letztes wird das Event (ohne den Doppelpunkt) dem anderen Device als set übergeben:
fhem "set HUEDevice18 $e";

There's no magic! ;)

Um das ganze noch verständlicher zu machen kann man auch noch Debug Ausgaben mit einbauen, die dann im Log landen.
z.B.:
defmod n_Hue_follow notify HUEDevice1:.* {\
Debug "Eintreffendes Event von '$NAME': '$EVENT'";;\
my $e = $EVENT;;\
$e =~ s/://;;\
Debug "Event '$EVENT' von '$NAME' um den Doppelpunkt bereinigt: '$e'";;\
my $s = "set HUEDevice18 $e";;\
Debug "Neues set Kommando von $SELF: '$s'";;\
fhem $s;;\
}


Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Ich sehe gerade an Deinem Auszug aus dem Eventmonitor dass es keinen Sinn macht auf alle Events von HUEDevice1 zu hören, da dort (natürlich) auch Events ankommen die keinen Sinn machen zu übertragen bzw. für die es gar kein set Kommando beim anderen Device gibt (z.B. onoff, Status, reachable).
Drum wäre es sinnvoll das notify nur auf die wirklich wichtigen Events lauschen zu lassen.
Ich würde das evtl. so anpassen:
defmod n_Hue_follow notify HUEDevice1:(on|off|pct|colormode|bri|xy|rgb|ct|sat).* {\
my $e = $EVENT;;\
$e =~ s/://;;\
fhem "set HUEDevice18 $e";;\
}


Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Jogi


Ganz einfach!

There's no magic! ;)



Naja, ganz soo einfach ist das nicht. Ich hätte es nie hinbekommen und habe es ohne Deine Erklärung auch nicht verstanden.
Mit schon und dafür danke ich Dir sehr. Denn so verstehe ich wenigstens, was in meinem System vorgeht.
Magie ist es vielleicht nicht, aber es ist "mega" dass Du Dir so viel Mühe gegeben hast.

Vielen Dank noch mal