Also, ich versuche es mal, bin aber auch kein großer Experte:
Als Erstes erstellst du eine I/O Instanz „WebSocket“ Client. In diese trägst du dann unter URL folgendes ein: ws://DeineIP/ws
Danach erstellst du in einer Kategorie deiner Wahl eine „JSON Decoder“ Instanz. Dann öffnest du die Instanz und gehst oben auf „Gateway ändern“. Dort suchst du dir deinen WebSocket Client aus. Der automatisch erstellte Http-Client kann gelöscht werden.
In dem Ordner, wo sich auch der JSON-Decoder befindet legst du folgendes Skript ab:
<?php
// WLED send JSON
// z.B. WSC_SendMessage(12345, '{"on":true}');
$WSClientID = 31430; //ID anpassen
$send = "";
$VariableID = $_IPS['VARIABLE'];
$value = $_IPS['VALUE'];
$Ident = IPS_GetObject($VariableID)['ObjectIdent'];
$ParentID = IPS_GetParent($VariableID);
$ParentIdent = IPS_GetObject($ParentID)['ObjectIdent'];
$Parent2ID = IPS_GetParent($ParentID);
$Parent2Ident = IPS_GetObject($Parent2ID)['ObjectIdent'];
switch($ParentIdent){
case "state":
$send = array($Ident => $value);
break;
case "ccnf": //anpassen
case "nl":
$send = array("nl" => array($Ident => $value));
break;
case "udpn":
$send = array("udpn" => array($Ident => $value));
break;
default:
switch($Parent2Ident){
case "seg":
$id = GetValue(IPS_GetObjectIDByIdent("id", $ParentID));
$seg = array(
'id' => $id,
$Ident => $value
);
$send = array($Parent2Ident => array($seg), 'v' => true);
break;
case "col":
switch($Ident){
case "Index_0":
$r = $value;
$g = GetValue(IPS_GetObjectIDByIdent("Index_1", $ParentID));
$b = GetValue(IPS_GetObjectIDByIdent("Index_2", $ParentID));
$w = GetValue(IPS_GetObjectIDByIdent("Index_3", $ParentID));
break;
case "Index_1":
$r = GetValue(IPS_GetObjectIDByIdent("Index_0", $ParentID));
$g = $value;
$b = GetValue(IPS_GetObjectIDByIdent("Index_2", $ParentID));
$w = GetValue(IPS_GetObjectIDByIdent("Index_3", $ParentID));
break;
case "Index_2":
$r = GetValue(IPS_GetObjectIDByIdent("Index_0", $ParentID));
$g = GetValue(IPS_GetObjectIDByIdent("Index_1", $ParentID));
$b = $value;
$w = GetValue(IPS_GetObjectIDByIdent("Index_3", $ParentID));
case "Index_3":
$r = GetValue(IPS_GetObjectIDByIdent("Index_0", $ParentID));
$g = GetValue(IPS_GetObjectIDByIdent("Index_1", $ParentID));
$b = GetValue(IPS_GetObjectIDByIdent("Index_3", $ParentID));
$w = $value;
break;
}
// echo $r." - ".$g." - ".$b." - ".$w;
$id = GetValue(IPS_GetObjectIDByIdent("id", IPS_GetParent($Parent2ID)));
$Parent4Ident = IPS_GetObject(IPS_GetParent(IPS_GetParent($Parent2ID)))['ObjectIdent'];
switch($ParentIdent){
case "Index_0":
$col = array(
'id' => $id,
'col' => array(
array($r, $g, $b, $w)
)
);
break;
case "Index_1":
$col = array(
'col' => array(
array(),
array($r, $g, $b, $w),
array()
)
);
break;
case "Index_2":
$col = array(
'col' => array(
array(),
array(),
array($r, $g, $b, $w)
)
);
break;
}
$send = array($Parent4Ident => array($col), 'v' => true);
break;
}
}
if($send != ""){
WSC_SendMessage($WSClientID, json_encode($send));
}
In Zeile 6 trägst du dann noch die ID vom WebSocket Client ein und führst das Skript manuell aus. Dazu muss die WLED aber online sein, also der WebSocket muss auf „aktiv“ stehen.
Danach sollten im JSON Decoder die ganzen Variablen stehen.
Ich habe die alle mal händisch umbenannt und teilweise auch mit eigenen Profilen versehen, da mir die Kürzel nicht immer etwas sagen und ich mir das auch nicht merken kann. Ich weiß aber nicht, wie ich das veröffentlichen könnte. Da fehlt’s mir dann etwas.
Falls du da mehr wissen willst, was welches Kürzel bedeutet, kannst du dich ja mal melden. Ich habe das aber auch rausgefunden, indem ich im WebUI der WLED Änderungen gemacht habe und bei Symcon auf den Zeitstempel geschaut habe, wo sich wie und was geändert hat. Ich habe in den Profilen auch alle Farben und Szenen eingetragen.