Probleme beim automatischen erstellen von Links

Hallo zusammen,

ich würde gerne ein paar Links automatisch anlegen. Dazu möchte ich den folgenden Code verwenden:

<?

$timeArray = array("Büro - 06:00 bis 12:00 Uhr ", "Büro - 12:00 bis 16:00 Uhr ", "Büro - 16:00 bis 19:30 Uhr ", "Büro - 19:30 bis 23:00 Uhr ");

$ParentIDs = array('41936' => '57403');

foreach($ParentIDs as $key => $val){
	foreach($timeArray as $bueroZeit){
		$VarID = @IPS_GetVariableIDByName($bueroZeit, $key);
		$LinkID = IPS_CreateLink();             //Link anlegen
		IPS_SetName($LinkID, $bueroZeit); //Link benennen
		IPS_SetLinkChildID($LinkID, $VarID);     //Link verknüpfen
		IPS_SetParent($LinkID, $val);
	}
}

?>

Die Links werden wie gewünscht angelegt, nur leider nicht unter der richtigen Instanz.
Angelegt werden sollen die Links unter der Instanz 57403

Leider bekomme ich immer die folgende Meldung:

Warning:  Wrong parameter type for IPS_SetParent() in C:\IP-Symcon\scripts\42604.ips.php on line 13

Wenn ich die ID der Instanz manuell eingebe funktioniert es, warum?
Welchen Fehler mache ich??

Wäre nett wenn Ihr mir helfen könntet.

Grüße

Stephan

Wenn ich das Ganze testweise so mache:

$timeArray = array("Büro - 06:00 bis 12:00 Uhr", "Büro - 12:00 bis 16:00 Uhr", "Büro - 16:00 bis 19:30 Uhr", "Büro - 19:30 bis 23:00 Uhr");

$ParentIDs = array('41936' => '57403');

foreach($ParentIDs AS $key => $val){
	foreach($timeArray AS $bueroZeit){
		$VarID = @IPS_GetVariableIDByName($bueroZeit . " ", $key);
		$LinkID = IPS_CreateLink();             //Link anlegen
		IPS_SetName($LinkID, $bueroZeit); //Link benennen
		IPS_SetLinkChildID($LinkID, $VarID);     //Link verknüpfen
		IPS_SetParent($LinkID, 57403);
	}
}

Dann funktioniert es. Leider verstehe ich aber nicht warum es so geht und anders nicht? Wie gesagt es geht um die Variable $val. Diese soll ja eigentlich angeben das der Link unter der Instanz (DummyModul) angelegt wird.

Wäre wirklich dankbar wenn sich einer von euch das mal ansehen könnte und mir auf die Sprünge helfen könnte.
Danke schon mal dafür.

Viele Grüße

Stephan

Du hast die ID als String in den Array gelegt. Mach mal Integer draus.

Grüße

Hallo Crypto,

vielen Dank für deinen Tipp. Es funktioniert jetzt.

Habe das jetzt so geschrieben:

$timeArray = array("Büro - 06:00 bis 12:00 Uhr", "Büro - 12:00 bis 16:00 Uhr", "Büro - 16:00 bis 19:30 Uhr", "Büro - 19:30 bis 23:00 Uhr");

$ParentIDs = array('41936' => 57403, '32185' => 36841);


foreach($ParentIDs AS $key => $val){
	foreach($timeArray AS $bueroZeit){
		$VarID = @IPS_GetVariableIDByName($bueroZeit . " ", $key);
		$LinkID = IPS_CreateLink();             //Link anlegen
		IPS_SetName($LinkID, $bueroZeit); //Link benennen
		IPS_SetLinkChildID($LinkID, $VarID);     //Link verknüpfen
		IPS_SetParent($LinkID, $val /*[Heizungssteuerung\WFE\Heizplan\Montag\Montag]*/);
	}
}

Viele Grüße und nochmals vielen Dank.

Stephan

Gerne doch!

Grüße

Eine Frage hätte ich dann dazu doch noch.

Und zwar, würde es auch gehen, dass ich nur tagesbezogen Links erstelle. Also wenn wir z.B. Montag haben nur die Links für Montag, wenn Dienstag nur die Links für Dienstag usw.

In dem Array unter ParentIDs gebe ich ja für die verschiedenen Tage die IDs an. Aber wie könnte ich es eben so wie oben geschildert ausführen?

