Zentral EIN/AUS

Hallo zusammen,

also das IP-Symcon ist schon kompliziert vor allem wenn man kein PHP kann :slight_smile:

Ich möchte gerne ein zentral EIN/AUS erstellen was ja theoretisch mit ein bisschen script erledigt sein sollte… :frowning:

habe dazu eine Anleitung gefunden die ich als Basis verwende:

http://gee-life.com/2015/05/25/alle-lampen-ausschalten-uber-ip-symcon-homematic/

Der Code dazu lautet:

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.

kann man mir da ein bisschen unter die Arme greifen und das vielleicht in das Script von oben einfügen damit ich sehe wie es gehen würde?

Die Kategorie ID lautet: 23770 /[Licht zentral]/

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.



 if($_IPS['SENDER'] == "WebFront") 
{ 
    $catid =  23770 /*[Licht zentral]*/;
    $allLights = IPS_GetChildrenIDs($catid);
    SetHomematicLights($allLights, $_IPS['VALUE']); 
} 


function SetHomematicLights($lightArray, $desiredState) 
{ 
    foreach($lightArray as $key => $value) 
    { 
        HM_WriteValueBoolean($value, "STATE", $desiredState); 
    } 
}  

Schön, dass es hier immer wieder jemanden gibt, der alles vorkaut und somit dem Fragenden jegliche Denkarbeit abnimmt. :wink:

Danke für den Input:

Folgender Fehler tritt auf den ich nicht ganz zuordnen kann.
Die besagten ObjektID existieren eigentlich schon in der Kategorie wenn auch nur als Link.

error.JPGlicht_zentral.JPG

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.

Hallo TheOnlyOne,

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 :slight_smile: 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 :wink:

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.


$_IPS['SENDER'] = "WebFront";
$_IPS['VALUE'] = "true"; // Lampen einschalten
if($_IPS['SENDER'] == "WebFront")  
{  
    $catid = 23770; 
    $allLights = IPS_GetChildrenIDs($catid); 
    print_r($allLights);
    SetHomematicLights($allLights, $_IPS['VALUE']);  
}  


function SetHomematicLights($lightArray, $desiredState)  
{  
    foreach($lightArray as $key => $value)  
    {
	 	$LampenArray = IPS_GetLink($value);
	 	print_r($LampenArray); 
		$Lampe = $LampenArray['TargetID']; 
	 	echo $Lampe ."
";
    	HM_WriteValueBoolean($Lampe, "STATE", $desiredState);  
    }  
}

@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 :slight_smile:

Frohe Weihnachten.

Gruß
Hans

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.

Grüße

Moin,

prinzipiell hast du recht :wink: 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 :slight_smile:

Deshalb habe ich ja auch angedeutet, dass das alles hier Blut, Schweiß und Tränen verursachen wird - Sir Winston Churchill am 13. Mai 1940 :smiley:

Gruß
Hans

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 :wink:

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:

So ist jeder verschieden :wink:

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.