Hi,
gibt es die möglichkeit die Astrofunktion ( Sonnenaufgang, Sonnenuntergang ) aus dem Homematic Zentrale auszulesen und diese dann im Webfront zu visualisieren ?
Hi,
gibt es die möglichkeit die Astrofunktion ( Sonnenaufgang, Sonnenuntergang ) aus dem Homematic Zentrale auszulesen und diese dann im Webfront zu visualisieren ?
Das kann IPS auch selbst berechnen, und viel schlaues damit anstellen.
Sieh mal hier:
gruß
bb
hallo…
ich habe für die ccu ein script gefundn, wo mir die Tageszeiten (Nacht; Frühmorgens; Morgengauen; Vormittag; Mittag; Nachmittag; Abenddämmerung; Abend; ) in eine Systemvariable geschrieben werden.
von ips aus lese ich die ganzen CCU-Systemvariablen aus und habe die dann im IPS und kann sie weiter verwenden…
Hab jetzt erstmal das Script von BBerhard benutzt ist auf jeden fall eine nette Sache :-).
ChristanS wie ließt man den die internen Variablen aus ? Kann ich darüber auch die Alarm-Vriable benutzen ?
zum Auslesen der Variablen hab ich mir auf der CCU ein XML-API (FW-Patch) von homematic inside installiert…
danach hat man verschiedene Scripte…
dort habe ich auch das Script für die Tageszeiten für die CCU gefunden…
in IPS hab ich mir eine Kategorie „HM Systemvariablen“ angelegt darin ein Script erstellt:
die $ccu_ip sollte noch angepasst werden… und dann ausführen lassen…
es werden die Variablen automatisch angelegt… wenn in der CCU eine Systemvariable gelöscht wird, wirds auch in IPS gelöscht
update siehe unten
Klasse so etwas hatte ich gesucht :D. Ich werde es nachher mal ausprobieren.
Wenn das klappt wäre das Klasse
bei mir klappts schon ne weile so…
aber ich bin grad draufgekommen, das es besser wäre nicht die namen zu vergleichen sondern die ID`s der CCU
so, habs angepasst, das nicht der Name, sondern die ID’s verglichen werden…
die CCU-ID´s werden mit IPS_SetInfo zur ips-variable gespeichert…
so kann man auch in der CCU den Namen der Variable ändern, und im IPS bleibts aber die selbe ObjektID
<?
// Variablen vorgeben
$ccu_ip = '192.168.0.13';
$par_id = IPS_GetParent($IPS_SELF);
$vars_new[] = $IPS_SELF; // um zu verhidern, dass das script später gelöscht wird
$vars_old = IPS_GetChildrenIDs($par_id);
$xml = simplexml_load_file('http://'.$ccu_ip.'/config/xmlapi/sysvarlist.cgi');
$xml = new simpleXMLElement($xml->asXML());
$i=0;
while($i < count($xml->systemVariable)) {
$var_name = $xml->systemVariable[$i]['name'];
$var_value = $xml->systemVariable[$i]['value'];
$var_ise_id = $xml->systemVariable[$i]['ise_id'];
if(empty($var_value)) $var_value == " ";
$var_type = $xml->systemVariable[$i]['type'];
$var_id = @GetIDByCCUID($var_ise_id);
$vars_new[] = $var_id;
if($var_id == false) {
switch($var_type) {
case 2: //Boolean-Variable erstellen
if($var_value == 'true') {
$var_value = TRUE;
} else {
$var_value = FALSE;
}
$new_var_id = IPS_CreateVariable(0);
SetValueBoolean("$new_var_id", $var_value);
break;
case 4: //Integer-Variable erstellen
case 16:
$new_var_id = IPS_CreateVariable(1);
SetValueInteger($new_var_id, (int)$var_value);
break;
case 20: //String-Variable erstellen
$new_var_id = IPS_CreateVariable(3);
SetValueString($new_var_id, (string)$var_value);
break;
}
IPS_SetName($new_var_id, "$var_name");
IPS_SetInfo($new_var_id, "$var_ise_id");
IPS_SetParent($new_var_id, $par_id);
} else {
switch($xml->systemVariable[$i]['type']) {
case 2: //Boolean-Variable veraendern
if($var_value == 'true') {
$var_value = TRUE;
} else {
$var_value = FALSE;
}
SetValueBoolean("$var_id", $var_value);
break;
case 4: //Integer-Variable veraendern
case 16:
SetValueInteger($var_id, (int)$var_value);
break;
case 20: //String-Variable veraendern
SetValueString($var_id, (string)$var_value);
break;
}
if(IPS_GetName($var_id) != $var_name) {
IPS_SetName($var_id, "$var_name");
}
}
$i++;
}
$var_dif = array_diff($vars_old, $vars_new);
//Variablen löschen, die in der CCU auch gelöscht wurden
if(is_array($var_dif)) {
foreach($var_dif as $val) {
IPS_DeleteVariable($val);
}
}
function GetIDByCCUID($ccuid) {
global $vars_old;
foreach ($vars_old as $ips_id) {
$info = IPS_GetObject($ips_id);
if($ccuid == $info['ObjectInfo']) {
return $ips_id;
}
}
}
?>
ahja, falls du mein 1. Script von oben schon mal ausgeführt hast, werden die IPS-Variablen gelöscht und neu erstellt. ( nur zur info, falls du die Var´s schon wo verwendet hast)
Danke Christian,
konnte es heute Testen und es klappt Super !!
hallo,
hab das script ausprobiert, leider bekomm ich nur zwei variablen (anwesenheit und alarmzone).
wenn ich folgendes am Browser eingebe:
http://192.168.1.4/config/xmlapi/sysvarlist.cgi
bekomme ich diesen output:
<systemVariables><systemVariable name=„Alarmzone 1“ variable=„4“ value="" ise_id=„1337“ min="" max="" unit="" type=„2“ subtype=„6“ timestamp=„0“/><systemVariable name=„Anwesenheit“ variable=„1“ value=„true“ ise_id=„950“ min="" max="" unit="" type=„2“ subtype=„2“ timestamp=„1304551592“/></systemVariables>
Das XML-API ist installiert, ich hab die CCU auch in IPS integrieren können.
Hat jemand von euch einen Tip, woran das liegen könnte?
Danke.
Das was im Browser erscheint, sind die zwei Systemvariablen, die die CCU von Haus aus hat, glaube ich.
Du musst noch ein Skript/Programm auf der CCU installieren/ausführen, das die Astrofunktionwerte in Systemvariablen schreiben, dann solltest Du auch mehr im IPS sehen.
Dieses Skript findest Du auch bei Homematic inside hier.
Gruß
Olaf
Hallo,
mit dem Testscript von paresy
bekomme ich folgenden Hinweis:
Skript: Lesescript #49923, Funktion: SetValueBoolean, Bitte statt dem Namen die ID der Variable eintragen.
SetValueBoolean("$var_id", $var_value);
Leider erschließt sich für mich als PHP-NOB nicht was ich da ändern soll
Andreas
Ein Name ist meistens ein String „Ich bin ein String“. Eine ID ist meistens ein Integer 12345 mit „12345“ ist es ein String.
Hallo Rainer,
Für den Unterschied zwischen String und Integer reicht`s gerade noch
… was soll mir das in diesem Fall sagen?
Andreas
Früher konntest du die Variable über den Namen ansprechen, jetzt nur noch über die Variablen ID.
SetValueBoolean("$var_id", $var_value);
$var_id = 12345;
SetValueBoolean($var_id, $var_value);
Bekomme beim Ausführen folgende Rückmeldungen:
Notice: Undefined variable: IPS_SELF in /var/lib/symcon/scripts/44226.ips.php on line 5
Notice: Undefined variable: IPS_SELF in /var/lib/symcon/scripts/44226.ips.php on line 6
Warning: Variable #35751 existiert nicht in /var/lib/symcon/scripts/44226.ips.php on line 77
Warning: Variable #44552 existiert nicht in /var/lib/symcon/scripts/44226.ips.php on line 77
Warning: Variable #12910 existiert nicht in /var/lib/symcon/scripts/44226.ips.php on line 77
…line 77 kommt noch paar mal…
Was ist hier nicht korrekt?
Danke
für Hilfe.
glg
Manuela
Version? Betriebssystem?
Ich würde dies hier verwenden: Location Control IP-Symcon :: Automatisierungssoftware
paresy
Und wenn es unbedingt die Systemvariable aus der CCU sein muss, Nimm dies hier:
[Modul] Homematic Extended (Systemvariablen, Programme, Powermeter u.v.m.)
Michael