Hallo zusammen,
da ich der Meinung bin, das die Fenster offen Funktion der Heizungsstellantriebe eigentlich ganz gut funktioniert habe ich also einen Fensterkontakt übrig. Diesem würde ich jetzt gerne eine neue Aufgabe zu kommen lassen, weiss aber noch nicht richtig wie ich es anfange und würde mich über Eure Hilfe freuen. Packe ich alles in die 99_myUtils.pm ? Folgendes Szenario schwebt mir vor.
Es ist dunkel (so eine Funktion habe ich schon bei der Weihnachtsbeleuchtung) sunset_abs('HORIZON=-2',0,"15:30", der Rolladen02 (schon eingerichtet in FHEM) ist unten und LED01_aussen, LED02_aussen sind (LED_aussen schaltet beide) off.
Wenn jetzt Kontakt_Flur open ist soll Rolladen02 hoch gehen und wenn es dunkel ist soll LED_aussen auf on gehen.
Wenn jetzt Kontakt_Flur closed ist soll Rolladen02 runter fahren, wenn es zum Beispiel nach 20:00 Uhr ist und LED_aussen auf off gehen.
Über Eure Hilfe und gute Tipps würde ich mich freuen, vielleicht sagt Ihr ja auch, das diese Idee totaler Quatsch ist und so nicht umsetzbar ist.
Gruß
Micha
Hallo,
ich würde das mit einem "notify" machen. Der registriert ob die Türe auf oder zu geht. Die Bedingungen was wnn passieren soll, kann man in ein DOIF IF oder if abfragen und entsprechend am Ende ein oder mehrere Set Befehle ausführen lassen.
Ob das Sinn macht oder Quatsch ist, musst Du entscheiden - gehen tut das auf jeden Fall.
Gruß Christoph
Ich bin doch newbi :-(
Mein Kontakt sieht so aus:
# Kontakte Anfang
define Kontakt_Garten MAX ShutterContact 0e45e3
attr Kontakt_Garten IODev cm
attr Kontakt_Garten devStateIcon opened:fts_door_open closed:fts_door:FS20.off
attr Kontakt_Garten room Wohnzimmer
define FileLog_Kontakt_Garten FileLog ./log/Kontakt_Garten-%Y.log Kontakt_Garten
attr FileLog_Kontakt_Garten logtype text
attr FileLog_Kontakt_Garten room MAX
# Kontakte Ende
und mein notify so:
define Kontakt_Garten_offen notify Kontakt_Garten { if (Value("Kontakt_Garten") eq "opened")}
attr Kontakt_Garten_offen room Wohnzimmer
Wenn ich den Kontakt öffne und schliesse wird mir das bei Kontakt_Garten über das Symbol angezeigt. Beim notify tut sich aber nichts :-(
Wie würde es den danach weiter gehen? Packt man die ganzen Bedingungen etc in eine 99_myUtils.pm ?
Die Logs sagen:
2015.02.14 15:41:08 3: Kontakt_Garten_offen return value: syntax error at (eval 5586) line 1, at EOF
Gruß
Micha
Was soll das notify denn bewirken? Hast du dir das mal angeschaut? Da fehlt eigentlich alles.
Genau.
müsste so aussehen:
define Kontakt_Garten_offen notify Kontakt_Garten { if (Value("Kontakt_Garten") eq "opened") { fhem("set blubber on")}}
Der ganze Teil "set blubber ob" (also was gemacht werden soll, wenn das if zutrifft) fehlt bei dir
Übrigends wenn Kontakt_Garten "opened" tatsächlich abliefert, brauchst du kein if.
Dann ginge auch
define Kontakt_Garten_offen notify Kontakt_Garten:opened set blubber on
Hatte auch gesehen, das der erste Versuch völliger Mist war und hatte dann folgendes probiert:
define Gartentuer dummy
attr Gartentuer room Wohnzimmer
define Kontakt_Garten_notify notify Kontakt_Garten { if (Value("Kontakt_Garten") eq "Closed") { fhem("set Gartentuer zu") } else { fhem("set Gartentuer offen") }}
attr Kontakt_Garten_notify room Wohnzimmer
Leider auch hier keine Änderung an Gartentuer zu beobachten :-(
Gruß
Micha
Hier riecht es nach zu Faul zum selber machen. Hast du mal geschaut, wie das Event wirklich aussieht (Eventmonitor)? Ich tippe mal, dass es closed und nicht Closed heißt. Du brauchst aber, wie oben schon von Zrrronggg! erwähnt, auch gar kein if.
okay die Groß- Kleinschreibung :-( Hatte ich auch gefunden und es hatte zwei drei mal funktioniert das Gartentuer auf / zu anzeigt. Jetzt passiert gerade gar nichts, vermute die Credits. Nein zu faul nicht, ich will das ja fast alleine hin bekommen, aber als newbi nicht ganz einfach.
Ohne if ? Ich hatte überlegt das ganze irgendwie in die 99_myUtils.pm auszulagern.
Aber es ist doch richtig das ich mein Dummy und mein notify benötige ?
Auch mit verbose 5 sehe ich in den Logs nichts vom Kontakt_Garten
Gruß
Micha
Hallo,
normalerweise würde ich da nichts auslagern. BTW Du solltest den Eventmonitor öffnen und dann den Kontakt betätigen. Im Eventmonitor sieht man dann genau, was der Kontakt für Events (Daten) sendet. Ich gehe auch davon aus, dass open und closed gesendet wird - ist zumindest bei HM so.
ZitatWenn jetzt Kontakt_Flur open ist soll Rolladen02 hoch gehen und wenn es dunkel ist soll LED_aussen auf on gehen.
Wenn jetzt Kontakt_Flur closed ist soll Rolladen02 runter fahren, wenn es zum Beispiel nach 20:00 Uhr ist und LED_aussen auf off gehen.
Das mit dem if brauchst Du - deine Frage war ja "Tür geht auf" wenn Dunkel und Rollo zu und Led aus -> dann Rollo hoch, Led an.
Das zweite macht in meinen Augen wenig Sinn für ein Notify - das ist eher etwas für ein at mit if.
At *22:00:00 wenn Türe zu -> dann Rollo runter, Licht aus.
Gruß Christoph
define Kontakt_Garten_notify notify Kontakt_Garten { if (Value("Kontakt_Garten") eq "Closed") { fhem("set Gartentuer zu") } else { fhem("set Gartentuer offen") }}
Das ist syntaktisch korrekt. Wenn das nichts macht ist am wahrscheinlichsten das Kontakt_Garten nicht "Closed" liefert, wie hier schon verschiedentlich angedeutet.
ZitatAuch mit verbose 5 sehe ich in den Logs nichts vom Kontakt_Garten
Dann macht Kontakt_garten auch nichts.
Weiteres Vorgehen siehe Post von Bennemannc.
ZitatAber es ist doch richtig das ich mein Dummy und mein notify benötige ?
Wenn das Dummy nur für eine Anzeige ist, könnte man das ggf auch weglassen und sich den Status des Kontaktes direkt ansehen. Ich mache das aber ab und an auch so wie du. KANN man also so machen.
ZitatOhne if ?
Es geht ohne if und da if-kontrukte immer komplexer sind und mehr Fehlerpotential bergen wäre ohne if vielleicht die bessere Wahl. Auch wenn du "else" benutzt brauchst du keine if:
define Kontakt_Garten_offen notify Kontakt_Garten:opened set Gartentuer offen
define Kontakt_Garten_zu notify Kontakt_Garten:closed set Gartentuer zu
Fertig. Kein if, 2 Zeilen.
ZitatIch hatte überlegt das ganze irgendwie in die 99_myUtils.pm auszulagern.
Diese simpelsten 2-Zeiler?
das würde ich nicht machen.
Meiner Auffassung nach gehört in die 99_myUtils.pm Subroutinen und komplexere Sachen, nicht so Butter und Brot Kram wie einfachste notifys. Dannn kannst du ja auch gleich alles auslagern.*
Und ein einfaches notify künstlich mit in ein Perl if-konstrukt umzubauen, um es in die 99_myUtils.pm auszulagern... also äh... ;)
*Es gibt Leute die arbeiten so, dass sie in die fhem.cfg nur das allernötigste reinschreiben und den Rest in include Dateien auslagern. DAS kann man machen, auch weil es übersichlticher ist. Ist Empfehlenswert, wenn man geschlossene Funktionsbereiche hat wie
- eine Datei für die Alarmanlage
- eine für die Heizungsstuerung
- eine für Anwesenheitserkennung
etc.
Na gut ich werde mal weiter rumprobieren, den Dummy werde ich mal als Kontrolldummy behalten :-) Och bescheuert kann man ruhig zu mir sagen, ich bin in einem Alter wo ich das verkrafte.
Ich stelle mir das halt alles viel komplexer vor als es von Euch beschrieben ist. Vielleicht hatte ich ja nicht richtig erläuter was ich will ;-) Wenn ich die Tür abends mal auf mache, dann soll der Rolladen hoch fahren und das Licht angehen. Bisher muss ich halt auf einer Fernbedienung zwei Tasten drücken (ist ja eigentlich nicht das Problem, wenn das Suchen der Ferbedienung nicht wäre). Wenn ich dann vom Holz holen zurück bin und es dunkel ist und nach 21:00 Uhr soll der Rolladen runterfahren und das Licht wieder aus gehen. Wenn ich tagsüber die Tür wieder zu mache soll der Rolladen aber nicht runterfahren.
Tür auf
Das Licht soll ja nur angehen, wenn die Tür auf geht und es dunkel ist und der Rolladen soll ja auch nur angesteuert werden wenn er wirklich unten ist.
Tür zu
Das Licht soll nur ausgehen, wenn es eingeschaltet ist und die Tür zu gemacht wurde. Der Rolladen soll auch nur runtergehen, wenn es Zeit dafür ist zum Beispiel 21:00 Uhr.
Ich dachte das wäre in der 99_myUtils.pm besser aufgehoben und das notify schickt nur den Befehl zum auslösen.
Gruß
Micha
Zitat von: mfeske am 14 Februar 2015, 18:51:10
Och bescheuert kann man ruhig zu mir sagen, ich bin in einem Alter wo ich das verkrafte.
ich habs trotzdem mal wieder rausgenommen, war natürlich liebevoll gemeint. :D
ZitatTür auf
Das Licht soll ja nur angehen, wenn die Tür auf geht und es dunkel ist und der Rolladen soll ja auch nur angesteuert werden wenn er wirklich unten ist.
dafür wird man am ende ein if brauchen, ja.
Das ist alles trotzdem nicht schwer. nur musst du erstmal sicherstellen, das die einfachen dinge auch gehen, also als erstes ermitteln was der Türkontakt tatsächlich sendet.
ZitatIch dachte das wäre in der 99_myUtils.pm besser aufgehoben und das notify schickt nur den Befehl zum auslösen.
Aus meiner Sicht nicht. Alles was ich in 4-5 Zeilen erledigen kann kommt bei mit nicht in die 99_myUtils.pm. Andere mögen das anders sehen.
Hallo,
da stimme ich Zrrronggg zu. Aber so kommen wir leider nicht weiter. Also links im Menue ganz unten sollte der Eventmonitor sein. Den öffnen, und anschließend die Türe mal auf - kurz warten - und wieder zu machen. Einen Screenshot von der Eventmonitor Seite und wir wissen erst einmal, ob und was der Kontakt sendet.
Danach sehen wir weiter.
Gruß Christoph
geht :
2015-02-16 14:34:24 dummy Gartentuer offen
2015-02-16 14:34:24 dummy Gartentuer offen
2015-02-16 14:34:24 dummy Gartentuer offen
2015-02-16 14:34:24 MAX Kontakt_Garten battery: ok
2015-02-16 14:34:24 MAX Kontakt_Garten onoff: 1
2015-02-16 14:34:24 MAX Kontakt_Garten opened
2015-02-16 14:35:04 dummy Gartentuer zu
2015-02-16 14:35:04 dummy Gartentuer zu
2015-02-16 14:35:04 dummy Gartentuer zu
2015-02-16 14:35:04 MAX Kontakt_Garten battery: ok
2015-02-16 14:35:04 MAX Kontakt_Garten onoff: 0
2015-02-16 14:35:04 MAX Kontakt_Garten closed
Zitat von: mfeske am 14 Februar 2015, 18:51:10
Na gut ich werde mal weiter rumprobieren, den Dummy werde ich mal als Kontrolldummy behalten :-) Och bescheuert kann man ruhig zu mir sagen, ich bin in einem Alter wo ich das verkrafte.
Ich stelle mir das halt alles viel komplexer vor als es von Euch beschrieben ist. Vielleicht hatte ich ja nicht richtig erläuter was ich will ;-) Wenn ich die Tür abends mal auf mache, dann soll der Rolladen hoch fahren und das Licht angehen. Bisher muss ich halt auf einer Fernbedienung zwei Tasten drücken (ist ja eigentlich nicht das Problem, wenn das Suchen der Ferbedienung nicht wäre). Wenn ich dann vom Holz holen zurück bin und es dunkel ist und nach 21:00 Uhr soll der Rolladen runterfahren und das Licht wieder aus gehen. Wenn ich tagsüber die Tür wieder zu mache soll der Rolladen aber nicht runterfahren.
Tür auf
Das Licht soll ja nur angehen, wenn die Tür auf geht und es dunkel ist und der Rolladen soll ja auch nur angesteuert werden wenn er wirklich unten ist.
Tür zu
Das Licht soll nur ausgehen, wenn es eingeschaltet ist und die Tür zu gemacht wurde. Der Rolladen soll auch nur runtergehen, wenn es Zeit dafür ist zum Beispiel 21:00 Uhr.
Ich dachte das wäre in der 99_myUtils.pm besser aufgehoben und das notify schickt nur den Befehl zum auslösen.
Gruß
Micha
hier mal was Konkretes als Anregung ohne myUtils:
define di_Licht DOIF ([Kontakt_Garten] eq "opened" and [?dunkel] eq "on" and [?licht] eq "off")
(set licht on)
DOELSE
(set licht off)
attr di_Licht do always
define di_Rollo DOIF ([Kontakt_Garten] eq "opened" and [?dunkel] eq "on" and [?rollo] eq "unten")
(set rollo hoch)
DOELSEIF ([?21:00-00:00] and [Kontakt_Garten] eq "closed" and [?rollo] eq "oben")
(set rollo runter)
attr di_Rollo do always
Gruß
Damian
ZitatMAX Kontakt_Garten opened
Okiay, dann sollte
define Kontakt_Garten_offen notify Kontakt_Garten:opened set Gartentuer offen
Funktionieren. Geht das? Wenn ja, können wir von da aus weitermachen.
Ob nun mit Perl-if oder wie Damian mit Fhem-IF ist im Grunde egal, das Prinzip ist gleich.
Hallo Zrrronggg! das notify Kontakt_Garten_notify Kontakt_Garten { if (Value("Kontakt_Garten") eq "closed") { fhem("set Gartentuer zu") } else { fhem("set Gartentuer offen") }}
funktioniert und schaltet meinen dummy Gartentuer hin und her. Von dem was Damian da geschrieben hat, verstehe ich leider gar nichts :-( Ich will ja wenigstens ein wenig davon verstehen was ich eingebe.
Gruß
Micha
Zitat von: mfeske am 17 Februar 2015, 14:42:45
Von dem was Damian da geschrieben hat, verstehe ich leider gar nichts :-( Ich will ja wenigstens ein wenig davon verstehen was ich eingebe.
Gruß
Micha
Ausführliche Dokumentation zum Modul findest du hier:
http://fhem.de/commandref_DE.html#DOIF
Gruß
Damian
Zitat von: mfeske am 17 Februar 2015, 14:42:45
Hallo Zrrronggg! das notify Kontakt_Garten_notify Kontakt_Garten { if (Value("Kontakt_Garten") eq "closed") { fhem("set Gartentuer zu") } else { fhem("set Gartentuer offen") }}
funktioniert und schaltet meinen dummy Gartentuer hin und her. Von dem was Damian da geschrieben hat, verstehe ich leider gar nichts :-( Ich will ja wenigstens ein wenig davon verstehen was ich eingebe.
Gruß
Micha
Ach so.
Okay. Was war dann die Frage? Also das Damians Modul lese ich jetzt nicht für dich durch um das zu verstehen und dann zu erklären. ;-)
Hallo Zrrronggg,
es ging jetzt um :
--> Es ist dunkel (so eine Funktion habe ich schon bei der Weihnachtsbeleuchtung) sunset_abs('HORIZON=-2',0,"15:30", der Rolladen02 (schon eingerichtet in FHEM) ist unten und LED01_aussen, LED02_aussen sind (LED_aussen schaltet beide) off.
Wenn jetzt Kontakt_Flur open ist soll Rolladen02 hoch gehen und wenn es dunkel ist soll LED_aussen auf on gehen.
Wenn jetzt Kontakt_Flur closed ist soll Rolladen02 runter fahren, wenn es zum Beispiel nach 20:00 Uhr ist und LED_aussen auf off gehen.
Gruß
Micha
Hallo Micha,
das macht für mich so keinen Sinn
Beispiel:
Du kommst um 22:30 nach Hause und macht die Türe auf => Rollo hoch, Licht an ... Dann bist Du drinnen und die Türe wird geschlossen => Rollo wieder runter und Licht aus ??? Das ist für mich nicht sinnig.
Deshalb würde ich das OPEN mit einem Notify abfragen und das CLOSED in einem at der um 22:00 aufgerufen wird.
Gruß Christoph
Hallo Christoph,
mein Fehler ;-) Es ist die Terrassentür ;-)
Ich bin also drin, möchte raus, die Tür geht auf und das Rollo geht ggf. hoch und ggf. geht das Licht an. Ich komme zurück vom Holz holen. Mache die Tür zu und ggf. geht das Licht aus und ggf. geht das Rollo runter.
Gruß
Micha
Zitat--> Es ist dunkel (so eine Funktion habe ich schon bei der Weihnachtsbeleuchtung) sunset_abs('HORIZON=-2',0,"15:30", der Rolladen02 (schon eingerichtet in FHEM) ist unten und LED01_aussen, LED02_aussen sind (LED_aussen schaltet beide) off.
Wenn jetzt Kontakt_Flur open ist soll Rolladen02 hoch gehen und wenn es dunkel ist soll LED_aussen auf on gehen.
Wenn jetzt Kontakt_Flur closed ist soll Rolladen02 runter fahren, wenn es zum Beispiel nach 20:00 Uhr ist und LED_aussen auf off gehen.
Für Dunkel nehmen wir der Einfachheit halber mal isday.
!isday = es ist nachts
ich gehe ausserdem davon aus, das der Rolladen die Zustände "hoch" und "runter" kennt, das musst du ersetzen mit was immer das Teil kann.
define act_on_Kontact_Flur_open notify Kontact_Flur:open {if (!isday()) {fhem("set LED_aussen on")}} ; set Rolladen02 hoch
und
define act_on_Kontact_Flur_closed notify Kontact_Flur:closed { if($hour < 8 || $hour >= 20) { fhem ("set Rolladen02 runter ;; set LED_aussen off")}}
Beachte, dass das macht was du sagst, nicht was du vermutlich meinst (das immer das wichtigste bei if -Geschichten, das man sich GENAU überlegt as man will), nämlich folgendes:
Wenn Kontact_Flur auf closed geht und wenn es GLEICHZEITIG entweder nach 19 Uhr oder VOR 8 Uhr morgens ist, (nur) DANN geht der Rolladen runter und das Licht aus.
Vielleicht meinst du aber auch folgendes:
define act_on_Kontact_Flur_closed notify Kontact_Flur:closed { if($hour < 8 || $hour >= 20) { fhem ("set Rolladen02 runter")}} ; set LED_aussen off
Wenn Kontact_Flur auf closed geht das Licht aus, und wenn es GLEICHZEITIG entweder nach 19 Uhr oder VOR 8 Uhr morgens ist, DANN geht der Rolladen runter.
Deine Formulierung
ZitatWenn jetzt Kontakt_Flur closed ist soll Rolladen02 runter fahren, wenn es zum Beispiel nach 20:00 Uhr ist und LED_aussen auf off gehen.
interpretiere ich sprachlich eher wie Ersteres, ich vermute aber du MEINST eher zweiteres.
Daher meine Anmerkung man muss sich sorgfältig überlegen was man will und da sauch sauber aufschreiben. Sonst kommt man in Teufels Küche.
Naja, vielleicht kannst du damit rumspielen und das deinen Bedrüfnissen anpassen.
Disclaimer:
Alles nur so aus'm Kopp hingeschrieben nicht geprüft. Auch beim 2ten Beispiel könnte man natürlich mit isday arbeiten. Ich dachte ich nehm trotzdem mal Uhrzeiten, dann hast du ne Auswahl.
Hallo ,
Danke für Deine tolle Unterstützung. ich habe mir jetzt zwei notifys genommen und so wie Du es gesagt hast erst mal mit der Uhrzeit.
Die Funktion ist schon okay.
Tür auf --> Licht an, Rolladen hoch
Tür zu --> Licht aus, Rolladen runter
define act_on_Kontakt_Garten_closed notify Kontakt_Garten:closed { if($hour < 8 || $hour >= 18) { fhem ("set Rolladen02 on")}};; set LED_aussen off
attr act_on_Kontakt_Garten_closed room Wohnzimmer
define act_on_Kontakt_Garten_open notify Kontakt_Garten:opened { if($hour < 8 || $hour >= 18) { fhem ("set Rolladen02 off")}};; set LED_aussen on
attr act_on_Kontakt_Garten_open room Wohnzimmer
Ich würde das jetzt gerne noch verfeinern weiss aber nicht den richtigen Ansatzpunkt.
Sollte man eigentlich irgendwo prüfen ob der Rolladen überhaupt schon unten ist um ihn hoch zu fahren oder sagt man einfach hoch egal wo Du bist ?
Das Licht einschalten macht ja eigentlich auch nur bei entsprechender Dunkelheit Sinn, oder ? Ist sunset_abs und HORIZON dafür das richtige Schlagwort mit dem ich suchen sollte oder arbeitet man mit twilight?
Gruß
Micha
Klar kann man prüfen ob der Rolladen oben oder unten ist. Aber für die meisten Funksysteme ist das egal. Bei Funksystemen die keine echte Rückmeldung haben (IT / FS20 etc) ist es sogar besser nicht zu prüfen ob die Rolladen oben oder unten sind, denn das prüft immer nur das was Fhem zuletzt gesendet hat. Das stimmt idR zwar mit der Rolllade überein, aber nicht garantiert. Braucht ja nur mal einer vor Ort bediehnt zu haben oder ein Signal ist nicht richtig angekommen. So gesehen ist es sogar robuster, das Signal zu senden EGAL wie die Rolllade ist.
Zum Thema Licht: ich arbeite da idR mit isday bzw !isday. Das ist eigentlich besser weil man !isday leicher für eine if Test verwenden kann. Sunrise/sunset etc. ist besser für
at
also Zeitpunktbestimmung.
Wenn einem isday ungenau ist (z.b. weil man im Tal wohnt wo es früher dunkel wird oder so), kann man twilight nehmen.
Wie man isday einsetzt siehst du ja schon an einem meiner Beispiele.
define act_on_Kontact_Flur_open notify Kontact_Flur:open {if (!isday()) {fhem("set LED_aussen on")}} ; set Rolladen02 on
sollte die LED nur anmachen wenn es dunkel ist, die Rollade aber in jedem Falle hoch.
Das müsste doch genau dein Ziel sein.