Tageszeitabhängiges Dimmen

Begonnen von Gumma, 27 Dezember 2012, 14:32:55

Vorheriges Thema - Nächstes Thema

Puschel74

Hallo,

ich bin mir sicher das das auch eleganter geht ;-)

define EG_Diele_S1_Tag notify 1_2112:on.* {\
if($hour > 15 || $hour <= 21) {\
fhem ("set 1_2111 dim31%%");;
fhem ("define EG_Diele_S1_Aus +00:04:00 set 1_2111 off");;
}\
else {
fhem ("set 1_2111 on") }\
}

Oder so ähnlich.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Zrrronggg!

define EG_Diele_S1_Tag notify 1_2112:on.* {\
if($hour > 15 || $hour <= 21) {\
fhem ("set 1_2111 dim50%% ;; define wieder_aus at +00:04:00 set 1_2111 off") }\
else { fhem ("set 1_2111 dim50%% ;; define wieder_aus at +00:04:00 set 1_2111 off") }\
}
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Puschel74

Wusste doch das sowas auch eleganter geht ;-)
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Zrrronggg!

Aber das verlängert noch nicht.  Dazu musst du eventuell alte "wieder_aus" vorher löschen. Geht so:

define EG_Diele_S1_Tag notify 1_2112:on.* {\
if($hour > 15 || $hour <= 21) {\
fhem ("set 1_2111 dim50%% ;; delete wieder_aus ;; define wieder_aus at +00:04:00 set 1_2111 off") }\
else { fhem ("set 1_2111 dim50%% ;; delete wieder_aus ;; define wieder_aus at +00:04:00 set 1_2111 off") }\
}


Hier werden eventuell älterer "wieder_aus" aus vorherigen Auslösungen gelöscht und jedes mal eine neue geschrieben, die den Zeitpunkt immer 4 Minuten nach hinten verschiebt.

Beachte, dass dies im Log Fehlermeldungen bei der ersten Auslösung gibt, wenn die letzte Auslösung mehr als 4 Minuten zurück liegt, da "delete" dann was löschen will, was nicht mehr da ist.

Etwa der Art "please define delete wieder_aus first"

Das ist aber egal, die kann man ignorieren. Wer's ganz akkurat haben will, könnte vor dem Löschen testen, ob es ein "wieder_aus" gibt. Das hat funktional aber keinen Vorteil, beseitigt eben nur die Fehlermeldungen im Log, rein kosmetisch. Macht die ganze Geschichte wegen der dazu erforderlichen verschachtelter IF-bfragen aber wesentlich komplexer. Ich mach das nie.

Denk jetzt bitte noch daran, den Resendintervall des IR Senosr möglichst hoch zu stellen, 180 Sekunden oder so. Das spart Funkzeit und Batterie. Im Wesentlichen muss der Sendeabstand eben nur deutlich kürzer als die Zeit die bei "wieder_aus" definiert ist.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Zrrronggg!

Uhrzeit und Dimwerte natürlich anpassen. Anstatt dim100% würde ich immer  "set xy on" vorziehen.

Nochwas: Du schreibt oben, das es ab 5 Uhr wieder voll hell werden soll. Daher ist es vermutlich besser, die Sache genau umzudrehen. Also die Zeit, in der es 31% Dimmen soll abzufragen und mit ELSE alles andere volle Helligkeit.  Das ergibt dann:


define EG_Diele_S1_Tag notify 1_2112:on.* {\
if($hour >= 0 || $hour < 5) {\
fhem ("set 1_2111 dim31%% ;; delete wieder_aus ;; define wieder_aus at +00:04:00 set 1_2111 off") }\
else { fhem ("set 1_2111 on ;; delete wieder_aus ;; define wieder_aus at +00:04:00 set 1_2111 off") }\
}

FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Gumma

Jetzt bleibt mir nur noch "herzlichen Dank" zu sagen!

Ihr habt mir sshr schnell und sehr gut weitergeholfen!

Danke!

VG
Gumma

Gumma

Zum Abschluss möchte ich noch meine vorläufige Endversion (durch eure Hilfe) des oben besprochenen Problemes posten. Vielleicht nutzt es ja jemandem (der so wenig Ahnung hat wie ich...):

define EG_Diele_S1_Tag notify 1_2112:on.* {\
my $hm = sprintf("%%02d:%%02d", $hour, $min);;\  
   if($hm >= "00:00" && $hm < "06:45") {\
   fhem ("set 1_2111 dim25%%;; delete wieder_aus ;; define wieder_aus at +00:02:10 set 1_2111 off") }\
   if($hm >= "06:45" && $hm < "21:00") {\
   fhem ("set 1_2111 dim100%%;; delete wieder_aus ;; define wieder_aus at +00:02:10 set 1_2111 off") }\
   if($hm >= "21:00" && $hm <= "23:59") {\
   fhem ("set 1_2111 dim50%%;; delete wieder_aus ;; define wieder_aus at +00:02:10 set 1_2111 off") }\  
}

Zur Erklärung für Newbees (wie ich):

1_2112 ist ein Bewegungsmelder
1_2111 ist die Deckenbeleuchtung im Flur

