Treppenlichtsteuerung - ich dreh noch durch...

Begonnen von h-man-kl, 14 April 2016, 08:37:47

Vorheriges Thema - Nächstes Thema

h-man-kl

Hallo zusammen,
inzwischen hb ich es hinbekommen ein paar Makros aus meiner alten FHZ Steuerung nach fhem zu übersetzen und hab nun ein Konstrukt, was a) nicht so ganz funktioniert und b) stelle ich mir die Frage ob das auch einfacher geht...
Ziel: In Abhängigkeit vom Dämmerungssensor soll von einem Bewegungsmelder das Treppenlicht geschaltet werden. Es soll immer langsam hochgedimmt werden, dann für eine gewisse Zeit an sein und dann wieder langsam runtergedimmt werden. (alles mit FS20 Komponenten)
Je nachdem wie spät es ist soll dann noch die Helligkeit unterschiedlich sein.

Das unten angehängte Konstrukt dimmt zwar "Abends" langsam hoch, aber es wird nicht runtergedimmt sondern direkt ausgeschaltet. Die Variante "Nachts" funktioiniert garnicht :-(

Könnt ihr mir sagen ob ich das so überhaupt richtig durchdacht habe oder ob das Codetechnisch auch einfacher / komfortabler geht....
Der inhalt meines notify "n_TreppenlichtEG" sieht so aus:

FS20.Bewegungsmelder.Treppenhaus.S {
if (Value ("FS20.Daemmerung.S1") eq "off") { goto ende; };
if ($hour >=21 && $hour <=7) { goto dimNachts; };
if ($hour >=8 && $hour <21) { goto dimAbends; };
goto ende;

dimNachts:
  fhem ("set FS20.DimmerTreppenhaus.E dim30% 3");
  fhem("sleep 45; set FS20.DimmerTreppenhaus.E dim6% 10");
  fhem("sleep 60; set FS20.DimmerTreppenhaus.E off");
goto ende;
 
dimAbends:
  fhem ("set FS20.DimmerTreppenhaus.E dim50% 3");
  fhem("sleep 60; set FS20.DimmerTreppenhaus.E dim6% 10");
  fhem("sleep 60; set FS20.DimmerTreppenhaus.E off");
goto ende;
 
ende:
}


VIELEN DANK!
RasPi 3 mit MaxCube für FS20 , HM-Urart, HM-LAN, MiLight, HUE, Lightify, SONOS, Harmony, Unifi, FritzBox 7490... :-)
Ganz nach dem Motto: Normal? Normal is langweilig....

justme1968

ich meine es gibt kein dim6% kommando. es muss dim06% heissen. und es gibt auch keinen zweiten parameter nach der dim stufe.

es gibt keine zahl die gleichzeitig größer gleich 21 und kleiner gleich 7 ist. deshalb geht nachts nicht. an dieser stelle brauchst du ein ||.

einzelne fhem(...) aufrufe sind unabhängig voneinander. d.h. bei:   fhem("sleep 60; set FS20.DimmerTreppenhaus.E dim6% 10");
  fhem("sleep 60; set FS20.DimmerTreppenhaus.E off");
laufen beide timer gleichzeitig los und es nach ablauf der 60 sekunden wird direkt nach dem dim kommando fast gleichzeitig auch off gesendet.

wenn wenn du eine sequenz von kommandos mit diversen sleep dazwischen abarbeiten möchtest musst du alles in den gleichen fhem(...) aufruf stecken. also etwa so:fhem("set FS20.DimmerTreppenhaus.E dim50%; sleep 60; set FS20.DimmerTreppenhaus.E dim06%; sleep 60; set FS20.DimmerTreppenhaus.E off;");

ob die goto wirklich lesbarer sind als den code direkt in ein if/elsif/else einzubauen liegt vermutlich sehr im Auge des Betrachters:if( Value("FS20.Daemmerung.S1") eq "off" ) {
  #mach nichts
} elsif( $hour >=21 || $hour <=7 ) { #nachts
fhem(...);
} else { #sonst
  fhem(...);
}


gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

h-man-kl

Ich liebe dieses Forum!

