FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: sun1907 am 10 Januar 2013, 19:51:26

Titel: Uhrzeit abhängig einen Befehl ausführen
Beitrag von: sun1907 am 10 Januar 2013, 19:51:26
Da meine Frau manchmal früher nach Hause kommt und die Zeitschaltung der FHT z.B. erst 1 Stunde später aktiv wird das z.B. das Arbeitszimmer erwärmt, möchte ich gerne dieses per Handystatus online komfortabler für sie machen. In dem Fall möchte ich, dass in einem bestimmten Zeitrahmen eine Überwachung stattfindet und falls meine Frau z.B. wirklich früher und vor der eigentlichen Aktivschaltung der FHT Wärme braucht, soll demnach erkannt werden: "Frau kommt früher, Arbeitszimmer hat aber noch runtergesetzte Temp, also schalte nun Temp hoch".

Nehme ich diesen Code OHNE Zeitvorgabe:

# Anwesend-Test
define Anwesenheit_Test dummy
attr Anwesenheit_Test loglevel 6
attr Anwesenheit_Test room Test
attr Anwesenheit_Test setList on off
define Anwesenheit_Test_FileLog FileLog /usr/local/FHEM/var/log/Anwesenheit_Test-%Y.log Anwesenheit_Test
attr Anwesenheit_Test_FileLog logtype text
attr Anwesenheit_Test_FileLog room Logfiles
define Job_AnwesendTest at +*00:01:00 { \
  use Net::Ping;; \
  my $ip = "192.168.3.65";; \
  my $p = Net::Ping->new("icmp", 9, 64);; \
  if ($p->ping($ip)) { \
    fhem("set Anwesenheit_Test on") if (Value("Anwesenheit_Test") eq "off");; \
    fhem("define ABWT1 at +00:00:30  delete abwesend_Lena");; \
    fhem("define WZTempKorr at +00:00:30 set Testzimmer desired-temp 21") if (ReadingsVal("Arbeitszimmer","desired-temp",0) < 19);; \
  } \
  else { \
    fhem("define ABWTest at +00:01:30 set Anwesenheit_Test off") if (Value("Anwesenheit_Test") eq "on");; \
  } \
}


läuft alles wunderbar und fehlerfrei. Er realisiert, dass sie online ist nun schaltet entsprechend. Damit das aber nach 19:=0 Uhr nicht mehr aktiv ist und die FHT sich wieder einschaltet, obwohl ab 19.00 Uhr die Nachtabsenkung aktiv ist, soll die Zeit entsprechend begrenzt werden.

Nehme ich also denselben Code und füge diese Zeit entsprechend hinzu: -->if ($hour > 10 || $hour <= 19) &&<--

# Anwesend-Test
define Anwesenheit_Test dummy
attr Anwesenheit_Test loglevel 6
attr Anwesenheit_Test room Test
attr Anwesenheit_Test setList on off
define Anwesenheit_Test_FileLog FileLog /usr/local/FHEM/var/log/Anwesenheit_Test-%Y.log Anwesenheit_Test
attr Anwesenheit_Test_FileLog logtype text
attr Anwesenheit_Test_FileLog room Logfiles
define Job_AnwesendTest at +*00:01:00 { \
  use Net::Ping;; \
  my $ip = "192.168.3.65";; \
  my $p = Net::Ping->new("icmp", 9, 64);; \
  if ($p->ping($ip)) { \
    fhem("set Anwesenheit_Test on") if (Value("Anwesenheit_Test") eq "off");; \
    fhem("define ABWT1 at +00:00:30  delete abwesend_Lena");; \
    fhem("define WZTempKorr at +00:00:30 set Testzimmer desired-temp 21") [b][color=red]if ($hour > 7 || $hour <= 19) &&[/color][/b] if (ReadingsVal("Arbeitszimmer","desired-temp",0) < 19);; \
  } \
  else { \
    fhem("define ABWTest at +00:01:30 set Anwesenheit_Test off") if (Value("Anwesenheit_Test") eq "on");; \
  } \
}


führt das im Log zu diesem Fehler:
2013.01.10 19:33:01 3: syntax error at (eval 5139) line 1, near "&& if"


Wo steckt denn noch der Wurm drin ?
Vielen Dank für nen Tip
Titel: Aw: Uhrzeit abhängig einen Befehl ausführen
Beitrag von: sun1907 am 10 Januar 2013, 19:56:34
Im Code wurde die entsprechende Zeile (markiert) nicht richtig wiedergegeben. Darum noch mal als normaler Text zum besseren Verständnis

# Anwesend-Test
define Anwesenheit_Test dummy
attr Anwesenheit_Test loglevel 6
attr Anwesenheit_Test room Test
attr Anwesenheit_Test setList on off
define Anwesenheit_Test_FileLog FileLog /usr/local/FHEM/var/log/Anwesenheit_Test-%Y.log Anwesenheit_Test
attr Anwesenheit_Test_FileLog logtype text
attr Anwesenheit_Test_FileLog room Logfiles
define Job_AnwesendTest at +*00:01:00 { \
  use Net::Ping;; \
  my $ip = "192.168.3.65";; \
  my $p = Net::Ping->new("icmp", 9, 64);; \
  if ($p->ping($ip)) { \
    fhem("set Anwesenheit_Test on") if (Value("Anwesenheit_Test") eq "off");; \
    fhem("define ABWT1 at +00:00:30  delete abwesend_Lena");; \
    fhem("define WZTempKorr at +00:00:30 set Testzimmer desired-temp 21") if ($hour > 7 || $hour <= 19) && if (ReadingsVal("Arbeitszimmer","desired-temp",0) < 19);; \
  } \
  else { \
    fhem("define ABWTest at +00:01:30 set Anwesenheit_Test off") if (Value("Anwesenheit_Test") eq "on");; \
  } \
}
Titel: Aw: Uhrzeit abhängig einen Befehl ausführen
Beitrag von: UliM am 10 Januar 2013, 19:57:05
Das zweite if muss weg und die Klammern richtig setzen, also
... if ( ($hour > 7 || $hour <= 19) && ( (ReadingsVal("Arbeitszimmer","desired-temp",0) < 19) ) )  
=8-)

Titel: Aw: Uhrzeit abhängig einen Befehl ausführen
Beitrag von: sun1907 am 10 Januar 2013, 20:04:14
So einfach kann's gehen.. DANKE!!, klappt!!
Titel: Aw: Uhrzeit abhängig einen Befehl ausführen
Beitrag von: jhohn am 11 Januar 2013, 07:41:13
Du prüfst ob es 8 - 23 oder 0 - 19 Uhr ist ($hour > 7 || $hour <= 19), also den ganzen Tag

Titel: Aw: Uhrzeit abhängig einen Befehl ausführen
Beitrag von: sun1907 am 11 Januar 2013, 09:03:32
Ich habe es gestern noch etwas verändert, was aber läuft.
if ($hour > 8 && $hour <= 14)
Hier "schaut" er zwischen 8 und 14 Uhr (größer 8 und kleiner 14), ob wie oben beschrieben meine Frau früher kommt und reagiert dann entsprechend.
Titel: Aw: Uhrzeit abhängig einen Befehl ausführen
Beitrag von: ChrisF am 11 Januar 2013, 11:01:16
Mit "($hour > 8 && $hour <= 14)" schaut er zwischen 9-14 Uhr.
Mit "($hour >= 8 && $hour <= 14)" würde er zwischen 8-14 Uhr schauen.