Hallo :-)
ich habe gerade mit Fhem angefangen und bräuchte eure Hilfe.
Ich möchte meine MAx! Thermostate mit Hilfe meines owncloud Kalenders steuern.
Es soll im Titel der Name des Thermostates stehen und im Ort die Temperatur.
Ergebnis keine Fehlermeldung, aber auch keine Aktion ;-).
hier mal meine fhem.cfg
attr global autoload_undefined_devices 1
attr global logfile ./log/fhem-%Y-%m.log
attr global modpath .
attr global motd SecurityCheck:\\\\\
\\\\\
WEB,WEBphone,WEBtablet has no basicAuth attribute.\\\\\
telnetPort has no password/globalpassword attribute.\\\\\
\\\\\
Restart fhem for a new check if the problem is fixed,\\\\\
or set the global attribute motd to none to supress this message.\\\\\
attr global statefile ./log/fhem.save
attr global userattr devStateIcon devStateStyle icon sortby webCmd
attr global verbose 3
define telnetPort telnet 7072 global
define WEB FHEMWEB 8083 global
define WEBphone FHEMWEB 8084 global
attr WEBphone stylesheetPrefix smallscreen
define WEBtablet FHEMWEB 8085 global
attr WEBtablet stylesheetPrefix touchpad
# Fake FileLog entry, to access the fhem log from FHEMWEB
define Logfile FileLog ./log/fhem-%Y-%m.log fakelog
define autocreate autocreate
attr autocreate autosave 1
attr autocreate device_room %TYPE
attr autocreate filelog ./log/%NAME-%Y.log
attr autocreate room Unsorted
attr autocreate weblink 1
attr autocreate weblink_room Plots
# Disable this to avoid looking for new USB devices on startup
define initialUsbCheck notify global:INITIALIZED usb create
# If the above notify did not helped, then you probably have to enable some of
# the following lines. Verify first that /dev/xxx ist correct.
#define FHZ FHZ /dev/USB0
#define CUL CUL /dev/ttyACM0@9600 1234
#attr CUL rfmode HomeMatic
#define EUL TCM 310 /dev/ttyACM0@57600
#define BscBor TCM 120 /dev/ttyUSB0@9600
#define BscSmartConnect TCM 310 /dev/ttyUSB0@57600
define COC CUL /dev/ttyAMA0@38400 1234
attr COC rfmode MAX
attr COC room System
define CULMAX0 CUL_MAX 123456
attr CULMAX0 room CUL_MAX
define FileLog_CULMAX0 FileLog ./log/CULMAX0-%Y.log CULMAX0
attr FileLog_CULMAX0 logtype text
attr FileLog_CULMAX0 room CUL_MAX
define MAX_074624 MAX HeatingThermostat 074624
attr MAX_074624 alias MAX_WC
attr MAX_074624 icon hc_wht_regler
attr MAX_074624 room MAX
define FileLog_MAX_074624 FileLog ./log/MAX_074624-%Y.log MAX_074624
attr FileLog_MAX_074624 logtype text
attr FileLog_MAX_074624 room MAX
define MAX_074682 MAX HeatingThermostat 074682
attr MAX_074682 alias MAX_Wohnzimmer
attr MAX_074682 icon hc_wht_regler
attr MAX_074682 room MAX
define FileLog_MAX_074682 FileLog ./log/MAX_074682-%Y.log MAX_074682
attr FileLog_MAX_074682 logtype text
attr FileLog_MAX_074682 room MAX
define MAX_02543c MAX ShutterContact 02543c
attr MAX_02543c alias F_Wohnzimmer
attr MAX_02543c icon fts_door_right
attr MAX_02543c room MAX
define FileLog_MAX_02543c FileLog ./log/MAX_02543c-%Y.log MAX_02543c
attr FileLog_MAX_02543c logtype text
attr FileLog_MAX_02543c room MAX
define MAX_025415 MAX ShutterContact 025415
attr MAX_025415 alias F_WC
attr MAX_025415 icon fts_window_1w
attr MAX_025415 room MAX
define FileLog_MAX_025415 FileLog ./log/MAX_025415-%Y.log MAX_025415
attr FileLog_MAX_025415 logtype text
attr FileLog_MAX_025415 room MAX
define MAX_02518b MAX ShutterContact 02518b
attr MAX_02518b alias F_Arbeitszimmer
attr MAX_02518b room MAX
define FileLog_MAX_02518b FileLog ./log/MAX_02518b-%Y.log MAX_02518b
attr FileLog_MAX_02518b logtype text
attr FileLog_MAX_02518b room MAX
define MAX_0746f0 MAX HeatingThermostat 0746f0
attr MAX_0746f0 alias MAX_Arbeitszimmer
attr MAX_0746f0 room MAX
define FileLog_MAX_0746f0 FileLog ./log/MAX_0746f0-%Y.log MAX_0746f0
attr FileLog_MAX_0746f0 logtype text
attr FileLog_MAX_0746f0 room MAX
define chz Calendar ical url https://user:pass@server.de/remote.php/caldav/calendars/user/heizung?export 60
define Heizung_Temperatur notify chz:modeStarted.* {\
my $reading=$EVTPART0;;\
my $uid=$EVTPART1;;\
my $Subject = fhem("get chz summary $uid");;\
my $Temperatur = fhem("get chz location $uid");;\
fhem("set $Subjekt desiredTemperature $Temperatur")\
}
define FileLog_Heizung_Temperatur FileLog ./log/Heizung_Temperatur.log Heizung_Temperatur
attr FileLog_Heizung_Temperatur logtype text
define Heizung_Temperatur_END notify chz:modeEnded.* {\
my $uid= $EVTPART1;;\
my $Subject = fhem("get chz summary $uid");;\
{fhem("set $Subjekt desiredTemperature 17")}\
}
Was ist den nun richtig?
my $uid= $EVTPART1
oder
my $uid= "$EVTPART1"
oder
my $uid= "%EVTPART1"
oder ???
Blicke mangels Perl- und Fhemkenntnisse nicht mehr durch.
habe das hier als Vorlage verwendet: http://forum.fhem.de/index.php/topic,12125.msg72154.html#msg72154 (http://forum.fhem.de/index.php/topic,12125.msg72154.html#msg72154)
Kann das mal jemend auflösen bzw. die Fehler in meiner fhem.cfg finden?
Zitat von: AndreasP am 28 Oktober 2013, 14:30:50Ich möchte meine MAx! Thermostate mit Hilfe meines owncloud Kalenders steuern.
...
Kann das mal jemend auflösen bzw. die Fehler in meiner fhem.cfg finden?
Der ist nicht schwer zu finden. Das Kalendermodul funktioniert nicht mit owncloud oder anderen caldav Kalendern.
Guckst Du in die Moduldoku:
ZitatA calendar device periodically gathers calendar events from the source calendar at the given URL or from a file. The file must be in ICal format.
hmmm,
der link liefert eine ical datei ...
z.B.
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//SabreDAV//SabreDAV 1.7.6//EN
CALSCALE:GREGORIAN
BEGIN:VEVENT
CREATED;VALUE=DATE-TIME:20131027T141414Z
UID:329a629ef7
LAST-MODIFIED;VALUE=DATE-TIME:20131027T141414Z
DTSTAMP;VALUE=DATE-TIME:20131027T141414Z
SUMMARY:MAX_WC
DTSTART;VALUE=DATE-TIME:20131027T142000Z
DTEND;VALUE=DATE-TIME:20131027T143000Z
CLASS:PUBLIC
LOCATION:25
END:VEVENT
BEGIN:VEVENT
CREATED;VALUE=DATE-TIME:20131027T182332Z
UID:13a022440e
LAST-MODIFIED;VALUE=DATE-TIME:20131027T182351Z
DTSTAMP;VALUE=DATE-TIME:20131027T182351Z
SUMMARY:MAX_074682
DTSTART;VALUE=DATE-TIME:20131027T182500Z
DTEND;VALUE=DATE-TIME:20131027T183000Z
CLASS:PUBLIC
LOCATION:29
END:VEVENT
BEGIN:VEVENT
CREATED;VALUE=DATE-TIME:20131027T193202Z
UID:2ad2ea0ae6
LAST-MODIFIED;VALUE=DATE-TIME:20131027T193202Z
DTSTAMP;VALUE=DATE-TIME:20131027T193202Z
SUMMARY:MAX_0746f0
DTSTART;VALUE=DATE-TIME:20131027T193500Z
DTEND;VALUE=DATE-TIME:20131027T194500Z
CLASS:PUBLIC
LOCATION:25
END:VEVENT
BEGIN:VEVENT
CREATED;VALUE=DATE-TIME:20131027T195857Z
UID:4669ed206b
LAST-MODIFIED;VALUE=DATE-TIME:20131027T202419Z
DTSTAMP;VALUE=DATE-TIME:20131027T202419Z
SUMMARY:MAX_0746f0
DTSTART;VALUE=DATE-TIME:20131027T203000Z
DTEND;VALUE=DATE-TIME:20131027T204500Z
CLASS:PUBLIC
LOCATION:25
END:VEVENT
END:VCALENDAR
ok mag seien das das Format nicht 100% stimmt....
Stimmt denn der Code überhaupt, oder habe ich mir da Murks zusammen programiert?
Zitat von: AndreasP am 28 Oktober 2013, 14:50:44
Stimmt denn der Code überhaupt, oder habe ich mir da Murks zusammen programiert?
Da sind mir einfach zu viele Backslashes und doppelte Strichpunkte drin, um mich da durchwurschteln zu wollen.
Mach mal bitte ein "list chz" und poste die Ausgabe hier. User und Passwort kannst Du natürlich weglassen.
mir auch ;-)
danke für deine promten Antworten.
hatte inzwischen mal Googlekalender probiert, aber auch keine Aktion...
hier mal list chz:
Internals:
DEF ical url https://user:pass@own.apdk.de/remote.php/caldav/calendars/user/heizung?export 60
NAME chz
NR 47
STATE Active
TYPE Calendar
Readings:
2013-10-28 15:12:51 all 84999204be;f28adc390a
2013-10-28 15:12:51 lastCheck 2013-10-28 15:12:48
2013-10-28 15:12:51 lastUpdate 2013-10-28 15:12:48
2013-10-28 15:12:51 modeAlarm
2013-10-28 15:12:51 modeAlarmOrStart
2013-10-28 15:12:51 modeAlarmed
2013-10-28 15:12:51 modeChanged 84999204be;f28adc390a
2013-10-28 15:12:51 modeEnd
2013-10-28 15:12:51 modeEnded
2013-10-28 15:12:51 modeStart
2013-10-28 15:12:51 modeStarted
2013-10-28 15:12:51 modeUpcoming 84999204be;f28adc390a
2013-10-28 15:12:51 stateChanged 84999204be;f28adc390a
2013-10-28 15:12:51 stateDeleted
2013-10-28 15:12:51 stateNew 84999204be;f28adc390a
2013-10-28 15:12:51 stateUpdated
Fhem:
interval 60
lastCheck 2013-10-28 15:12:48
lastChkTs 1382969568
lastUpdate 2013-10-28 15:12:48
lstUpdtTs 1382969568
nextCheck 2013-10-28 15:13:48
nextChkTs 1382969628
nextUpdate 2013-10-28 15:13:48
nxtUpdtTs 1382969628
type url
url https://user:pass@own.apdk.de/remote.php/caldav/calendars/user/heizung?export
Attributes:
oder der Code mal anders:
Internals
DEF
chz:modeStarted.* {
my $uid= $EVTPART1;
my $Subject = fhem("get chz summary $uid");
my $Temperatur = fhem("get chz location $uid");
fhem("set $Subjekt desiredTemperature $Temperatur")
}
NAME
Heizung_Temperatur
NR
49
NTFY_ORDER
50-Heizung_Temperatur
REGEXP
chz:modeStarted.*
STATE
active
TYPE
notify
Ok, Dein Kalender scheint ja an sich erstmal zu funktionieren (Status Active und Einträge bei modeUpcoming)
Bau Dir doch einfach mal ein notify, mit dem Du Ausgaben ins Log schreibst, anstatt irgendwas direkt auszulösen. Das hilft bei der Fehlersuche erheblich.
Und achte während des Testens darauf, dass die zum Test verwendeten Termine immer in der Zukunft liegen, also meinetwegen t+2min
Bei mir würde das notify für den Heizungskalender so aussehen: (Du kannst den Code per copy&paste direkt in das DEF Deines notify einfügen!)
chz:modeStarted.* { my $reading="%EVTPART0"; my $uid= "%EVTPART1"; my ($actor,$dtemp,undef)= split(/ /,fhem("get chz summary $uid")); if(defined $actor) { fhem("set $actor desiredTemperature $dtemp"); } }
Im Subject müssen drei Dinge stehen: 1. name des Aktors, 2. Temperatur zu Beginn des Events, 3. Temperatur am Ende des Events
Beisipiel: Heizkörper3 21 16
Diese Variante ist bei mir im Einsatz und funktioniert problemlos. (Das notify für das Ende des Events sieht grundsätzlich ähnlich aus)
Danke es funktioniert :D
so spontan würde ich sagen das Ende müsste so aussehen?
(ich nix pearl verstehen)
chz:modeEnded.* { my $reading="%EVTPART0"; my $uid= "%EVTPART1"; my ($actor,undef,$dtemp)= split(/ /,fhem("get chz summary $uid")); if(defined $actor) { fhem("set $actor desiredTemperature $dtemp"); } }
Richtig so?
Um 17:00 Uhr weiß ich, ob es geklappt hat ;-)
17:00 es funktioniert, besten Dank :D
Zitat von: AndreasP am 28 Oktober 2013, 16:49:45so spontan würde ich sagen das Ende müsste so aussehen?
...
Richtig so?
gut abgeschrieben ;)
yepp genau, zum Glück keine Doktorarbeit :o
und, hat das Ende auch funktioniert?
Ja, vielen dank nochmal :D
freu Dich nicht zu früh 8)
Spätestens wenn Du versuchst, zwei Heizungen zum gleichen Zeitpunkt anzusprechen, hast Du das nächste Problem. Aber auch dafür gibt es eine Lösung, die bereits abschreibefertig hier irgendwo im Forum steht.
ja, das habe ich auch schon gelesen >:( ich glaub die steht im Wiki, aber da sind irgendwelche "Dummys" die ich nicht brauche, ne Lösung, die für meinen Fall passt habe ich leider noch nicht gefunden.
Mal schauen, zur Not starte ich die Heizungen im Minutentakt ;) oder 5 Minutentakt
Solllte die Lösung jemand zufällig finden, darf er sie gerne posten oder verlinken ;D
du machst es Dir ganz schön einfach...
http://forum.fhem.de/index.php/topic,13766.0.html
jaein, ich hab bloß zu viele Tabs auf und weiß nicht mehr wo was ist und ob es dann das richtige ist ::)
danke, den hatte ich auch schon gefunden da sind die Besucher Dummys etc. mal schauen ob ich das so umgestrickt für meine Bedürfnisse bekomme.
also Heizung 21 17
Ergänzung
hmmm, ja könnte ich schaffen
von welchen Dummies redest Du eigentlich dauernd? Der Kalender braucht doch keine Dummies?
*lacht* in dem Beispiel wird ein Urlaubs Dummy und ein Besucher Dummy verwendet und ich bin mir halt nicht sicher wie, oder ob ich es wieder herausbekomme aus dem Perl Code, oder ist der Code auch dafür geeignet "heizung1 21 17" zu verstehen?
Sodele, Perlcode erfolgreich zusammen kopiert, und es funktioniert.
Vielen Dank an Betateilchen und crissiloop :D.
Kalendertitel enhält: actorname Starttemperatur Endtemperatur
z.B.: heizung3 21 17
Auszug aus meiner fhem.cfg:
define chz Calendar ical url https://username:passwort@server.de/remote.php/caldav/calendars/username/kalendername?export 60
define Heizung_Temperatur notify chz:modeStarted.* {\
Kalenderstart("$EVENT");;\
}
define Heizung_Temperatur_END notify chz:modeEnded.* {\
Kalenderende("$EVENT");;\
}
meine 99_myUtils.pm:
# start-of-template
package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
# start with your own functions below this line
sub
Kalenderstart ($)
{
my ($Ereignis) = @_;
Log 3, "übergebenes Ereignis: $Ereignis";
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
Log 3, "Eventpart 1: $Ereignisteil1";
my @uids=split(/;/,$Ereignisteil1);
foreach my $uid (@uids) {
Log 3, "Eventpart1 gesplittet: $uid";
my ($actor,$dtemp,undef)= split(/ /,fhem("get chz summary $uid"));
if(defined $actor) { fhem("set $actor desiredTemperature $dtemp")
};
};
}
sub Kalenderende ($) {
my ($Ereignis) = @_;
Log 3, "übergebenes Ereignis: $Ereignis";
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
Log 3, "Eventpart 1: $Ereignisteil1";
my @uids=split(/;/,$Ereignisteil1);
foreach my $uid (@uids) {
Log 3, "Eventpart1 gesplittet: $uid";
my ($actor,undef,$dtemp)= split(/ /,fhem("get chz summary $uid"));
if(defined $actor) { fhem("set $actor desiredTemperature $dtemp")
};
};
}
# behind your last function, we need the following
1;
# end-of-template
Ich bekomme das doch nicht hin.
Ständig kommt "Not an ical file at URL"
Jetzt habe ich schon vom google-Kalender auf einen owncloud-Kalender gewechselt.
Leider ohne Erfolg, es erscheint immer der o.g. Fehler, obwohl dieser Kalender doch lokal auf dem Raspi liegt.
Woran könnte das denn liegen?
Der Zugriff auf einen
Zitat
ical url http://www.schulferien.org/iCal/Ferien/icals/Ferien_Hessen_2014.ics 86400
funktioniert ohne Probleme.
Jemand eine Idee?
detto bei mir, habe alles nach wiki gemacht.