und da war sie wieder, die Unvollkommenheit des Verständnislosen...
Hallo ins Forum,
juchuu, ich habe ein structure <Licht_Master> mit zwei FS20-Dimmern hinbekommen und diese sogar in das at <WakeUp_Light> implementiert - funzt.
Nun würde ich gern eine Abhängigkeit zusammenstellen:
Wenn <sz_Media> eingeschaltet wird, dann soll die structure <Licht_Master> auf dim50% in 15 Sekunden hochfahren (besser noch: wenn <Licht_Master> bereits an war, dann auf dim50% runterfahren).
Ich hab´s mit einer weiteren structure und mit notify probiert aber außer dem Schalten von <sz_Media> kam da nix bei den Leuchten an.
In den Dokus wird bei notify oft von einem ´Schalter´ gesprochen. Ich hatte das <pattern> mit einem Device gleichgesetzt - aber ich befürchte fast, das ist es nicht. *rätsel*
Die Anweisung ´dimup´ oder ´dimdown` aus fhem heraus, wird von den FS20-DI3 leider auch ignoriert.
Gruß ins Forum
Rosco
define Licht_Master structure room dimmer1 dimmer2
define N_Licht notify sz_Media {\
if (define ($defs{Licht50})) {fhem('delete Licht50'};;\
fhem('define Licht50 at +00:00:15 set Licht_Master dim50% 1280');;\
}
Wenn das funktionieren sollte musst du noch das notify einschränken mit z.B.
define N_Licht notify SZ_Media:on.*
Zum Test auf Funktionalität ist das o.g. besser, da notify bei jedem Event von SZ_Media reagiert.
Auslösen von notify ging hier manuell auch durch Eingabe von:
trigger SZ_Media in die Fhemweb-Kommandozeile.
MfG, MisterEltako
Hallo MisterEltako,
vielen Dank für den Code. Da hab ich mit meinen structure bzw. notify Versuchen aber deutlich zu kurz geworfen. Ich versuche mal den Code zu interpretieren:
Die structure <Licht_Master> definiert die beiden dimmmer 1 und 2.
<N_Licht> ist ein virtuelles Gerät, welches durch notify auf Events des Aktors <sz_Media> reagiert.
Ab jetzt wird´s kryptisch.
{Licht50} scheint eine Variable(virtuelles Gerät) zu sein, die durch ($defs) angelegt wird. Warum die in der if-Anweisung steht und mit delete wieder gelöscht wird erschließt sich mir nicht.
Den letzten Teil ('define Licht50 at +00:00:15 set Licht_Master dim50% 1280') würde ich nach Studium des Befehls ´at´ so verstehen:
Definiere ein virtuelles Gerät <Licht50>, welches in 00:00:15 Minuten die structure <Licht_Master> auf dim50% schalten soll. Dafür soll es sich 1280 Sekunden Zeit lassen. Warum 1280? Das sind doch rund 21 Minuten, nicht 15. Stellt das einen Puffer dar?
Das notify einschränken mit <define N_Licht notify SZ_Media:on.*> verstehe ich leider auch nicht. Kannst Du mir das bitte erläutern?
Die Anweisung würde durch Schalten von sz_Media durch einen Sensor (z.B. Handsender) greifen, könnte aber auch in der Kommandozeile mit ´trigger sz_Media´ veranlasst werden.
Soweit meine laienhafte und sicher nicht vollends richtige Interpretation. Daher freue ich mich auf weitere Erläuterungen. fhem ist ein mächtiges Werkzeug. Nur schade, dass sich logische Verknüpfungen nur auf der Programmiersprachen-Ebene setzen lassen. Da hört´s bei mir leider dann schnell auf, denn mir fallen da schon so einige Gimmmicks ein, die sich schalten und walten lassen würden.
Zunächst noch allen Lesern einen schönen Sonntag.
Beste Grüße
Rosco
PS:Fehlt bei ('delete Licht50'} nicht eine runde Klammer?
define N_Licht notify sz_Media {\ --------------------------------------------------> legt das Notify an, das auf jedes Schalten von sz_Media reagiert
if (define ($defs{Licht50})) {fhem('delete Licht50'};;\------------------------> prüft, ob das "at" namens Licht50 schon existiert, dann löschen
fhem('define Licht50 at +00:00:15 set Licht_Master dim50% 1280');;\-------> legt neues "at" Licht50 an für den Einschaltbefehl
}
Da ich selbst nur Homematic und EnOcean habe, kann ich den Einschaltbefehl für FS20 leider nicht testen. Er könnte auch:
make Licht_Master dim50% lauten. Die 1280 müsste die Dauer der Einschaltzeit sein. Kann man wahrscheinlich auch weglassen.
MfG,MisterEltako
Hallo,
Zitatfhem('define Licht50 at +00:00:15 set Licht_Master dim50% 1280')
liest sich für mich so.
In 15 Sekunden wird Licht_Master innerhalb von 1280 Sekunden auf 50% gedimmt.
Egal wo Licht_Master grad steht.
1280 ist ein fester Wert in FS20-Komponenten.
FS20 kann nur bestimmte Zeiten direkt im Aktor verarbeiten daher muss man bei Befehlen, wo im Aktor der Timer gesetzt wird, immer Kompromisse eingehen.
Wenn du einen Timer in fhem programmierst kann du alle Zeiten verwenden.
Beim hoch- oder runterdimmen von FS20-Dimmer geht das aber nicht da fhem dann die Zeitdauer zerlegen müsste und in bestimtmen Zeitabständen steigende/fallende Dimmwerte senden müsste.
Der Funkverkehr wäre sicher nicht zu verachten aber aufwendiger ist es diese Funktion in FS20.pm (dort müsste das glaub ich rein) zu implementieren.
Daher ist es einfacher die Zeiten und Werte der Aktoren zu verwenden soweit diese so eine Funktion bieten.
Grüße
P.S.: Dim52% geht auch nicht da FS20-Dimmer nur 50% und 56% kennen.
Edith: Fhem fängt diese Werte aber ab und schreibt sie auf passende FS20-Werte um - zu sehen im Logfile
Hi!
Stimmt: {fhem('delete Licht50')}
MfG, MisterEltako