Mit IPS die HM Variable "Anwesenheit" auf der CCU ändern

Gibt es eine Möglichkeit die Systemvariable „Anwesenheit“ der CCU umzustellen?

ich möchte darüber die Absenkung der durch die CCU gesteuerte Heizung ermöglichen…

Damit solltes das gehen.

Oder eine Virtuelle Taste der CCU nehmen.
Ein CCU-Programm erstellen das bei kurzem Tastendruck auf „Anwesend“ stellt und bei langem Tastendruck auf „Abwesend“.
Diese Taste dann von IPS aus betätigen…

danke für die schnellen Antworten…

@ Schablone

Klingt machbar schein mir aber zu umständlich

@ Krisu

Eine Ähnliche Idee hatte ich auch schon, hab mir eine gerade ungenutzte Funksteckdose genommen und wenn ich die schalte lasse ich mit nem HM Script anhand des Zustandes der Steckdose die Variable setzen oder löschen… aber auch das ist ja „Verschwendung“

Wie bekomme ich den eine virtuelle Variable auf der HM CCU angelegt und wie bilde ich die in IPS ab?

Hi,

Die Virtuelle Tasten sind Bestandteil der CCU.
Gibt 50 „Funk-“ und 50 „Wired-Tasten“.

Und in IPS bekommst du die wie alle anderen Devices über den Konfigurator (VIRTUAL_KEY).

Die kannst du dann per


<?
$device = 52518 /*[Virtuelle Taste]*/;

HM_WriteValueBoolean($device,"PRESS_SHORT",true);
HM_WriteValueBoolean($device,"PRESS_LONG",true);
?>

ansteuern.

Oder einfach:

Anwesenheit „Aus“:


$CCU_IP = "192.168.2.100";

$HM_Script = " 
var mySysVar = dom.GetObject('Anwesenheit');
mySysVar.Variable(0);
"; 

echo HMRS_HTTP_Post($CCU_IP, $HM_Script);

