22-11-2014, 22:15:38
PHP-Code:
<?php
//Lib einbinden
/**
* Created with IntelliJ IDEA.
* Project: SmartHome PHP
* User: Bubelbub <bubelbub@gmail.com>
* Date: 07.12.13
* Time: 15:44
*/
use Bubelbub\SmartHomePHP\SmartHome;
use Bubelbub\SmartHomePHP\Entity\LogicalDevice;
require_once 'SmartHome.php';
require_once 'Request/BaseRequest.php';
require_once 'Request/LoginRequest.php';
require_once 'Request/GetAllLogicalDeviceStatesRequest.php';
require_once 'Request/GetMessageListRequest.php';
require_once 'Request/GetEntitiesRequest.php';
require_once 'Request/GetAllPhysicalDeviceStatesRequest.php';
require_once 'Request/GetShcInformationRequest.php';
require_once 'Request/GetShcTypeRequest.php';
require_once 'Request/GetUpdatesRequest.php';
require_once 'Request/GetApplicationTokenRequest.php';
require_once 'Entity/Entity.php';
require_once 'Entity/Location.php';
require_once 'Entity/LogicalDevice.php';
require_once 'Entity/Actuator.php';
require_once 'Entity/SwitchActuator.php';
require_once 'Entity/WindowDoorSensor.php';
require_once 'Entity/PushButtonSensor.php';
require_once 'Entity/ThermostatActuator.php';
require_once 'Entity/ValveActuator.php';
require_once 'Entity/RoomTemperatureActuator.php';
require_once 'Request/SetActuatorStatesRequest.php';
require_once 'Entity/TemperatureSensor.php';
require_once 'Entity/RoomTemperatureSensor.php';
require_once 'Entity/HumiditySensor.php';
require_once 'Entity/RoomHumiditySensor.php';
require_once 'Entity/MotionDetectionSensor.php';
require_once 'Entity/LuminanceSensor.php';
require_once 'Entity/AlarmActuator.php';
require_once 'Entity/SmokeDetectorSensor.php';
require_once 'Entity/GenericActuator.php';
require_once 'Entity/GenericSensor.php';
// Arrays deklarieren
$raum = array();
$temp = array();
$humy = array();
$tempo = array();
$zeit = filemtime ( '../smarthome_1/dashboard.png' );
$letzte_aktu = 'Letzte Aktualisierung des Dashboards: ' . gmdate ( 'd M Y H:i:s', $zeit );
$newLine = php_sapi_name() == 'cli' ? PHP_EOL : '<br />';
$config = new SimpleXMLElement('<SmartHomeConfiguration />');
$configFile = __FILE__ . '.config';
if(file_exists($configFile))
{
try{$config = new SimpleXMLElement($configFile, 0, true);}catch(Exception $ex){}
}
$sh = new \Bubelbub\SmartHomePHP\SmartHome('IP der Zentrale', 'BN', 'PW[size=xx-small]');
[font=Arial]
if(!file_exists($configFile))
{
$config->addChild('SessionId', $sh->getSessionId());
$config->addChild('ClientId', $sh->getClientId());
$config->addChild('Version', $sh->getVersion());
$config->addChild('ConfigurationVersion', $sh->getConfigVersion());
$config->saveXML($configFile);
}
$sh->setSessionId((string) $config->SessionId);
$sh->setClientId((string) $config->ClientId);
$sh->setVersion((string) $config->Version);
$sh->setConfigVersion((string) $config->ConfigurationVersion);
$tz = new DateTimeZone('Europe/Berlin');
$transitions = $tz->getTransitions(time());
//print_r($transitions[0]); // Angaben zur aktuellen Zeit
$datum = $transitions[0][time];
//print_r($transitions[1]); // Nächste Umstellung
$wechsel = 'Nächste Umstellung: ' . $transitions[1][time];
//print_r($transitions[2]); // Übernächster Wechsel etc.
// get your current session id
$sessionid = $sh->getSessionId();
// get your current session id
$clientid = $sh->getClientId();
// get your current version
$version = $sh->getVersion();
// get your current configuration version
$configversion = $sh->getConfigVersion();
// Load all entities (full configuration: LogicalDevices, Locations etc.)
//echo 'Loading full configuration...' . $newLine;
$sh->getEntities();
// Load only locations
$sh->getEntities('Locations');
// Get all logical devices states
//echo 'Loading logical device states' . $newLine;
$sh->getAllLogicalDeviceStates();
// Informationen sammeln und in Array speichern
$i = 0;
foreach ($sh->getLogicalDevices() as $ld)
{
//printf("Device has ID '%s' has Name '%s' is a '%s' in room '%s'.", $ld->getid(), $ld->getName(), $ld->getType(), $ld->getLocation()->getName());
$count_room = array_push ( $raum, $ld->getLocation()->getName());
//Räume
If($ld->getLocation() == $raum[$i])
{
if($ld->getType() == LogicalDevice::DEVICE_TYPE_ROOM_TEMPERATURE_ACTUATOR)
{
array_push ( $tempo, $ld->getPointTemperature());
}
if($ld->getType() == LogicalDevice::DEVICE_TYPE_ROOM_HUMIDITY_SENSOR)
{
array_push ( $humy, $ld->gethumidity());
}
if($ld->getType() == LogicalDevice::DEVICE_TYPE_ROOM_TEMPERATURE_SENSOR)
{
array_push ( $temp, $ld->gettemperature());
}
$i =$i+1;
}
}
//Arrays vorbereiten
$raum = array_unique($raum);
$raum = array_values($raum);
$count_room = count($raum);
//Variablen vorbereiten
$ip_1 = '192.168.1.1' ; //Beispiel
$ip_2 = ' ';
$ip_3 = ' ';
$ip_4 = ' ';
$ip_5 = ' ';
##################################################
# create a dashboard image with GD library
// Haeder senden
Header("Content-Type: image/png");
// Breite des Rechtecks
$width = 1500;
// Höhe des Rechtecks
$height = 800;
//Benutzes Hintergrundbild
$img = ImageCreateFromJPEG('images/back.jpg');
// icon einlesen
$icon = imagecreatefrompng('images/heater.png');
//Fotos einlesen für Anwesenheit
//IP 1 anwesend
$dein_Bild_1 = imagecreatefrompng('images/dein_Bild_1.png');
//IP 1 nicht anwesend
$dein_Bild_1_n = imagecreatefrompng('images/dein_Bild_1_n.png');
//IP 2 anwesend
$dein_Bild_2 = imagecreatefrompng('images/dein_Bild_2.png');
//IP 2 nicht anwesend
$dein_Bild_2_n = imagecreatefrompng('images/dein_Bild_2_n.png');
//IP 3 anwesend
$dein_Bild_3 = imagecreatefrompng('images/dein_Bild_3.png');
//IP 3 nicht anwesend
$dein_Bild_3_n = imagecreatefrompng('images/dein_Bild_3_n.png');
//IP 4 anwesend
$dein_Bild_4 = imagecreatefrompng('images/dein_Bild_4.png');
//IP 4 nicht anwesend
$dein_Bild_4_n = imagecreatefrompng('images/dein_Bild_4_n.png');
$wetter_1 = imagecreatefromjpeg('http://deine eigene Seite');
$wetter_2 = imagecreatefromjpeg('http://static.lokalwetter.de/webradar/webradar-east.php');
//Farben des img Elements
$black = ImageColorAllocate($img, 0, 0, 0);
$white = ImageColorAllocate($img, 255, 255, 255);
// Texte auf Bild plazieren
Imagettftext($img, 25, 0, 200, 60, $white, 'arial.ttf', 'Räume ');
Imagettftext($img, 25, 0, 610, 60, $white, 'arial.ttf', 'Anwesenheit ');
Imagettftext($img, 15, 0, 880, 30, $black, 'arial.ttf', $datum . ' - ' . $wechsel);
Imagettftext($img, 15, 0, 880, 55, $black, 'arial.ttf', $letzte_aktu);
[/font][/size]
for($i=0; $i <= $count_room; $i++)
{
// icon plazieren
switch ($i)
{
case 0:
$abstand_x = 100;
$abstand_y = 50;
break;
case 1:
$abstand_x = $i *100 +160;
break;
case 2:
$abstand_x = $i *100 +220;
break;
case 3:
$abstand_x = $i *100 +280;
break;
case 4:
$abstand_x = 100;
$abstand_y = 350;
break;
case 5:
$abstand_x = $i *52;
break;
case 6:
$abstand_x = $i *70;
break;
case 7:
$abstand_x = $i *83;
break;
default:
$abstand_x = 100;
}
imagecopy ( $img, $icon, $abstand_y, $abstand_x, 0, 0, 128,128);
Imagettftext($img, 15, 0, $abstand_y, $abstand_x -5, $white, 'arial.ttf', $raum[$i]);
Imagettftext($img, 10, 0, $abstand_y +140, $abstand_x +15, $white, 'arial.ttf', 'Raumtemperatur: ');
Imagettftext($img, 10, 0, $abstand_y +140, $abstand_x +30, $white, 'arial.ttf', $temp[$i] . ' Grad Celsius');
Imagettftext($img, 10, 0, $abstand_y +140, $abstand_x +55, $white, 'arial.ttf', 'SET-Raumtemperatur: ');
Imagettftext($img, 10, 0, $abstand_y +140, $abstand_x +70, $white, 'arial.ttf', $tempo[$i] . ' Grad Celsius');
Imagettftext($img, 10, 0, $abstand_y +140, $abstand_x +95, $white, 'arial.ttf', 'Feuchte: ');
Imagettftext($img, 10, 0, $abstand_y +140, $abstand_x +110, $white, 'arial.ttf', $humy[$i] . ' Prozent');
}
//Anwesenheit anzeigen
exec('ping -n 2 ' . $ip_1 . $array, $return_1);
$zeit_ueber_1 = strpos ( $return_1[2], 'berschreitung der Anforderung' );
$host_erreich_1 = strpos ( $return_1[2], 'Zielhost nicht erreichbar' );
if($zeit_ueber_1 + $host_erreich_1 > 0)
{
Imagettftext($img, 15, 0, 650, 95, $white, 'arial.ttf', 'Ausgeloggt! ');
imagecopy ( $img, $dein_Bild_1_n, 650, 100, 0, 0, 93,128);
}
else
{
Imagettftext($img, 15, 0, 650, 95, $white, 'arial.ttf', 'Eingeloggt! ');
imagecopy ( $img, $dein_Bild_1, 650, 100, 0, 0, 93,128);
}
exec('ping -n 2 ' . $ip_2 . $array, $return_2);
$zeit_ueber_2 = strpos ( $return_2[2], 'berschreitung der Anforderung' );
$host_erreich_2 = strpos ( $return_2[2], 'Zielhost nicht erreichbar' );
if($zeit_ueber_2 + $host_erreich_2 > 0)
{
Imagettftext($img, 15, 0, 650, 255, $white, 'arial.ttf', 'Ausgeloggt! ');
imagecopy ( $img, $dein_Bild_2_n, 650, 260, 0, 0, 93,128);
}
else
{
Imagettftext($img, 15, 0, 650, 255, $white, 'arial.ttf', 'Eingeloggt! ');
imagecopy ( $img, $dein_Bild_2, 650, 260, 0, 0, 93,128);
}
exec('ping -n 2 ' . $ip_3 . $array, $return_3);
$zeit_ueber_3 = strpos ( $return_3[2], 'berschreitung der Anforderung' );
$host_erreich_3 = strpos ( $return_3[2], 'Zielhost nicht erreichbar' );
if($zeit_ueber_3 + $host_erreich_3 > 0)
{
Imagettftext($img, 15, 0, 650,415, $white, 'arial.ttf', 'Ausgeloggt! ');
imagecopy ( $img, $dein_Bild_3_n, 650, 420, 0, 0, 93,128);
}
else
{
Imagettftext($img, 15, 0, 650,415, $white, 'arial.ttf', 'Eingeloggt! ');
imagecopy ( $img, $dein_Bild_3, 650, 420, 0, 0, 93,128);
}
exec('ping -n 2 ' . $ip_4 . $array, $return_4);
$zeit_ueber_4 = strpos ( $return_4[2], 'berschreitung der Anforderung' );
$host_erreich_4 = strpos ( $return_4[2], 'Zielhost nicht erreichbar' );
if($zeit_ueber_4 + $host_erreich_4 > 0)
{
Imagettftext($img, 15, 0, 650,575, $white, 'arial.ttf', 'Ausgeloggt! ');
imagecopy ( $img, $dein_Bild_3_n, 650, 580, 0, 0, 93,128);
}
else
{
Imagettftext($img, 15, 0, 650,575, $white, 'arial.ttf', 'Eingeloggt! ');
imagecopy ( $img, $dein_Bild_3, 650, 580, 0, 0, 93,128);
}
exec('ping -n 2 ' . $ip_5 . $array, $return_5);
$zeit_ueber_5 = strpos ( $return_5[2], 'berschreitung der Anforderung' );
$host_erreich_5 = strpos ( $return_5[2], 'Zielhost nicht erreichbar' );
if($zeit_ueber_5 + $host_erreich_5 > 0)
{
Imagettftext($img, 25, 0, 1210,680, $black, 'arial.ttf', 'W-Lan inaktiv! ');
}
else
{
Imagettftext($img, 25, 0, 1210,680, $white, 'arial.ttf', 'W-Lan aktiv! ');
}
//Wetter Bild platzieren
Imagettftext($img, 20, 0, 860, 250, $black, 'arial.ttf', 'Online Wetter');
imagecopy ( $img, $wetter_1, 1200, 260, 0, 5, 208,370);
imagecopy ( $img, $wetter_2, 820, 260, 70, 0, 280,370);
//Außentemperatur Bild platzieren
Imagettftext($img, 20, 0, 1200, 250, $black, 'arial.ttf', 'Außentemperatur');
Imagettftext($img, 10, 0, 500, 725, $white, 'arial.ttf', 'SessionID: ' . $sessionid. ' ClientID: ' . $clientid . ' Version: ' . $version . ' ConfigVersion: ' . $configversion );
//Bild PNG ausgeben
ImagePNG($img, "dashboard.png");
//Speicherplatz reinigen
ImageDestroy($img);
?>