FHEM Forum

FHEM => Automatisierung => Thema gestartet von: herrmie am 17 November 2014, 14:37:52

Titel: Heizung mit Kalender steuern
Beitrag von: herrmie am 17 November 2014, 14:37:52
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
Titel: Antw:Heizung mit Kalender steuern
Beitrag von: betateilchen am 17 November 2014, 18:56:28

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");
   };
}
Titel: Antw:Heizung mit Kalender steuern
Beitrag von: herrmie am 18 November 2014, 17:21:32
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,
Titel: Antw:Heizung mit Kalender steuern
Beitrag von: betateilchen am 18 November 2014, 19:23:10
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.
Titel: Antw:Heizung mit Kalender steuern
Beitrag von: herrmie am 20 November 2014, 11:01:13
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