FHEM Forum

FHEM => Automatisierung => Thema gestartet von: docb am 15 Juni 2013, 17:36:59

Titel: Notify mit sunset - kann das funktionieren?
Beitrag von: docb am 15 Juni 2013, 17:36:59
Hallo Leute, nachdem ich mich heute durch die Wiki und das Einsteiger-PDF gearbeitet habe,
wollte ich mal mein erstes komplexeres Notify machen:


define not_KE_Bewegungsmelder notify KE_Bewegungsmelder:motion.* { if ($hm gt sunset || $hm lt sunrise){ fhem "set SS_KE_Gang on-for-timer 30"; }}


Ohne das If hat es funktioniert, aber irgenwie hab ich das Gefühl, dass ich es mit dem if etwas versaut habe.
Fhem meckert auch: Unknown command }}, try help Unknown command }}, try help
Aber ich brauche die geschweiften Klammern doch?
Viele Grüße
doc
Titel: Aw: Notify mit sunset - kann das funktionieren?
Beitrag von: rudolfkoenig am 15 Juni 2013, 19:09:23
- $hm ist nicht definiert (nur $hour und $min). Man koennte es mit
my $hm = sprintf("%%02d:%%02d", $hour, $min);;
definieren.
- sunset wuerde ich als sunset() schreiben, sunrise genauso. Ist aber nur Geschmacksfrage.
Titel: Aw: Notify mit sunset - kann das funktionieren?
Beitrag von: docb am 15 Juni 2013, 20:06:35
Hallo und vielen Dank!
Hab es eingebaut, aber ich glaube meine Syntax stimmt noch nicht.
Fhem schimpft mich:

Unknown command my, try help Unknown command if, try help Unknown command {, try help Unknown command fhem, try help Unknown command }, try help Unknown command }

Ich habe folgendes in der fhem.cfg eingegeben:


define not_KE_Bewegungsmelder notify KE_Bewegungsmelder:motion.* {
 my $hm = sprintf("%%02d:%%02d", $hour, $min);;
 if ($hm gt sunset || $hm lt sunrise)
 {
  fhem "set SS_KE_Gang on-for-timer 30"
 }
}


Was mache ich denn falsch?
Viele Grüße
doc
Titel: Aw: Notify mit sunset - kann das funktionieren?
Beitrag von: docb am 15 Juni 2013, 20:30:31
Hallo,
ich habe zufällig gerade einen anderen Codeschnipsel übernommen und dabei ist mir mein eigener Fehler aufgefallen, es müsste wohl so lauten (ob es funktioniert kann ich erst morgen sagen ;-)

define not_KE_Bewegungsmelder notify KE_Bewegungsmelder:motion.* {\
 my $hm = sprintf("%%02d:%%02d", $hour, $min);;\
 if ($hm gt sunset || $hm lt sunrise)\
 { \
  fhem "set SS_KE_Gang on-for-timer 30";;\
 }\
}
fhem schimpft mich jetzt nicht mehr... hoffe das ist auch richtig so ;-)
Beste Grüße
doc
Titel: Aw: Notify mit sunset - kann das funktionieren?
Beitrag von: Dietmar63 am 16 Juni 2013, 02:08:00
ich könnte mir vorstellen, dass sunset,sunrise auch nicht funktionieren.

Ergänze mal jeweils"()".
Wenn du vertraut bist mit der Pflege der Funktion in 99_utils, kann der PerlInterpreter, mehr Fehler finden:

fhem.cfg
define not_KE_Bewegungsmelder notify KE_Bewegungsmelder:motion.* { schalte_bwm() }

99_utils:
sub schalte_bwm() {
 my $hm = sprintf("%%02d:%%02d", $hour, $min);
 if ($hm gt sunset() || $hm lt sunrise() ) {
    fhem "set SS_KE_Gang on-for-timer 30";
 }
}


Vorteil: Du verwendest Original_Perl und die cfg bleibt übersichtlich.
Der compiler müßte dir beim Laden einen Fehler bei deiner alten sunrise-Version liefern.

Du könntest übrigens mit:
trigger KE_Bewegungsmelder motion  
sofort prüfen, ob deine Fuktion läuft.
Titel: Aw: Notify mit sunset - kann das funktionieren?
Beitrag von: rudolfkoenig am 16 Juni 2013, 10:15:55
>  ich könnte mir vorstellen, dass sunset,sunrise auch nicht funktionieren.

Doch, hat mich aber auch ueberrascht. Bevor ich mich beschwert habe, habs mit {sunrise} getestet :)