dim06% ist natürlich richtig. Einen zweiten Parameter für die Zeit in der das passieren soll gibt es aber tatsächlich. Habe ich aus dem beispiel für ein Wakeuplight hier aus dem Forum. Das funktioniert ja auch beim hochdimmen.
Das mit den || wusste ich nicht und wird un umgesetzt.
So langsam verstehe ich auch endlich wie die Befehle abgearbeitet werden, wenn natürlich alle Befehle gleichzeitig laufen, dann muss das in eine Zeile hintereinander....

Ich werde es umsetzen und berichten!
RasPi 3 mit MaxCube für FS20 , HM-Urart, HM-LAN, MiLight, HUE, Lightify, SONOS, Harmony, Unifi, FritzBox 7490... :-)
Ganz nach dem Motto: Normal? Normal is langweilig....

h-man-kl

Sodele...
:-) Läuft!

sowohl in deiner Variante als auch in miener goto-Variante und mit dem zweiten Parameter beim Dimmer! so wollte ich das!

FS20.Bewegungsmelder.Treppenhaus.S {
if (Value ("FS20.Daemmerung.S1") eq "off") { goto ende; };
if ($hour >=21 || $hour <=7) { goto dimNachts; };
if ($hour >=8 || $hour <=20) { goto dimAbends; };
goto ende;

dimNachts:
  fhem ("set FS20.DimmerTreppenhaus.E dim31% 3; sleep 45; set FS20.DimmerTreppenhaus.E dim06% 10; sleep 10; set FS20.DimmerTreppenhaus.E off;");
goto ende;
 
dimAbends:
  fhem("set FS20.DimmerTreppenhaus.E dim50% 3; sleep 60; set FS20.DimmerTreppenhaus.E dim06% 10; sleep 10; set FS20.DimmerTreppenhaus.E off;");
goto ende;
 
ende:
}



nochmals Danke!!! - ich hab bestimmt noch mehr Probleme ;-)

Gruß H-man
RasPi 3 mit MaxCube für FS20 , HM-Urart, HM-LAN, MiLight, HUE, Lightify, SONOS, Harmony, Unifi, FritzBox 7490... :-)
Ganz nach dem Motto: Normal? Normal is langweilig....

justme1968

schön. nur noch eine sache: die dritte bedingung musst du mit && (und) schreiben. nur die zweite mit || (oder).

das geht bei dir nur zufällig weil die alles was außerhalb von 8-20 uhr ist schon vorher abgefangen wird.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

h-man-kl

ok, danke, dann änder ich das mal.
da scheint eh och ein fehler drin zu sein, denn nach 22 uhr geht klei licht an :-(
RasPi 3 mit MaxCube für FS20 , HM-Urart, HM-LAN, MiLight, HUE, Lightify, SONOS, Harmony, Unifi, FritzBox 7490... :-)
Ganz nach dem Motto: Normal? Normal is langweilig....

h-man-kl

Hallo,
ich hoffe mir kann nochmal jemand weiterhelfen.
es wird ab 21Uhr einfach kein Licht geschatet. Egal ob ich mit goto oder mit doif arbeite. Also vermute ich, dass es an der Definition des Zeitraumes liegt. 
Ich könnte jetzt wahrschenlich den Zeitraum von 21 bis 7 in zwei aufteilen von 21-23 und von 0-7, aber das geht doch sicher auch "schöner"....

nochmas DANKE!

Gruß
H-man
RasPi 3 mit MaxCube für FS20 , HM-Urart, HM-LAN, MiLight, HUE, Lightify, SONOS, Harmony, Unifi, FritzBox 7490... :-)
Ganz nach dem Motto: Normal? Normal is langweilig....

h-man-kl

ich werde hier noch verrückt.... und versuche nochmal die Sache zu erklären mit der Hoffnung, dass mir jemand sagen kann wo ich Fehler mache.
Gegeben: FS20 Dämmerungssensor, der ein on und ein off liefert; FS20 Bewegungsmelder, der  60sec auf on geht und dann wieder auf off (wird auch so in der Weboberfläche angezeigt), FS20 Dimmer.
Alle Geräte für sich funktionieren und sind so eingebunden, dass ich sie steurn kann bzw. den Stats sehen kann.

Ich möche wenn der Dämmerungssensor "on" ist und der Bewegungsmelder auslöst in Abhängigkeit von der Uhrzeit das Licht steuern.
Abends: Hochdimmen auf 50% Pause runterdimmen
Nachts: Hochdimmen auf 31% Pause runterdimmen

