Heizung mit Kalender steuern

Begonnen von herrmie, 17 November 2014, 14:37:52

Vorheriges Thema - Nächstes Thema

herrmie

Hallo,

nachdem ich mich ein wenig eingelesen habe und auch die Hürde der Fehlermeldung: Not an ical file at URL gemeistert habe, stehe ich nun vor einem Codeproblem.

Setup: Homematic RT, TC, Google Kalender

Notify: DEF: kalender_steffen:modeStarted.*googlecom.* {
Kalender_heizen("$EVENT");
}


99_MyUtils.pm

##############################################
# $Id: 99_Utils.pm 3595 2013-08-05 05:38:48Z herrmie $
package main;

use strict;
use warnings;
use POSIX;

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

######################################################
# Pruefe Kalender ob es einen Termin mit HO gibt,
# heize Buero --> hm.bueroHTr, hm.bueroHTl, hm.bueroWT
######################################################
sub
Kalender_heizen ($)
{
   my $uid = @_;
   my $kalendertext = fhem("get kalender_steffen summary $uid");
   if($kalendertext =~ /HO/) {
      fhem("set hm.bueroHTr desired-temp 22.0");
      fhem("set hm.bueroHTl desired-temp 22.0");
      fhem("set hm.bueroWT desired-temp 22.0");
   };
}


Ihr fragt euch jetzt bestimmt, wieso ich in meiner Funktion keine arrays behandel. Wir nehmen einfach an, es gibt nur einen Kalendereintrag zu einer bestimmten Zeit.  ;D
Die fhem Funktion gibt mir auch den Wert "HO" zurück, nur leider wird meine Heizung nicht umgestellt.

Im logfile bekomme ich noch zwei Warnings:
2014.11.17 14:12:41.977 1: PERL WARNING: Subroutine MyUtils_Initialize redefined at ./FHEM/99_MyUtils.pm line 11.
2014.11.17 14:15:00.731 1: PERL WARNING: Use of uninitialized value $kalendertext in pattern match (m//) at ./FHEM/99_MyUtils.pm line 24.


Aber soviel ich weiß, sind warnings ja nichts schlechtes. :D

Danke schonmal für eure Hilfe.

Grüße,
herrmie

betateilchen


sub
Kalender_heizen ($)
{
   my $uid = @_;
   my $kalendertext;
   $kalendertext = fhem("get kalender_steffen summary $uid");
   if($kalendertext =~ /HO/) {
      fhem("set hm.bueroHTr desired-temp 22.0");
      fhem("set hm.bueroHTl desired-temp 22.0");
      fhem("set hm.bueroWT desired-temp 22.0");
   };
}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

herrmie

Hallo,

nun ist die Warning weg, vielen Dank. Gehen tut es aber immer noch nicht. Ich habe auch noch etwas am Code geändert, denn das Event gibt ja den String "modeStarted: XXXXXXXXXXXXXXX.google.com" zurück, dass muss man dann nat. splitten:

sub
Kalender_heizen ($)
{
   my ($Ereignis) = @_;
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
my @uids=split(/;/,$Ereignisteil1);
foreach my $uid (@uids) {
my $Kalendertext = fhem("get kalender_steffen summary $uid");
if ($Kalendertext =~ /HO/) {
fhem("set hm.bueroHTr desired-temp 22.0");
                        fhem("set hm.bueroHTl desired-temp 22.0");
                        fhem("set hm.bueroWT desired-temp 22.0");
};
     
   };
}

1;


Dennoch passiert an meiner Heizung nichts. Kann es vielleicht an dem notify liegen? Aber der Sieht ja eigentlich korrekt aus. Gibt es eine andere Methode um ordentlich zu debuggen?


Danke und Grüße,

betateilchen

Bau doch mal ein "Debug $Kalendertext" ein, damit Du im Log siehst, ob das überhaupt abgearbeitet wird.



my $Kalendertext = fhem("get kalender_steffen summary $uid");
Debug $Kalendertext;
if ($Kalendertext =~ /HO/) {



Irgendwie habe ich das Gefühl, Du machst Dir das Leben unnötig schwer.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

herrmie

Hallo,

ich habe den Fehler gefunden. Debug hat mir mein "HO" angezeigt. Das Problem lag am desired-temp setzen. Das muss natürlich auf die zuständigen Channel passieren.

sub
Kalender_heizen ($)
{
   my ($Ereignis) = @_;
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
my @uids=split(/;/,$Ereignisteil1);
foreach my $uid (@uids) {
my $Kalendertext = fhem("get kalender_steffen summary $uid");

if ($Kalendertext =~ /HO/ ) {
fhem("set hm.bueroHTr_Clima desired-temp 22.0");
                        fhem("set hm.bueroHTl_Clima desired-temp 22.0");
                        fhem("set hm.bueroWT_Climate desired-temp 22.0");
};
     
   };
}


Jedoch setzt er die 22° zwar an meinem TC (hm.bueroWT) aber setzt diesen wert nicht an meinen RNs. Das Problem habe ich aber schon immer. Muss mal im Forum schauen, denn das haben ja einige.


Grüße,
herrmie