FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Invers am 06 Januar 2014, 20:37:37

Titel: Nur einmal täglich schalten
Beitrag von: Invers am 06 Januar 2014, 20:37:37
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. :-)
Titel: Antw:Nur einmal täglich schalten
Beitrag von: roedert am 06 Januar 2014, 20:48:03
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.
Titel: Antw:Nur einmal täglich schalten
Beitrag von: Invers am 06 Januar 2014, 22:33:03
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 ? :-)
Titel: Antw:Nur einmal täglich schalten
Beitrag von: roedert am 06 Januar 2014, 23:00:18
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......
Titel: Antw:Nur einmal täglich schalten
Beitrag von: Invers am 06 Januar 2014, 23:38:29
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
Titel: Antw:Nur einmal täglich schalten
Beitrag von: Invers am 07 Januar 2014, 09:15:53
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.

Titel: Antw:Nur einmal täglich schalten
Beitrag von: roedert am 07 Januar 2014, 09:24:16
...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")}}
Titel: Antw:Nur einmal täglich schalten
Beitrag von: Invers am 07 Januar 2014, 09:46:49
Nö, geht leider auch nicht. Bei gleicher Verfahrensweise steht da jetzt:
disable 1")}}
Es erfolgt keine Schaltung.
Titel: Antw:Nur einmal täglich schalten
Beitrag von: OiledAmoeba am 07 Januar 2014, 10:53:51
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).
Titel: Antw:Nur einmal täglich schalten
Beitrag von: Invers am 07 Januar 2014, 11:12:04
Geht auch nicht. Jetzt kommt der Fehler:
Unknown command }, try help .  :(
Schade.

Ich hatte übrigens keine Fehlermeldung im Log.
Titel: Antw:Nur einmal täglich schalten
Beitrag von: Puschel74 am 07 Januar 2014, 11:17:11
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
Titel: Antw:Nur einmal täglich schalten
Beitrag von: Invers am 07 Januar 2014, 11:31:37
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.
Titel: Antw:Nur einmal täglich schalten
Beitrag von: OiledAmoeba am 07 Januar 2014, 11:32:51
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.
Titel: Antw:Nur einmal täglich schalten
Beitrag von: OiledAmoeba am 07 Januar 2014, 11:40:39
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.
Titel: Antw:Nur einmal täglich schalten
Beitrag von: Puschel74 am 07 Januar 2014, 11:43:41
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)
Titel: Antw:Nur einmal täglich schalten
Beitrag von: Invers am 07 Januar 2014, 12:13:16
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.
Titel: Antw:Nur einmal täglich schalten
Beitrag von: Invers am 07 Januar 2014, 15:27:55
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?

Titel: Antw:Nur einmal täglich schalten
Beitrag von: OiledAmoeba am 07 Januar 2014, 15:30:18
Ich gehe davon aus, dass Du gewartet hast, bis es ein update bei Twilight gab?
Titel: Antw:Nur einmal täglich schalten
Beitrag von: Puschel74 am 07 Januar 2014, 15:40:40
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
Titel: Antw:Nur einmal täglich schalten
Beitrag von: Invers am 07 Januar 2014, 15:47:33
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.
Titel: Antw:Nur einmal täglich schalten
Beitrag von: OiledAmoeba am 07 Januar 2014, 15:56:17
Da hätte ich jetzt spontan anzubieten: Bin_ich_da hat auch das Value present?

Gesendet von meinem GT-I9100 mit Tapatalk

Titel: Antw:Nur einmal täglich schalten
Beitrag von: Invers am 07 Januar 2014, 15:56:59
Ja, present.
Titel: Antw:Nur einmal täglich schalten
Beitrag von: OiledAmoeba am 07 Januar 2014, 15:58:54
Hat das logfile was aufgezeichnet?

Gesendet von meinem GT-I9100 mit Tapatalk

Titel: Antw:Nur einmal täglich schalten
Beitrag von: Invers am 07 Januar 2014, 15:59:26
Da liegen keine Events vor.
Titel: Antw:Nur einmal täglich schalten
Beitrag von: Puschel74 am 07 Januar 2014, 16:00:22
Hallo,

oft wirkt ein Leerzeichen wunder.

Versuch mal
<= 100

Grüße
Titel: Antw:Nur einmal täglich schalten
Beitrag von: Invers am 07 Januar 2014, 16:09:40
Hilft leider auch nicht.
Titel: Antw:Nur einmal täglich schalten
Beitrag von: Puschel74 am 07 Januar 2014, 16:14:25
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
Titel: Antw:Nur einmal täglich schalten
Beitrag von: Invers am 07 Januar 2014, 16:23:37
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
Titel: Antw:Nur einmal täglich schalten
Beitrag von: OiledAmoeba am 07 Januar 2014, 16:27:03
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

Titel: Antw:Nur einmal täglich schalten
Beitrag von: Invers am 07 Januar 2014, 16:30:33
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.
Titel: Antw:Nur einmal täglich schalten
Beitrag von: Puschel74 am 07 Januar 2014, 16:39:02
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
Titel: Antw:Nur einmal täglich schalten
Beitrag von: Invers am 07 Januar 2014, 16:57:24
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.
Titel: Antw:Nur einmal täglich schalten
Beitrag von: OiledAmoeba am 07 Januar 2014, 17:32:58
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

Titel: Antw:Nur einmal täglich schalten
Beitrag von: Invers am 07 Januar 2014, 17:43:04
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?
Titel: Antw:Nur einmal täglich schalten
Beitrag von: OiledAmoeba am 07 Januar 2014, 17:59:58
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

Titel: Antw:Nur einmal täglich schalten
Beitrag von: Invers am 07 Januar 2014, 18:13:07
Verstanden. Danke.
Titel: Antw:Nur einmal täglich schalten
Beitrag von: OiledAmoeba am 07 Januar 2014, 18:15:41
Gern

Gesendet von meinem GT-I9100 mit Tapatalk