Türkontakt schaltet Aktor (Nicht!)

Begonnen von franky08, 02 September 2013, 20:08:24

Vorheriges Thema - Nächstes Thema

franky08

Habe schon wieder mal ein Problem und nach 4 Tagen verzweifelten rumexperimentieren habe ich folgende Frage. Ein Türkontakt (HM-SEC-SC) soll abhängig von der Tageszeit (sunset bis 24.00 Uhr) einen Schaltaktor (HM-LC-Sw2-PB-FM) für 30 sec. einschalten.
Gedacht hatte ich so: (Das ist mittlerweile der 4. oder 5. Ansatz)

#SZ_Licht schalten
define LichtTmrOn at *{sunset("Horizon=10")} set { \
fhem ("define LichtAn notify Schalter_Tuer:open set Licht_SZ on-for-timer 30")} \
{fhem("on-till 24:00:00")}
#
 
Vorher so: (damit ging das Licht zur definierten Zeit zwar an aber die ganze Nacht über, was meine Frau nicht so gut fand)

#SZ_Licht schalten
define LichtTmrOn at *20:00:00 {\
{fhem "define LichtAn notify Schalter_Tuer:open set Licht_SZ on-for-timer 60"}}
define LichtTmrOff at *01:00:00 {delete LichtTmrOn}
define Licht_Aus at *01:00:30 set Licht_SZ off


Kann mir da bitte jemand weiterhelfen ?

Danke franky08
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

betateilchen

im Prinzip mußt Du rausfinden, ob die aktuelle Zeit zwischen sunset und mitternacht liegt und den Schaltbefehl nur dann ausführen.

Also ungefähr so

define nachtNotify notify aktorTut:irgendwas { if(sunset < $now && $midnight > $now) { fhem("set Lampe on-for-timer 30") } }

Mit sunset und Zeitbestimmungen hab ich mich noch nicht tiefer beschäftigt, drum kann ich Dir spontan kein funktionierendes Coding bezüglich $now und $midnight liefern, aber ich wollte Dir zumindest das Funktionsschema zeigen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

Kann man irgendwie testen, jetzt wo die Sonne schon weg ist, ob das funktioniert ? Mit list nachtNotify sehe ich die Zeit nicht.

Werde wohl bis morgen nach der Arbeit warten, komme nicht weiter. Wie gesagt mit:
define LichtTmrOn at *20:00:00 {\
{fhem "define LichtAn notify Schalter_Tuer:open set Licht_SZ on-for-timer 60"}}

geht das Licht zur definierten Zeit an nur das AUS klappt nicht.
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

franky08

habe jetzt scheinbar einen Ansatz gefunden, nicht über eine Und Verknüpfung sondern über Oder:

define LichtAn notify Schalter_Tuer:open { if($hour > 7 || $hour < 8) { fhem "set Licht_SZ on-for-timer 30" } }

mus ich noch anpassen, aber scheint zwischen 7.00 Uhr und 8.00 Uhr zu funktionieren!

Gruß franky08
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

betateilchen

Deine Abfrage

if($hour > 7 || $hour < 8)

ist ziemlich sinnlos...


 0 >7 nein <8   ja = ja
 1 >7 nein <8   ja = ja
 2 >7 nein <8   ja = ja
 3 >7 nein <8   ja = ja
 4 >7 nein <8   ja = ja
 5 >7 nein <8   ja = ja
 6 >7 nein <8   ja = ja
 7 >7 nein <8   ja = ja
 8 >7   ja <8 nein = ja
 9 >7   ja <8 nein = ja
10 >7   ja <8 nein = ja
11 >7   ja <8 nein = ja
12 >7   ja <8 nein = ja
13 >7   ja <8 nein = ja
14 >7   ja <8 nein = ja
15 >7   ja <8 nein = ja
16 >7   ja <8 nein = ja
17 >7   ja <8 nein = ja
18 >7   ja <8 nein = ja
19 >7   ja <8 nein = ja
20 >7   ja <8 nein = ja
21 >7   ja <8 nein = ja
22 >7   ja <8 nein = ja
23 >7   ja <8 nein = ja


