DigitalStrom, der Missverstandene!

Hallo zusammen,
ich hoffe ich kann mit diesem Thread mal einen echten Comminity-Beitrag machen und nicht nur dumme Fragen stellen 

Ich hatte gestern Besuch von einem Herrn von Aizo. Ich habe ihn über meine Probleme mit DigitalStrom gesprochen. Besonders in den Reaktionszeiten und effektiven statis der z.B. Lampen habe ich Probleme bez. sehe ich Potential zur Verbesserung.
Der Herr von Aizo machte mich nun aufmerksam, dass ich die Phyilisphie von DS nicht richtig verstanden habe. D.h. in einem klassischen Umfeld (z.B. CCU) spricht man den Aktor direkt an und ändert seinen Wert. Jeder gibt eine Rückantwort und man kann im IPS sehen, dass der Wert neu z.B. True ist.
Bei DigitalStrom kann man die einzelnen Aktoren auch direkt ansprechen, wenn man das aber in einem Script tut, und 5 Aktoren anspricht, kann die Verarbeitung schon gut 2-3 Sekunden gehen.
Das liegt an der Kommunikationsweg welche DigitalStrom über das 50Herz „legt“. So kann eben nur ein Signal nach dem andern über das Netz geschickt werden und die Verarbeitung scheint langsam.
Deshalb arbeitet DigitalStrom mit Stimmungen. Dort kann ich z.B. 50 Aktoren in einer Stimmung vorprogrammieren. Wenn ich nun diese Stimmung per SOAP aufrufe, wird einem Broadcast ähnlich diese Stimmung verteilt. Die Lampen usw. schalten ein und zwar alle, innert <0.5 Sekunden.
Jetzt ist wichtig zu verstehen, dass im IPS der Aktor immer noch den Wert False besitzt, obwohl die Lampe eigentlich eingeschalten ist. Das liegt daran, dass für DigitalStrom nun die Stimmung aktiv ist und nicht die eigentliche Lampe.

Ich hoffe ich konnte mich hier verständlich ausdrücken.
Ich möchte unbedingt DigitalStrom in Verbindung mit IPS in meinem Häuschen realisieren, aber die aktuellen direkten Befehle, welche ich im IPS sehe, reichen einfach nicht aus.
Meine Vision/Traum wäre es, wenn man den DSS wie einen Gateway auslesen kann. Dabei werden nicht nur die Aktoren ausgelesen (wie bis anhin), sondern auch Räume und Stimmungen. Damit ich mittels IPS direkt Stimmungen aufrufen kann, welche im DSS hinterlegt sind.

Ich kann mir vorstellen, dass dies mit PHP Scripten und SOPA möglich sein müsste, mein Wissen ist allerdings stark limitiert was das angeht. Daher meine Frage in die Community, ob dies möglich scheint oder ich von meinem Traum wieder erwachen muss.

Geniesst den Tag!
Cheers

Kleiner Input, denke diese Befehle bräuchte man :slight_smile:

http://redmine.digitalstrom.org/projects/dss/wiki/Scene_table

Die Tatsache, dass Szenen genutzt werden, ist mir klar. Das wurde mir von der Entwicklung auch genau so kommuniziert, wir es dir erklärt wurde. Deswegen werden wir demnächst auch Module für die Szenenansteuerung anbieten.

Ich habe mich trotzdem für das Bedürfnis der Status der einzelnen Geräte stark gemacht und mir wurde versichert, dass es noch dieses Jahr ein Update geben wird, wodurch nach einem Szenenwechsel die einzelnen Status der Geräte angezeigt werden können.

paresy

Hey Paresy,
klingt ja sehr spannend! Habe bereits ein paar Scripte (mit Hilfe eines Kollegen) zum laufen gebraucht, wo wir Zonen usw. auslesen können. Die Logik macht noch etwas mühe. Am schönsten wäre es, wenn man einfach über den DSS die vorkonfigurierten Szenen auslesen könnte und diese dann (so wie in Aktor selber) einbinden könnte.
Wie gesagt, da sind wir dran. Wenn du willst, kann ich dir auch die Scripts (welche bis Dato gemacht wurden) zukommen lassen. Eventuell gibt es die eine oder andere Idee.
Hast du den schon was, wenn du „demnächst“ schreibst. nicht dass wir 2x das selbe „entwickeln“.

Gruss & Danke!

Hallo SpaceCraft,

es wäre schöne, wenn Du die Scripte hier veröffentlichen würdest.
Dann haben alle etwas davon.

Vielen Dank und Gruß
Christian

Servus zusammen,
also das ganz ist wirklich noch ein bissle primitiv. Wenn es aber hilft, das Thema weiter zu bringen, gerne :slight_smile:

Script 1 / Einfach Befehle, Statusabfragen


<?
/*
$soap = new SoapClient("https://192.168.0.117:8080/dss.wsdl");
$result = $soap->GetKernelVersion();
echo "KernelVersion: ".$result;
*/

