define XXX at mit variabler Zeit - für Gartenbewässerung

Begonnen von Hoeness, 12 Mai 2014, 22:04:48

Vorheriges Thema - Nächstes Thema

Hoeness

Hallo,

Für meine Gartenbewässerung bin ich auf der Suche nach einer Möglichkeit ein:
   define XXX at
         mit einer Zeit zu verwenden, die in einer Variablen gespeichert wird.

Für meine Gartenbewässerung sieht wie folgt aus:

2x 24V Ventile
1x Spannunserzeugung (24VAC & 5V DC)
1x Wasserpumpe

Das ganze wird über einen RaspberryPI gesteuert an dem ich einen 4 Kanal Relais-Karte verbaut habe.

HW-technisch läuft das alles top.

Da ich die Spannung, Pumpe und Ventile zu unterschiedlichen Zeiten schalten möchte bin ich auf der Suche nach einen define at, was mit einer "Totzeit" umgehen kann, welche in einer Variablen gespeichert ist.

Mein Momentaner Code sieht so aus (ich hoffe es ist alles dabei um die Idee zu verstehen).


Define 3_Automatik dummy
attr 3_Automatik room GPIO
attr  3_Automatik webCmd an:aus
attr 3_Automatik devStateIcon aus:Bwaesserung_black_off_48_B an:Bwaesserung_gruen_on_48_B
attr 3_Automatik eventMap on:an off:aus

define Bewaesserung_Minuten dummy
attr Bewaesserung_Minuten setList state
attr Bewaesserung_Minuten webCmd 9:8:7:6:5:4:3:2:1:0
attr Bewaesserung_Minuten room GPIO

define Spg_Vorlauf_Sekunden dummy
attr Spg_Vorlauf_Sekunden setList state
attr Spg_Vorlauf_Sekunden webCmd 5:4:3:2:1:0
attr Spg_Vorlauf_Sekunden room GPIO

define Pumpe_Vorlauf_Sekunden dummy
attr Pumpe_Vorlauf_Sekunden setList state
attr Pumpe_Vorlauf_Sekunden webCmd 5:4:3:2:1:0
attr Pumpe_Vorlauf_Sekunden room GPIO

define Totzeit_Sekunden dummy
attr Totzeit_Sekunden setList state
attr Totzeit_Sekunden webCmd 5:4:3:2:1:0
attr Totzeit_Sekunden room GPIO

Define 3_Automatik_on_notify notify 3_Automatik:on {\
my $Spg_time =(Value("Spg_Vorlauf_Sekunden")) +Value("Bewaesserung_Minuten")*60;;\
my $Bew_time =Value("Bewaesserung_Minuten")*60;;\
my $Totzeit =Value("Totzeit_Sekunden");;\
fhem( "set 3_Bew._Spg off-for-timer ".$Spg_time );;\
fhem( "set 4_Bew._Pumpe off-for-timer ".$Spg_time );;\
fhem( "define Bew_E_auto at +00:00:02 set 1_Bew._Eiche off-for-timer ".$Bew_time );;\
fhem( "define Bew_B_auto at +00:00:04 set 2_Bew._Baumhaus off-for-timer ".$Bew_time );;}


Wie kann ich jetzt ein define einfügen was von der Idee her so aussieht?


fhem( "define Bew_B_auto at".$Totzeit_Sekunden "set 2_Bew._Baumhaus off-for-timer ".$Bew_time );;}


kann das so gehen?
Bzw. kann mir jemand weiterhelfen.

Danke.


betateilchen

du kannst at mit jeder Zeitangabe im Format hh:mm:ss füttern.

define xyz at {hier muss eine Funktion rein (die z.B. in Deiner 99_myUtils steht), die eine Zeitangabe im Format hh:mm:ss liefert} {hier kommt der Ausführungsteil wie üblich}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Bennemannc

Hallo,

Suche im Forum mal nach Zeitschaltuhr, das ist ein fertiger Block für die Fhem.cfg - vielleicht ist das ja etwas für Dich.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

Hoeness

Hi,

Ich bekomme es nicht hin.
Kann mir jemand sagen wo mein Fehler liegt bzw. wie mann es nichtig macht ;-)

fhem( "define Bew_B_auto at".$Totzeit_Sekunden "set 2_Bew._Baumhaus off-for-timer ".$Bew_time );;}

Hinter dem at soll in der Variablen "$Totzeit_Sekunden " eine Zeit übergeben werden.

Wie geht das?

marvin78

Ich kenne den Rest deine Konfiguration nicht und weiß nicht, wie du die Variable ermittelst, aber wenn das alles korrekt ist, sollte es so gehen:

fhem("define Bew_B_auto at ".$Totzeit_Sekunden." set 2_Bew._Baumhaus off-for-timer ".$Bew_time)

...für den Fall, dass $Totzeit_Sekunden tatsächlich eine absolute Zeit im Format HH:MM:SS ist und $Bew_time einen Integer enthält.

Code ist für den DEF Bereich im Frontend und für richtige Funktion werden im Zusammenhang und je nachdem, wie du es einbaust, noch ";" Zeichen nötig sein.

Der Punkt ist in dem Fall ein Verbindungszeichen von Strings mit Variablen.

Hoeness

#5
Hallo und Danke für eure Hilfe.

Ich habe es aber noch nicht hinbekommen.

der Rest meiner Konfig ist oben zu fnden.

fhem("define Bew_B_auto at ".$Totzeit_Sekunden." set 2_Bew._Baumhaus off-for-timer ".$Bew_time)



Hier meine Fragen:

  • Kann mir jemand mein Code-Beispiel geben, bei dem im define hinter dem at eine Variable verwendet wird und eine 2. Variable hinter dem off-for-timer verwendet wird.
  • muss das format hinter dem at eine Zeit und hinter dem off-for-timer ein Integer sein. Wenn nein, wie muss man es ändern, das man theoretisch mit einer Variable beides (at und off-for-timer) auskommt. Bzw. wie kann ich eine Zeit in Integer(Sekunden) und Integer(Sekunden) in Zeit wandeln?