Programmzeile / Befehl für Aktor, auslösbar aber erst Nachts

Begonnen von mathyou, 01 September 2013, 21:16:20

Vorheriges Thema - Nächstes Thema

mathyou

Hallo
Sicher hat von Euch schon mal jemand einen Befehl im FHEM für FS20 erstellt, in dem ein Bewegungsmelder, hier der PIRA FS20 einen FS20 Befehl sendet, der aber dann nur in der Nacht, also wenn es dunkel wird, erst von der Fritz Box 7390 dann ausgelöst wird, bzw. werden kann.

Der Grund ist, es soll eine Beleuchtung aber nur nachts geschaltet werden können... da der Bewegungsmelder PIRA ja leider immer Personen erkennt...

Wie müßte der Befehl dann aussehen: z.B.

define Auto_Ausenlicht_an at *18:55:00 { if ($fr) || ($su)  {  fhem("set Ausenlicht on") } }

Könnte jemand mir hier weiter helfen? Danke für Euere Hilfe,
Gruß, mathyou.


rudolfkoenig

Ueblich ist etwas in der Art:

define lichtAn notify piri.* { if(!isday()) fhem("set Lampe on-for-timer 300") }

mathyou

Zitat von: rudolfkoenig schrieb am Mo, 02 September 2013 10:43Ueblich ist etwas in der Art:

define lichtAn notify piri.* { if(!isday()) fhem("set Lampe on-for-timer 300") }


Hallo Herr Koenig

wie ist denn da die Zuordnung:

wo ist hier/welcher ist, Auslöse-Name? ist es piri define lichtAn notify piri.

Was heist: * { if(!isday()) ist das dann eine Konstante für Tags von 8 bis 20 Uhr?

Der zu schaltende Aktor ist dann wohl die "Lampe": fhem("set Lampe on-for-timer 300")

Wieviel Zeit ist 300 ?: Sekunden oder Minuten

Es wäre sehr nett wenn mir da jemand ein paar genaue Details dazu schreiben könnte und wie der Befehlscode/Zeile genau geschrieben werden müßte.
Danke für Euere Hilfe, mfg. mathyou.

betateilchen

1. Auslöser ist "piri.*" also wenn der Sensor namens piri einen Event auslöst.
2. isday() ist eine Funktion, die sich aus dem Zeitraum zwischen Sonnenauf- und Sonnenuntergang berechnet und entweder 1 (=wahr) oder 0 (=falsch) zurückliefert.
3. bei !isday() bedeutet das Ausrufezeichen eine Verneinung. Also "wenn es nicht Tag ist" (= dann ist Nacht)
4. on-for-timer arbeitet immer mit Sekunden
5. die oben angegebene Codezeile ist bereits vollständig und genau
6. ein bißchen Grundlagenanlesen in commandref, wiki oder hier im Forum sollte man m.E. schon machen...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

mathyou

Hallo Betateilchen
Alles klar, so habe ich das aber nun auch verstanden. Es fehlten zum Code nur ein paar kleine Infos, die Du ja hier einfach ge- bzw. benannt hast und man als Einsteiger/Neuling wieder weiter hilft...
Oft sind es nur einzelne Wörter, oder Infos zu den Parametern... die wir Anfänger dann noch nicht korrekt verstehen um sie richtig zuordnen zu können.
Dank Euch beiden für die Hilfe, ich teste das ganze mal nun mit der Hardware.
Viele Grüße, mathyou.

mathyou

Hallo,
kann das mal jemand ansehen/testen

Ich habe den Befehl für den Bewegungsmelder geschrieben:

define PIRA_Bew.Melder_1_1_an notify PIRA_Bew.Melder_1_1* { if(!isday()) fhem("set Aussenlicht_Haustuer on-for-timer 300") }

und bekomme nun im Logfile diese Fehlermeldung: wenn ich den Bewegungsmelder auslöse...

2013.09.06 13:04:00 3: PIRA_Bew.Melder_1_1_an return value: syntax error at (eval 192) line 1, near ") fhem"

2013.09.06 13:04:00 3: PIRA_Bew.Melder_1_1_an return value: syntax error at (eval 193) line 1, near ") fhem"

Kann mir jemand auf die sprünge helfen, was schreibe / oder habe ich falsch.
Geschaltet wird FS20 über Fritz Box 7390 mit Cul 3.
Danke und Gruß, mathyou.

rudolfkoenig

Bitte die ersten Kapitel eines Perl-Buches durchlesen, es lohnt sich. Wirklich. Auch fuer uns :)

If Syntax ist:
 if(Bedingung) { Code }
oder
  Code if(Bedingung);
usw.


betateilchen