Sonst: mann kan das ;; und \ vermeiden, wenn man das notify in FHEMWEB Detailansicht, mit der DEF Link bearbeitet.
Titel: Aw: Notify mit sunset - kann das funktionieren?
Beitrag von: docb am 18 Juni 2013, 09:23:37
Mensch, danke für die Hilfe, hab das jetzt in meine 99_myUtils.pm ausgelagert. Zudem habe ich mir jetzt noch einen weiteren Aspekt zusammengebastelt, nachdem ich hier im Forum über globale Variablen nachgelesen habe. Da ich eine at funktion habe, die meine Rolladen nach sunrise und -set schaltet, habe ich einen Dummy TagNacht erstellt, den ich wenn die Rolladen runterfahren auf off setze und umgekehrt. So spare ich mir die Zeitrechnerei, die irgendwie nicht wirklich funktioniert hat. Und ich versuche es gleich mal mit Varialben. Bin mal gespannt ob das funktioniert. Jetzt habe ich noch drei Fragen dazu:

1. Kann das funktionieren? ;-)
Code aus der Automatisierungsfunktion:

define BA_Jal_runter_auto at *{sunset(-1300,"17:00","21:45")} set BA_Jal Runter;; set TagNacht off


Notify-Code

define not_KE_Bewegungsmelder notify KE_Bewegungsmelder:motion.* { schalte_Bewegungmelder_Licht("SS_KE_Gang") }


99_myUtils-Code:

sub schalte_Bewegungmelder_Licht($) {
  my ($licht) = @_;
  if Value("TagNacht") == "off" {
   fhem "set ".$licht." on-for-timer 30";
  }
 }


2. Wie kann ich denn den das Ergebnis des Perl-Interpreters sehen? Also wie muss ich das aufrufen? Wenn ich den trigger KE_Bewegungsmelder motion in das Eingabefenster in der Fhem Weboberfläche eingebe, kommt nämlich nur eine leere Seite.

3. Gibt es eine Möglichkeit, diese if Value("TagNacht") abfrage gleich in das notify mit einzubauen um Ressourcen zu schonen (damit das notify überhaupt erst greift, wenn TagNacht off ist, oder ist das von der Systembelastung her egal? Meine Fritzbox geht nämlich teilweise schon ganz schön in die Knie...
Viele Grüße
Doc
Titel: Aw: Notify mit sunset - kann das funktionieren?
Beitrag von: Puschel74 am 18 Juni 2013, 09:50:43
Hallo,

das

Zitatif Value("TagNacht") == "off" {

sollte mMn so lauten:

if (Value("TagNacht") eq "off") {

wobei ich das noch mit eventMap und webCmd auf Tag und Nacht umstellen würde.

Ich mag on und off nicht so gerne wenn ich definierte Zustände habe (so wie bei mir on und off auf Sommer und Winter gemappt).
Aber das ist Geschmackssache.

Grüße
Titel: Aw: Notify mit sunset - kann das funktionieren?
Beitrag von: docb am 18 Juni 2013, 10:01:40
Super, danke schon mal für den Tipp - den habe ich gleich umgesetzt! Freue mich über weitere hilfreiche Hinweise und Tipps zu Fragen 2 und 3.
Viele Grüße
Doc
Titel: Aw: Notify mit sunset - kann das funktionieren?
Beitrag von: Puschel74 am 18 Juni 2013, 10:05:55
Hallo,

zu 2:
Entweder im Event Monitor oder evtl. im LogFile von FHEM.

zu 3: gibt es ;-)

define not_KE_Bewegungsmelder notify KE_Bewegungsmelder:motion.* {
  if (Value("TagNacht") eq "off") {
    schalte_Bewegungmelder_Licht("SS_KE_Gang");
 }
}


Ich kann keine Einzeiler :-)

Grüße
Titel: Aw: Notify mit sunset - kann das funktionieren?
Beitrag von: docb am 18 Juni 2013, 12:35:25
Hallo,
leider meldet mir der interpreter folgendes:

syntax error at ./FHEM/99_myUtils.pm line 74, near "if Value"
syntax error at ./FHEM/99_myUtils.pm line 77, near "}"

der Code:

sub schalte_Bewegungmelder_Licht($) {
  my ($licht) = @_;
  if Value("TagNacht") eq "Nacht" {
   fhem "set ".$licht." on-for-timer 30";
  }
 }  


was habe ich denn falsch gemacht?
viele Grüße
Doc
Titel: Aw: Notify mit sunset - kann das funktionieren?
Beitrag von: Puschel74 am 18 Juni 2013, 12:39:41
Hallo,

ich hab jetzt nicht nachgeschaut aber bei mir müsste das so stehen:

sub schalte_Bewegungmelder_Licht($) {
  my ($licht) = @_;
  if (Value("TagNacht") eq "Nacht") {
   fhem ("set ".$licht." on-for-timer 30");
  }
 }


Grüße
Titel: Aw: Notify mit sunset - kann das funktionieren?
Beitrag von: docb am 18 Juni 2013, 12:56:05
hm, jetzt scheint er es zu nehmen.. .komisch...
danke jedenfalls ;-)