Ich habe folgenden Befehl, der eine Lampe einschaltet wenn es dunkel wird und ich zu Hause bin:
define Stehlampe_AutoAn at +*00:01:00 {if ((ReadingsVal("myTwilight","twilight_weather",0) < 31.1) && (Value("BinIchDa") eq "present")) {fhem "set Stehlampe on";;}}
Mein Problem ist nun, dass ich das Licht nicht mehr dauerhaft ausschalten kann.
Was kann ich denn machen, damit das Licht aus bleibt, wenn ich es per Hand mit einem FHEM - Befehl (also Klick auf Icon) abgeschaltet habe?
Noch besser wäre natürlich, dass die Automatik wieder aktiviert wird, sobald ich das Haus verlassen habe.
Ideen würden mich freuen, aber bitte wenn es geht, dann für ein Anfängerhirn.
Danke. :-)
In dem notify welches das einschalten ausführt auch noch ein disable auf dieses notify setzen. Per Timer oder sonstwas kannst du es dann wieder enablen.
Danke, aber diese Antwort überfordert mich vorerst als Anfänger.
Etwas genauer wäre für mich verständlicher. Ich hab doch gar kein Notify verwendet. Kannst du nochmal was nachlegen ? :-)
Zitat von: Invers am 06 Januar 2014, 22:33:03
define Stehlampe_AutoAn at +*00:01:00 {if ((ReadingsVal("myTwilight","twilight_weather",0) < 31.1) && (Value("BinIchDa") eq "present")) {fhem "set Stehlampe on";;}}
Die Lösung ist generell nicht "sauber", du belastet das System nur unnütz indem du aller 1 Minute das if abfragst.
Besser ist es nur auszuwerten wenn neue Daten geliefert werden, zB so:
define Stehlampe_AutoAn notify myTwilight:twilight_weather {if ((ReadingsVal("myTwilight","twilight_weather",0) < 31.1) && (Value("BinIchDa") eq "present")) {fhem "set Stehlampe on; attr Stehlampe_AutoAn disable 1";;}}
Dadurch wird das if nur ausgeführt wenn FHEM einen neuen Wert für myTwilight:twilight_weather bekommt. Trifft die Bedingung zu, wird die Lampe geschaltet und das notify deaktiviert - also kann das Licht nicht wieder automatisch bei Dunkelheit eingeschaltet werden.
Du kannst dieses zB automatisch jeden Tag mittags wieder aktivieren mit
define enable_Stehlampe_AutoAn at *12:00:00 attr Stehlampe_AutoAn disable 0
...oder auch mit einem PRESENCE auf dein Handy, wenn du (bzw. dein Handy) das Haus verlässt, wird es wieder aktiviert
Aber noch eine Frage interessehalber: Was steckt hinter dem myTwilight:twilight_weather?
Ich suchte auch eine Lösung zum Einschalten bei Dunkelheit. Sunset ist wenig hilfreich, da es unabhängig von Bewölkung etc. ist und so nicht wirklich die Helligkeit widerspiegelt. Und da es keine Helligkeitssensoren gibt (nicht welche die bei Dunkelheit selbst einschalten, sondern welche mir kontinuierlich einen Helligkeitswert liefern), habe ich mir einen Temperatursensor mit Fotowiderstand zum Helligkeitssensor umgebaut. Funktioniert halbwegs, besser wäre statt Fotowiederstand glaube ich aber einen UV-Sensor um Bewölkung und somit "gefühlte Dunkelheit" besser erkennen zu können.
Korrektur: Gerade selbst gefunden - das TWILIGHT-Modul war mir bisher noch gar nicht bekannt......
Erst einmal vielen Dank für die mühe, die du dir gemacht hast. Nun habe ich auch verstanden, worum es geht und werde alles umschreiben und testen. Gegebenenfalls melde ich mich dazu noch einmal, wenn ich darf.
Ich habe früher mit Sunset geschaltet. Das ist aber unbefriedigend, da die Events nicht wirklich passen, auch dann nicht, wenn man sie anpasst.
Nun nehme ich einfach den Wetterwert in der bis jetzt unbestätigten Hoffnung, dass ich nun immer zu einer selben, bestimmten Helligkeit schalten kann. Natürlich bin ich damit immernoch von der Qualität des Wetterdienstes abhängig. Nicht immer sagen die "wolkig" wenn es bei mir halt wolkig ist. Aber allgemein scheint es besser zu klappen, als andere Auswertungen.
Mist, deine Korrektur habe ich zu spät gesehen. Nun lasse ich meine Erklärung aber stehen, denn ich will auch mal was Kluges sagen. LOL
Ich muss noch einmal um Hilfe bitten.
Kann es sein, dass da noch ein Fehler drinnen ist?
define Stehlampe_AutoAn notify myTwilight:twilight_weather {if ((ReadingsVal("myTwilight","twilight_weather",0) < 31.1) && (Value("BinIchDa") eq "present")) {fhem "set Stehlampe on; attr Stehlampe_AutoAn disable 1";;}}
Wenn ich die Zeile kopiere und in die Befehlszeile von FHEM eingebe, bekomme ich bei der Kontrolle die unten im Bild dargestellte Anzeige.
Bei Attributes steht halt disable 1";}}
Darum gehe ich von einem Syntaxerror aus, der mir aber in der Log nicht angezeigt wird.
Ein Test ergab, dass die Zeile auch nicht schaltet.
...hab momentan nix zum Testen, probier mal:
define Stehlampe_AutoAn notify myTwilight:twilight_weather {if (ReadingsVal("myTwilight","twilight_weather",0) < 31.1 && Value("BinIchDa") eq "present") {fhem("set Stehlampe on; attr Stehlampe_AutoAn disable 1")}}
Nö, geht leider auch nicht. Bei gleicher Verfahrensweise steht da jetzt:
disable 1")}}
Es erfolgt keine Schaltung.
Moin,
das disable 1")}} ist ein Überbleibsel daraus, dass der Befehl {fhem ... von fhem nicht interpretiert wird.
Schau mal in dein Log, da sollten Einträge wie "Unknown command {fhem" drin sein.
So dürfte es aber gehen:
define Stehlampe_AutoAn notify myTwilight:twilight_weather {if (ReadingsVal("myTwilight","twilight_weather",0) < 31.1 && Value("BinIchDa") eq "present") set Stehlampe on; attr Stehlampe_AutoAn disable 1;}
Warum das so ist? Pffft... (dicke Backen)
Tritt bei mir aber auch gerade auf. Auch bei Schaltungen, die sonst immer funktionierten. Es gibt auch noch einen weiteren Thread, wo heute ein ähnliches Problem berichtet wurde.
Perl arbeitet den Befehl {fhem "set Stehlampe on; attr Stehlampe_AutoAn disable 1";;}} nicht im Ganzen, sondern Stück für Stück ab. Zuerst trifft Perl auf {fhem "set Stehlampe on;, findet darin den Fehler "Unknown command" und bricht ab. Danach kommt attr Stehlampe_AutoAn disable 1";;}}, was Perl dann wieder interpretieren kann und dementsprechend disable auf 1";;}} setzt (Perl hat hier schon wieder vergessen, dass da ein Befehl mit einer öffnenden geschweiften Klammer voranging. Der Befehl wurde fehlerhaft verworfen und damit von Perl vergessen).
Geht auch nicht. Jetzt kommt der Fehler:
Unknown command }, try help . :(
Schade.
Ich hatte übrigens keine Fehlermeldung im Log.
Hallo,
und so?
define Stehlampe_AutoAn notify myTwilight:twilight_weather {
if (ReadingsVal("myTwilight","twilight_weather",0) < 31.1 && Value("BinIchDa") eq "present"){
fhem("set Stehlampe on");
fhem("attr Stehlampe_AutoAn disable 1");
}
}
Genau sovielen öffenden Klammern müssen auch schliessende Klammern gegenüberstehen - das ist bei { und bei ( der Fall.
Bitte durchzählen.
Ebenso mit den "
Notepad++ zeigt das aber schön an.
Die commandref im Abschnitt attr ist auch nicht uninteressant sowie allgemein das Einsteiger.pdf
Grüße
Jetzt bekomme ich bei Eingabe des Codes in die Kommandozeile die Fehler:
Unknown command fhem("attr, try help.
Unknown command }, try help.
Darf man den Code vielleicht gar nicht in die Kommandozeile eingeben?
Die angeführten Doks hatte ich bereits mehrfach gelesen und ziehe sie auch immer zu Rate. Aber manchmal komme ich nicht weiter. Besonders hinderlich sind da meine fehlenden Englischkenntnisse und die Commandref enthält nicht alle Erklärungen in der deutschen Version. Zu vielen Dingen ist da zwar ein Link, aber der läuft dann ins Leere. Schade, dass die deutsche Commandref so unvollständig ist. Die Google Übersetzung hilft da leider auch nicht immer weiter.
Verflixt, hab's gerade gemerkt, als ich Puschels Post gelesen habe. Denn da ich alles mit Notepad++ schreibe und dann in DEF übertrage, war ich mir sicher, dass ich alle Klammern hatte.
Hatte ich auch.
Aber: Perl und FHEM benutzen denselben Trenner (;). Ich habe vergessen, hier set Stehlampe on; attr Stehlampe_AutoAn disable 1 zu sagen, dass es kein Perl-, sondern ein FHEM-Trenner ist. Zwischen on und attr statt einem einfach zwei Semikola und der Code läuft bei mir.
Generell bin ich aber auch eher ein Freund der übersichtlichen Mehrzeiler.
Gerade bei der Fehlersuche ist ein mehrzeiliger Code Gold wert.
Zitat von: Invers am 07 Januar 2014, 11:31:37
Darf man den Code vielleicht gar nicht in die Kommandozeile eingeben?
Den Code von Puschel? Nein, darfst Du so nicht.
Wenn Du den Code von Puschel in die Kommandozeile eingeben möchtest, dann
muss hinter jede Zeile "Leerzeichen Backslash" geschrieben werden, also z.B. define Stehlampe_AutoAn notify myTwilight:twilight_weather { \
Einfacher geht's aber, wenn Du die Kommandozeile nur zur "Grunddefinition" nimmst und den Code selbst über die Detailansicht (und dann den DEF-Knopf) eingibst.
Also:
define Stehlampe_AutoAn notify myTwilight:twilight_weather { <ENTER-Taste>, dann unter "unsorted" den Eintrag Stehlampe_AutoAn anklicken, dort dann auf DEF klicken (ist ein Button, wird als solcher aber nicht angezeigt!) und anschließend den restlichen Code reinkopieren. Zum Schluss klickst Du dann noch auf den Knopf "modify Stehlampe_AutoAn". Fertig.
Hallo,
ZitatDarf man den Code vielleicht gar nicht in die Kommandozeile eingeben?
:o
Wenn du die Zeilen einzeln in die Befehlszeile von FHEM eingibst ist das für FHEM kein Code-Bestandteil sondern etwas was sofort ausgeführt werden soll.
Nur gut das es dazu erst (gefühlt) 10 Beiträge gibt.
Wenn du ein at oder ein notify in FHEM anlegen willst dann so:
define Stehlampe_AutoAn notify myTwilight:twilight_weather {}
in die Befehlszeile eingeben und dann so anpassen das es so wie im Screenshot aussieht.
Das DEF vorne dran lässt sich anklicken ;)
Grüße
Edith: Zu langsam - aber ich wollt meinen Beitrag nichtmehr löschen 8)
Vielen Dank an alle Helfer, besonders an OiledAmoeba und Puschel.
Ich habe eure Erklärungen sehr gut verstanden und werde das auch nicht mehr vergessen.
Ich habe jetzt alles mit dem Code von Puschel angelegt, so, wie ihr mir das gezeigt habt. Es kam keine Fehlermeldung und auch das Log scheint sauber zu sein. Nun muss ichmich überraschen lassen, ob das Licht auch heute angeht.
Danke.
Ich hbae den Vode mal geändert, um testen zu können. Hab <100 aus < 31.1 gemacht.
Eigentlich müsste ich jetzt von der Lampe geblendet werden, aber es schaltet nichts.
Was kann ich denn noch machen?
Ich gehe davon aus, dass Du gewartet hast, bis es ein update bei Twilight gab?
Hallo,
versuch mal <=100
Ich geh davon aus, da ich jetzt in twilight 100 stehen habe, das 100 gleich 100 ist und nicht kleiner ;)
Grüße
Ich vergleiche ja nicht mit twilight, sondern mit twilight_weather. Das ist kleiner 100. Den Test habe ich gestartet, als es 100 war und dann gesunken ist. Hat aber nicht reagiert.
Habe auch auf das Update gewartet.
Da hätte ich jetzt spontan anzubieten: Bin_ich_da hat auch das Value present?
Gesendet von meinem GT-I9100 mit Tapatalk
Ja, present.
Hat das logfile was aufgezeichnet?
Gesendet von meinem GT-I9100 mit Tapatalk
Da liegen keine Events vor.
Hallo,
oft wirkt ein Leerzeichen wunder.
Versuch mal
<= 100
Grüße
Hilft leider auch nicht.
Hallo,
wird das notify überhaupt ausgelöst?
Füg mal an den Anfang ein Log(3,"Notify geprueft");
oder so ein.
Wie sieht der Wert aus der in twilight_weather steht?
Auslesen und per Log-Befehl ins Logfile schreiben lassen (ist auch gleichzeitig eine gute Übung ;D ).
Grüße
Ich hoffe, ich habe dich richtig verstanden.
twilight_weather 53 2014-01-07 16:18:58
Aus Verzweiflung habe ich den Code wieder einzeilig gemacht, weil ich dachte, das hilft vielleicht.
myTwilight:twilight_weather Log(3,"Notify geprueft");{if (ReadingsVal("myTwilight","twilight_weather",0) <= 100 && Value("BinIchDa") eq "present"){fhem("set Stehlampe on");fhem("attr Stehlampe_AutoAn disable 1");}}
Keine Eintragung im Log
Log muss in den Bereich der geschweiften Klammer.
Puschel ist glaub ich auf dem richtigen Weg. Kann es sein, dass das Notify nur reagiert, wenn myTwilight:twilight_weather.* steht?
Gesendet von meinem GT-I9100 mit Tapatalk
Geändert:
myTwilight:twilight_weather {Log(3,"Notify geprueft");if (ReadingsVal("myTwilight","twilight_weather",0) <= 100 && Value("BinIchDa") eq "present"){fhem("set Stehlampe on");fhem("attr Stehlampe_AutoAn disable 1");}}
Keine Eitragung im Log erfolgt.
Hallo,
ZitatKeine Eitragung im Log erfolgt.
Wenn sonst Level-3 Einträge im Logfile stehen löst das notify nicht aus.
ZitatKann es sein, dass das Notify nur reagiert, wenn myTwilight:twilight_weather.* steht?
Was sagt der Versuch von OiledAmoeba?
Grüße
Der Versuch ist beendet.
Taadaaaaa!
Das war der Burner!
.* heisst das Wundermittel. :-)
Log: 2014.01.07 16:53:51 3: Notify geprueft
Stehlanpe: Leuchtet mir mitten ins vor Verzweiflung gealterte Gesicht. :-)
Ich danke euch beiden für die Mühe.
Sollte jemand noch erklären können, warum das so geht, wäre ich dankbar.
Ihr ahnt gar nicht, wie ich mich freue.
Das liegt daran, dass der Event, auf den das Notify triggert, nicht nur twilight_weather heißt. Dadurch, dass da noch Werte hinter stehen, wird es ignoriert. Fhem, bzw. Perl, erwartet aber, dass es nur diese Daten gibt. Mit .* wird aber gesagt, dass nach dem Ausdruck noch weitere Daten kommen dürfen.
Sorry, das hatte ich total übersehen. Diese zwei Zeichen hatte ich total übersehen...
Gesendet von meinem GT-I9100 mit Tapatalk
ZitatMit .* wird aber gesagt, dass nach dem Ausdruck noch weitere Daten kommen dürfen.
Warum kann man denn dann nicht immer .* angeben? Kommen keine weiteren Daten, erledigt sich die Sache von selber und kommen welche, werden sie halt ignoriert. Oder geht das so nicht?
Wäre tatsächlich problematisch.
Beispielsweise möchte ich nur auf den Schalterzustand Stube:on reagieren. Würde fhem .* implizieren, würde das Notify auch auf Stube:on-for-timer oder :on-till reagieren, was ich dann durch weiteren Code erst wieder abfangen müsste.
Und da ist es einfacher, .* dazu zu schreiben, wenn man es braucht. Man darfs halt nur nicht vergessen ;-)
Gesendet von meinem GT-I9100 mit Tapatalk
Verstanden. Danke.
Gern
Gesendet von meinem GT-I9100 mit Tapatalk