Irgendwie klappt es nicht richtig. entweder es wird der falsche Wert gedimmt, oder garnicht gedimmt oder es wird keine Pause gemacht.
Also habe ich gestern alles zerpflückt und neu angefangen => ich bekomme es nicht so hin wie ich es möchte.

Was  geht:
Mein notify "n_TreppenhauslichtEG" sieht jetzt so aus:

FS20.BewegungsmelderTreppenhausEG.S1 {
if (Value ("FS20.Daemmerung.S1") eq "on") {fhem ("set FS20.DimmerTreppenhaus.E dim31% 3; sleep 45; set FS20.DimmerTreppenhaus.E dim06% 10; sleep 10; set FS20.DimmerTreppenhaus.E off;");};
}


Dummerweise wird das ausgeführt sobald der Bewegungsmelder angeht und wenn er ausgeht.... :-(
Irgendwo hier im Forum hab ich gelesen, dass man beim erstellen des notify auch Parameter mitgeben kann. Testweise habe ich dann das ganze so angelegt:
define n_TreppenhauslichtEG notify FS20.BewegungsmelderTreppenhausEG.S1:on .....
Daraufhin ging das Licht nicht mehr an.

Ich bin für jede Hilfe Dankbar!

Gruß
H-Man

RasPi 3 mit MaxCube für FS20 , HM-Urart, HM-LAN, MiLight, HUE, Lightify, SONOS, Harmony, Unifi, FritzBox 7490... :-)
Ganz nach dem Motto: Normal? Normal is langweilig....

CoolTux

Vielleicht solltest Du erstmal im Eventmonitor schauen wie genau der Event aus schaut der vom BM kommt.
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

h-man-kl

So, ein wenig bin ich weiter.... (das mit dem eventmonitor war garnicht so verkehrt - auch wenn ich damit nicht alle Fragen beantworten kann)
Der Bewegungsmelder sednet kein "on" sondern ein "on-for-timer 60".
Hochdimmen etc. beim einschalten und nix machen beim ausschalten klappt hiermit:
FS20.BewegungsmelderTreppenhausEG.S1 {
if ((Value ("FS20.Daemmerung.S1") eq "on") && (Value ("FS20.BewegungsmelderTreppenhausEG.S1") eq "on-for-timer 60")) {fhem ("set FS20.DimmerTreppenhaus.E dim31% 3; sleep 50; set FS20.DimmerTreppenhaus.E dim06% 10; sleep 10; set FS20.DimmerTreppenhaus.E off;");};
}


Meine nächste Bausstelle ist also die Zeitgeschichte. Folgendes habe ich gemacht:

FS20.BewegungsmelderTreppenhausEG.S1 {
if ((Value ("FS20.Daemmerung.S1") eq "off"){
#mach nichts
}

elsif (( $hour >=21 || $hour <=6 ) && (Value ("FS20.BewegungsmelderTreppenhausEG.S1") eq "on-for-timer 60")) {fhem ("set FS20.DimmerTreppenhaus.E dim31% 3; sleep 50; set FS20.DimmerTreppenhaus.E dim06% 10; sleep 10; set FS20.DimmerTreppenhaus.E off;");};}

else (Value ("FS20.BewegungsmelderTreppenhausEG.S1") eq "on-for-timer 60") {fhem ("set FS20.DimmerTreppenhaus.E dim50% 3; sleep 50; set FS20.DimmerTreppenhaus.E dim06% 10; sleep 10; set FS20.DimmerTreppenhaus.E off;");};}

}


Das Ergbnis ist, dass genau garnix mehr passiert, wenn der Bewegungsmelder auslöst.

Gruß & Danke
H-Man
RasPi 3 mit MaxCube für FS20 , HM-Urart, HM-LAN, MiLight, HUE, Lightify, SONOS, Harmony, Unifi, FritzBox 7490... :-)
Ganz nach dem Motto: Normal? Normal is langweilig....

CoolTux

Warum machst Du es so umständlich was das triggern an geht. Wenn Du nichts anderes brauchst/das notify nur anspringen soll bei on-for-timer 60 dann lass doch Dein notify nur darauf anspringen