function HMRS_HTTP_Post($CCU_IP, $HM_Script)
{
/*=============================================
HMRS_HTTP_Post - Martin Heinzel - 20.02.2011
Version: 0.0

Beschreibung:
Mit dieser Funktion werden HomeMatic Scripte per HTTP Post an die HomeMatic
verschickt.


Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

//--------------------------- Main ----------------------------

// Initialisieren der Socket-Verbindung
$fp = fsockopen ($CCU_IP, 8181, $errno, $errstr, 2);
$res = "";

if (!$fp)
{
    $res = "$errstr ($errno)<br />
";
}
else
{
    // Zusammenstellen des Header für HTTP-Post
    fputs($fp, "POST /Test.exe HTTP/1.1
");
      fputs($fp, "Content-type: application/x-www-form-urlencoded
");
      fputs($fp, "Content-length: ". strlen($HM_Script) ."
");
      fputs($fp, "Connection: close

");
      fputs($fp, $HM_Script);
    while(!feof($fp))
    {
       $res .= fgets($fp, 500);
      }
  fclose($fp);
}

return $res;

//----------------------- Main ENDE ----------------------------

} 

Anwesenheit „An“:


$CCU_IP = "192.168.2.100";

$HM_Script = " 
var mySysVar = dom.GetObject('Anwesenheit');
mySysVar.Variable(1);
"; 

echo HMRS_HTTP_Post($CCU_IP, $HM_Script);

function HMRS_HTTP_Post($CCU_IP, $HM_Script)
{
/*=============================================
HMRS_HTTP_Post - Martin Heinzel - 20.02.2011
Version: 0.0

Beschreibung:
Mit dieser Funktion werden HomeMatic Scripte per HTTP Post an die HomeMatic
verschickt.


Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

//--------------------------- Main ----------------------------

// Initialisieren der Socket-Verbindung
$fp = fsockopen ($CCU_IP, 8181, $errno, $errstr, 2);
$res = "";

if (!$fp)
{
    $res = "$errstr ($errno)<br />
";
}
else
{
    // Zusammenstellen des Header für HTTP-Post
    fputs($fp, "POST /Test.exe HTTP/1.1
");
      fputs($fp, "Content-type: application/x-www-form-urlencoded
");
      fputs($fp, "Content-length: ". strlen($HM_Script) ."
");
      fputs($fp, "Connection: close

");
      fputs($fp, $HM_Script);
    while(!feof($fp))
    {
       $res .= fgets($fp, 500);
      }
  fclose($fp);
}

return $res;

//----------------------- Main ENDE ----------------------------

} 

Die IP der CCU muss noch angepasst werden!

Und hier noch mal invertieren:


$CCU_IP = "192.168.2.100";

$HM_Script = "
var mySysVar = dom.GetObject('Anwesenheit');
if(mySysVar.Variable()==0)
{
	mySysVar.Variable(1);
}
else
{
	mySysVar.Variable(0);
}
WriteLine(mySysVar.Variable());
";

echo HMRS_HTTP_Post($CCU_IP, $HM_Script);

function HMRS_HTTP_Post($CCU_IP, $HM_Script)
{
/*=============================================
HMRS_HTTP_Post - Martin Heinzel - 20.02.2011
Version: 0.0

Beschreibung:
Mit dieser Funktion werden HomeMatic Scripte per HTTP Post an die HomeMatic
verschickt.


Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

//--------------------------- Main ----------------------------

// Initialisieren der Socket-Verbindung
$fp = fsockopen ($CCU_IP, 8181, $errno, $errstr, 2);
$res = "";

if (!$fp)
{
	$res = "$errstr ($errno)<br />
";
}
else
{
	// Zusammenstellen des Header für HTTP-Post
	fputs($fp, "POST /Test.exe HTTP/1.1
");
  	fputs($fp, "Content-type: application/x-www-form-urlencoded
");
  	fputs($fp, "Content-length: ". strlen($HM_Script) ."
");
  	fputs($fp, "Connection: close

");
  	fputs($fp, $HM_Script);
	while(!feof($fp))
	{
   	$res .= fgets($fp, 500);
  	}
  fclose($fp);
}

return $res;

//----------------------- Main ENDE ----------------------------

}

PS:

Klingt machbar schein mir aber zu umständlich.

Das darfst Du zu mir nicht sagen. Dann werd ich so richtig geil. :wink:

Hi Martin,

ich bin es noch einmal.

Habe vorhin Dein oben gezeigtes Beispiel mal probiert (ja, ich habe die IP-Adresse angepasst :wink: ) - leider wird die Systemvariable ‚Anwesenheit‘ auf der CCU nicht getoggelt.

Der IPS Editor zeigt im Message Fenster:

HTTP/1.1 200 OK
Server: ise GmbH HTTP-Server v2.0
Accept-Ranges: bytes
Cache-Control: no-store, no-cache
Content-Type: text/xml
Content-Length: 122
Date: Tue, 10 Jul 2012 08:30:56 GMT

0
/Test.exeAnwesenheit

Hast Du eine Idee/Tipp warum?

Gruss Dieter

Hab das Script nun doch mal aufgegriffen und auch bei mir geht es nicht… IP ist angepasst…

Ist das Script an bestimmte Ports oder andere Einstellungen der CCU gebunden die evtl. noch angepasst werden müssen?

Wenn ich das Script starte steht in der „Scriptausgabe“ von IPS das gesamte Script…

Hallo babba, Hallo Franky76,

ich bin noch im Urlaub. :smiley:
Am Donnerstag bin ich wieder da.
Dann schau ich mir das mal an.

Hallo.

Wenn Ihr die XML-API auf der CCU drauf habt dann könnt Ihr die Variable auch damit setzten:


<?php

$status= 1; // 0 = Abwesend, 1 = Anwesend

$befehl="var result = dom.GetObject('Anwesenheit').State(".$status.");";
$result=Post_Request ($befehl);

function Post_Request ($sdata)
{
 $start=time();
 $fp = fsockopen ("xxx.xxx.xxx.xxx", 8181, $errno, $errstr, 2); // IP-Adresse eintragen

 if (!$fp)
     echo "$errstr ($errno)<br />
";
 else
    {
    stream_set_blocking  ( $fp  , 1 ); // sicher gehen, dass der stream im non blocking Mode arbeitet
          $st = "POST /tclrega.exe HTTP/1.1
";
          $st = $st . "Content-type: application/x-www-form-urlencoded
";
          $st = $st . "Content-Length: ". strlen($sdata) ."
";
          $st = $st . "Connection: Close

";

      fputs($fp,$st.$sdata);
      $st = "";
      $t = fgets($fp,500);
      $st = $st . $t . "
";

       while ($t != "
")
       {
        $t = fgets($fp,500);
       }
      $t = "";

      while (!feof($fp))
        {
         $t .= fgets($fp,10000);
        }

    fclose($fp);
  }
}
?>

Hatte das mal irgendwo gefunden und es funktioniert auch mit anderen Variablen wunderbar.

Mir ist noch eingefallen das man eine Veraenderung der Variablen erst nach einem Seitenwechsel sieht!!

@babba

also zur Hauptseite der CCU und dann wieder zu den Sytemvariablen.
Die Antwort der CCU die Du gepostet hast sieht gar nicht so dumm aus.

@ Kronos

läuft… :slight_smile:

@ Schablone

Habs leider nicht hinbekommen, habe jetzt aber auch eine funktionierende Lösung. :slight_smile:

@Schablone

Mir ist noch eingefallen das man eine Veraenderung der Variablen erst nach einem Seitenwechsel sieht!!

das war DER entscheidende Hinweis - ja es geht - Super!

Gruss Dieter

Der letzte Beitrag ist ja schon eine Weile her, aber ich da doch mal eine Frage. :confused:

Schablone sein Skript funktioniert einwandfrei. Die Systemvariable wird schön zwischen >>anwesend<< und >>abwesend<< hin und her geschaltet.
Aber die Skripte auf der CCU die bei Änderung der Systemvariable laufen sollen, die laufen nicht!
Kann es sein, das es für die CCU nicht das selbe ist, als wenn die Variable über eine virtuelle Taste geändert wird?

Sollte eigentlich keinen Unterschied machen. Laufen die Skripte denn sonst?

Gruß
Bruno

Hallo Bruno,

ja die Skripte laufen schon seit Monaten so.
Ich habe eigentlich nur die Änderung der Variable „Anwesenheit“ von der CCU auf IPS geändert.

Hi Thomas,

sieht auch nicht anders aus wie bei mir, schalte aber die Gruppen (mit WT habe ich Gruppen). Für die Umschaltung der Variable nehme ich allerdings das Skript aus #11, sollte aber nicht wirklich eine Rolle spielen. Umschalten ist umschalten.

Hast Du die Variable selber angelegt, oder nutzt Du die vorhandene?

Hallo Bruno,

da will ich mal.

Gruppen gibt es bei mir nicht, hab die CCU1.:rolleyes:

Ich habe die XML-API nicht laufen, dashalb nutze ich die anderen Skripte.

Ich nutze die vorhandene.

OK, wer lesen kann, sind ja auch die alten Thermostate, da gibt es das eh nicht :cool:

Weiss ich auch nicht, woran das liegt, pardon.