FHT Heizungs-Steuerung über Google Calendar

Idee: Warum richtet sich meine Heizung nicht nach meinem Terminkalender?
Inspiration: Google Kalender Termine im WebFront anzeigen und Heizungssteuerung mit Parameterdatei
(Teile des Codes stammen aus diesen Skripten)

Über Google Calendar:
Im Gcal lassen sich verschiedene Kalender erstellen, die einfach ein- und ausgeblendet werden können (man will ja nicht jeden Heizungstermin zwischen seinen anderen Terminen haben). Für jeden Raum kann so auch ein eigener Kalender erstellt werden.
Termine lassen sich einfach durch Mausziehen verschieben oder verändern.
Es können auch Wiederholungen von Terminen (täglich, an bestimmten Tagen, wöchentlich, etc) eingerichtet werden.
Außerdem lässt sich der Kalender einfach in das WebFront einbetten (siehe Bild).
Ideal für eine Heizungssteuerung!

Herausgekommen ist dabei folgendes:

Das Skript bietet die Möglichkeit zwischen Tag- und Nacht-Betrieb,
Anwesen- und Abwesenheit sowie Urlaub zu unterscheiden.
Über Variablen können Komfort- und Nacht-Temperaturen für jeden Raum festgelegt werden, diese können im Betrieb über das WebFront verändert werden.
Durch mehrere Google Kalender können verschiedene Temperaturprofile für
verschiedene FHT-Instanzen realisiert werden.
FHT freundlich: Temperaturen werden nur gesendet, wenn es auch notwendig ist.
Wird die Temperatur am Stellrad verändert, bleibt diese im Automatikbetrieb bis zum nächsten Kalender-Eintrag erhalten.

Betriebsmodi:

I. Anwesend:

Timer aus dem Kalender werden ignoriert, stattdessen wird die Komforttemperatur (aus Variable) gesetzt.
Die Komforttemperatur lässt sich einfach über das WebFront ändern.
Wird die Temperatur am Rad der FHT verstellt, so wird diese Temperatur beibehalten.
Modus ist aktiv, wenn:
* $Anwesenheit = true und $TagNacht = true (Tag)

II. Automatikbetrieb:

Temperaturen werden nach Kalendereinträgen gesetzt. Gibt es keinen Eintrag, wird die NachtTemp gesetzt.
Veränderungen am Rad der FHT bleiben solange erhalten, bis ein neuer Schaltzeitpunkt aus dem Kalender sie überschreibt.
Modus ist aktiv, wenn:

  • $Anwesenheit = true und $TagNacht = false (Nacht)
    oder
  • $Anwesenheit = false

III. Urlaubsbetrieb:

Im Urlaubsbetrieb werden die regulären Schaltzeitpunkte aus dem Kalender ignoriert.
Vorhandene Schaltzeiten müssen also nicht gelöscht werden.
Der Betrieb wird aktiviert, indem man im Standard-Kalender einen Termin mit dem Text „Urlaub“ im Feld „Wo“ einträgt (siehe Bild).
Die Urlaubs-Temperatur im Termin-Feld „Was“ eintragen.
Alle FHTs werden dann, solange der Urlaubs-Termin aktuell ist, auf diese Temperatur gesetzt.

Installation

Das Skript legt alle Variablen, -Profile und Timer automatisch an. Es müssen lediglich folgenden Anpassungen am Anfang vorgenommen werden:

  1. Zunächt müssen im Google calendar entsprechend der Anzahlt gewünschter Temperaturprofile neue Kalender angelegt werden.
    Aus dem persönlichen XML-Link die Kalender-ID und den MagicCookie herauskopieren und im Skript eintragen.

  2. FHT-IDs eintragen.

  3. Den einzelnen FHTs ein Temperatur-Profil zuweisen.

  4. Festlegung eines Standard-Profils, in dem auch der Urlaub eingetragen wird.

  5. Anwesenheits- und TagNacht-Variablen-IDs eintragen. Werden die Anwesenheits- und TagNacht-Variablen nicht benötigt, können die Werte auch einfach per true oder false
    im Skript festgelegt werden, so dass einer der gewünschten Betriebsmodi (s.o.) ausgewählt wird.

  6. Nach der ersten Ausführung des Skripts, die Temperaturen in den Variablen NachtTemp und KomfortTemp (unter jeder FHT-Instanz) anpassen.

