HI!
Ich versuche mir meine Hausbeleuchting zu basteln und stoße auf Widerstand... Wieviele Zeilen dürfen da rein?
ich möchte in der Woche morgens um 5 wenn noch kein Sonnenaufgang war lichter schalten aber wenn Sonnenaufgang war sollen diese aus bleiben...
Wie bringe ich es meiner DEF bei das diese nur schalten soll wenn noch kein Sonnenaufgang war? Also Vorm Sonnenaufgang soll es schalten aber nicht danach...
Wäre es vielleicht einfacheer mit einem dummy zu arbeiten der mir signalisiert das Sonnenaufgang aus oder an ist und dann sich darauf beziehen?
Vielen Dank!
hier mein DEF aus der normalschicht:
*05:00:00 { if(!$we) { fhem("set KuechenTisch on-till 05:45:00;set Deckenfluter on") }}
*05:00:00 { if sunrise() { fhem("set Fensterbeleuchtung on-till sunrise() ;set Hausbeleuchtung off") }}
Hi,
ich verstehe das Thema und deine erste Frage nicht.
Aber ich würde es mit einem DOIF machen.
So in der Artdefmod di_LichtAblauf DOIF ([06:10-{sunrise_abs("REAL",0,"6:11","10:00")}] or [{sunset("REAL")}-22:00])((set SW01_Sw02,LichtKu.* on)) DOELSE ((set SW01_Sw02,LichtKu.* off))
Nur als Vorschlag ...
Gruß Otto
defmod di_LichtAblauf DOIF ([06:10-{sunrise_abs("REAL",0,"6:11","10:00")}] or [{sunset("REAL")}-22:00])((set SW01_Sw02,LichtKu.* on)) DOELSE ((set SW01_Sw02,LichtKu.* off))
HI! In deinem Fall würde doh das Licht um 06:10 morgens zum Sonnenaufgang, aber nicht vor 06:11 und nicht nach 10:00 Uhr ON gehen. Ansonsten geht sie aus... Richtig?
In meinem Fall soll die Lampe um 5 on gehen aber NICHT wenn der Sonnenaufgang schon war... Dann soll sie aus bleiben. :-\
Oh mann... Ich bin zu doof dafür... das war mit dem Lightmanager n kleines bisschen einfacher...
Ich muss da mal vorsichtig fragen, Dein obiger Code, wolltest Du den in ein at reinmachen?
Oder waren das nur 2 Beispiele die nicht geklappt haben?
Moin,
so etwas ähnliches habe ich auch ;-) Am Wochenende geht die Lampe ebenfalls nicht an. Aus geht sie bei Sonnenaufgang.
*06:20:00 {
if ( !(isday()) ) {
if ( !($we) ) {
fhem("set Lampe on-till ".sunrise("HORIZON=1") );
}
}
}
Zitat von: misux am 27 Februar 2018, 01:17:19
defmod di_LichtAblauf DOIF ([06:10-{sunrise_abs("REAL",0,"6:11","10:00")}] or [{sunset("REAL")}-22:00])((set SW01_Sw02,LichtKu.* on)) DOELSE ((set SW01_Sw02,LichtKu.* off))
HI! In deinem Fall würde doh das Licht um 06:10 morgens zum Sonnenaufgang, aber nicht vor 06:11 und nicht nach 10:00 Uhr ON gehen. Ansonsten geht sie aus... Richtig?
In meinem Fall soll die Lampe um 5 on gehen aber NICHT wenn der Sonnenaufgang schon war... Dann soll sie aus bleiben. :-\
Oh mann... Ich bin zu doof dafür... das war mit dem Lightmanager n kleines bisschen einfacher...
Soll das Licht nur angehen? Wer schaltet es wann wieder aus? Manuell? Von Hand? Der doif?
Beschreib doch mal genau was es machen soll...
Mit dem Handy online, daher kurz gefasst...
Es soll nur an gehen, jeden Tag um 5 aber NICHT nach dem Sonnenaufgang.
Anders gesagt : Es soll immer um 5 an gehen es seidenn es ist schon Sonnenaufgang gewesen, dann soll es aus bleiben.
Die Ausinstanz erledigt ein anderer Befehl...
Bin schon fast soweit das ich einen dummy TAG /NACHT baue. Und dann das Licht um 5 einschalten lasse NUR wenn der dummy TAG/NACHT auf nacht steht. Die Umschaltung des dummy TAG/NACHT erledigt dann ein Sunrise/sunset at Befehl. Vielleicht ist das einfacher
Zitat von: Wuehler am 27 Februar 2018, 07:05:24
Moin,
so etwas ähnliches habe ich auch ;-) Am Wochenende geht die Lampe ebenfalls nicht an. Aus geht sie bei Sonnenaufgang.
*06:20:00 {
if ( !(isday()) ) {
if ( !($we) ) {
fhem("set Lampe on-till ".sunrise("HORIZON=1") );
}
}
}
*06:20:00 { fhem("set Lampe on-till ".sunrise("HORIZON=1") ) if( !(isday()) and !($we) ) }
Macht ihn Übersichtlicher und schöner
Das hier sollte dem Threadersteller helfen
*05:00:00 { if(!$we) {
fhem("set KuechenTisch on-till 05:45:00;set Deckenfluter on");
}
if( sunrise() ) {
fhem("set Fensterbeleuchtung on-till sunrise() ;set Hausbeleuchtung off");
}
}
@misux: Wenn es nur angehen soll ersetze on-till durch on. Wenn es das nicht ist, verstehe ich deine Frage wohl nicht richtig, oder du die Antworten.
@cooltux: das war mein allererstes notify damals in fhem. Da konnte ich perl noch gar nicht ;D ;)
Zitat von: Wuehler am 27 Februar 2018, 09:23:13
@cooltux: das war mein allererstes notify damals in fhem. Da konnte ich perl noch gar nicht ;D ;)
Solche Teile habe ich auch noch zu Hauf in meiner Installation ;D
Ok. Das klingt gut aber da ich die Vorgehensweise des Fhem noch nicht gut genug kenne muss ich anders fragen:
Das hier sollte dem Threadersteller helfen
*05:00:00 { if(!$we) {
fhem("set KuechenTisch on-till 05:45:00;set Deckenfluter on");
}
if( sunrise() ) {
fhem("set Fensterbeleuchtung on-till sunrise() ;set Hausbeleuchtung off");
}
}
[/quote]
Was passiert wenn sunrise um 4:45 ist? Wird dann trotzdem die Fensterbeleuchtung um 5 geschaltet?
Vielleicht kapiere ich es dann.... ::)
Zitat von: misux am 27 Februar 2018, 09:57:41
Ok. Das klingt gut aber da ich die Vorgehensweise des Fhem noch nicht gut genug kenne muss ich anders fragen:
Das hier sollte dem Threadersteller helfen
*05:00:00 { if(!$we) {
fhem("set KuechenTisch on-till 05:45:00;set Deckenfluter on");
}
if( sunrise() ) {
fhem("set Fensterbeleuchtung on-till sunrise() ;set Hausbeleuchtung off");
}
}
Was passiert wenn sunrise um 4:45 ist? Wird dann trotzdem die Fensterbeleuchtung um 5 geschaltet?
Vielleicht kapiere ich es dann.... ::)
Nein. Das ganze macht auch wenig Sinn. Zu mindest was die Sunrise Geschichte an geht. Versuche mal bei sochen Dingen Ereignisbasiert zu denken.
Was willst Du? Wenn die Sonne auf gegangen ist soll die Fensterbeleuchtung an gehen und die Hausbeleuchtung aus.
Was den on-till Befehl an geht glaube ich das der nicht geht, bin mir da aber unsicher.
Suche mal bitte im Wiki nach Sunrise da gibt es einen tollen Artikel wie man at mit sunrise anlegen kann. So das die Uhrzeit von Sunrise automatisch als at Uhrzeit genommen wird.
Moin misux,
bevor Du einen Dummy anlegst, schon zigfach erwähnt aber von Dir nicht wahrgenommen:
isday()
Sagt Dir ob Tag oder Nacht ist!
Gruß Otto
Um nochmal im Code zu denken:
at
*05:00:00 { fhem("set Lampe on") if(!isday()) }
DOIF falls Du mehr reinpacken willst, das erscheint mir dann im DOIF immer irgendwie einfacher
([05:00] and !isday())(set Lampe on)
Siehe auch (https://forum.fhem.de/index.php?topic=50815.0)
Sollte genau das tun was Du oben in #6 beschrieben hast: Licht ab 5 aber nicht wenn schon Tag ist.
Aber wie gesagt, ich verstehe im noch das Thema und den ersten post nicht. :-[
Zitat von: Otto123 am 27 Februar 2018, 11:49:01
Um nochmal im Code zu denken:
at
*05:00:00 { fhem("set Lampe on") if(!isday()) }
DOIF falls Du mehr reinpacken willst, das erscheint mir dann im DOIF immer irgendwie einfacher
([05:00] and !isday())(set Lampe on)
Siehe auch (https://forum.fhem.de/index.php?topic=50815.0)
Sollte genau das tun was Du oben in #6 beschrieben hast: Licht ab 5 aber nicht wenn schon Tag ist.
Aber wie gesagt, ich verstehe im noch das Thema und den ersten post nicht. :-[
Ich glaube das ist es! ;D Werde das mal Irgendwie am Wochenende mit anderen Zeiten testen... Klingt aber sehr einfach und plausiebel... Das mit dem isday() hatte ich irgendwie nicht aufm Schrim. Wenn also kein Wert zwischen den Klammern ist bedeutet das das isday()=0 und es ist nacht, und wenn ich da eine 1 reinpacke dann isday(1)=Tag richtig?
Und meine Frage aus dem ersten Thread war ob man im Doif DEF die befehle so untereinander schreiben kann...
Vielen Dank euch allen für die Hilfe!
Zitat von: misux am 01 März 2018, 10:07:37
Wenn also kein Wert zwischen den Klammern ist bedeutet das das isday()=0 und es ist nacht, und wenn ich da eine 1 reinpacke dann isday(1)=Tag richtig?
zwischen den klammern steht nichts, weil diese funktion keine parameter erwartet!
du wertest den rückgabewert von isday() aus -> 0 = Nacht, 1 = Tag
@misux einfach mal versuchen zu lesen:
https://fhem.de/commandref_DE.html#SUNRISE_EL
@nils Du hast nicht ganz recht, die Funktion erwartet zwar nicht unbedingt einen Parameter aber verarbeitet fast alle Parameter von sunrise_el!
Und Du hast mit der Rückgabe nicht ganz Recht, es ist eine boolsche Funktion, die gibt wahr und unwahr zurück. Wahr wird irgendwie in der Rückgabe auf 1 gemappt, aber unwahr nicht immer auf auf 0.
https://forum.fhem.de/index.php/topic,84883.msg772452.html#msg772452
Man kann die Klammer meines Wissen auch weglassen, wenn man keine Parameter übergibt, ich schreib sie immer hin. :D
Zitat von: Otto123 am 01 März 2018, 12:00:41
@nils Du hast nicht ganz recht, die Funktion erwartet zwar nicht unbedingt einen Parameter aber verarbeitet fast alle Parameter von sunrise_el!
danke für die aufklärung. hab sie mir im code nicht angeschaut :) commandref hatte ich nix gefunden ::)
Zitat von: Otto123 am 01 März 2018, 12:00:41
Und Du hast mit der Rückgabe nicht ganz Recht, es ist eine boolsche Funktion, die gibt wahr und unwahr zurück. Wahr wird irgendwie in der Rückgabe auf 1 gemappt, aber unwahr nicht immer auf auf 0.
https://forum.fhem.de/index.php/topic,84883.msg772452.html#msg772452
ja diese !1 bzw. !0 perl "problematik" hatte ich letztens hier auch gelesen.
aaaaaber in der commandref steht:
bei http://commandref.fhem.de/commandref_DE.html#SUNRISE_EL
Zitatisday()
liefert (int) 1 wenn Tag ist, (int) 0 wenn Nacht ist.
und bei den perl specials http://commandref.fhem.de/commandref_DE.html#perl
ZitatWenn Sie das 99_SUNRISE_EL.pm Modul benutzen, haben Sie zugriff auf folgende Funktionen:
sunset($offset, $min, $max)
sunrise($offset, $min, $max)
isday()
Der Wert von "offset" wird in Sekunden angegeben und das Format für min/max ist "HH:MM" oderr "HH:MM:SS". isday gibt 1 zurück, wenn die Sonne sichtbar ist und ansonsten den Wert 0
Zitat von: Otto123 am 01 März 2018, 12:00:41
Man kann die Klammer meines Wissen auch weglassen, wenn man keine Parameter übergibt, ich schreib sie immer hin. :D
mmmmh weiß ich nicht, ich würde sie auch immer hinschreiben....
Die "richtig verbindliche Doku" ist die englische Fassung:
ZitatAll functions take up to three arguments:
- The first specifies an offset (in seconds), which will be added to the event.
- The second and third specify min and max values (format: "HH:MM").
isday() can be used in some notify or at commands to check if the sun is up or down. isday() ignores the seconds parameter, but respects min and max. If min < max, than the day starts not before min, and ends not after max. If min > max, than the day starts not after max, and ends not before min.
Im Zweifel immer auch da mal reinsehen, ist vor allem in den Basissachen tatsächlich oft aufschlußreicher als die deutsche Fassung ;) .
Gruß, Beta-User
Aber der erste Parameter wird bei isday nicht ignoriert!
@nils probiere jetzt und heute Abend mal aus was isday und !isday dann tatsächlich zurückliefert :) ich war auch erstaunt.
Zitat von: Otto123 am 01 März 2018, 16:37:27
Aber der erste Parameter wird bei isday nicht ignoriert!
Wer sagt das jetzt Rudi? Das ist ein Auszug aus der aktuellen commandref...
Ich habe nix anderes gesagt :) dort steht der zweite Sekunden Parameter wird ignoriert. REAL und CIVIL und so kann man angeben min und max auch.
Zitat von: Beta-User am 01 März 2018, 16:33:56
Die "richtig verbindliche Doku" ist die englische Fassung:
Im Zweifel immer auch da mal reinsehen, ist vor allem in den Basissachen tatsächlich oft aufschlußreicher als die deutsche Fassung ;) .
ok stimmt, habe ich nicht gemacht. schande über mich 8)
Zitat von: Otto123 am 01 März 2018, 16:37:27
@nils probiere jetzt und heute Abend mal aus was isday und !isday dann tatsächlich zurückliefert :) ich war auch erstaunt.
ich glaub dir das ja. (kann es leider gerade nicht testen)
wollte nur auf die commandref verweisen, und da steht (int) 1 bzw. (int) 0. (für mich erstmal zahlen ;) )
Zitat von: Otto123 am 01 März 2018, 16:48:38
Ich habe nix anderes gesagt :) dort steht der zweite Parameter wird ignoriert. REAL und CIVIL und so kann man angeben min und max auch.
Hmmm, ich lese einen Unterschied zwischen "the second parameter" (deine Übersetzung bzw. Annahme, dass es sich bei dem "s" um einen typo handelt) und "the seconds parameter". Letzteres steht im Text, und der "seconds parameter" ist der erste der anzugebenden Parameter. Auch der Rest vom Text paßt zu diesem Verständnis, dass "seconds" der erste Parameter ist...
Ähm, das stimmt ja so auch!
isday liefert jetzt eine 1 und nach Sonnenuntergang eine 0 aber die negation liefert jetzt keine 0 aber nach Sonnenuntergang ein 1
Zitat von: Otto123 am 01 März 2018, 16:56:31
isday liefert jetzt eine 1 und nach Sonnenuntergang eine 0 aber die negation liefert jetzt keine 0 aber nach Sonnenuntergang ein 1
ah ok , also reden wir doch über das selbe, oder? ;)
Zitat von: nils_ am 01 März 2018, 16:25:47
ja diese !1 bzw. !0 perl "problematik" hatte ich letztens hier auch gelesen.
@beta-user Du hast Recht und ich auch :)
Es ist eine Frage der wundersamen Zählweise im Text.
ZitatAll functions take up to three arguments:
The first specifies an offset (in seconds), which will be added to the event.
The second and third specify min and max values (format: "HH:MM").
...
Optionally, for all functions you can set first argument which defines a horizon value
Also zu deutsch: nicht zweite Parameter wird ignoriert sondern die Sekunden (habe es oben geändert), aber die anderen gehen.