Funktion:
Zwischen 00:00 Uhr und 06:45 Uhr fungiert die Deckenlampe als Notbeleuchtung (25%)
Zwischen 06:45 Uhr und 21:00 Uhr wird die Diele mit 100% beleuchtet.
Zwischen 21:00 Uhr und 00:00 Uhr gibts eine gemütliche Abendbeleuchtung von 50%
Ist genügend Tageslicht vorhanden, sendet der Bewegungsmelder 1_2112 gar kein Signal (Regelung über Bewegungsmelder)

Achtung: Der Bewegungsmelder FS20 DU-2 kann nicht alle dim-Werte ausführen!

Zum define wieder_aus bitte in diesem Thread nachlesen, hab ich auch nur von Zrrronggg! (Danke!(//images/smiley_icons/icon_wink.gif) erhalten.

Viele Grüße
Gumma

PS.: Cooles Forum! Seit einem Jahr bastel ich an dem Problem rum. Heute im Forum angemeldet, seit heute funktionierts!

Puschel74

Hallo,

schön wen dein Code funktioniert.

So müsste es auch klappen:

define EG_Diele_S1_Tag notify 1_2112:on.* {\
my $hm = sprintf("%%02d:%%02d", $hour, $min);;\
if($hm >= "00:00" && $hm < "06:45") {\
fhem ("set 1_2111 dim25%%") }\
if($hm >= "06:45" && $hm < "21:00") {\
fhem ("set 1_2111 dim100%%") }\
if($hm >= "21:00" && $hm <= "23:59") {\
fhem ("set 1_2111 dim50%%") }\
if (DEFINED wieder_aus) {\ #oder so ähnlich, hab nicht nachgeschaut
fhem ("delete wieder_aus");;\
}\
fhem ("define wieder_aus at +00:02:10 set 1_2111 off");;\
}

Bin mir jetzt zwar nicht zu 100% sicher aber ich meine das das so klappen sollte
inkl. Prüfung ob wieder_aus schon existiert.
Dann hättest du dein wieder_aus einmal und kannst so bequemer die Nachlaufzeit
anpassen.
Mit der anderen Variante kannst du auch 3 unterschiedliche Nachlaufzeiten benutzen.

Also bitte nicht hauen wenn das so nicht klappt - ich habs noch nicht versucht ;-)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Gumma

Ist das jetzt was für die Abteilung "Codeschnipsel" oder ist das zu banal oder zu speziell?

VG
Gumma

Puschel74

Hallo,

weder noch.

Das wäre genau ideal für den Bereich Codeschnipsel ;-)
Aussagekräftiger Titel dazu und ab damit.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Zrrronggg!

Okay, glaube auch, dass man das ruhig ins Wiki eintragen kann. Aber dann schlage ich vor:

- nur Versionen die getestet sind, also Puschel74 letzten Vorschlag Stand jetzt nicht
- immer den einfachsten Code, der das Problem löst.

Bei letzterem Punkt habe ich insbesondere die Frage warum du

my $hm = sprintf("%%02d:%%02d", $hour, $min);;
if($hm >= "00:00" && $hm < "06:45")

verwendest anstatt die viel simplere Abfrage nach Stunde (wie bei mir weiter oben). Gehts da nur um die 6:45 anstatt  ">7"?
Wenn das einen echten Mehrwert bringt, denn ich gerade nicht sehe: Dann gut.

Wenn aber nicht würde ich die simplere Variante im Wiki für sinnvoller halten.
Oder ggf mit Erklärung des Unterscheides beides.

Zuletzt: Ein bisschen Kommentar nicht vergessen, in diesem Fall muss mindestens erläutert werden, das die Fehlermeldung im Log auftauchen können und das die ignorierbar sin.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Gumma

Hallo!

Ich hab den Code zwischenzeitlich schon in "Codeschnipsel" eingestellt. Gerne einfach ergänzen oder geänderte Codes einstellen. Ich hab den für mich praktikabelsten Code verwendet und versucht, mit meinem geringen Informatikwissen zu erklären. Da kann sicher der ein oder andere noch was informatives beitragen.

VG
Gumma

Puschel74

Hallo,

woah, gleich ins Wiki.
Ok. Ich dachte schön klein und kompakt --> Codeschnipsel.
Aber gut.
Ich werde heut abend mal meinen Teil testen.
Ich meine irgendwo im Wiki (oder in der Group) den Teil mit DEFINED gelesen zu haben - muss ich mal
heute abend in Ruhe stöbern und testen.
Oder aber Rudi, Boris, Martin oder wer auch immer schlagen hier noch auf und sagen mir
das der Test keinen Wert hat das es DEFINED so nicht gibt.
Das würde mir einiges an "arbeit (Lernerfolg)" ersparen ;-)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

stromer-12

Hallo,


...
fhem ("delete wieder_aus") if (Value("wieder_aus") ne "");;\
...

tut so bei mir

Gruß
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

Puschel74

Hallo,

das ist natürlich auch ne gute Idee.

Gleich mal abändern und testen.
Danke.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.