Suchbild: Was zum ist hier falsch?

Begonnen von NightDragon, 19 August 2016, 21:34:27

Vorheriges Thema - Nächstes Thema

NightDragon

Hallo Leute.

Ich bin recht neu in der FHEM Welt und probiere mich so durch.
Aktuell habe ich FHEM2FHEM zusammen mit Geofancy, Roommate und Residtens aufgesetzt.
Die Mpdule klappen auch alle Wunderbar.

Jetzt würde ich gern das Structure "Licht_Wohnung" an bzw. aus schalten, je nach Event.
Dabei hatte ich mir folgenden Code gedacht - der aber nicht klappt:

define LichtAnAus notify rgr_zuHause {\
if ( Value("rgr_zuHause") eq "home" && ReadingsVal("Tagesrythmus", "light", 0) < 4) {\
  for (my $i=1;; $i <= 5;; $i++) {\
    fhem("sleep 0.5;;;; set Licht_Wohnung on")\
  }\
} elsif ( Value("rgr_zuHause") eq "absent"  || Value("rgr_zuHause") eq "gotosleep" || Value("rgr_zuHause") eq "gone" ) {\
  for (my $i=1;; $i <= 5;; $i++) {\
    fhem("sleep 0.5;;;; set Licht_Wohnung off")\
  }\
}\
}


Ach ja - ich bin auch kein Perl-ianer... also kann auch da schon der Fehler liegen.

Ziel des Codes wäre es auf Events von rgr_zuHause zu reagieren - Abhängig von Sonnenstand (Twilight im Einsatz - hier als Tagesrythmus) soll dann das Licht an oder aus schalten - wenn ich zu Hause bin  bzw. das Haus verlasse.

Könnt Ihr mir Tipps geben, was hier nicht passt?
Gibt es prinzipiell eine Methode Perl-Code innerhalb der DEF-Sektion oder in FHEM zu debugen?

Danke,
lg,
Dragon

KernSani

Hi Dragon,

Erste Frage: Wieso schaltest du das Licht 5mal ein? Zweite Frage: Was funktioniert nicht? Log-Einträge?
ich bin auch kein Perlianer und habe lange nichts mehr mit notify gemacht, denke aber das müsste auch einfacher gehen. Mit DOIF sollte das so funktionieren:

([rgr_zuHause] eq "home" && [Tagesrythmus:light] < 4)(set Licht_Wohnung on)
DOELSEIF
(..)


Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

NightDragon

Hi Oli,

Das Licht hängt einer MiLight wifi Bridge  und nachdem nicht garantiert ist, dass der Befehl ankommt bei den Lichtern, sende ich ihn 5 mal.

ich bin mir nicht sicher ob es auch mit DOIF geht... deswegen wollte ich das notify verwenden.

KernSani

Zitat von: NightDragon am 19 August 2016, 22:17:01
Das Licht hängt einer MiLight wifi Bridge  und nachdem nicht garantiert ist, dass der Befehl ankommt bei den Lichtern, sende ich ihn 5 mal.
Die habe ich auch... und kommt eigentlich (fast) immer an... auch durch Stahlbetondecken. aber ok, du kennst deine Milights besser ;-)

Zitat von: NightDragon am 19 August 2016, 22:17:01
ich bin mir nicht sicher ob es auch mit DOIF geht...
Perl-Code geht auch in DOIF, aber fang doch mal mit dem einfachen Fall an (nur einmal senden) und nähere dich dem Fehler an. Was sagt denn das log?
Oder packe den Perl code in die Kommandozeile und überprüfe so, ob der richtig ist...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

NightDragon

Zitat von: KernSani
Perl-Code geht auch in DOIF, aber fang doch mal mit dem einfachen Fall an (nur einmal senden) und nähere dich dem Fehler an. Was sagt denn das log?
Oder packe den Perl code in die Kommandozeile und überprüfe so, ob der richtig ist...

Habe ich bereits versucht - irgendwie schaff ich es nicht, das Problem zu isolieren.