Das Skript läuft bei mir seit gut einem Monat ohne Probleme.

Wenn jemand Lust hat das Skript mal auszuprobieren um Fehler aufzudecken: SKRIPT befindet sich zwei Posts weiter unten.

to

gcal_urlaub.PNG

Den Rest sollte das Skript erledigen

perfekt :rolleyes:

bitte melden

ach so - warum nicht als Anhang?

MST

Ich wollte nicht den Anschein erwecken, dass dieses Projekt schon vollständig durchgetestet und abgeschlossen ist…

Hier ist der Code. Habe das Skript bisher nur auf meinem Server laufen lassen
Wer es ausprobiert und Fehler findet bitte posten.

Das Skript ist ziemlich lang, interessant ist jedoch nur der Settings Abschnitt am Anfang.


<?
/*
*************************************************************
*     FHT-Steuerung auf Google Calendar Basis               *
*************************************************************
Das Skript bietet die Möglichkeit zwischen Tag- und Nacht-Betrieb,
Anwesen-  und Abwesenheit sowie Urlaub zu unterscheiden.
Über Variablen können Komfort- und Nacht-Temperaturen für jeden Raum festgelegt werden, diese können im Betrieb über das WebFront verändert werden.
Durch mehrere Google Kalender können verschiedene Temperaturprofile für
verschiedene FHT-Instanzen realisiert werden.
FHT freundlich: Temperaturen werden nur gesendet, wenn es auch notwendig ist.
Wird die Temperatur am Stellrad verändert, bleibt diese im Automatikbetrieb bis zum nächsten Kalender-Eintrag erhalten.


*****************
* Betriebsmodi: *
*****************
I. Anwesend:

Timer aus dem Kalender werden ignoriert, stattdessen wird die Komforttemperatur (aus Variable) gesetzt.
Die Komforttemperatur lässt sich einfach über das WebFront ändern.
Wird die Temperatur am Rad der FHT verstellt, so wird diese Temperatur beibehalten.
Modus ist aktiv, wenn:
	* $Anwesenheit = true und $TagNacht = true (Tag)

II. Automatikbetrieb:

Temperaturen werden nach Kalendereinträgen gesetzt. Gibt es keinen Eintrag, wird die NachtTemp gesetzt.
Veränderungen am Rad der FHT bleiben solange erhalten, bis ein neuer Schaltzeitpunkt aus dem Kalender sie überschreibt.
Modus ist aktiv, wenn:
* $Anwesenheit = true und  $TagNacht = false (Nacht)
oder
* $Anwesenheit = false

III. Urlaubsbetrieb:

Im Urlaubsbetrieb werden die regulären Schaltzeitpunkte aus dem Kalender ignoriert.
Vorhandene Schaltzeiten müssen also nicht gelöscht werden.
Der Betrieb wird aktiviert, indem man im Standard-Kalender (s. Installation) einen Termin mit dem Text "Urlaub" im Feld "Wo" einträgt.
Die Urlaubs-Temperatur im Termin-Feld "Was" eintragen.
Alle FHTs werden dann, solange der Urlaubs-Termin aktuell ist, auf diese Temperatur gesetzt.

****************
* Installation *
****************

1. Zunächt müssen im Google calendar entsprechend der Anzahlt gewünschter Temperaturprofile neue Kalender angelegt werden.
Aus dem persönlichen XML-Link die Kalender-ID und den MagicCookie herauskopieren und im Skript eintragen.

2. FHT-IDs eintragen.

3. Den einzelnen FHTs ein Temperatur-Profil zuweisen.

4. Festlegung eines Standard-Profils, in dem auch der Urlaub eingetragen wird.

5. Anwesenheits- und TagNacht-Variablen-IDs eintragen. Werden die Anwesenheits- und TagNacht-Variablen nicht benötigt, können die Werte auch einfach per true oder false
im Skript festgelegt werden, so dass einer der gewünschten Betriebsmodi (s.o.) ausgewählt wird.

6. Nach der ersten Ausführung des Skripts, die Temperaturen in den Variablen NachtTemp und KomfortTemp (unter jeder FHT-Instanz) anpassen.

**************************
* Timer-Programmmierung: *
**************************
Im Kalender muss ein neuer Eintrag mit der Temperatur (in der Form: 21.0) im Termin-Feld "Was" angelegt werden.
Für Zeiträume, in denen kein Eintrag vorliegt, wird automatisch die NachtTemperatur gesetzt.
Bei Überschneidung von Terminen gilt die Temperatur des ersten Termins, solange dieser aktuell ist.


************************
* Skript-Informationen *
************************

Das Skript legt im IP-Symcon-Verzeichnis Textdateien, die die Schaltzeitpunkte enthalten, an.
Dateien: * Heizung_parameter.txt  		(Hier stehen Urlaubsdaten drin)
			* Heizung_"Profilname".txt 	(Je Profil eine Datei mit Schaltzeiten)

Das Skript legt automatisch unter jeder FHT-Instanz folgende Variablen an:
	* KomfortTemp,		typ: float, profile: ~Temperature.FHT,  Aktionsskript: "WebFrontKomfortTemp"
	* NachtTemp, 		typ: float, profile: ~Temperature.FHT
	* lastTemp,			typ: float
	und ein Skript, um die KomfortTemp im WebFront zu setzten:
	* WebFrontKomfortTemp

Unter dem Skript selbst wird folgende Variable angelegt:
	* Urlaub,  typ: booelan
und ein Timer:
	* Heizung Timer, Trigger: zyklisch, 30 minütig, Beginn 00:00:30

*/

