Dummys werden bei Notify über Googlekalender nicht gesetzt

Begonnen von romarira, 06 Mai 2018, 19:28:25

Vorheriges Thema - Nächstes Thema

romarira

Hallo,

mein Ziel ist es, Heizungen und Steckdosen nach Kalendereinträgen in einem Google-Kalender zu steuern. Dazu bin ich nach dem Beitrag https://wiki.fhem.de/wiki/Google-Kalender_zur_Steuerung_von_Dummies vorgegangen.

In den Notifys sehe ich, dass pünktlich zu meinen Kalendereinträgen der State auf die eingetragene Uhrzeit geändert wird. Das gilt sowohl für Beginn, wie auch für Ende des Eintrags.

Was allerdings nicht funktioniert, ist, dass mir die entsprechenden Dummys auf "ja" oder "nein" geschaltet werden.

Hier mal die Codezeilen:

fhem.cfg
define meinKalender Calendar ical url https://calendar.google.com/calendar/ical/123456789usw/basic.ics 3000
attr meinKalender hideLaterThan 30d
attr meinKalender hideOlderThan 10
attr meinKalender room Kalender
define urlaub_dum dummy
attr urlaub_dum room Dummys
attr urlaub_dum setList ja nein
attr urlaub_dum webCmd ja:nein
define studium_dum dummy
attr studium_dum room Dummys,Studium
attr studium_dum setList ja nein
attr studium_dum webCmd ja:nein
define hellejahreszeit_dum dummy
attr hellejahreszeit_dum room Dummys
attr hellejahreszeit_dum setList ja nein
attr hellejahreszeit_dum webCmd ja:nein
define party_dum dummy
attr party_dum room Dummys
attr party_dum setList ja nein
attr party_dum webCmd ja:nein
define meinKalender_EventStart notify meinKalender:start:.*googlecom.* {Kalenderstart("$EVENT")}
attr meinKalender_EventStart room Notifys
define meinKalender_EventEnde notify meinKalender:end:.*googlecom.* {Kalenderende("$EVENT")}
attr meinKalender_EventEnde room Notifys


99_myUtils.pm
package main;

use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Beginn eigene Routine

sub Kalendarstart ($) {
         my ($Ereignis) = @_;
         my @Ereignisarray = split(/.*:\s/,$Ereignis);
         my $Ereignisteil1 = $Ereignisarray[1];
         my @uids = split(/;/,$Ereignisteil1);
         foreach my $uid (@uids) {
                 my $Kalendertext = fhem("get meinKalender summary uid=$uid 1");
                 if ($Kalendertext =~ /Urlaub/) {
                         fhem("set urlaub_dum ja");
                 }
                 if ($Kalendertext =~ /Party/) {
                         fhem("set party_dum ja");
                 }
if ($Kalendertext =~ /Studium/) {
                         fhem("set studium_dum ja");
                 }     
                 if ($Kalendertext =~ /helleJahreszeit/) {
                         fhem("set hellejahreszeit_dum ja");
                 }     
}
}
sub Kalenderende ($) {
         my ($Ereignis) = @_;
         my @Ereignisarray = split(/.*:\s/,$Ereignis);
         my $Ereignisteil1 = $Ereignisarray[1];
         my @uids = split(/;/,$Ereignisteil1);
         foreach my $uid (@uids) {
                 my $Kalendertext = fhem("get meinKalender summary uid=$uid 1");
                 if ($Kalendertext =~ /Urlaub/) {
                         fhem("set urlaub_dum nein");
                 }
                 if ($Kalendertext =~ /Party/) {
                         fhem("set party_dum nein");
                 }
if ($Kalendertext =~ /Studium/) {
                         fhem("set studium_dum nein");
                 }
                 if ($Kalendertext =~ /helleJahreszeit/) {
                         fhem("set hellejahrezeit_dum nein");
                 }
         }
}
1;


Ich bitte um Hilfe, ob ihr evtl. etwas seht, was falsch ist.

Was Programmierung angeht, bin ich interessierter Anfänger. Also bitte in "einfachen Worten" antworten und bitte nicht zuviel voraussetzen.

Vielen Dank
Intel NUC, FHEM VMe auf debian Proxmox-Server, Sonoff S20/Basic/POW, Shelly 1 & 2.5
Homematic IP-HK-Thermostate, Wandthermostat, FTK
FHT80b-HK-Thermostate und FTK
Raspberrymatic auf separater VM
Unifi/Ubiquiti-Wlan-Netzwerk, DHCP-Server über Firtzbox

amenomade

Tipp: um nicht blind zu suchen, trage mal ein paar "Log" Befehle in deinem Code ein, um Werte zu loggen. Dann wirst Du sehen, wo, wie und was er macht.

Rein ohne weiter zu suchen:
Zitatdefine meinKalender_EventStart notify meinKalender:start:.*googlecom.* {Kalenderstart("$EVENT")
Zitatsub Kalendarstart ($) {
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

#2
Und im split:
Zitatmy @Ereignisarray = split(/.*:\s/,$Ereignis)
"." und "*" sind bestimmt keine Trennzeichen im Event, oder? Zum Debuggen wäre ein Auszug der Log hilfreich.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

romarira

ZitatRein ohne weiter zu suchen:
Zitat

    define meinKalender_EventStart notify meinKalender:start:.*googlecom.* {Kalenderstart("$EVENT")

Zitat

    sub Kalendarstart ($) {

Genau das war es. Ein blöder Tippfehler.
Außerdem fehlte in dem Wort "helleJahreszeit" noch das "s"

Jetzt läuft es. Vielen Dank.

Mit dem Einbauen eines Logs zum Debuggen werde ich mich auch mal beschäftigen. Das wäre bestimmt hilfreich gewesen.
Ich weiß aber noch nicht, was ich da tun muss - werde einfach ein wenig googlen.

Intel NUC, FHEM VMe auf debian Proxmox-Server, Sonoff S20/Basic/POW, Shelly 1 & 2.5
Homematic IP-HK-Thermostate, Wandthermostat, FTK
FHT80b-HK-Thermostate und FTK
Raspberrymatic auf separater VM
Unifi/Ubiquiti-Wlan-Netzwerk, DHCP-Server über Firtzbox

rabehd

ZitatIch weiß aber noch nicht, was ich da tun muss
Einfach in Deinen Routinen an bestimmten Stellen ein Log 3, "Programm am Punkt x"; oder Log 3, "Wert " . $VARIABLE;einfügen.
Das machst Du an Stellen wo Dein Programm nach einer Frage (if) vorbeikommmen soll oder wo der weitere Verlauf vom Wert einer Variablen abhängt.
In der Prod-Umgebung kann das auf Kommentar stehen oder ganz raus.

Nach dem Lauf schaust Du ins Log und hast Hinweise darauf was Deine Routine wirklich getan hat.
Meist sitzt die Ursache vor dem Bildschirm. ;D
Auch funktionierende Lösungen kann man hinterfragen.

romarira

Hallo rabehd,

vielen Dank für den Tipp. Ich werde mich jetzt mal damit beschäftigen ... und hoffentlich meine Fehler schneller und ohne Hilfe finden.

Schönen Tag noch.
Intel NUC, FHEM VMe auf debian Proxmox-Server, Sonoff S20/Basic/POW, Shelly 1 & 2.5
Homematic IP-HK-Thermostate, Wandthermostat, FTK
FHT80b-HK-Thermostate und FTK
Raspberrymatic auf separater VM
Unifi/Ubiquiti-Wlan-Netzwerk, DHCP-Server über Firtzbox