Wie siehts mit meinem Code aus? Ist Dir / Euch etwas aufgefallen - das Euch eigenartig vorkommt?

Devender

Hallo NightDragon,

ich hab deinen Code mal etwas abgeändert um es bei mir zu testen:


define LichtAnAus notify rgr_zuHause {
if ( Value("st_anwe") eq "present" && ReadingsVal("Wetter", "c_temp", 0) < 30)
       {
           for (my $i=1; $i <= 5; $i++) {
    fhem("sleep 0.5; set Licht an");;
  }
} elsif ( Value("st_anwe") eq "absent"  || Value("st_anwe") eq "gotosleep" || Value("st_anwe") eq "gone" ) {
  for (my $i=1; $i <= 5; $i++) {
    fhem("sleep 0.5; set Licht aus");;
  }
}
}


So funktioniert es bei mir ( getestet als at anstelle von notifiy) da man dort ein executeNow machen kann.
Mein Lichtbefehl wird 5 mal gesendet.

Grüße,
Dirk
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

betateilchen

Zitat von: Devender am 20 August 2016, 01:36:53
So funktioniert es bei mir ( getestet als at anstelle von notifiy) da man dort ein executeNow machen kann.

Du kannst auch ein notify jederzeit testen, indem Du mit "trigger" den event manuell auslöst, auf den das notify reagieren soll.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

NightDragon

Danke Devender.

Ich habe den Code von Dir genommen und wieder bei mir eingebaut, natürlich die Devices u.ä. wieder auf das geändert was ich dachte.
Klappt irgendwie nicht. Meine MiLight schaltet nicht...

Hat FHEM ein Problem mit Devices und Underlines?

Devender

stell dein Code bitte noch mal ein  :)
Was sagt die Log Ausgabe?
Loglevel auf 5 gesetzt?

Und betateilchen hat natürlich recht ;-) - ein notify kann man mit trigger auch zum Arbeiten bewegen - war wohl schon etwas spät...
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

Puschel74

#9
Zitat von: Devender am 20 August 2016, 01:36:53
Hallo NightDragon,

ich hab deinen Code mal etwas abgeändert um es bei mir zu testen:


define LichtAnAus notify rgr_zuHause {
if ( Value("st_anwe") eq "present" && ReadingsVal("Wetter", "c_temp", 0) < 30)
       {
           for (my $i=1; $i <= 5; $i++) {
    fhem("sleep 0.5; set Licht an");;
  }
} elsif ( Value("st_anwe") eq "absent"  || Value("st_anwe") eq "gotosleep" || Value("st_anwe") eq "gone" ) {
  for (my $i=1; $i <= 5; $i++) {
    fhem("sleep 0.5; set Licht aus");;
  }
}
}


So funktioniert es bei mir ( getestet als at anstelle von notifiy) da man dort ein executeNow machen kann.
Mein Lichtbefehl wird 5 mal gesendet.

Grüße,
Dirk

1. Der Code wird 1:1 übernommen SO sicher nicht klappen.

Zitat von: NightDragon am 20 August 2016, 22:06:59
Danke Devender.

Ich habe den Code von Dir genommen und wieder bei mir eingebaut, natürlich die Devices u.ä. wieder auf das geändert was ich dachte.
Klappt irgendwie nicht. Meine MiLight schaltet nicht...

Hat FHEM ein Problem mit Devices und Underlines?

2. Klappt irgenwie nicht ist etwas .... zu wenig.
Das Logfile sollte helfen.

Ich tippe aber mal darauf das Devender seinen Code nicht exact 1:1 aus seiner fhm.cfg kopiert hat und daher das "klappt irgenwie nicht" kommt.

In der fhem.cfg gehören noch \ als Zeilenabschluss in jeder Zeile dazu oder man arbeitet im DEF (was einfacher ist) und erspart sich die ;; nach dem fhem-Befehl da man dann nur ; benötigt.
Genaueres vorgehen sollte sich über die SuFu finden lassen.