FS20.BewegungsmelderTreppenhausEG.S1:on-for-timer.* { 

         if ((Value ("FS20.Daemmerung.S1") ne "off") {

                   if ( $hour >= 21 && $hour <= 6 ) {
                                 fhem "set FS20.DimmerTreppenhaus.E dim31% 3; sleep 50; set FS20.DimmerTreppenhaus.E dim06% 10; sleep 10; set FS20.DimmerTreppenhaus.E off";
                   } else {
                                fhem "set FS20.DimmerTreppenhaus.E dim50% 3; sleep 50; set FS20.DimmerTreppenhaus.E dim06% 10; sleep 10; set FS20.DimmerTreppenhaus.E off;
                   }
         }
}
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

h-man-kl

#11
Erstmal vielen Dank für deine Geduld :-)
Warum ich es so umständlich mache? Gute Frage - ich bin noch nicht so lange mit fhem unterwegs und versuche einefach eine funktionierende Lösung zu finden - wenn es einfacher / besser geht und mir das jemand sagt, nehme ich das gerne an.

ich habe deinen Code 1:1 kopiert => wenn ich nun - wie gehabt - "set FS20.BewegungsmelderTreppenhausEG.S1 on-for-timer 60" in die Eingabezeile tippe, passiert wieder NIX. Im Eventmonitor steht lediglich, dass der Bewegungsmelder auf 60 Sekunden an gesetzt wurde.....

und dann hab ich gesehen dass eine ) fehlt! Hinter ne"off") dort hab ich sie hingesetzt und nun scheint es - zumindest beim simulieren - zu funktionieren!

Gruß
H-Man

PS: Nochwas zum vereinfachen: wie kann ich denn ein Notify aus eine anderen heraus aufrufen?  Ich habe verschiedene Sensoren, die das Treppenhauslicht steuern sollen. Kann ich ein notify bauen, was nur den teil ab "if ((Value..."  beinhaltet und das lasse ich vom Bewegungsmelder oder einem Schalter oder was anderem aufrufen? Oder wäre es geschickter für jeden Sensor ein eigenes notify zu bauen?

Nochmals Danke!
RasPi 3 mit MaxCube für FS20 , HM-Urart, HM-LAN, MiLight, HUE, Lightify, SONOS, Harmony, Unifi, FritzBox 7490... :-)
Ganz nach dem Motto: Normal? Normal is langweilig....

CoolTux

Dann verändern mal das


FS20.BewegungsmelderTreppenhausEG.S1:on-for-timer.* {


in das


FS20.BewegungsmelderTreppenhausEG.S1:.on-for-timer.* {
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

h-man-kl

#13
du warst schneller als ich mit meinem edit.....  Der Punkt war aber nicht nötig
kannst du mir trotzdem noch oben das beantworten ?  :-)
RasPi 3 mit MaxCube für FS20 , HM-Urart, HM-LAN, MiLight, HUE, Lightify, SONOS, Harmony, Unifi, FritzBox 7490... :-)
Ganz nach dem Motto: Normal? Normal is langweilig....

CoolTux

#14
Zitat von: h-man-kl am 22 April 2016, 12:46:32
du warst schneller als ich mit meinem edit.....
aller wo ist bei den Zeilen der Unterschied?

Eigentlich viel schlimmer, ich habe eine zuviel gemacht. lach



FS20.BewegungsmelderTreppenhausEG.S1:on-for-timer.* { 

         if (Value ("FS20.Daemmerung.S1") ne "off") {

                   if ( $hour >= 21 && $hour <= 6 ) {
                                 fhem "set FS20.DimmerTreppenhaus.E dim31% 3; sleep 50; set FS20.DimmerTreppenhaus.E dim06% 10; sleep 10; set FS20.DimmerTreppenhaus.E off";
                   } else {
                                fhem "set FS20.DimmerTreppenhaus.E dim50% 3; sleep 50; set FS20.DimmerTreppenhaus.E dim06% 10; sleep 10; set FS20.DimmerTreppenhaus.E off;
                   }
         }
}


Was Deine Frage zur Regex an geht verweise ich mal hier hin
Kleiner Tip. Wenn ein Notify anspringt ändert sich immer der STATE. Passiert das nicht ist was faul an der Regex.
Zweitens - Springt das Notify an, macht aber nicht das was es soll, schaut man als erstes ins Logfile. Da stand bestimmt ne Fehlermeldung wegen der vergessenen Klammer.

Dein Schaltungswunsch muß ich mir mal in Ruhe durchlesen
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