/*
************** BEGIN Settings *******************************************

 1. Google calendar settings
 Kalender-Namen in den Variablen $calendar müssen NICHT mit den Google calendar Namen übereinstimmen!

 BEISPIEL für Private XML-Adresse eines zusätzlichen Kalenders:
 http://www.google.com/calendar/feeds/sssssddddddddd7777ffffff@group.calendar.google.com/private-aaaaaaaabbbbbbcccc000000111111/basic
                                      |------------- user id --------------------------|         |-------- magicCookie -------|
*/

$calendar[1] = "standard";
$userid[1] = 'sssssddddddddd7777ffffff@group.calendar.google.com';
$magicCookie[1] = 'aaaaaaaabbbbbbcccc000000111111';

$calendar[2] = "badezimmer";
$userid[2] = '111111122222233333eeeeeeefff@group.calendar.google.com';
$magicCookie[2] = 'aaaaaaaaaaabbbbbbbbbbbb4444444444hhhhh';

// 2. FHT-IDs
$FHT_id[1]=32385 /*[TEST\FHT80b]*/;
$FHT_id[2]=36853 /*[Control\Heizung\FHT80b Badezimmer]*/;
//$FHT_id[3]=36265 /*[Objekt #36265 existiert nicht]*/;

//3. Den FHTs Temperaturprofile zuordnen (Namen der Profile wie in den $calendar Variablen)
// zu $FHT_id[1] gehört $profile[1]   usw.

$profile[1]="standard";
$profile[2]="badezimmer";
//$profile[3]="standard";

// 4. Standard-Kalender festlegen
$standard_calendar = $calendar[1];

// 5. Anwesenheits- und TagNacht-Variablen-IDs eintragen
$Anwesenheit =false; //GetValueBoolean(40478 /*[Betriebsmodi\Anwesenheit]*/);
$TagNacht = true; //GetValueBoolean(30850 /*[Betriebsmodi\TagNacht]*/);
//********************* END Settings ****************************************************


//*********************** BEGIN Script **************************************************
$debug = false;             // write debug messages
$FHT_debug = false;        // true: no temperatures are send to FHT
$TimerNAME = "Heizung Timer";                      // timer-name
CreateTimerByName($IPS_SELF ,$TimerNAME, 10);      // create timer: 10 minutes
$UrlaubID = CreateVariableByName($IPS_SELF, "Urlaub", 0, "","", "");
$Betriebsmodus = CreateVariableByName($IPS_SELF, "Betriebsmodus", 1, "FHT.Betriebsmodus","", "");

