Hallo,
zuerst einmal ein großes Lob für die Software. Ich glaube, das ist genau das, was ich zur Homematic Hardware lange gesucht habe.
Ich habe die Installation auf einem A20 Board mit Debian Wheezy durchgeführt und soweit scheint alles zu laufen. Allerdings habe ich wohl ein Verständnisproblem mit dem Ausführen von Scripten. Ich möchte täglich ein Script (daily.php) starten, das dafür verantwortlich ist, ein zweites Script (sunrise.php) aufzurufen, in den zwei Timerevents generiert werden. Wenn ich die Scripte einzeln per Kommandozeile aus dem Scriptverzeichnis starte (php daily.php bzw php sunrise.php) funktionieren beide wie erwartet.
Der Timerevent von daily.php führt aber scheinbar nicht das zweite Script sunrise.php aus. es werden zumindest keine neuen Timerevents generiert.
Beide Scripte haben chmod 0755 und gehören dem user homegear.
Der Code von daily.php
<?php
error_reporting(E_STRICT|E_ALL);
include_once("Connect.php");
$time = mktime(0, 0, 0) + 24 * 60 * 60;
print_r($Client->send("removeEvent", ['ROLLO_SUNSET_SUNRISE']));
print_r($Client->send("addEvent",
[
"TYPE" => 1, // timed
"ID" => "ROLLO_SUNSET_SUNRISE",
"EVENTTIME" => time()+30,//$time,
"RECUREVERY" => 24 * 60 * 60,
"EVENTMETHOD" => 'runScript',
"EVENTMETHODPARAMS" => [false, 'sunrise.php']
]));
?>
Der Code von sunrise.php
<?php
error_reporting(E_STRICT|E_ALL);
/* configuration */
$common =
[
'tz' => 'Europe/Berlin',
'lat' => 51.31812,
'lng' => 9.67266
];
$blind =
[
'ROLLO_KUE' =>
[
'sunrise' => [10*60, 100.0],
'sunset' => [10*60, 5.0]
]
];
/* use date of next day for debugging */
$tomorrow = mktime(0,0,0)+24*60*60;
$sun_info = date_sun_info(/*time()*/$tomorrow, $common['lat'], $common['lng']);
include_once("Connect.php");
$lastId = -1;
$devlist = $Client->send("listDevices", array());
foreach ($devlist as $device)
{
$devId = $device['ID'];
if ($lastId != $devId)
{
$lastId = $devId;
$devProp = $Client->send("getAllMetadata", array($devId));
if (isset($devProp['NAME']))
{
$devName = $devProp['NAME'];
if (isset($blind[$devName]))
{
foreach ($sun_info as $key => $val)
{
if (isset($blind[$devName][$key]))
{
$eventId = 'BLIND_'.$devId.'_'.$key;
$eventTime = $val + $blind[$devName][$key][0];
$level = $blind[$devName][$key][1] / 100.0;
$Client->send("removeEvent", [$eventId]);
print_r($Client->send("addEvent",
[
"TYPE" => 1, // timed
"ID" => $eventId,
"EVENTTIME" => $eventTime,
"EVENTMETHOD" => 'setValue', //Kanal des Einganges (1 bis 12)
"EVENTMETHODPARAMS" => array($devId, 1, 'LEVEL', (double)$level)
]));
}
}
}
}
}
}
?>