Calendar zur Heizungssteuerung - Notify-Problem...

Begonnen von MatthiasR, 26 April 2013, 21:12:11

Vorheriges Thema - Nächstes Thema

MatthiasR

Hallo zusammen,

ich habe einen Kalender aufgesetzt, um meine Heizungssteuerung mit Heating Control gezielt zu übersteuern. Den Kalender kann ich problemlos lesen, aber ich habe ein Problem mit den notifys. Hier der Code:


define Kalender_Heizung_aktiv_notify notify Kalender_Heizung:modeStarted.* {\
if (defined %EVTPART1) {\
   fhem("set Kalender_Heizung_aktiv On");;\
   my $summary=fhem("get Kalender_Heizung summary %EVTPART1");;\
   fhem("Set Kalender_Heizung_Temperatur $summary");;\
   Log 1, "Kalender_Heizung aktiv, $summary";;\
  }\
}


Ziel ist es, bei Vorhandensein eines Kalendereintrags die Beschreibung als Temperatur zu übernehmen. Über die beiden dummys Kalender_Heizung_aktiv und Kalender_Heizung_Temperatur möchte ich später (wenn das hier geht) die Ausführung von Heating Control übersteuern.

Ich kriege aber bei dem Code oben im Logfile bei jeder Kalenderaktualisierung ein


2013.04.26 20:58:46 3: Kalender_Heizung_aktiv_notify return value: syntax error at (eval 3869) line 1, near "modeStarted:"
syntax error at (eval 3869) line 1, near "} }"


Ich finde keinen Syntaxfehler (und schon gar nicht zwei). Weiss da jemand Rat?

Danke & Gruß
Matthias

UliM

Hi,
sehe auch keien Fehler. Fang doch mal vereinfacht an a la

define Kalender_Heizung_aktiv_notify notify Kalender_Heizung:modeStarted.* {Log 1, "%EVTPART1"}

und bau's dann nach und nach wieder auf.

Vll kommst Du dem Problem ja dadurch auf die Spur.

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

stromer-12

FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

crissiloop

Hallo,

laut dem Beitrag Link ist die neue Schreibweise "$EVTPART1".
Die Variante mit % sollte wohl auch noch funktionieren. Aber für die Zukunft ist es sicher hilfreich die neue Version zu verwenden.

Aber einen Syntaxfehler wüsste ich jetzt auch nicht, wobei ich da sicher noch kein Experte bin.