Ich weiß nicht genau ob das geht und wenn ja mit welchem Aufwand das verbunden ist. Aber vielleicht könnte ja mir jemand weiterhelfen??

Danke vorab und Grüße

Sorry ich steh grad auf dem Schlauch.

Erklär mal für was du das genau brauchst. Ich kann das irgendwie nicht nachvollziehen
oder ich hätte gestern einfach eher ins Bett gehen sollen :rolleyes:

Überleg mal ob es nicht sinnvoller ist die Links sichtbar bzw. unsichtbar zu machen.
Das erspart dir das ewige Neuanlegen.

Ja so wirklich verständlich ist das Ganze wohl nicht, werde versuchen das nochmal genauer zu beschreiben.

Vielleicht stellt sich dann auch heraus das ich das Ganze komplett umsonst mache und es eine viel einfacher Lösung gibt. Das wäre natürlich auch toll.

Ich nutze das Ernies Heizungsscript und bin damit sehr zufrieden.
Nur die Darstellung im Webfront hat für mich zumindest zu Problemen geführt. Ich möchte das es im Webfront so dargestellt wird:

heizplanauszug.png

Deshalb habe ich die Links wie folgt erstellt:
strukturbaum.png

Wenn ich richtig liege, werden ja immer um 00:01 die Variablen des Vortags gelöscht und neue für den Tag der nächsten Woche angelegt. Wenn ich also die Variablen selbst verlinke, habe ich immer am nächsten Tag die Anzeige von ungültigen Variablen im Webfront.

Weiß nicht vielleicht liege ich da jetzt falsch??? Habe das jetzt eben so gelöst das ich mir auch immer um kurz nach 00:01 die neuen Links anlegen lasse, also nur für den Tag der rausgefallen ist.
Das konnte ich inzwischen wie folgt lösen:

<?
$ParentIDs = array();

switch (date("w")) {
      case "2":
            $ParentIDs['41936'] = 57403 /*[Heizungssteuerung\WFE\Heizplan\Montag\Montag]*/;
            break;
      case "3":
            $ParentIDs['32185'] = 36841 /*[Heizungssteuerung\WFE\Heizplan\Dienstag\Dienstag]*/;
            break;
      case "4":
            $ParentIDs['34746'] = 32153 /*[Heizungssteuerung\WFE\Heizplan\Mittwoch\Mittwoch]*/;
            break;
      case "5":
            $ParentIDs['16791'] = 27371 /*[Heizungssteuerung\WFE\Heizplan\Donnerstag\Donnerstag]*/;
            break;
      case "6":
            $ParentIDs['48713'] = 39908 /*[Heizungssteuerung\WFE\Heizplan\Freitag\Freitag]*/;
            break;
      case "7":
            $ParentIDs['58689'] = 15842 /*[Heizungssteuerung\WFE\Heizplan\Samstag\Samstag]*/;
            break;
      case "1":
            $ParentIDs['30019'] = 46658 /*[Heizungssteuerung\WFE\Heizplan\Sonntag\Sonntag]*/;
            break;
      default:
            echo "Kein korrekter Wochentag";
            exit(0); // Abbruch des Skripts
            break;
}

$timeArray = array("Büro - 06:00 bis 12:00 Uhr", "Büro - 12:00 bis 16:00 Uhr", "Büro - 16:00 bis 19:30 Uhr", "Büro - 19:30 bis 23:00 Uhr");



foreach($ParentIDs AS $key => $val){
	foreach($timeArray AS $bueroZeit){
		$VarID = @IPS_GetVariableIDByName($bueroZeit . " ", $key);
		$LinkID = IPS_CreateLink();             //Link anlegen
		IPS_SetName($LinkID, $bueroZeit); //Link benennen
		IPS_SetLinkChildID($LinkID, $VarID);     //Link verknüpfen
		IPS_SetParent($LinkID, $val);
	}
}
?>

Jetzt würde mich eigentlich interessieren ob ich da richtig liege oder ob das auch wesentlich einfacher zu lösen ist. Wäre mir natürlich peinlich. Ist es für IPS ein Problem wenn immer wieder Links angelegt und gelöscht werden??

Hoffe man kann jetzt besser nachvollziehen um was es mir geht??

Viele Grüße

Stephan