Hallo Zusammen,
ich möchte gern, dass sich meine Beleuchtung einschaltet, wenn es draußen dunkel ist und der Fernseher (wird gemeinsam mit Soundanlage eingeschaltet) läuft.
-Anwesenheitserkennung über Netzwerkverbindung für Soundanlage läuft
-Notify für Anwesenheiterkennung läuft (on/off wird ausgegeben)
-Modul Twilight läuft
Einschalten soll entweder die Soundanlage, wenn es bereits dunkel ist, oder Twilight, wenn die Soundanlage läuft. Ich komme aber mit den Bedingungen nicht weiter. Habe verschiedene Dinge ausprobiert.
Ich habe mit "if" experimentiert und auch mit der "state" Abfrage und "watchdog".
Ich möchte es gern selbst rausfinden, brauch eben nur einen Schupps bzw. Denkanstoß
Danke
Spike
DOIF :)
Mach doch einem Dummy, der via Twilight auf tag oder nacht geschaltet wird. (doif oder notify setzt den Dummy)
Dann ein doif, das bei Anlage=present und Dummy=nacht das licht anschaltet.
oder ganz altmodisch mit at und notify
define Licht_an_1 at *{sunset("REAL")} {if (Value ("TV") eq "present"){fhem ("set Licht on")}}
zweiter Fall
define Licht_an_2 notify TV:present {if (!isday("REAL")) {fhem ("set Licht on")}}
LG
Danke Euch erstmal für die schnellen Antworten. Werde heute Abend mal die Varianten probieren und berichten.
Spike
Ich hab es umgesetzt, bei mir sieht es so aus:
define Licht_an_mit_TV_1 at *{sunset("REAL")} {if (Value ("Teufel_sound") eq "present"){fhem ("set FunkSt1_LED on")}}
define Licht_an_mit_TV_2 notify Teufel_sound:present {if (!isday("REAL")) {fhem ("set FunkSt1_LED on")}}
zum Ausschalten habe ich dann das Notify entsprechend umgebaut:
define Licht_aus_mit_TV_2 notify Teufel_sound:absent set FunkSt1_LED off
Das Licht schaltet mit der Teufel-Anlage ein bzw. aus. Es war heute schon dunkel, also konnte ich nur TV2 testen.
Noch eine Verständnisfrage, warum die zwei unterschiedlichen Wege zum Einschalten. Ist vielleicht ne komische Frage, aber ich würde es auch gern verstehen.
Spike
Zitat von: spike08122 am 02 Dezember 2015, 18:23:43
define Licht_an_mit_TV_1 at *{sunset("REAL")} {if (Value ("Teufel_sound") eq "present"){fhem ("set FunkSt1_LED on")}}
define Licht_an_mit_TV_2 notify Teufel_sound:present {if (!isday("REAL")) {fhem ("set FunkSt1_LED on")}}
1. wenn Fernseher an und es wird dunkel schalte Licht an
2. wenn es dunkel ist und der Fernseher angeschaltet wird => schalte Licht an
@Paul danke.
Das einzige Problem, das ich festgestellt habe. Jede Minute wenn FHEM die Anlage pingt und sie "present" ist, wird auch der Befehl zum einschalten rausgeschickt.
Wie bekomme ich das weg?
Zitat von: spike08122 am 02 Dezember 2015, 21:55:24
@Paul danke.
Das einzige Problem, das ich festgestellt habe. Jede Minute wenn FHEM die Anlage pingt und sie "present" ist, wird auch der Befehl zum einschalten rausgeschickt.
Wie bekomme ich das weg?
define Licht_an_mit_TV_2 notify Teufel_sound:present {if (!isday("REAL")&& Value "FunkSt1_Led" eq "off") {fhem ("set FunkSt1_LED on")}}
ZitatWie bekomme ich das weg?
Oder du setzt das Attribut event-on-change-reading bei dem Presence Modul.
Oder du nimmst doch die schon vorgeschlagene DOIF Variante. Das triggert in der Standardvariante nur, wenn ein Auslösereading seinen state verändert. (Außer du setzt im DOIF das Attribut do always)
8)
Nachdem ich mich mal etwas mit DOIF beschäftigt habe, habe ich mich mal darun versucht. Hier meine Lösung
define LED_auto_TV DOIF ([Automatisch_Schalten] eq "on" and [Teufel_sound] eq "present" and [{sunset("REAL")}]) (set FunkSt1_LED on) DOELSE (set FunkSt1_LED off)
Ich habe noch einen Dummy eingefügt, um die Automatik auch abschalten zu können
define Automatisch_Schalten dummy
attr Automatisch_Schalten setList on off
Veilleicht kann jemand damit was anfangen.
LG Spike
ich habe mal hier die vorschläge aufgegriffen, aber probleme beim umsetzen.
mit dem DOIF Befehl passiert bei mir gar nichts
define Licht_auto_TV DOIF ([Automatisch_Schalten] eq "on" and [Sat] eq "present" and [{sunset("CIVIL")}]) (set StehlampeKleinWohnen on) DOELSE (set StehlampeKleinWohnen off)
ich habe aber auch ein Verständniss Problem mit DOELSE, warum sollte er damit überhaupt ausschalten?
weil nur der "Sat" auf "absent" geht, aber "Automatisch_Schalten" bleibt doch noch auf "on" und wir haben auch noch "sunset". es müsste doch erst gehen, wenn beide Variablen "off" sind und es "sunrise" ist.
ich hoffe man versteht mich, sprich so oder so ähnlich müsste es doch aussehen?
define Licht_auto_TV DOIF ([Automatisch_Schalten] eq "on" and [Sat] eq "present" and [{sunset("CIVIL")}]) (set StehlampeKleinWohnen on) DOELSE ([Sat] eq "absent") (set StehlampeKleinWohnen off)
bei der ersten vorgeschlagenen variante mit dem at befehl und den zwei notify klappt es relativ gut. diese variante ist nicht so schön wie die DOIF variante mit dem dummy zum ausschalten.
aber bei dem 2.notify habe ich das problem, dass er mir die lampe alle 30-60sek ausschaltet, obwohl sie bereits aus. zumindest ist mein log voll mit "set StehlampeKleinWohnen off".
jetzt dachte ich an folgendes, aber das geht nicht, womit ich irgendwie schon gerechnet habe
define Licht_aus_mit_TV_2 notify {if (Value ("Sat") eq "absent" and ("StehlampeKleinWohnen") eq "on") {fhem ("set StehlampeKleinWohnen off")}}
die alternative geht natürlich auch nicht
define Licht_aus_mit_TV_2 notify Sat:absent {if (("StehlampeKleinWohnen") eq "on") {fhem ("set StehlampeKleinWohnen off")}}
das selbe Problem habe ich aber auch mit dem 1.notify zum einschalten, der schaltet auch ständig die Lampe an, obwohl sie bereits an ist.
mein Vorschlag, aber vermutlich wird der auch nicht gehen :S
define Licht_an_mit_TV_2 notify Sat:present {if (!isday("REAL") and ("StehlampeKleinWohnen") eq "off") {fhem ("set StehlampeKleinWohnen on")}}
Steht hier:
Zitat von: Rince am 03 Dezember 2015, 06:10:40
Oder du setzt das Attribut event-on-change-reading bei dem Presence
stimmt, das muss es gewesen sein, danke.
beim testen hatte ich noch mein handy genommen und da ist "event-on-change-reading" eh schon drin gewesen. für den Satrecevier hatte ich "event-on-change-reading" wohl vergessen gehabt, den jetzt geht es. ich weiß auch gar nicht wann ich das "event-on-change-reading" beim Sat eingefügt hatte, eventuell beim schreiben ins forum :S
Allerdings ist die frage für das DOIF immer noch offen und warum es die Lampe mit DOELSE ausschalten sollte?
müsste wohl alles schritt für schritt testen, ohne soviele variablen und ohne doelse.
ach ja, so wäre es wohl richtiger und nicht was ich unten geschrieben habe, zumindest laut commandref:
define Licht_auto_TV DOIF ([Automatisch_Schalten] eq "on" and [Sat] eq "present" and [{sunset("CIVIL")}]) (set StehlampeKleinWohnen on) DOELSEIF ([Sat] eq "absent") (set StehlampeKleinWohnen off)
ich nochmal, also das DOIF klappt bei mir nicht wenn ich sunset drin habe. nehme ich die variable raus, schaltet DOIF die Lampe so wie es soll.
hat das Problem noch jemand?
define Licht_auto_TV DOIF ([Automatisch_Schalten] eq "on" and [Sat] eq "present" and [{sunset("CIVIL")}]) (set StehlampeKleinWohnen on) DOELSEIF ([Sat] eq "absent") (set StehlampeKleinWohnen off
Zitat von: sasquuatch am 12 April 2016, 16:45:55
ich nochmal, also das DOIF klappt bei mir nicht wenn ich sunset drin habe. nehme ich die variable raus, schaltet DOIF die Lampe so wie es soll.
hat das Problem noch jemand?
define Licht_auto_TV DOIF ([Automatisch_Schalten] eq "on" and [Sat] eq "present" and [{sunset("CIVIL")}]) (set StehlampeKleinWohnen on) DOELSEIF ([Sat] eq "absent") (set StehlampeKleinWohnen off
[{sunset("CIVIL")}] ist nur zu einem Zeitpunkt wahr, es wird nur geschaltet wenn zu diesem Zeitpunkt auch die anderen beiden Vergleiche wahr sind.
Du könntest eine Zeitspanne angeben, statt [{sunset("CIVIL")}] nimm z.B. [{sunset("CIVIL")}-sunrise("CIVIL")].
danke :)
habe es jetzt so, hoffe die klammern sind richtig, weil er es nur so angenommen hat.
define Licht_auto_TV DOIF ([Automatisch_Schalten] eq "on" and [AVReceiverYamaha] eq "on" and [{sunset("REAL")}-{sunrise("REAL")}]) (set StehlampeKleinWohnen on) DOELSEIF ([AVReceiverYamaha] eq "off" and [StehlampeKleinWohnen] eq "on") (set StehlampeKleinWohnen off)
Zitathoffe die klammern sind richtig
Ja, da habe ich schlampig kopiert, zum Glück gibt es eine Syntaxprüfung ;)
hat ja jetzt endlich dank deiner hilfe geklappt. habe gestern auch nochmal die commandref durch gelesen und diesen teil mit sunset-sunrise entdeckt, wäre aber trotzdem nicht ohne dich drauf gekommen.
jetzt verstehe ich endlich DOIF und kann so meine Sommerbeschattung programmieren. alles was ich bisher dazu gefunden habe, scheint mir zu kompliziert zu sein.
Zitat von: sasquuatch am 12 April 2016, 17:09:45
danke :)
habe es jetzt so, hoffe die klammern sind richtig, weil er es nur so angenommen hat.
define Licht_auto_TV DOIF ([Automatisch_Schalten] eq "on" and [AVReceiverYamaha] eq "on" and [{sunset("REAL")}-{sunrise("REAL")}]) (set StehlampeKleinWohnen on) DOELSEIF ([AVReceiverYamaha] eq "off" and [StehlampeKleinWohnen] eq "on") (set StehlampeKleinWohnen off)
Hallo,
Ich muss das Thema nochmal rauskramen...
Ich hab den oben zitierten Code ebenfalls benutzt um das Licht einzuschalten wenn ich fernsehe. Jetzt ist mir aufgefallen das wenn ich vorm Sunset fernsehe und die Zeit des Sonnenuntergang eintritt, die Lampe nachträglich nicht geschaltet wird. Logischerweise, weil der ja nur einmal prüft wenn der AVR eingeschaltet wird und danach nicht wieder, oder?
Hab jetzt 3 Wochen recherchiert und mir jetzt diesen Code ausm Hirn gedrückt.
define Licht_auto_TV2 watchdog (DENON:on and isday() ) set licht_wohnzimmer on
Dabei kriege ich diese Fehlermeldung:Bad regexp 1: Unmatched ( in regex; marked by <-- HERE in m/^( <-- HERE DENON:on$/ at ./FHEM/91_watchdog.pm line 49.Was bedeutet das und was mache ich falsch?
Zitat von: rot-weiss4 am 10 März 2017, 15:36:52
Logischerweise, weil der ja nur einmal prüft wenn der AVR eingeschaltet wird und danach nicht wieder, oder?
ja und nein. natürlich prüft er ständig ob alle bedinungen erfüllt sind, schaltet es "dann" aber nur einmal ein bzw. aus, aber er prüft es von sonnenuntergang bis sonnenaufgang ununterbochen. wenn ich also nach sonnenuntergang einschalte, schaltet er es trotzdem ein bzw. aus und wenn ich zwischenzeitlich der meinung bin, ich möchte jetzt das licht doch ausschalten, bleibt es dann auch aus. oder ich habe meinen AV aus und schalte das licht wieder ein, wäre es auch schlecht, würde er jetzt weiter prüfen und mein licht ständig wieder ausschalten. bei mir funktioniert die schaltung wunderbar, vielleicht hast du einen fehler im Code vom DOIF, kannst ihn ja mal posten.
mit watchdog kenne ich mich nicht aus :-\
Hi, danke für deine Hilfe.
Anbei der DOIF-Code:
defmod Licht_auto_TV DOIF ([DENON] eq "on" and [{sunset("REAL")}-{sunrise("REAL")}]) (set licht_wohnzimmer on) DOELSEIF ([DENON] eq "off") (set licht_wohnzimmer off)
attr Licht_auto_TV do always
attr Licht_auto_TV room Wohnzimmer
[/size]Das Licht geht bei dir aber auch nicht an wenn du z. B. um 14 Uhr fern siehst, irgendwann tritt die Zeit von sunset ein und das Licht geht nachträglich von alleine an, oder? Das müsste ja mit einem watchdog auf die Zeit des täglichen Sunset getriggert sein... Ich weiß nur nicht genau wie ich ihm das sagen soll.
Du verwendest DOIF Syntax in einem Watchdog https://wiki.fhem.de/wiki/Watchdog
Edit: Da war jemand schneller ;-S
ich sehe keinen fehler, überpfüe mal zwei sachen:
steht bei "Probably associated with " ganz unten sowohl der denon als auch das licht_wohnzimmer?
wenn du in der kommandozeile set licht_wohnzimmer on eingibst, denke ich wird dein licht angehen, aber wenn dein denon eingeschaltet ist, steht bei state auch "on"?
ansonsten ist mein latein am ende, eventuell baust du ein log1 ein, damit kenne ich mich aber auch noch nicht aus :-\