Als Hinweis vielleicht auch noch, dass ich meine Notifys immer im DEF-Fenster bearbeite und nicht die fhem.cfg. Damit spare ich mir die doppelten Semikolons und Backslashes am Zeilenende.
Und für meinen Google-Kalender verwende ich folgendes Notify
define Kalender_Christian_Start notify Kalender_Christian:modeStarted.*googlecom.* {
Kalenderstart("$EVENT");

Wobei Kalenderstart eine Funktion in meiner 99_MyUtils.pm ist welche mit dem Paramter $EVENT aufgerufen wird.

Gruß Christian
FHEM 5.5 auf Cubietruck

1x HMLAN, 1x HMUSB, 12x HM-LC-Bl1 PBU-FM, 5x HM-LC-Sw1-Pl, 1x HM-LC-Sw1-FM, 2x HM-LC-Sw2-FM, 2x HM-SEC-RHS, 3x HM-SEC-SD, 8x HM-SEC-SC, 3x HM-RC-4-2, 1x HM-RC-8, 1x HM-Sec-SFA-SM, Jeelink, 7x Technoline TX 29 DTH-IT

Puschel74

Hallo,

entweder hab ich wieder Tomaten auf den Augen oder fehlt hier

define Kalender_Christian_Start notify Kalender_Christian:modeStarted.*googlecom.* {
Kalenderstart("$EVENT");


nicht ein } ??

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

crissiloop

natürlich!
Sorry meine Schuld beim Kopieren.
in der fhem.cfg sieht es natürlich so aus:
define Kalender_Christian_Start notify Kalender_Christian:modeStarted.*googlecom.* {\
Kalenderstart("$EVENT");;\
}
FHEM 5.5 auf Cubietruck

1x HMLAN, 1x HMUSB, 12x HM-LC-Bl1 PBU-FM, 5x HM-LC-Sw1-Pl, 1x HM-LC-Sw1-FM, 2x HM-LC-Sw2-FM, 2x HM-SEC-RHS, 3x HM-SEC-SD, 8x HM-SEC-SC, 3x HM-RC-4-2, 1x HM-RC-8, 1x HM-Sec-SFA-SM, Jeelink, 7x Technoline TX 29 DTH-IT

sky64

Ich weiß nicht ob es hilft. Bei mir ist die Kalenderabfrage anders aufgebaut.
Ich verwende aber z.Z. auch nur die Information Eintrag "vorhanden" / "nicht vorhanen"
(Das "schicht.ics" liegt lokal auf dem RPi und kann mit Thunderbird bearbeitet werden)

define Schicht Calendar ical url http://192.168.30.64/calendar/schicht.ics 3600
attr Schicht event-on-change-reading modeStarted,modeEnded,modeChanged,modeUpcoming
define check_isSchicht at +*00:05:00 { fhem "set isSchicht ". (ReadingsVal("Schicht","modeStart","") =~ "[0-9]" ? 1: 0 ) }

Das (ReadingsVal("Schicht","modeStart","") liefert die UUID des entsprechenden Kalendereintrags.
Wie man den Inhalt dieses Eintrags bekommt weiß ich leider nicht.
Ein (ReadingsVal("Schicht","19760e4c1e1f4804bbb99bff86ba5ff9","")) liefert bei mir ein leeres Ergebnis.
Wobei ein "get Schicht text 19760e4c1e1f4804bbb99bff86ba5ff9" sehr wohl "27.04.13 08:00 Normal_WE " liefert.

Gruß Ronald

FHEM auf Ubuntu-VM (VMware), Heizung FHEM auf Raspi
Module: Volkszähler, ESPEASY, RFXtrx433, LaCrosseGateway, jeeLink, EMT7110, IRBlaster, LuftdatenInfo, MQTT, ESPDuino, Shelly, Abfallanzeige, (OilFox), Weatherman,  KeyValueProtocol
Modbus für Fronius Gen24-PV incl. ForeCast mit DWD und SolCast

MatthiasR

Hallo zusammen,

vielen Dank allen für die zahlreichen Antworten! Das ist ja wirklich super hier.

Zur richtigen Lösung führt eine gute Kombination aus vielen der Postings.

Aber zunächst mal: bei mir geht $EVTPART1 etc. nicht, ich bekomme immer eine Fehlermeldung a la "explicit package name required". Woran liegt das? - Ich bin vorläufig bei der "%"-Variante geblieben.

Dann ist mir aufgegangen, dass die %... ja durch fhem im Code ersetzt werden, also ein if (defined %EVTPART1) nicht richtig funktionieren kann, denn nach der Ersetzung steht da irgendein Murks.

Dann habe ich gesehen, dass ein Großteil der Probleme daher rührte, dass bei jedem Kalender-Update leere modeStarted und modeEnded - Events kommen (und wahrscheinlich die anderen auch, auf die teste ich aber nicht). Ich habe daher die Regexp auf z.B. Kalender_Heizung:modeStarted.*googlecom.* eingeschränkt. Das beseitigt eine Menge Probleme (oder zumindest vermeintliche) im Logfile.

Die eigentliche Abfrage für modeStarted sieht jetzt so aus:


Kalender_Heizung:modeStarted.*googlecom.* {
  my $uuid = "%EVTPART1";
  my $summary = fhem("get Kalender_Heizung summary $uuid");
  if (defined $summary) {
     fhem("set Kalender_Heizung_Temperatur $summary");
     fhem("set Kalender_Heizung_aktiv On");
     Log 1, "Kalender_Heizung aktiv, Temperatur: $summary degC";
  } else {
     Log 1, "Kalender_Heizung aktiv: FEHLER - summary leer bei UUID $uuid"
  }
}


Und analog für Kalender_Heizung_inaktiv_notify.

Jetzt muss ich nur noch HeatingControl beibiegen, dass es ggf. überschrieben werden kann.

Bis hierher - vielen Dank allen!

Gruß
Matthias

Rohan

Hallo Matthias,

Zitat von: MatthiasR schrieb am So, 28 April 2013 20:42... bei mir geht $EVTPART1 etc. nicht, ich bekomme immer eine Fehlermeldung a la "explicit package name required". Woran liegt das? - Ich bin vorläufig bei der "%"-Variante geblieben. ...

So lange gibt es diese Umstellung noch nicht (wobei die "alte" Verfahrensweise noch eine beschränkte Zeit unterstützt wird), daher meine Fragen:

- Welche Fhem-Version nutzt du bzw. wann war dein letztes Update?

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

MatthiasR

Hi Thomas,

ich habe mir das daraufhin nochmal angeschaut, denn ich bin im Development-Zweig auf der letzten Version von gestern. Die $-Versionen gehen sehr wohl, also z.B. ein Test:

Kalender_Heizung:modeStarted.*googlecom.* {
  Log 1, "test EVENT:";
  if (defined $EVENT) { Log 1, "EVENT: " . $EVENT; };
  if (defined $NAME) { Log 1, "NAME: " . $NAME; };
  if (defined $EVTPART0) { Log 1, "EVTPART0: " . $EVTPART0; };
  if (defined $EVTPART1) { Log 1, "EVTPART1: " . $EVTPART1; };
}


Wenn ich hier aber eine Zeile

 if (defined $EVTPART2) { Log 1, "EVTPART2: " . $EVTPART2; };


hinzufüge, schlägt die gesamte Ausführung mit diesem ominösen Kalender_Heizung_test_notify return value: Global symbol "$EVTPART2" requires explicit package name at (eval 290) line 1. fehl.

Wie kann man denn prüfen, ob die genannte Variable existiert oder nicht? if (defined $xxx) scheint ja gerade nicht zu funktionieren!

Danke & Gruß
Matthias

crissiloop

Hallo Matthias,

also $EVTPART2 gibt es beim Ereignis eines Kalenders nicht.
Das EVTPART trennt das EVENT bei vorhandenen Leerzeichen auf. Und beim Kalenderereignis sind nur 2 Parts vorhanden. Wie es bei anderen Ereignissen ausschaut weiß ich aber nicht.

Die Frage ist doch aber, ob diese Abfrage überhaupt notwendig ist? Denn dein Notify löst doch sowieso nur aus, wenn ein Ereignis vom Typ modeStarted auftritt.
Nach Hinweisen im Forum trenne ich mein $EVENT selber in die Teile auf:

my @Ereignisarray = split(/.*:\s/,$EVENT);
        my $Ereignisteil1 = $Ereignisarray[1];
        Log 3, "Eventpart 1: $Ereignisteil1";


Klappt bei mir in meiner 99_myUtils.pm bisher problemlos.

Gruß
FHEM 5.5 auf Cubietruck

1x HMLAN, 1x HMUSB, 12x HM-LC-Bl1 PBU-FM, 5x HM-LC-Sw1-Pl, 1x HM-LC-Sw1-FM, 2x HM-LC-Sw2-FM, 2x HM-SEC-RHS, 3x HM-SEC-SD, 8x HM-SEC-SC, 3x HM-RC-4-2, 1x HM-RC-8, 1x HM-Sec-SFA-SM, Jeelink, 7x Technoline TX 29 DTH-IT

AnonymousHolger

Hallo Matthias,

ich interessiere mich auch gerade für eine Umsetzung verschiedener Heizprofile über Kalendereinträge für verschiedene Räume.

Leider stehe ich aktuell noch sowohl mit der Kalender, als auch mit der Heating_Control Funktion "Auf Kriegsfuss".

Kannst du ggf. einmal, dass was bei dir schon funktioniert (inkl. die Kalender ICS) in den CodeSnippets posten oder als PN  schicken ? Vielleicht platzt bei mir dann endlich der "Anfangsknoten".

Danke

Gruss

Holger

crissiloop

FHEM 5.5 auf Cubietruck

1x HMLAN, 1x HMUSB, 12x HM-LC-Bl1 PBU-FM, 5x HM-LC-Sw1-Pl, 1x HM-LC-Sw1-FM, 2x HM-LC-Sw2-FM, 2x HM-SEC-RHS, 3x HM-SEC-SD, 8x HM-SEC-SC, 3x HM-RC-4-2, 1x HM-RC-8, 1x HM-Sec-SFA-SM, Jeelink, 7x Technoline TX 29 DTH-IT

AnonymousHolger


AnonymousHolger

Hallo,

habe noch ein Problem ... :-( ...

Nach FHEM Update und Verwendung des Beispiels von Matthias, bekomme ich jedoch schon beim REreadcfg folgende Fehlermeldungen bzgl. der 57_Calender Moduls :-( ...


Use of uninitialized value in substitution (s///) at ./FHEM/57_Calendar.pm line 347.
Use of uninitialized value $uid in hash element at ./FHEM/57_Calendar.pm line 616.
Use of uninitialized value $uid in hash element at ./FHEM/57_Calendar.pm line 616.
Use of uninitialized value $uid in hash element at ./FHEM/57_Calendar.pm line 616.
Use of uninitialized value $uid in hash element at ./FHEM/57_Calendar.pm line 616.
Use of uninitialized value in numeric ne (!=) at ./FHEM/57_Calendar.pm line 666.
Use of uninitialized value in numeric ne (!=) at ./FHEM/57_Calendar.pm line 666.
Use of uninitialized value in hash element at ./FHEM/57_Calendar.pm line 621.


So wiederholt es sich dann kontinuierlich :-( ... (FHEM Gestern upgedated und neu gestartet - auf FB7390)

Weiterhin möchte ich auch eine sehr einfache Änderung der FHT Programmierung in Zusammenspiel von Calendar Funktion und Home_Control machen.

Plan:
FHTs laufen im Manual Modus (der AutoModus hat eine sinnvolle Grundprogrammierung, für den Fall, dass FHEM mal "Down" ist)
Über Home_Control werden die einzelnen Schaltpunkte definiert (über "desired Temp" zu den definierten Schaltpunkten)
Die Parameter holt sich FHEM - Home_Control aus einer ICS Datei, die für die jeweiligen Tage die Parameter definiert hat.

Die ICS Kalenderdatei erselle ich mir mittels eines Excel DAtei mit Makros.
-> Vorgabe Standard Heizprogramm für Wochentage
-> Vorgabe Heizprogramm für Wochenende / Freie Tage
-> Vorgabe Heizprogramm für Sondereinstellung / Heimarbeit / Gäste /
-> Bei Abwesenheit wird alles auf Nachttemperatur geregelt.
-> Auswertung der Ferien und Feiertagskalender wird mit in die Planung eingebunden.


---> Ergebnis wäre dann eine (oder eine DAtei Pro Zimmer) ICS DAtei die pro Tag den "Home_Control" String im Kalendereintrag Subject verwendet.

D.h. über das parsen der Eintragsubjects soll dann der Home_Control String z.B. für FHT_Wohnzimmer verwendet werden.

Vorteil:
Der Kalender ist z.B. auch standardmässig im Kalender oder Google einsehbar, ohne Zugriff auf FHEM. (z.B von der Arbeit).
Hat damit also auch einen WAF, wenn man als Frau den Syntax versteht.

Was meint Ihr .... ?

Die ganze "Perl" syntax ist mir selbst nach vielen Stunden noch ein Grauss. Über das Excel Programm kann ich für verschiedene Wochen/Monate im Voraus die Programmierung der FHTs planen und auch noch im Kalender darstellen.

Wenn es dann die Möglichkeit gibt die Kalenderseinträge dementsprechend zu tracen, wäre das super ... habe aufgrund der beschriebenen CalenderProbleme aber noch keine Möglichkeit zu prüfen.