Notify mit sunset - kann das funktionieren?

Begonnen von docb, 15 Juni 2013, 17:36:59

Vorheriges Thema - Nächstes Thema

docb

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
I love FHEM!

rudolfkoenig

- $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.

docb

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
I love FHEM!

docb

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
I love FHEM!

Dietmar63

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.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

rudolfkoenig

>  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.

docb

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
I love FHEM!

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

docb

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
I love FHEM!

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

docb

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
I love FHEM!

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

docb

hm, jetzt scheint er es zu nehmen.. .komisch...
danke jedenfalls ;-)
I love FHEM!