if($_IPS['SENDER'] == "WebFront")
{
$allLights = GetAllHomematicLights();
SetHomematicLights($allLights, $_IPS['VALUE']);
}
function GetAllHomematicLights()
{
$allObjects = IPS_GetObjectList();
$allLights = array();
foreach($allObjects as $key => $value)
{
// take only instances and not variables to exclude "Alle Lichter" Switch
if(IPS_InstanceExists($value))
{
$currentObject = IPS_GetObject($value);
$currentObjectName = $currentObject["ObjectName"];
$objectIsLight = strpos($currentObjectName,"Licht");
$objectIsLamp = strpos($currentObjectName,"Lampe");
$objectIsLightMaintenance = strpos($currentObjectName,"MAINTENANCE");
if(($objectIsLight || $objectIsLamp) && !$objectIsLightMaintenance)
{
$allLights[$currentObjectName] = $value;
}
}
}
return $allLights;
}
function SetHomematicLights($lightArray, $desiredState)
{
foreach($lightArray as $key => $value)
{
//print($key.": ".$value."
");
HM_WriteValueBoolean($value, "STATE", $desiredState);
}
}
Das Ding funktioniert auch einwandfrei, allerdings hat der Script Ersteller es nach dem ObjectName gemacht wenn dieser „Licht“ oder „Lampe“ heisst.
Die idee war eine Kategorie anzulegen die z.B. heisst Wohnzimmer_zentral
Alle Objekte die davon betroffen sind würde ich in diese Kategorie verlinken z.B. Christbaum, Deckenlicht, TV Licht
Mit dem Script würde ich also gerne die Kategorie ID auslesen und alles was sich in dieser Kategorie befindet gerne ein und ausschalten, so kann ich es später relativ leicht per drag and drop ändern ohne das Script anfassen zu müssen.
Allerdings scheittere ich komplett mit dem Script.
Kann mir da jemand helfen wie ich die Kategorie ID aufrufe?
PS. GIbt es von IP-Symcon keine Tutorials wie man sowas macht?
Fangen wir damit an, dass Du Dir eine Kategorie anlegst und die Links darunter ausliest.
Mit IPS_GetChildrenIDs sollte das gut machbar sein. Zum den Link findest Du heraus, wohin sie linken. Das sind dann die HM Instanzen. Die schaltest Du aus. Fertig.
Du kannst auch einfach mal die Doku durchsuchen. Den ersten Befehl habe ich Dir ja quasi schon vorgegeben. Nimm ein leeres Script und fang an zu experimentieren…
Wenn Du es dann erstmal geschafft hast, alle IDs der Links auszugeben, ist der Rest auch nicht mehr weit.
Folgender Fehler tritt auf den ich nicht ganz zuordnen kann.
Die besagten ObjektID existieren eigentlich schon in der Kategorie wenn auch nur als Link.
Das Script von Fonzo schaltet die Links, was nicht geht, da nur Instanzen geschaltet werden können.
Du musst in die Funktion noch einbauen, dass nicht der Link, sondern die Instanz hinter dem Link geschaltet wird. IPS_GetLink ist Dein Freund.
insgesamt gibt es schon eine umfangreiche Dokumentation. Das Problem dabei ist, dass IPS eine riesige Spielwiese ist, wo es nicht möglich ist, Tutorials für alle denkbaren Szenarien zu schreiben So gibt es hier https://www.symcon.de/forum/threads/28210-IP-Symcon-Wie-kann-ich-2-0 von Chris eine Sammlung mit vielen Beispielen die recht hilfreich ist.
Wenn du kein PHP kannst bzw. auch nicht in der Lage bist dir dies beizubringen, dann wird das alles hier für dich sehr schwierig werden
So hier nun noch der Code zum Schalten der Lampen. Ich habe dir noch ein paar Befehle eingebaut, damit du siehst, welche Daten zurückkommen. Dieses Script kannst du direkt aus der Verwaltungskonsole aufrufen. Wenn es läuft, dann die ersten beiden Zeilen und die zusätzlichen Zeilen löschen oder auskommentieren.
@DerStandart Was erwartest du von einem Anfänger? Er hat ja nach Tutorials gefragt und auch Ideen entwickelt, von daher kann ein bisschen Hilfe nicht schaden
Einem Anfänger bringt es nichts, wenn ihm hier alles fertig serviert wird und es funktioniert. Davon lernt er nix. Ich habe von Anfang an gesagt, was er machen soll und welche Funktionen er verwenden soll. Klar funktioniert dann nicht alles sofort, aber der Lerneffekt ist größer und vielleicht versteht er dann auch, was er gemacht hat. So macht er Copy & Paste, es funktioniert, aber er wer versteht nicht warum und was er gemacht hat.
prinzipiell hast du recht Da ich IPS aber auch erst seit einem Jahr nutze, kann ich mich vermutlich besser in einen Anfänger hineinversetzen als du, der seit 2009 hier registriert ist und kurz vor seinem 1000. Beitrag steht
Deshalb habe ich ja auch angedeutet, dass das alles hier Blut, Schweiß und Tränen verursachen wird - Sir Winston Churchill am 13. Mai 1940
Ich habe 2009 auch nicht anders angefangen … Aber es war immer mein Anspruch, so viel wie möglich selbst zu probieren und zu recherchieren. Natürlich ist es einfacher, wenn man sich alles vorkauen lässt. Davon lernt man aber nix
Da bin ich anderer Meinung, denn solche Beispiele haben mir sehr geholfen
Man liest Doku, und hat nen Knoten im Kopf, wenn dann ein Beispiel kommt, plazt der Knoten.
Und wenn man mal einige Zeit nichts gemacht hat, sehe ich auch manchmal keinen Baum im Wald…:eek:
Ich unterstütze und helfe gerne, sofern es die Zeit zulässt, aber so lange ein Anfänger nicht durchblicken lässt, dass er selber mal 2-3 Zeilen Code geschrieben hat, wird es von mir keinen fertigen Code geben.