Astrofunktion auslesen

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 :slight_smile:

Ersetzt ganz wunderbar meine umständliche Lösung
Gruß
Olaf

Danke Christian,

konnte es heute Testen und es klappt Super !! :loveips:

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 :confused:

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 :stuck_out_tongue:

… 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