Hallo zusammen,
ich hab mal wieder eine Frage, mit der ich nicht weiter komme.
Ich habe einen getoggelten Schalten (FS20-TC8), der also auf jeder Taste entweder bei kurzem drücken einen "toggle"-Befehlt sendet, bei einem langen Druck der Taste ein "dimupdown".
Damit möchte ich jetzt einen Steckdosendimmer wie folgt ansteuern (... und stosse dabei auf meine Grenzen in der Programmierung...):
1. gesendet wird "toggle" --> ist der Status "off", wird dieser auf "on" (= letzter dim-Wert) gesetzt --> ist der Status "on" wird das Kommando "off" gesendet
2. gesendet wird ein "dimupdown" --> der Dimmer dimmt hoch oder runter, egal, ob der Zustand vorher "on" oder "off" war
Ich habe mich mit der Funktion "ToggleIndirect" gespielt, dort ist aber leider keine Dim-Funktion implementiert.
Für das erste genannte Thema habe ich folgenden Code verwendet, allerdings ohne Erfolg:
Zitatdefine 1_WZ_T2_5_notify notify FS20_a82604 { if ("%" eq "toggle") {if ($value{1_WZ_D1} eq "off") {fhem "set 1_WZ_D1 on"} else {fhem "set 1_WZ_D1 off"}}}
Vielleicht kann man das ja als Startpunkt verwenden und von da aus auch den zweiten Punkt einarbeiten ?!?!?
Hier schon mal eine Struktur zur Prüfung, ob toggle oder dimupdown empfangen wurde:
define MeinNotifyMakro notify FS20_Taster.* { \
if("%" eq "toggle"){\
... deine Befehle ... }\
else{\
... deine Befehle ... }
Hallo,
danke für deinen Tipp.
Dass der Taster bei kurzem Druck "toggle" sendet, bei langem Druck "dimupdown" sehe ich im Event Monitor.
Das funktioniert auch soweit !
V G
Marc
Zitatif ($value{1_WZ_D1} eq "off")
müsste lauten:
if (Value(1_WZ_D1) eq "off")
also ohne $ und mit runden Klammern ()
Am Rande:
if ($value{1_WZ_D1} eq "off")
ist die alte Schreibweise, von Rudi als depreciated bezeichnet. Die wird also demnächst nicht mehr unterstützt oder IST schon ausgebaut. Mindestens unter FHEM 5.2 geht die noch.
Daher findet man die in einigen Beispielen und Codesnippets noch so vor.
Hallo,
vielen Dank für die Tipps - ich habe das umgebaut.
Dementsprechend funktioniert jetzt auch das Umschalten bei Tastendruck.
Vielen Dank !
Wie kann ich jetzt noch dimupdown mit einbauen, so dass ich entweder schalte (getoggelt) oder dimme ?
Vielen Dank für eure Hilfe,
Marc
Hallo,
ich hab mir jetzt grad den Beitrag durchgelesen und möchte dich bitten doch mal deinen bisherigen Code zu posten.
Bitte in Code-Tags
;-)
Darauf aufbauend wäre es etwas leichter dir zu helfen.
Sonst hast du am Ende 2 unabhängige Codeschnippsel in deiner Konfig die aber auf den selben Sender und Empfänger abzielen.
Grüße
P.S.: Also nicht die gesamte Konfig sondern nur den Code für das togglen.
Ok, ich probiere das:
define 1_WZ_T2_3_notify notify FS20_a82602 \
{my $t23 = $value{"1_WZ_D3"};;\
if ($t23 eq "off") {fhem "set 1_WZ_D3 dim87%%"} else {fhem "set 1_WZ_D3 off"}}
attr 1_WZ_T2_3_notify alias 1_WZ_T2_Taste3
attr 1_WZ_T2_3_notify room Schalterbelegung
Das wäre jetzt einer der Codes, die das toggeln bedienen.
Diesen muss ich jetzt also noch auf neue Schreibweise ändern (runde Klammern) und möchte ihn erweitern um die Auswertung, welchen Befehl der Schalter (hier FS20_a82602) gesendet hat ("toggle" oder "dimupdown").
Bei "toggle" soll das ablaufen, was hier schon im Ode steckt, bei "dimupdown" soll der Dimmer (hier 1_WZ_D3) hoch- und runterdimmen.
..... schwierig ......
:-)
... so, hab mal auf die neuere Schreibweise umgestellt - passt das erstmal so ?
define 1_WZ_T2_3_notify notify FS20_a82602 \
{my $t23 = value(1_WZ_D3);;\
if ($t23 eq "off") {fhem "set 1_WZ_D3 dim87%%"} else {fhem "set 1_WZ_D3 off"}}
attr 1_WZ_T2_3_notify alias 1_WZ_T2_Taste3
attr 1_WZ_T2_3_notify room Schalterbelegung
... funktioniert nicht mehr mit der geänderten Schreibweise !
Hallo,
Step-by-Step
Erstmal den Code bitte der momentan bei dir mit toggle funktioniert.
Das dimupdown ist eine etwas "härtere" Story ;-)
Grüße
Ok, danke für deine Unterstützung.
Das hier ist der Code, der funktioniert:
define 1_WZ_T2_3_notify notify FS20_a82602 \
{my $t23 = $value{"1_WZ_D3"};;\
if ($t23 eq "off") {fhem "set 1_WZ_D3 dim87%%"} else {fhem "set 1_WZ_D3 off"}}
attr 1_WZ_T2_3_notify alias 1_WZ_T2_Taste3
attr 1_WZ_T2_3_notify room Schalterbelegung
Hallo,
ok:
define 1_WZ_T2_3_notify notify FS20_a82602 \
{my $t23 = $value{"1_WZ_D3"};;\
if ($t23 eq "off") {fhem "set 1_WZ_D3 dim87%%"} else {fhem "set 1_WZ_D3 off"}}
Das $value wird umgebaut - wie von Zrrronggg!!! schon angemerkt funktioniert das irendwann mal nicht mehr.
Du weißt aber das du, wenn dein Sender ein off sendet, das Licht hochdimmst und bei on ausschaltest?
Wenn das so bleiben soll - ok.
Ich würds umbauen ;-)
Aber das hängt vom WAF ab - je nachdem ob sich die übrigen "Tastendrücker" schon dran gewöhnt haben ^^
Ich häng dir gleich mal einen angepassten Code rein den du mal ausprobieren kannst.
Nur das dimup/down wird etwas tricky werden.
Grüße
Edith: Wieso prüfst du auf on/off?? Ich dachte dein Sender sendet ein toggle??
Edith2: hat sich erledigt - das ist der Empfänger-Status und nicht der Sender.
Hallo,
bevor ich mir da mein Hirn auswinde für den Dimup/Down.
Gibt es da nicht schon was mit untoggledirect/untoggleindirect??
Der Dim-Befehl soll ja WAF-gerecht gesendet werden ...
Licht aus ---> Langer Tastendruck ---> Hochdimmen
Licht gedimmt ---> Langer Tastendruck ---> Hochdimmen ---> Langer Tastendruck ---> Runterdimmen
Licht an ---> Langer Tastendruck ---> Runterdimmen
Grüße
Hmmmm, ich hab das mit UntoggleIndirect probiert, aber das hat nicht funktioniert.
Im Wiki steht, dass das für Dimmer nicht funktioniert...
Ok.
Ich hab dir deinen geposteten Code mal umgebaut:
define 1_WZ_T2_3_notify notify FS20_a82602 \{
if (Value("1_WZ_D3") eq "off") {
fhem ("set 1_WZ_D3 dim100%%");
}
else {
fhem ("set 1_WZ_D3 off");
}
}
Sollte soweit, ohne Dim, funktionieren.
Grüße
P.S.: Über den Rest muss ich erst ne Nacht schlafen.
Vllt. hat ja jemand anders ne (schnellere) Lösung, oder eine gute Idee
Zitat von: MarcS schrieb am Mi, 20 März 2013 21:23Hmmmm, ich hab das mit UntoggleIndirect probiert, aber das hat nicht funktioniert.
Im Wiki steht, dass das für Dimmer nicht funktioniert...
Klar. Weils ganz schön tricky ist.
Du musst den letzten Status auslesen und den letzten Dim-Befehl um zu entscheiden ob du weiter runterdimmen oder wieder hochdimmen sollst.
Dann noch auf welchen Wert zu dimmen ist und das ganze, für den WAF, ohne die Taste loslassen zu müssen ;-)
Grüße
P.S.: Wenn zum dimmen grobe Stufen reichen kann das auch selbst in einige if-abfragen zerlegt werden - viel Spaß^^
Danke erstmal!
Hallo und Guten morgen (Urlaub ist echt was schönes ;-) )
hier mal zu Versuchszwecken ein Code:
define 1_WZ_T2_3_notify notify FS20_a82602 {
if (Value("FS20_a82602") eq "toggle") {
if (Value("1_WZ_D3") eq "off") {
fhem ("set 1_WZ_D3 dim100%%");
}
else {
fhem ("set 1_WZ_D3 off");
}
}
if (Value("FS20_a82602") eq "dimupdown") {
fhem ("set 1_WZ_D3 %");
}
}
FS20_a82602 ist der "Schalter" nehm ich mal an.
Erst prüfen wir ob dieser ein "toggle" sendet ... wenn ja wird geprüft ob das Licht an oder aus ist und dementsprechend um-geschaltet.
Aber Achtung! Wenn das Licht NICHT off ist wird IMMER erst ausgeschaltet und beim zweiten toggle eingeschaltet resp. auf 100% hoch gedimmt.
Wenn kein toggle gesendet wurde prüfen wir ob FS20_a82602 ein dimupdown sendet (dies bitte ggf. anpassen je nachdem was gesendet wird)
und schaleifen diesen Befehl dann 1:1 an 1_WZ_D3 durch.
Theoretisch sollte ein kurzer Tastendruck (toggle) das Licht ausschalten / auf 100% dimmen und ein langer Tastendruck (dimm) das Licht dann dimmen.
Bitte mal versuchen und Rückmelden was das Licht macht.
Grüße
Hallo und danke für den Code. Ich war leider mit Grippe lach gelegen, konnte deswegen nicht schreiben. Ich werde das heute mal ausprobieren und Rückmeldung geben, was da geht...
V G
Marc
So - positive Rückmeldung !!!
Das Ganze funktioniert, wie es soll.
Getoggelt an/aus plus Dimmfunktion bei langem Tastendruck.
Vielen Dank für die Hilfe !!!
Hallo,
wunderbar wenn es klappt.
Auf zu neuen Ufern ;-)
Grüße
Hallo, wie kann ich den obigen Code in fhem integrieren? Muss das in die 99myutil???
Hallo,
wenn ein Code in eine 99_irgendwas.pm kommt findet sich am Anfang das Schlüsselwort "sub".
Das fehlt hier - also nein, der code kommt nicht in dei 99_irgendwas.pm
Weiters findet sich im define das Schlüsselwort "notify".
Das heisst der Code kommt direkt in die FHEM-Konfiguration.
Wie du den Code dort eingibst (FHEM-Befehlszeile) wurde hier schon einige Male erklärt - evtl. mal danach suchen.
Grüße
Ja sorry habe das etwas blöd geschrieben. also ich habe folgenden befehl an meine stehlampe gekoppelt:
define Schalt notify FS20_015d00 set wz_Stehlampe toggle
Damit kann ich logischerweise nur ON - Off schalten -> Funktioniert auch.
Jetzt wollte ich diesen notify per webfrontend (DEF) mit dem obigen code anpassen um auch dimmen
zu können. SPrich in den notify per copy and paste. WEnn ich das mache geht aber garnichts mehr (weder an -aus noch dimmen).
Ist diese Art der Eingabe komplett falsch? ( Habe auch gerade versucht nach Codeeingabe zu suchen aber mir fehlen
anscheinend die keywords)....
Hallo,
wenn du das per DEF versuchst wären ein paar Screenshots interessant damit wir sehen was du siehst.
Weiters wirft FHEM Fehlermeldungen aus - diese wären auch recht interessant.
Und wenn du den obigen Code 1:1 per copy&paste einträgst wird sich nichst tun - es sei den deine Geräte heissen exakt gleich wie in dem Code.
Grüße
P.S.: Suchbegirffe "Konfiguration bearbeiten" oder "notify anlegen" und in der erweiterten Suche nach Puschel* suchen lassen.
Dann solltest du ein paar Treffer bekommen.
Ok schonmal vielen Dank für die Hilfe...werde mich auf jeden Fall durch das Forum suchen...Screenshots
habe ich im Anhang...wobei notify_alt die lampe toggelt und notify_neu garnicht reagiert.....Fehlermeldung bekomme ich nicht
Hallo,
im DEF sollte das so
FS20_a82602 {
if (Value("FS20_a82602") eq "toggle") {
if (Value("1_WZ_D3") eq "off") {
fhem ("set 1_WZ_D3 dim100%%");
}
else {
fhem ("set 1_WZ_D3 off");
}
}
if (Value("FS20_a82602") eq "dimupdown") {
fhem ("set 1_WZ_D3 %");
}
}
aussehen.
Passt aber nicht so ganz zu deinem notify_neu - wirf mal die Leerzeile nach dem Device raus und setz die erste { so wie im Beispiel.
Grüße
Bin schon etwas weiter, was die erste Schleife angeht....nun kann ich wieder ein und aus schalten.
FS20_015d00 {
if (Value("FS20_015d00") eq "toggle") {
if (Value("wz_Stehlampe") eq "off") {
fhem ("set wz_Stehlampe on");
}
else {
fhem ("set wz_Stehlampe off");
}
}
if (Value("FS20_015d00") eq "dimup") {
fhem ("set wz_Stehlampe %");
}
}
Habe auch die Klippe des dimmens entdeckt - die Fernbedinung ist von F20, der dimmer ist
von Homematic.Mir ist aber nicht klar wie ich den Tastendruck auf die HM-Hardware
abstimme....nur mit press long geht das leider nicht...Gibt es da einen Ansatz?
Hallo,
die HM-Dimmer wollen mit "up" und "down" angesprochen werden zum dimmen ;)
Was den Dim-Teil in etwa so
if (Value("FS20_015d00") eq "dimup") {
fhem ("set wz_Stehlampe up");
}
if (Value("FS20_015d00") eq "dimdown") {
fhem ("set wz_Stehlampe down");
}
}
erweitern würde.
Grüße
Danke jetzt klappt alles....allerdings ist die Verzögerung zu gross...da dauert es Sekunden bis die Lampe reagiert...daher habe ich mich für ein Stufenmodell entschieden:
Kanal1_Stehlampe {
if (Value("Kanal1_Stehlampe") eq "toggle") {
if (Value("wz_Stehlampe") eq "off") {
fhem ("set wz_Stehlampe 40");
}
if (Value("wz_Stehlampe") eq "40") {
fhem ("set wz_Stehlampe 70");
}
if (Value("wz_Stehlampe") eq "70") {
fhem ("set wz_Stehlampe on");
}
if (Value("wz_Stehlampe") eq "on") {
fhem ("set wz_Stehlampe 0 0 5");
}
}
if (Value("Kanal1_Stehlampe") eq "dimupdown") {
fhem ("set wz_Stehlampe on");
}
}
Allerdings noch stark verbesserungswürdig....meine andere Idee
Toggle -> Lampe dimmt innerhalb von 15 sek auf 100 %
erneuter toggle innerhalb des hochfahrens stoppt bei der aktuellen Position
Kanal1_Stehlampe {
if (Value("Kanal1_Stehlampe") eq "toggle") {
if (Value("wz_Stehlampe") eq "off") {
fhem ("set wz_Stehlampe on");
fhem ("set wz_Stehlampe 0 0 20");
}
else {
fhem ("set wz_Stehlampe stop");
}
}
if (Value("Kanal1_Stehlampe") eq "dimupdown") {
fhem ("set wz_Stehlampe off");
}
}
Es wird heruntergedimmt, da der on Befehl ohne Verzögerung umgesetzt wird....
Klappt bisher ganz gut...werde den Code morgen nochmal überdenken..
Vielen Dank für die Hilfe
Hallo,
die Verzögerung wundert mich jetzt etwas - wie lange ist den die Zeitspanne vom Tastendruck bis zur Reaktion?
Ich schalte und dimme bei mir einige HM-Aktoren über solche notify auf diverse FS20AS4 (sind glaub ich die 4-fach Wandtaster).
Das klappt bei mir einwandfrei.
Ich werd das aber evtl. doch mal in einem Sub packen - mal schauen.
Grüße
Also beim on- und off Befehl reagiert der Aktor sofort. Nur beim dimmen vergehen ca.4 Sekunden bis er das dimmen anfängt....lg
Hi, eine Frage habe ich noch:
Kann man einen speziellen Status beim den HM-Aktoren abfragen wenn er gerade
in eine andere Position fährt? Also z.B. wenn er von 0 auf 100% fährt gibt er so
lange den Status "in Bewegung" aus.....