Edith: Gibt es was zu gewinnen?? Der Titel lässt sowas vermuten da es sich wohl um ein "Fehlersuchbild" handelt.
Aka Ich hab hier nen Fehler und andere dürfen gerne danach suchen und bekommen ..... nix dafür.
Ansonsten währen "sprechende" Beitragstitel zu bevorzugen.
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.

Devender

Zitat von: Puschel74 am 20 August 2016, 22:39:48
Ich tippe aber mal darauf das Devender seinen Code nicht exact 1:1 aus seiner fhm.cfg kopiert hat und daher das "klappt irgenwie nicht" kommt.

Mein Code kommt aus der FHEM DEF. Daher sind natürlich keine \ und ; vorhanden.
Das hatte ich natürlich vergessen zu erwähnen - Entschuldigung!
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

Puschel74

#11
Zitat von: Devender am 20 August 2016, 23:26:45
Mein Code kommt aus der FHEM DEF. Daher sind natürlich keine \ und ; vorhanden.
Das hatte ich natürlich vergessen zu erwähnen - Entschuldigung!
Im DEF gibt es aber kein define LichtAnAus notify...
Das DEF beginnt erst mit dem regexp und nicht mit dem define - soweit ich weiß.

Sorry aber wenn man schon Codes für Anfänger postet dann bitte doch auch so das sie per c&p funktionieren oder sonst mit Erklärung wie die Codes eingebunden werden können.
Wenn man die SuFu benutzt findet man durchaus Beiträge wo der Unterschied zwischen fhem.cfg und DEF erklärt wird - ich mach aber sicher nicht wieder den "Erklär-Bär"  ;)
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.

RadioJames

#12
Käpt´n Blaupuschel  ;D
There are 10 kind of people. Those who understand binary and those who don't.

Devender

Ja, auch damit hast du Recht  :-X
Ich werde in Zukunft darauf achten den Code so darzustellen, dass er Schritt fuer Schritt und 1:1 kopiert werden kann.

Sorry fuer das Missverständnis !

FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

NightDragon

Zitat von: Puschel74Ich tippe aber mal darauf das Devender seinen Code nicht exact 1:1 aus seiner fhm.cfg kopiert hat und daher das "klappt irgenwie nicht" kommt.
Das war mir schon auch aufgefallen, dass hier etwas nicht stimmt. Ich habs dann nochmals mit Hilfe von anderen Beispielen korrigiert - Und klappt irgendwie nicht: Nun es tut sich gar nix... Da kommt im Log auch nichts dazu an. So als würde das Device nicht existieren.

Zitat von: Puschel74Edith: Gibt es was zu gewinnen?? Der Titel lässt sowas vermuten da es sich wohl um ein "Fehlersuchbild" handelt.
Aka Ich hab hier nen Fehler und andere dürfen gerne danach suchen und bekommen ..... nix dafür.
Ansonsten währen "sprechende" Beitragstitel zu bevorzugen.
Klar es gibt immer etwas zu Gewinnen und wenn es nur neue Erkentnisse sind ;) - Und nein ich bastle an diesen Systemen ja auch rum weil es mir Spaß macht - genau so wie das Fehlersuchen - in dem Fall geht es darum, dass ich nicht sehe, was nicht passt. ;)

Ich habe aber noch ein generelles Problem mit der LED und der MilIght Bridge... zeitweise verschluckt sie via FHEM Befehle. Ich hätte eigentlich auch versucht auf TCP umzustellen, aber da scheint dann gar nix mehr zu passieren (TCP im Webinterface mit Restart + Umstellung in FHEM + Save + Restart)...
--> Das Problem müsste ich als erstes lösen, damit ich auch sicher sein kann, dass ich keien Sideeffects dadurch auf die ursprüngliche Fragestellung habe

Jetzt steuer ich das Licht testhalber mit einem Homematic Schalter direkt an - im nächsten Schritt werde ich versuchen Step by Step meinen Code wieder aufzubauen (neu zu schreiben) - vielleicht werde ich dann den Fehler los.