fällt Dir was auf?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

Ja, bin im Moment nur auf Arbeit und kann ich nachher erst testen. Habe das Beispiel aus der Perl Referenz und später ist mir aufgefallen das es ja eine ODER Verknüpfung ist :-)


Licht ist immer AN Aha!
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

betateilchen

if($hour >= 18 && $hour < 24)

Macht mehr Sinn, bei dem was Du vorhast. Da funktioniert das Einschalten von 18:00:00 bis 23:59:59

Dann brauchst Du den ersten Vergleich nur noch umbauen:

if(!isday() && $hour < 24)

Damit solltest Du Deinem Ziel schon recht nahe sein.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

Danke, betateilchen, scheint jetzt zu laufen kann morgen mehr sagen, wenn die Nacht vorbei ist.
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

franky08

Aktor ist jetzt On wenn es dunkel ist, dass ist so auch OK (oder lässt sich nach  isday noch ein +/- Offset angeben?). Doch leider schaltet der Aktor auch in der Nacht nach 24 Uhr noch. Habe $hour < 24 mal in $hms < 24:00:00 geändert, mal sehen ob dann nach 24.00 Uhr der Schalter aus bleibt.




Gruß franky08
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

betateilchen

isday() liefert einen logischen Wert (wahr|falsch) zurück, da gibt es keinen Offset.
Du kannst statt mit isday aber auch mit sunset arbeiten, dort hast Du mehr Möglichkeiten.

Das Problem bei $hour ist natürlich, dass 03:00 auch kleiner als 24:00 und immer noch nachts ist.
Daran hatte ich nicht gedacht, und daran wird auch $hms nichts ändern.

Teste mal folgendes:

if(!isday() && $hour ~~ [18..24])

Damit wird das Schalten nur zwischen 18 und 24 Uhr ausgeführt und nur, wenn schon nicht mehr "Tag" ist.


---
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

Kann man das irgendwie testen ohne das man warten muss bis es dunkel ist ?
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

betateilchen

klar, denk doch mal mit, das ist ganz einfach ...

if($hour ~~ [13..15])

Wenn das klappt, klappt auch das mit dem !isday und 18..24
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

Hallo betateilchen,

habe zum probieren den Code folgendermaßen geändert:

define LichtAn notify Schalter_Tuer:open { if($hour ~~ [16..17]) { fhem "set Licht_SZ on-for-timer 30" } }

ab 16:00 Uhr schaltet der Aktor dann aber nach 17:00 Uhr leider auch noch. Teste es gleich nochmal.

P.S. Kann auch daran liegen das ich nur die fhem.cfg gespeichert habe und FHEM nicht neu gestartet habe.
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

betateilchen

Das Verhalten Deines Schalters ist völlig korrekt. Du musst anfangen zu verstehen, was Du eigentlich tust.


Deine Abfrage bedeutet: "Ist die Stunde der aktuellen Uhrzeit im Bereich von 16 - 17?"
Die "Grenzwerte" sind immer mit eingeschlossen.
Diese Abfrage ist also gültig von 16:00 Uhr bis 17:59 Uhr.
Ab 18 Uhr darf das Schalten dann aber nicht mehr erfolgen.

Wenn Du nur von 16:00 bis 16:59 schalten willst, würde die Abfrage einfach heißen if($hour == 16)

Ein Neustart von fhem ist dafür nicht notwendig.


---
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

Stimmt, man denkt eben nicht daran, dass in die laufende Stunde noch die 59 Minuten bis zur nächsten Stunde mit eingeschlossen sind. Das habe ich nicht gewusst.

Danke für die vielen Tipps, da ich mich erst seit ca.2 Wochen mit FHEM beschäftige, gibt es eben viel zu lernen.

Vielen Dank franky08
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1