if ($debug) {echo "debug:
";}
//************* read Google Calendar ****************************************************

$time=date("H:i");
$parameter = "";        //String variable for Heizung_parameter.txt

for($i = 1; $i <= count($calendar); $i++)
{
	$feedURL = "http://www.google.com/calendar/feeds/$userid[$i]/private-$magicCookie[$i]/full";
	$feedParams = "?singleevents=true&max-results=10&orderby=starttime&start-min=".urlencode(date("c"))."&sortorder=a";
	$sxml = simplexml_load_file($feedURL.$feedParams);
	$date = "";          //String variable for Heizung_[$profile].txt

	foreach ($sxml->entry as $entry) {
	    $title = stripslashes(utf8_decode($entry->title));
	    $gd = $entry->children('http://schemas.google.com/g/2005');

	    $startTime = ''; // read StartTime
	    if ( $gd->when ) {
	        $startTime = $gd->when->attributes()->startTime;
	    } elseif ( $gd->recurrence ) {
	        $startTime = $gd->recurrence->when->attributes()->startTime;
	    }
	    $startTime = strtotime( $startTime );

	    $endTime = '';      // read EndTime
	    if ( $gd->when ) {
	        $endTime = $gd->when->attributes()->endTime;
	    } elseif ( $gd->recurrence ) {
	        $endTime = $gd->recurrence->when->attributes()->endTime;
	    }
	    $endTime = strtotime( $endTime );

	    $where = utf8_decode($gd->where->attributes()->valueString);     // read Location => parameter, e.g. Urlaub

		 if ($where!="Urlaub") {

		   $date .= date("d.m.y", $startTime).";".date("H:i",$startTime).";".$title."
".date("d.m.y", $endTime).";".date("H:i",$endTime).";NachtTemp;
";
			} elseif ($calendar[$i] == $standard_calendar) {
				$parameter .= date("d.m.y", $startTime).";".date("H:i",$startTime).";".$title.";".$where."_start
".date("d.m.y", $endTime).";".date("H:i",$endTime).";NachtTemp;".$where."_end
";
			  }
/*	if($IPS_SENDER == "Execute")
	{
	    echo $date;
	    echo "
";
	}*/

//	******** write profile-timetable ****************************
	$fh = fopen(IPS_GetKernelDir()."Heizung_".$calendar[$i].".txt", 'w') or die("can't open file");
	fwrite($fh, $date);
	fclose($fh);


	}
		// ******** write parameter-file ****************************
	if ($parameter != "") {
		$fh = fopen(IPS_GetKernelDir()."Heizung_parameter.txt", 'w') or die("can't open file");
		fwrite($fh, $parameter);
		fclose($fh);
   }
   $fh = fopen(IPS_GetKernelDir()."Heizung_".$calendar[$i].".txt", 'a+') or die("can't open file");
	fclose($fh);
}
$fh = fopen(IPS_GetKernelDir()."Heizung_parameter.txt", 'a+') or die("can't open file");
fclose($fh);


//********* read parameter-file *********************************************

$filename = IPS_GetKernelDir()."Heizung_parameter.txt";
	//echo $filename;
	$handle= fopen($filename,"r");
	SetValue($UrlaubID, false);
  // $handle = fopen($filename,"r");
 	while ($line = fgets($handle, 1000)) {
     $value = explode(";", $line);    //[0]-Tag, [1]-(Ab)Zeit, [2]-Temperatur
     $day=$value[0];
     $switchtime=$value[1];
     $temp=$value[2];
     $parameter=$value[3];
    if (date("d.m.y") == $day && $time > $switchtime) {
      switch ($parameter){
      	case "Urlaub_start
":
      		SetValue($UrlaubID, true);           // set $Urlaub = true
      		$urlaubtemp=$temp;
			break;
			case "Urlaub_end
":
				SetValue($UrlaubID, false);          // set $Urlaub == false
			break;
      }
    }
   }
   fclose($handle);
//**********END read parameter-file ****************************************



//********* create variables and set temperature  for each FHT ******************

for($i = 1; $i <= count($FHT_id); $i++)
{
	if ($debug) {echo $profile[$i].": ";}
	CreateScriptByName("WebFrontKomfortTemp", $FHT_id[$i], "<?php 
\$parentID = IPS_GetObject(\$IPS_SELF);
\$parentID = \$parentID['ParentID'];
SetValueFloat(\$IPS_VARIABLE, \$IPS_VALUE);
?>");
	$TargetTemperature = @IPS_GetVariableIDByName("Target Temperature", $FHT_id[$i]);                     // get variable ID
	$TargetTemperaturePending = @IPS_GetVariableIDByName("Target Temperature (Pending)", $FHT_id[$i]);    // get variable ID
	$KomfortTemp = GetValueFloat(CreateVariableByName($FHT_id[$i], "KomfortTemp", 2, "~Temperature.FHT", @IPS_GetScriptIDByName("WebFrontKomfortTemp", $FHT_id[$i]), 1));
	$NachtTemp = GetValueFloat(CreateVariableByName($FHT_id[$i], "NachtTemp", 2, "~Temperature.FHT", "", ""));
	$lastTemp = GetValueFloat(CreateVariableByName($FHT_id[$i], "lastTemp", 2, "", "", ""));
 	$parameter_Urlaub =GetValueBoolean($UrlaubID);
	$force = false;
//	$manual = false;

//******manual ***********************************
/*	if (GetValueFloat($TargetTemperature) != GetValueFloat($TargetTemperaturePending)) {
		if ($debug) {echo "manual ";}
		$manual == true;
	}
*/
//**** DEFAULT value: NachtTemp ****************************************************
   $newtemp = $NachtTemp;                                  // set to NachtTemp by default

//***URLAUB, set temperature from parameter-file**********************************
	if ($parameter_Urlaub == true && $Anwesenheit == false) {
		$newtemp = $urlaubtemp;
		$force = true;          //force SetTemperature
		if ($debug) {echo "URLAUB ";}
		SetValueInteger($Betriebsmodus, 0);
		SetTemperature($profile[$i],$TargetTemperature, $newtemp, $lastTemp, $FHT_id[$i], $force);;
		}

//*** AT HOME, set KomfortTemp ********************************************************
	if ($Anwesenheit == true /*&& $manual == false*/) { if ($debug) {echo "Anwesend ";}
		if ($TagNacht == true) {
			$newtemp = $KomfortTemp;
			if ($debug) {echo "Tag  ";}
			SetValueInteger($Betriebsmodus, 2);
			SetTemperature($profile[$i],$TargetTemperature, $newtemp, $lastTemp, $FHT_id[$i], $force);} 	// set KomfortTemp when at Home
			//if ($TagNacht == false) {$newtemp = $NachtTemp; if ($debug) {echo "Nacht  ";}} 				 // set NachtTemp at night

		}

//**** AUTOMATIC, set temperature from Google calendar ********************************************
	if ($parameter_Urlaub == false && ($Anwesenheit == false || ($Anwesenheit == true && $TagNacht == false))) {         	  // set temperature from profile-file
      if ($debug) {echo "Automatic ";}
		$filename = IPS_GetKernelDir()."Heizung_".$profile[$i].".txt";
		$handle = fopen($filename,"r");
	 	while ($line = fgets($handle, 1000))
	   {
	     $value = explode(";", $line);    //[0]-date, [1]-time, [2]-temperature, [3]-parameter
	     $day=$value[0];
	     $switchtime=$value[1];
		  if ($value[2] == "NachtTemp") {
		   $temp = $NachtTemp; }
		   else {$temp=$value[2];}


	    if (date("d.m.y") == $day)
	     {
	         if($time > $switchtime)
	            $newtemp = $temp;
	     }
	   }
	   fclose($handle);
	   SetValueInteger($Betriebsmodus, 1);
	   SetTemperature($profile[$i],$TargetTemperature, $newtemp, $lastTemp, $FHT_id[$i], $force);
	}
	if ($debug){echo "
";}
}

//*******************************************************************
//****** FUNCTION: Set Temperature **********************************
function SetTemperature($profile, $TargetTemperature, $newtemp, $lastTemp, $FHT_id, $force)
 {
      global $debug;
      global $FHT_debug;
      if (($lastTemp!= (float)$newtemp) || ($force == true)) {
         $force = false;
      	if ($debug) {echo ",last != new, ";}
      	if (GetValueFloat($TargetTemperature) != (float)$newtemp ) {
         	if ($debug) {echo "Sollwert Temperatur ".$profile." [°C]: ".$newtemp;}
         	SetValueFloat(CreateVariableByName($FHT_id, "lastTemp", 2, "", "", ""), (float)$newtemp);
         	if ($FHT_debug == false) {FHT_SetTemperature($FHT_id, (float)$newtemp);}
         }
		}
 }
//******FUNCTION: CreateVariableByName *******************************
function CreateVariableByName($id, $name, $type, $profile, $ScriptID, $position)
{
    global $IPS_SELF;
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
        if($profile == "FHT.Betriebsmodus" && IPS_VariableProfileExists("FHT.Betriebsmodus")== false) {
        	IPS_CreateVariableProfile($profile, 1);
        	IPS_SetVariableProfileAssociation($profile, 0, "Urlaub", "Information");
        	IPS_SetVariableProfileAssociation($profile, 1, "Automatik", "Information");
        	IPS_SetVariableProfileAssociation($profile, 2, "Komfort", "Information");
        	IPS_SetVariableCustomProfile($vid, $profile);
        }
        if($profile != "")  {IPS_SetVariableCustomProfile($vid, $profile); }
        if($ScriptID !== "") {IPS_SetVariableCustomAction($vid, $ScriptID);}
        if($ScriptID !== "") {IPS_SetPosition($vid, $position);}
    }
    return $vid;
}
//******FUNCTION: CreateScriptByName *******************************

function CreateScriptByName($ScriptNAME, $ParentID, $ScriptTEXT)
{
   global $IPS_SELF;
	$ScriptID = @IPS_GetScriptIDByName($ScriptNAME, $ParentID);
	if ($ScriptID == 0){

	   $ScriptID = IPS_CreateScript(0);
	   IPS_SetName($ScriptID, $ScriptNAME);
	   IPS_SetParent($ScriptID, $ParentID);
	   IPS_SetInfo($ScriptID, "This script was created by: #$IPS_SELF#");
		$fh = fopen(IPS_GetKernelDir()."scripts\\".$ScriptID.".ips.php", 'w') or die("can't open file");
		fwrite($fh, $ScriptTEXT);
		fclose($fh);
		$ScriptPath = $ScriptID.".ips.php"; 	//Skriptdatei
		IPS_SetScriptFile($ScriptID, $ScriptPath);
		IPS_SetHidden($ScriptID, true);
	   // echo "Die Skript-ID lautet: ". $ScriptID;
	}
}
//******FUNCTION: CreateTimerByName *******************************
function CreateTimerByName($ParentID,$TimerNAME, $Minutes)
{
   global $IPS_SELF;
	$EreignisID = @IPS_GetEventIDByName($TimerNAME, $ParentID);
	if ($EreignisID == 0){
		$eid = IPS_CreateEvent(1);         		   //zyklisches Ereignis
		IPS_SetEventCyclic($eid, 2, 1, 0, 0, 2, $Minutes);   //Jeden Tag alle $Minutes
		IPS_SetParent($eid, $ParentID);   //Eregnis zuordnen
		IPS_SetEventActive($eid, true);
		IPS_SetEventCyclicTimeBounds($eid, mktime(0, 0, 30),0);   // Start: 00:00:30
		IPS_SetName($eid, $TimerNAME);
		IPS_SetInfo($eid, "This script was created by: #$IPS_SELF#");
	}
	else {
  //echo "Die Ereignis-ID lautet: ". $EreignisID;
  }
}

?>

hast du die Heizungsautomation selbst irgendwie zusammengestellt, oder verwendest du ein bestimmtes System?

Ich hab ein System von Moeller aber eben nicht nur für Heizungen, sondern auch für Jalousien und Licht. Das mit dem Google-Kalendar kenne ich gar nicht, ich kann bei meiner Automation aber die ganauen Zeiten einstellen, aber vielleicht würde das auch mit so einem Kalendar gehen, da habe ich gar nicht gefragt.

Hallo,

ich benutze das FHT System von ELV. Hier gibt es auch die Möglichkeit, Wochenprogramme direkt an den einzelnen Raumcontrollern einzustellen - man muss es nur bei jedem einzeln einstellen.
Darum habe ich die Steuerung über den Kalender realisiert, da IP-Symcon von Haus aus keine Möglichkeit mitbringt, die Wochenprogramme in den FHTs zu programmieren.

Wer kann mir helfen - ich scheitere mit folgender Fehlermeldung:

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in C:\IP-Symcon\scripts\59071.ips.php on line 191

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in C:\IP-Symcon\scripts\59071.ips.php on line 191

Parse error: parse error, unexpected T_STRING in C:\IP-Symcon\scripts\59071.ips.php on line 191

Ich vermute, dass es daran liegt - ich weiss nicht, was ich an dieser Stelle tun muss…ich dachte das Script legt alles automatisch an?

  1. Anwesenheits- und TagNacht-Variablen-IDs eintragen. Werden die Anwesenheits- und TagNacht-Variablen nicht benötigt, können die Werte auch einfach per true oder false
    im Skript festgelegt werden, so dass einer der gewünschten Betriebsmodi (s.o.) ausgewählt wird.

Bitte um Hilfe, bin noch Anfänger

Nach nochmaligem probieren lautet die Fehlermeldung nun:

Warning: Übergeordnete Instanz #34734 exisitert nicht in C:\IP-Symcon\scripts\38211.ips.php on line 336

Warning: Übergeordnete Instanz #34734 exisitert nicht in C:\IP-Symcon\scripts\38211.ips.php on line 317

Warning: Übergeordnete Instanz #34734 exisitert nicht in C:\IP-Symcon\scripts\38211.ips.php on line 317

Warning: Übergeordnete Instanz #34734 exisitert nicht in C:\IP-Symcon\scripts\38211.ips.php on line 317

Warning: fopen(C:\IP-Symcon\Heizung_standard.txt) [function.fopen]: failed to open stream: No such file or directory in C:\IP-Symcon\scripts\38211.ips.php on line 272

Warning: fgets() expects parameter 1 to be resource, boolean given in C:\IP-Symcon\scripts\38211.ips.php on line 273

Warning: fclose() expects parameter 1 to be resource, boolean given in C:\IP-Symcon\scripts\38211.ips.php on line 289

Warning: fopen(C:\IP-Symcon\Heizung_badezimmer.txt) [function.fopen]: failed to open stream: No such file or directory in C:\IP-Symcon\scripts\38211.ips.php on line 272

Warning: fgets() expects parameter 1 to be resource, boolean given in C:\IP-Symcon\scripts\38211.ips.php on line 273

Warning: fclose() expects parameter 1 to be resource, boolean given in C:\IP-Symcon\scripts\38211.ips.php on line 289

du müsstest die instanzen in dem script deiner umgebung anpassen, also deine fht-id im script einsetzen

Uups, sorry, da war doch tatsächlich ein Zahlenproblem :mad: ist korrigiert, jetzt kommt folgende Fehlermeldung:

Warning: fopen(C:\IP-Symcon\Heizung_standard.txt) [function.fopen]: failed to open stream: No such file or directory in C:\IP-Symcon\scripts\38211.ips.php on line 272

Warning: fgets() expects parameter 1 to be resource, boolean given in C:\IP-Symcon\scripts\38211.ips.php on line 273

Warning: fclose() expects parameter 1 to be resource, boolean given in C:\IP-Symcon\scripts\38211.ips.php on line 289

Warning: fopen(C:\IP-Symcon\Heizung_badezimmer.txt) [function.fopen]: failed to open stream: No such file or directory in C:\IP-Symcon\scripts\38211.ips.php on line 272

Warning: fgets() expects parameter 1 to be resource, boolean given in C:\IP-Symcon\scripts\38211.ips.php on line 273

Warning: fclose() expects parameter 1 to be resource, boolean given in C:\IP-Symcon\scripts\38211.ips.php on line 289

Noch’ne Idee?

Die Meldungen sind doch ziemlich eindeutig ;).

Entweder ist dein Pfad „C:\IP-Symcon“ falsch oder die jeweilige Textdatei, z.B. „Heizung_standard.txt“ existiert nicht. Und das ganze in deinem Script 38211.

Hallo,

ich habe jetzt das Skript aktualisiert, so dass der Fehler mit der fehlenden Parameter-Datei nicht mehr auftritt.

Außerdem werden jetzt das Ereignis und die Variablenprofile inkl. Variablen für die Anzeige im WebFront automatisch angelegt.

Das passiert wenn du das Script startest und noch garkeine Einträge in den Kalendern sind :cool: Bin ich auch grad drauf reingefallen :smiley:

Hallo,

ich habe jetzt das Skript aktualisiert, so dass der Fehler mit der fehlenden Parameter-Datei nicht mehr auftritt.

Außerdem werden jetzt das Ereignis und die Variablenprofile inkl. Variablen für die Anzeige im WebFront automatisch angelegt.

Na danke. Habe das Script vor ner Stunde gezogen. Da wars noch nicht gefixt…

Vielen Dank für die Aktualisierung und Hilfe - jetzt läuft es super!

Hallo, ich finde die Lösung der Steuerung über GoogleCalender sehr interessant, allerdings bin ich mir nicht sicher bzgl. der Nutzungsbedingungen.
Ich habe den Thread mit dem „Benzinpreis“ gelesen, der nach Rückmeldung des Betreibers bzgl. der Skriptnutzung geschlossen wurde.
Bei der Anmeldung steht nun folgendes:

[i]4. Ihre Nutzung der Dienste

Sie sind nicht berechtigt, die Dienste in missbräuchlicher Art und Weise zu nutzen, in die Dienste einzugreifen oder auf die Dienste in anderer Weise als über die von Google bereitgestellten Benutzeroberflächen und/oder Schnittstellen zuzugreifen. Sie müssen sich an die Vorgaben halten, die in den robots.txt-Dateien der Dienste hinterlegt sind. Es ist Ihnen untersagt, auf die Dienste in automatisierter Weise zuzugreifen, beispielsweise mit Robots oder Skripts. [/i]

Eigentlich greifen wir doch per Skript zu, oder? :confused:
Oder greifen wir über eine „bereitgestellte Schnittstelle“ zu?

Ich will jetzt nur nicht alles einrichten und nach kurzer Zeit wir die weitere Nutzung unterbunden…

Gruß

Matthias

Der Zugriff erfolgt meiner Meinung nach über die bereitgestellte Schnittstelle (Webservice). Diese Schnittstelle ist auch öffentlich dokumentiert.
Ich sehe also keinen Verstoß.

Aber das ist nur meine persönliche Meinung!

Viele Grüße
Chris

Nachdem Google sogar eine API und die dafür notwendigen Links zur Verfügung stellt und es auch z.b. für Thunderbird ein entsprechendes Add-On gibt welches den Kalender regelmäßig abfragt kann ich mir nicht vorstellen, dass das ein Problem ist. Und Smartphones wie ein iPhone fragen da ja auch regelmäßig an.

Du musst nur aufpassen die Abfragen nicht zu häufig zu machen sonst prüfen die ob da ein Mensch oder eine Maschine deren Server traktiert. Also alle 15 Minuten pollen und nicht alle 5 Sekunden. Ist mir wegen eines Tippfehlers passiert…

Grüsse.

Hallo,

ich stelle gerade auf die HM Heizungsregler um läuft das Script dann noch?

Lukky

Nein, nicht ohne Änderungen. Du müsstest mindestens die Befehle zum schreiben der FS20-Instanzen auf HM umbauen. Ich habe daher das Script so beibehalten und lasse es Dummy-FHTs regeln. Deren Werte übernehme ich auf meine HM-Raumregler. Das ist aber eine quick-and-dirty-Lösung und ich habe das nur aus Zeitgründen so gehandhabt. Wenn Zeit ist wollte ich das noch ändern. Mal sehen - gut funktionierende Provisorien werden ja ganz gerne zu einer permanenten Lösung…:slight_smile:

Hallo,

ich bräuchte mal einen Tip zum Einbinden des Kalenders im WebFront.
Wenn ich den HTML-Link von Google nehme ist er Kalender immer in der Monatsansicht.:frowning:
Das ist bei meinem Anwendungsfall nicht ganz das Richtige…
Wenn ich das Konfigurationstool nehme bekommt man ja ein IFrame, wie bekommt man das eingebunden?

Gruß Matthias

Hi Matthias schau doch mal hier nach:
http://www.ip-symcon.de/forum/f53/google-kalender-termine-webfront-anzeigen-8822/