
Zitat von
Hugo45
Mit Mediola im testmodus versuche ich für eine Hue Lampe einen Schalter anzulegen.
Ich möchte ein Schalter anlegen mit Power On/Off + Status Anzeige .Mit Hue plugin funktioniert es, Über ipsymcon Plugin kann ich keine Toggle Finden.
Das liegt daran das Mediola grundsätzlich aus welchen Gründen auch immer kein Toggle anbietet, das wäre längst überfällig und ist trotz SUS bisher nicht von Mediola ergänzt worden. Daher hilft es da nur direkt bei Mediola nachzufragen wann und ob diese gedenken das mal nativ in NEO zu ergänzen. Dennoch kann man aus NEO togglen, Du musst dazu nur ein Toggle Skript ausführen. Du legst also auf den Button in NEO ein Skript und keinen direkten Befehl der Geräteinstanz. IP-Symcon prüft dann was der jetzige Zustand des Geräts ist und schaltet auf den gegenteiligen Zustand.
Für Hue führst Du z.B. einmalig dieses Skript in IP-Symcon aus, dies legt Dir zu jeder Hue Instanz ein Skript an, das Du aus NEO zum toggeln aufrufen kannst.
PHP-Code:
<?php
//Script zum Anlegen von Toggle Script für Hue mit State
//-----------------------
$InstanzenListe = IPS_GetInstanceListByModuleID("{83354C26-2732-427C-A781-B3F5CDF758B1}"); // Hue
$InstanzCount = 0;
foreach ($InstanzenListe as $InstanzID) {
//echo $InstanzID."\n";
createPowerToggle($InstanzID);
$InstanzCount++;
$Childs[] = IPS_GetChildrenIDs($InstanzID);
}
$Variablen = flatten($Childs);
$Variablen = count(array_unique($Variablen));
IPS_LogMessage("NEO Toggle Install", "Es wurden ".$InstanzCount." Hue Instanzen gefunden!");
IPS_LogMessage("NEO Toggle Install", "Es wurden ".$Variablen." Variablen in den Hue Instanzen gefunden!");
function flatten(array $array) {
$return = array();
array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
return $return;
}
function createPowerToggle($InstanzID)
{
$Name = IPS_GetName($InstanzID);
$ScriptName = $Name."_Power toggle";
$StatusID = @IPS_GetObjectIDByIdent("HUE_State", $InstanzID);
if ($StatusID)
{
$ScriptID = @IPS_GetObjectIDByIdent("Togglescript_".$InstanzID, $StatusID);
if($ScriptID)
{
IPS_LogMessage("NEO Toggle Install", "Es existiert bereits ein Toggle Skript für die Variable ".$StatusID."!");
}
else
{
$ScriptID = IPS_CreateScript(0);
IPS_SetName($ScriptID, $ScriptName);
IPS_SetIdent($ScriptID, "Togglescript_".$InstanzID);
IPS_SetParent($ScriptID, $StatusID);
$contentPowertoggle = '<?php
$status = GetValueBoolean('.$StatusID.'); // Status des Geräts auslesen
IPS_LogMessage( "Hue:" , "NEO Script toggle" );
if ($status == false)// Befehl ausführen
{
IPS_LogMessage( "'.$Name.':" , "Anschalten" );
RequestAction('.$StatusID.', true);
}
elseif ($status == true)// Befehl ausführen
{
IPS_LogMessage( "'.$Name.':" , "Ausschalten" );
RequestAction('.$StatusID.', false);
}';
IPS_SetScriptContent($ScriptID, $contentPowertoggle);
IPS_LogMessage("NEO Toggle Install", "Es wurde ein Skript mit der Objekt ID ".$ScriptID." für die Variable mit der Objekt ID ".$StatusID." angelegt!");
}
}
}

Zitat von
Hugo45
Habe in NEO für die Lampe jeweils über hue und ipsymcon Plugin einen Schieberegler angelegt, wenn ich über die Hue App die Helligkeit verstelle änder sich der Schieberegler in NEO unterschiedlich schnell. Hue Plugin 3-4 sec ipsymcon 15 sec.
Woran kann das liegen.
Für eine Antwort sowie Tipps,Links wäre ich sehr dankbar …
Hast Du ein Aktualisierungsintervall eingestellt in NEO auf der Seite auf der der Schieberegler angezeigt wird, wenn ja auf was ist das eingestellt?
Wenn Du kein Aktualisierungsintervall nutzten willst, weil dort viele andere Dinge angezeigt werden die Du nicht ständig aktualisieren willst, kannst Du die Seite auch bei Bedarf aus IP-Symcon aktualisieren.
Dazu legst Du ein auslösendes Ereignis auf die Variable, die eine Seitenaktualisierung in NEO auslösen soll, Bedingung wäre bei Variablenänderung.
Das Ereigniss startet dann ein Skript das die NEO Seite aktualisiert.
PHP-Code:
<?php
$remote = "NEO Remote Name"; // Remote Name der NEO Remote
$page = "index"; // NEO Seitenname der zu aktualisierenden Seite
MEDIOLA_PUSH_Sitechange($remote, $page);
function MEDIOLA_PUSH_Sitechange($remote, $page)
{
$port = 1902; //Push Port
$broadcast = "192.168.55.255"; // Broadcastadresse für eigenes Subnetz
$msg = '{XC_EVT}{"func":"changePage","remote":"'.$remote.'","page":"'.$page.'"}'; //Push Message data an device mit Bezeichnung Gruppe.Name IPS Gruppe.Name:ObjectID den Status der auslösenden Variable
$len = strlen($msg);//Länge der Message
var_dump($len);
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 1);
socket_sendto($sock, $msg, $len, 0, $broadcast, $port);
socket_close($sock);
}
Hier musst Du den NEO Remote Namen sowie den aufzurufenden NEO Seitennamen und die Broadcast Adresse an Dein eigenes Netzwerk anpassen. Wenn also in Deinem Netzwerk ein Gerät die IP Adresse 192.168.179.50 hätte, wäre die passende Adresse, die im Skript einzutragen ist, die 192.168.179.255, die 179 ist also der Teil der IP Adresse, der in Deinem Netzwerk anders sein kann. Den Seitenamen und Remote Namen entnimmst Du der Bezeichnung in NEO. Desweitern must Du schauen was in IP-Symcon selber als Aktualisierungsintervall im Splitter von Hue eingestellt worden ist. Die Hue API unterstützt kein Push d.h. IP-Symcon muss anfragen wie der aktuelle Status der Hue Lampe ist. Wenn Du die Lampe anderweitig schaltest, bekommt das also IP-Symcon und damit auch NEO erst dann mit, wenn der Status von IP-Symcon aktualisiert wurde. Du kannst also im Splitter von Hue ein Intervall einstellen, was für Dich passend ist, z.B. auch 1 Sekunde, dann werden eben aber auch sekündlich Abfragen an die Hue Bridge geschickt.