@Rudi: den Syntaxfehler hast Du aber hier im Thread mit Deinem "üblich ist..."  vorgegeben. Da brauchst Du Dich nicht wundern, wenn das jemand dann auch so falsch übernimmt.

Und wenn er den Syntaxfehler dann raushat, wird es trotzdem nicht funktionieren, weil auch das regex falsch ist (in diesem Fall wurde es einfach falsch abgeschrieben) ...

define PIRA_Bew.Melder_1_1_an notify PIRA_Bew.Melder_1_1.* { if(!isday()) ( fhem("set Aussenlicht_Haustuer on-for-timer 300") } }

Achtung: dieser Code wird zwar erstmal funktionieren, aber er wird die Lampe bei jeder Meldung, die vom PIRI kommt, einschalten! Also erstmal rausfinden, wie der korrekte Regex-Ausdruck heißen muss (z.B. durch beobachten, was der PIRI an Meldungen schickt)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

mathyou

Hallo,
leider geht es auch mit diesem Code / Befehl nicht:

define PIRA_Bew.Melder_1_1_an notify PIRA_Bew.Melder_1_1.* { if(!isday()) ( fhem("set Aussenlicht_Haustuer on-for-timer 300") } }

es kommen nur Fehlermeldungen, schalten tut es nicht...

Kann mir jemand einmal einen Befehl korrekt hier her schreiben der geht und den ich als Vorlage verwenden könnten?
Danke Euch Gruß, mathyou.


Meine Melder heist: PIRA_Bew.Melder_1_1
und das Licht heist: Aussenlicht_Haustuer

Jetzt habe ich mir mal mit diesem Befehl grob weiter geholfen:
define PIRA_Bew.Melder_1_1NotifyOn notify PIRA_Bew.Melder_1_1:on set Funktionsgruppe2_Lichter_Haustuer on for timer 70

rudolfkoenig

Hallo mathyou, da ist noch ein ( vs { Fehler drin:

define PIRA_Bew.Melder_1_1_an notify PIRA_Bew.Melder_1_1.* { if(!isday()) { fhem("set Aussenlicht_Haustuer on-for-timer 300") } }

betateilchen

ja, sorry, die runde Klammer war ein Tippfehler von mir.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

mathyou

Hallo,
vielen Dank, so geht der Befehl jetzt:

define PIRA_Bew.Melder_1_1_an notify PIRA_Bew.Melder_1_1.* { if(!isday()) { fhem("set Aussenlicht_Haustuer on-for-timer 300") } }

Da hätte ich noch lange testen können, so eine Klammer ist aber auch verflixt...
Dank Euch allen...

Gibt es auch einen Befehl um das Status Icon vom Bewegungsmelder von on auf off zu setzen wenn der on Befehl dann 1 min vorbei ist?

Mit diesem Befehl klappt es nicht das Icon auf off zu setzen:

define PIRA_Bew.Melder_1_1_an_2 notify PIRA_Bew.Melder_1_1.* { if(!isday()) { fhem ("at +00:01:00") ("set PIRA_Bew.Melder_1_1 off") } }

Gruß, mathyou.


mathyou

Hallo Herr Koenig
Bitte nicht böse sein, wenn wir Anfänger zu dusselig sind und die Dinge nicht zuordnen können...

Ich habe nun unter Ihrem Link mir dies per Google übersetzt:

Follow-on-for-timer
planen eine "SetState off; Trigger off" für die Zeit als Argument für den on-for-timer-Befehl angegeben. Oder gleich mit auf, wenn der Befehl aus-for-Timer ist.

Aber was ich nun wo oder wie in einen Befehl einfügen müsste weis ich absolut nicht, mit "SetState off" ect. wüßte ich nicht wo und wie ich das so einsetzen muß daß das Icon nach einer bestimmten Zeit sich zurück stellt auf "off".

Könnten Sie mir hier einmal einen Beispiel Befehl hinein schreiben, wo ich sehe wie und wo die Parameter/Befehle sitzen müssen.
Das wäre sehr nett, wir kämpfen uns halt step bei step in das Thema hinein, natürlich mache ich mir dann auch Notizen, damit ich es später bei mir wieder nachlesen kann ....
Mfg, mathyou.

betateilchen

Mach Dir nix draus, Rudi hat einfach mal wieder nur die Hälfte von dem gelesen, was Du geschrieben hast.
Das follow-on-for-timer funktioniert nur bei der Haustürlampe, nicht aber beim Bewegungsmelder selbst - wie von Dir gewünscht.

Den Status des Bewegungsmelders selbst (und damit das Symbol des Bewegungsmelders selbst) wirst Du vermutlich nicht ohne weiteres setzen können.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!