Hallo zusammen,
da ich bisher keinen funktionierenden Ansatz für mich gefunden habe eröffne ich einen neuen Thread.
Ich möchte demnächst meine Weihnachtsbeleuchtung bei einem bestimmten Twilight "light"-Wert z.B. 4, das Licht anschalten und wenn es heller als z.B. 4 ist wieder aus. Diese Regelung soll dann nur Tagsüber greifen und über Nacht soll das Licht ausbleiben. Ich habe Twilight über ein Youtube Tutorial mit LichtWetter definiert und das weather modul Wetter genannt, und diesen Code Schnippsel erstmal getestet, aber irgendwas stört FHEM daran.
define xmasan notify LichtWetter:light.* {if($value{LichtWetter}<4 ){fhem("set xmas_wohnung on");;}} define xmas_aus notify LichtWetter:light.* {if($value{Lichtwetter}>=4){fhem("set xmas_wohnung off");;}}
Bei Code bitte Codetags verwenden. So will ich das nicht lesen.
Und am besten ein list vom notify Device machen.
Das ist immer noch schlecht lesbar, weil zwei Zeilen in einer sind, das list fehlt auch noch...
Was aber m.E. nicht dolle ist, ist der Teil hier:
Zitatif($value{LichtWetter}<4 )
Hier sollte vermutlich ein $EVTPARTx stehen, oder eben eine saubere perl-Funktion, die hier aber nicht nötig sein sollte...
Ansonsten sieht mir das so aus, als wäre ein THRESHOLD hier ein Lösungsansatz, statt der beiden notify. Eine kleine Hysterese würde jedenfalls auf den ersten Blick auch Sinn machen.
Gruß, Beta-User
define xmasan notify LichtWetter:light.* { fhem("set xmas_wohnung " . ($EVTPART1 < 4 ? "on" : "off") ); }
Sollte gehen
Wie geht es das mit dem list vom notify Device?
Den Code hab ich im Forum gefunden und abgewandelt
Zitat von: CoolTux am 25 Oktober 2017, 17:42:54
define xmasan notify LichtWetter:light.* { fhem("set xmas_wohnung " . ($EVTPART1 < 4 ? "on" : "off") ); }
Sollte gehen
Anscheinend fehlt eine Klammer? Kann ich irgendwie noch Uhrzeiten auschließen?
Missing right curly or square bracket at (eval 678) line 1, at end of line
syntax error at (eval 678) line 1, at EOF
Unknown command }, try help.
Unknown command }, try help.
Zitat von: Crush85 am 25 Oktober 2017, 20:42:43
Wie geht es das mit dem list vom notify Device?
Den Code hab ich im Forum gefunden und abgewandelt
list xmasan
Zitat von: kumue am 25 Oktober 2017, 20:45:36
list xmasan
Ich hab das mal xmas_wohnung genannt, macht vielleicht mehr Sinn
list vom notify bitte
Kann heute bitte mal jemand mit besseren Nerven. Danke
Bitte auf der console oder in der GUI
list <NAME_DEINES_NOTIFY>
eingeben.
Dein notify heißt xmasan, also
list xmasan
.
Den Output bitte in Codetags posten.
Bitte kein Screenshot.
Ich habe kein Notify erstellt, nur das mit dem code hier, was muss denn drin stehen für mein vorhaben?
in deinem ersten Post sehe ich doch zwei notify's: xmasan und xmas_aus.
Egal ob Du die erstellt hast oder wer auch immer...
define xmasan notify LichtWetter:light.* {if($value{LichtWetter}<4 ){fhem("set xmas_wohnung on");;}} define xmas_aus notify LichtWetter:light.* {if($value{Lichtwetter}>=4){fhem("set xmas_wohnung off");;}}
Zitat von: Crush85 am 25 Oktober 2017, 20:45:03
Anscheinend fehlt eine Klammer? Kann ich irgendwie noch Uhrzeiten auschließen?
Missing right curly or square bracket at (eval 678) line 1, at end of line
syntax error at (eval 678) line 1, at EOF
Unknown command }, try help.
Unknown command }, try help.
Der Code wird aber von FHEM nicht angekommen und daher wohl auch kein notify erstellt.
syntax error at (eval 692) line 1, near "notify LichtWetter:"
syntax error at (eval 692) line 1, near ";}"
No device named xmasan found
Dann mach erstmal nur
define xmasan notify LichtWetter:light.* b
Danach in die Detailansicht des Notify auf DEF klicken und das hier einfügen, das andere löschen/überschreiben
define xmasan notify LichtWetter:light.* {
fhem("set xmas_wohnung " . ($EVTPART1 < 4 ? "on" : "off") );
}
Ah ok, hab ich gemacht
Internals:
CFGFN
DEF define xmasan notify LichtWetter:light.* {
fhem("set xmas_wohnung " . ($EVTPART1 < 4 ? "on" : "off") );
}
NAME xmasan
NR 540
NTFY_ORDER 50-xmasan
REGEXP define
STATE active
TYPE notify
Readings:
2017-10-26 06:15:16 state active
Attributes:
Wofür steht denn das b in dem define?
Für gar nichts, das ist nur ein Platzhalter weil beim anlegen er unser Perl nicht genommen hat. Im Nachhinein löschen wir das ja und ersetzen es durch unser Perl.
Und geht es denn nun?
Versuche bitte Dich in Zukunft ein bisschen einzuarbeiten und mit FHEM zu beschäftigen. So ein wenig Grundlagen forschen. Diese Methode steht im Anfängerdokument. Das darfst Du gerne einmal lesen, wurde mit viel Herzblut und Aufwand geschrieben und sollte immer als erstes gelesen werden.
Hallo zusammen,
ich habe es nun ein paar Tage beobachtet, FHEM schaltet nicht um, woran kann es liegen?
Define xmasan
define xmas_notify notify LichtWetter:light.* {
fhem("set Vitrine " . ($EVTPART1 < 5 ? "on" : "off") );
}
Diese einfache selbst getestete DEF funktioniert ohne Probleme macht nur leider keinen Sinn
LichtWetter:light:.* set Vitrine on
Was bedeutet schaltet nicht um. Notify wird getriggert? Schaltet immer off?
Lass Dir mal Ausgeben was in $EVTPART1 drin steht
Log 1,$EVTPART1
define xmas_notify notify LichtWetter:light.* {
fhem("set Vitrine " . ($EVTPART1 < 5 ? "on" : "off") );
Log 1,$EVTPART1;
}
Es wird nicht angeschaltet, off ist es ja standardmäßig
Wann erscheint es im Log? immerhin scheint es ja irgendwo zu haken.
so bald sich das Reading light von LichtWetter ändert
Ok dann kann ich das erst morgen wieder testen
Lese mal nach was der Befehl trigger macht
Trigger ist praktisch will aber nich funktionieren
trigger twilight:light 4
Please define light:.4 first
Sollte aber gehen wenn man es richtig macht
trigger LichtWetter light 4
mit leerzeichen gehts anscheinend aber es wird nichts in irgendeinem Log :o
Ob dein notify triggert siehst du ja am STATE. Wenn sich das ändert das muss auch was im fhem Log drin stehen.
Es steht immernoch nichts im Log, woran kann es noch liegen?
gib mal bitte ein list von Deinem notify device
list xmasan
Internals:
CFGFN
DEF define xmas_notify notify LichtWetter:light.* {
fhem("set Vitrine " . ($EVTPART1 < 5 ? "on" : "off") );
Log 1,$EVTPART1;
}
NAME xmasan
NR 540
NTFY_ORDER 50-xmasan
REGEXP define
STATE active
TYPE notify
Readings:
2017-11-01 21:44:36 state active
Attributes:
room 1.0 XMAS
Das ist absoluter Mist. Wie kommt man denn auf sowas.
DEF LichtWetter:light.* {
fhem("set Vitrine " . ($EVTPART1 < 5 ? "on" : "off") );
Log 1,$EVTPART1;
}
In FHEMWEB einfach in die Details gehen vom notify und da auf DEF klicken, dann änderst Du das ganze in
LichtWetter:light.* {
fhem("set Vitrine " . ($EVTPART1 < 5 ? "on" : "off") );
}
und drückst dann auf modify
Bitte belese Dich etwas mehr
Ich habe das genauso gemacht wie hier beschrieben
https://forum.fhem.de/index.php/topic,78477.msg704551.html#msg704551
Ja ich weiß, und da nun nicht verstanden hat was Du da machst ist das in die Hose gegangen.
mit define legt man erstmalig ein Device an. Falls Du dich erinnerst, das anlegen hatte ja nicht geklappt hast du gesagt.
Hat man schon ein Device angelegt geht man in die Details des Devices und tätigt Änderung der DEF in dem man auf DEF klickt, oder Änderungen der Attribute in dem man auf den Text attr klickt und so weiter.
Daher bitte versuchen zu lesen und zu verstehen und über Codebeispiele nach zu denken und nicht bind ab zu schreiben.
Ok danke erstmal, das triggern klappt jetzt wohl auch, jetzt versuche ich mal "Ausschlusszeiten" einzubauen
Heißt also er schaltet jetzt wenn du ein
trigger bla bla 4
sendest?
Ja genau, es wird angeschaltet
Supi. Na dann viel Erfolg. Wenn noch was ist dann melde Dich.
So richtig schlau werde ich aus den Anleitungen nicht. Da sich der light Wert ja mehrmals am Tag ändern kann. Wird mit on-till und off-till bei der nächsten light Änderung trotzdem wieder geschaltet? Dann würde ich es so machen
LichtWetter:light.* {
fhem("set Vitrine " . ($EVTPART1 < 5 ? "on-till 22:15:00" : "off-till 06:00:00") );
}
LichtWetter:light.* {
fhem("set Vitrine:FILTER=STATE!= " . ($EVTPART1 < 5 ? "on" : "off") . " " . ($EVTPART1 < 5 ? "on" : "off") );
}
Dafür gibt es devspec2array in Form von FILTER. Ob das so wie ich es gerade oben geschrieben funktioniert mus ich selber erst noch testen.
Als FHEM Befel ginge er so
set Vitrine:FILTER=STATE!=on on
Ok konnte es eben testen. Damit geht es
LichtWetter:light.* {
fhem("set Vitrine:FILTER=STATE!=" . ($EVTPART1 < 5 ? "on" : "off") . " " . ($EVTPART1 < 5 ? "on" : "off") );
}
Wo gebe ich denn da die Zeiten an, ich habe weder unter decspec2array noch unter Filter etwas in der Doku oder im Forum gefunden was mir weiterhilft
Keine Zeiten. Was genau meinst Du mit Zeiten? Meinst jetzt das ja < 5 auch zwischen 23:30 und 4:50 sein kann und er dann bitte nicht schalten soll?
Ja genau das meine ich, über Nacht sollen die Lichter nicht angehen bzw. abends zum Zeitpunkt ausschalten, also z.b. abends bis 22:30 und morgens ab 6:00 soll der Notify aktiv sein oder so.
Was sollte denn dieser Filter von dir bewirken?
Na ja, die richtigen Worte hast Du ja schon gefunden. Entweder das Notify deaktivieren oder halt eine Abfrage einbauen.
Hier wird es dann interessant. Zum Beispiel haben viele sich die Residents Modulfamilie installiert. Da wird die ganze Wohnung und einzelne Bewohner virtuell abgebildet. Man kann dann also eine Abfrage einbauen die prüft ob das Device ganzeWohnung den Status home hat oder nicht, wenn nicht soll nicht geschalten werden.
Du kannst auch da Du eh schon in Perl bist die Stunde abfragen. (ist das einfachste)
LichtWetter:light.* {
fhem("set Vitrine:FILTER=STATE!=" . ($EVTPART1 < 5 ? "on" : "off") . " " . ($EVTPART1 < 5 ? "on" : "off") ) if( $hour < 22 and $hour > 4 );
}
Es gibt auch noch eine kleine Abfrage die ich mal gebaut habe, dazu muß aber eine 99_myUtils Datei eingerichtet werden. Dann kann man sowas machen
LichtWetter:light.* {
fhem("set Vitrine:FILTER=STATE!=" . ($EVTPART1 < 5 ? "on" : "off") . " " . ($EVTPART1 < 5 ? "on" : "off") ) if( isInTime('22:00-04:00') );
}