Licht Status und Zeitabhängig schalten

Begonnen von Konni, 26 April 2013, 11:08:10

Vorheriges Thema - Nächstes Thema

Konni

Hallo,

ich bin noch recht neu mit fhem (und dazu muss ich leider auch sagen, von Perl hab ich bisher noch recht wenig Ahnung).


Also was ich gerne verwirklichen wollen würde ist folgendes.

Wenn der Türkontakt Veranda auf open schaltet und es nach Sonnenuntergang ist und das Licht auf der Veranda aus ist, soll für 2 Minuten das Licht auf der Veranda angehen.


Einfachere Sachen hab ich mithilfe des Wikis schon hinbekommen, bei obiger Konstellation scheitere ich noch.

MfG
Konni

Rohan

Hi Konni,

dann poste doch Mal einen oder zwei deiner gescheiterten Versuche. Macht es klarer, wo evtl. Defizite sind und potenzielle Helfer wissen, wie du deine Geräte benannt hast.

Aus dem Wiki die CodeSnippets/HowTos zu sunset / Flurlicht usw. sind dir bekannt?

Gruß
Thomas
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor

Zrrronggg!

Genau. Wenn du uns sagst, wie dein Verandatürkontakt und das Verandalicht heisst, dann kann man was vorschlagen.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Konni

Also meine Versuche kann ich erst heut abend posten, aber die Namen weiß ich auswendig.


Der Türkontakt hat den Namen: OG.Veranda.Tuer und gibt als Status "open" zurück.

Der Lichtkontakt heißt: OG.Veranda.Licht.

Mfg
Konni

Zrrronggg!

Ich schlage vor, in Namen *nicht* Punkte zu verwenden. Ich habe ein "ungutes Gefühl" was z.B. eventuell spätere Stringoperationen in PERL betrifft, denn der Punkt hat in PERL eine Bedeutung. Im Folgenden daher alles durch Underscore ersetzt.

define Verandalicht_2Min notify OG_Veranda_Tuer:open { if (!isday()) && (Value("OG_Veranda_Licht") eq "off"  { fhem("setOG_Veranda_Licht on-for-timer 120 ") } }

isday orientiert sich an der bürgerlichen Dämmerung, d.h. die Umschaltung auf Nacht erfolgt, nachdem die Sonne ein paar Grad unter dem Horizont ist.

Edit:

Ersetze "ungutes Gefühl" durch: Geht definitiv nicht, darfst du nicht so machen.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Konni

Hallo,


die bige Variante hat leider nicht geklappt, ich hab immer einen Syntaxfehler bekommen.


Hab die ganze Sache jetzt etwas umgebaut, und folgende Variante scheint zu funktionieren.

define Verandalicht_2Min notify OG_WZ_TuerVeranda:open {if (!isday()) {if (Value("OG_Veranda_Licht") eq "off") { fhem "set OG_Veranda_Licht on-for-timer 30" }}}


Wenn ich mein "PHP" wissen auf Perl uminterpretire, sollte es jetzt wie folgt ablaufen:

Wenn nichtTag wahr,dann, wenn Licht aus wahr, dann mach das Licht für 30 sec an.


Zwar sicherlich nicht der sauberste Stiel, scheint aber zu funktionieren ;)

Zrrronggg!

Zitatdie bige Variante hat leider nicht geklappt, ich hab immer einen Syntaxfehler bekommen.

Nämlich welchen?

ZitatHab die ganze Sache jetzt etwas umgebaut, und folgende Variante scheint zu funktionieren.

define Verandalicht_2Min notify OG_WZ_TuerVeranda:open {if (!isday()) {if (Value("OG_Veranda_Licht") eq "off") { fhem "set OG_Veranda_Licht on-for-timer 30" }}}

Ich finde es echt sehr erstaunlich, dass das überhaupt was macht.
Ich bin wirklich verblüfft.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Konni

Im Log kam folgender Fehler:

2013.04.26 19:44:59 3: Verandalicht_2Min return value: syntax error at (eval 23) line 1, near ") &&"
syntax error at (eval 23) line 1, near "} }"


Zrrronggg!

Mein Fehler:

define Verandalicht_2Min notify OG_Veranda_Tuer:open { if (!isday()) && Value("OG_Veranda_Licht") eq "off"  { fhem("setOG_Veranda_Licht on-for-timer 120 ") } }

sollte besser gehen.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Konni

Also mit der Variante

define Verandalicht_2Min notify OG_Veranda_Tuer:open { if (isday()) && Value("OG_Veranda_Licht") eq "off"  { fhem("set OG_Veranda_Licht on-for-timer 120 ") } }

Kommt keine Fehlermeldung, aber es tut sich auch nichts (die negierung von isday hab ich weggemacht um jetzt unter Tags testen zu können).

Zrrronggg!

Hm. Normal debuggen, also erstmal sehen, ob

define Verandalicht_2Min notify OG_Veranda_Tuer:open

triggert, z.b. durch ein  simples

define Verandalicht_2Min notify OG_Veranda_Tuer:open set OG_Veranda_Licht on-for-timer 120

Danach die Bedingungen einzeln testen, z.b. so:

define Verandalicht_2Min notify OG_Veranda_Tuer:open { if (isday())  { fhem("set OG_Veranda_Licht on-for-timer 30 ") } }

Im Zweifel auch mal mit Telnet auf FHEM und inform timer nachsehen, was passiert.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Zrrronggg!

Ich sehe gerade, dass ich vielleicht noch einen Fehler drin habe, sorry. (ich hatte das eben nur so aus dem Kopf hingesschrieben)

Probier mal bitte dies:

define Verandalicht_2Min notify OG_Veranda_Tuer:open { if (isday() && Value("OG_Veranda_Licht") eq "off")  { fhem("set OG_Veranda_Licht on-for-timer 120 ") } }
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Konni

Da bekomme ich jetzt folgende Meldung



2013.04.27 20:35:33 3: Verandalicht_2Min return value: Unknown command {, try help


Ok, den Fehler hab ich beseitigen können, der Browser hat eine Zeilenschaltung am ende eigefügt.


Trozdem funktioniert es so auch nicht, es kommt auch kein Fehler im Log.


Die Anweisungen jeweils alleine funktionieren auch.

Also sowohl { if (isday())  { fhem("set OG_Veranda_Licht on-for-timer 30 ") } }
Als auch {if (Value("OG_Veranda_Licht") eq "off") { fhem("set OG_Veranda_Licht on-for-timer 30 ") } }

Zrrronggg!

Okay, ich stehe gerade auf'm Schlauch und/oder bin betriebsblind.

Ich sehe nachher noch mal drauf, vielleicht fällt es mir dann auf.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Konni

Mach dir doch keinen Streß, die doppel If Konstruktion funktioniert ja, ob der Code jetzt dadruch etwas aufgeblähter ist, ist doch egal ;)

Warum kompliziert, wenn es auch einfach geht.