Uhrzeit abhängig einen Befehl ausführen

Begonnen von sun1907, 10 Januar 2013, 19:51:26

Vorheriges Thema - Nächstes Thema

sun1907

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

sun1907

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");; \
  } \
}

UliM

Das zweite if muss weg und die Klammern richtig setzen, also
... if ( ($hour > 7 || $hour <= 19) && ( (ReadingsVal("Arbeitszimmer","desired-temp",0) < 19) ) )  
=8-)

RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

sun1907

So einfach kann's gehen.. DANKE!!, klappt!!

jhohn

Du prüfst ob es 8 - 23 oder 0 - 19 Uhr ist ($hour > 7 || $hour <= 19), also den ganzen Tag

FHEM auf Synology Diskstation DS413j (DSM4.3), HM LAN Adapter
Steuerung für Nachtspeicheröfen:
Ladung:   HM-WDS10-TH-O, HM-LC-Sw4-DR, Weather-Modul
Gebläse: HM-CC-TC, HM-LC-SW1-FM, HM-Sec-RHS
FHEM auf FritzBox 7390 für Telefon Funktionen

sun1907

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.

ChrisF

Mit "($hour > 8 && $hour <= 14)" schaut er zwischen 9-14 Uhr.
Mit "($hour >= 8 && $hour <= 14)" würde er zwischen 8-14 Uhr schauen.