/*    $fileContent = curl_exec($curl_handle);
    //var_dump(curl_error($curl_handle));
$result = json_decode($fileContent, false);

 $url = "https://192.168.0.117:8080/json/apartment/callScene?groupID=1&sceneNumber=1;
 curl_setopt($curl_handle, CURLOPT_URL,$url);
 var_dump($fileContent);


/*
 $url = "https://192.168.0.117:8080/json/apartment/callScene?groupID=1&sceneNumber=17&token=$sessionToken";
 
 curl_setopt($curl_handle, CURLOPT_URL,$url);
 $fileContent = curl_exec($curl_handle);
 var_dump($fileContent);

 
 $url = "https://192.168.0.117:8080/json/apartment/callScene?groupID=1&sceneNumber=1&token=$sessionToken";

 curl_setopt($curl_handle, CURLOPT_URL,$url);
  $fileContent = curl_exec($curl_handle);
var_dump($fileContent);
*/
global $curl_handle;
$curl_handle=curl_init();

authenticate();

$url = 'https://192.168.0.117:8080/json/apartment/callScene?groupID=1&sceneNumber=17';
$jsResult = invokeDsCall($url);
var_dump($jsResult);

sleep(5);
$url = 'https://192.168.0.117:8080/json/apartment/callScene?groupID=1&sceneNumber=1';
$jsResult = invokeDsCall($url);
var_dump($jsResult);

/**
 * Authentifizierung mit ds server, holt sessiontoken
 */
function authenticate()
{
	global $sessionToken;
	$sessionToken = null;
	$token = '9dc46924327922c9c719f71547bc389753c631dc4dce05fbbe0f988ed3e211ed';
	$url = 'https://192.168.0.117:8080/json/system/loginApplication?loginToken='.$token; //
	$result = invokeDsCall($url);
	$sessionToken = $result->result->token;
}

/*
 * ruft eine Remote-Funktion mittels json interface beim DS Server auf
 * dekodiert das Ergebnis und gibt es als Objekt zurück
 */
function invokeDsCall($url)
{
	global $sessionToken, $curl_handle;
	
	 
	if (isset($sessionToken) && $sessionToken != null) // wenn es ein session Token gibt, verwende es; gibt es nicht beim 1. Aufruf (Funktion authenticate())
		$url = "$url&token=$sessionToken";
var_dump($url);
	 curl_setopt($curl_handle, CURLOPT_URL,$url);
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT,5);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl_handle, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl_handle, CURLOPT_FAILONERROR, true);
	 $fileContent = curl_exec($curl_handle);
var_dump(curl_error($curl_handle));
	 
	 return json_decode($fileContent, false);
 }
 
curl_close($curl_handle);

?>

Script 2, Ansteuerung von Stimmungen uns Auswertungen.
Mein Ziel war es hier, alle Stimmungen und Aktoren mal auszulesen. Diese dann eventuell mit einer Variable/Button zu verbinden. Aber eben, war/ist mein Ziel. Ist noch am entstehen.


<?
global $curl_handle;
$curl_handle=curl_init();

authenticate();

$url = 'https://192.168.0.117:8080/json/apartment/getStructure?';
$jsResult = invokeDsCall($url);

if ($jsResult->ok != true)
{
	echo 'ERROR: no result';
	return;
}

foreach($jsResult->result->apartment->zones as $zone)
{
	echo $zone->id . ': ' .utf8_decode($zone->name)."
";
	echo "Devices: 
";
	foreach($zone->devices as $device)
	{
		echo $device->id . ': name=' .utf8_decode($device->name).', hwInfo=' .utf8_decode($device->hwInfo) ."
";
	}
	
	echo "

";
}

// callScene => broadcast an alle der Aktoren jeweiligen Farbe
// https://192.168.0.117:8080/json/apartment/callScene?groupName=gray&sceneNumber=0 => alle Rolladen aus

// fernsehen 100% => 75%

$url = 'https://192.168.0.117:8080/json/apartment/callScene?sceneNumber=5';
$jsResult = invokeDsCall($url);
//var_dump($jsResult);
sleep(5);
$url = 'https://192.168.0.117:8080/json/apartment/callScene?sceneNumber=17';
$jsResult = invokeDsCall($url);

curl_close($curl_handle);
return true;

/**
 * Authentifizierung mit ds server, holt sessiontoken
 */
function authenticate()
{
	global $sessionToken;
	$sessionToken = null;
	$token = '9dc46924327922c9c719f71547bc389753c631dc4dce05fbbe0f988ed3e211ed';
	$url = 'https://192.168.0.117:8080/json/system/loginApplication?loginToken='.$token; //
	$result = invokeDsCall($url);
	$sessionToken = $result->result->token;
}

/*
 * ruft eine Remote-Funktion mittels json interface beim DS Server auf
 * dekodiert das Ergebnis und gibt es als Objekt zurück
 */
function invokeDsCall($url)
{
	global $sessionToken, $curl_handle;


	if (isset($sessionToken) && $sessionToken != null) // wenn es ein session Token gibt, verwende es; gibt es nicht beim 1. Aufruf (Funktion authenticate())
		$url = "$url&token=$sessionToken";

	 curl_setopt($curl_handle, CURLOPT_URL,$url);
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT,5);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl_handle, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl_handle, CURLOPT_FAILONERROR, true);
	 $fileContent = curl_exec($curl_handle);
	 $error = curl_error($curl_handle);
	 if ($error != null) echo "ERROR: $error, url: $url
";
	 
	 return json_decode($fileContent, false);
 }


?>

Hoffe wir kommen da auf nen „grünen Zweig“