Timer + array

Hallo, wie kann ich folgendes machen,

ich habe ein dynamisches array von DeviceID’s und diese möchte ich in 10minuten alle auf einen bestimmten Wert setzen (mit HM_WriteBoolean)
wie schaffe ich es ein array von werten an einen timer zu übergeben?

…diese möchte ich in 10minuten alle auf einen bestimmten Wert setzen
…wie schaffe ich es ein array von werten an einen timer zu übergeben?

Ich habe nicht so ganz den Sinn Deiner Frage verstanden, möchtest Du allen ID´s des arrays nach 10 min einen Wert zuweisen oder sollen die Werte des arrays in irgend einer Weise mit dem Timer verknüpft werden? Bitte etwas genauer.

ich habe ein script, das in 10 minuten aufgerufen werden soll.
Diesen script möchte ich aber ein array von sagen wir mal 10 werten übergeben - die anzahl ist variable.

Wie übergebe ich dieses array?
Wo speichere ich dieses array, damit das script aus dem timer dann darauf zugreifen kann?

Hallo,
verstehe zwar im Moment den sinn nicht ganz, würde das aber mal vorerst so lösen

  1. Lege dir eine STRING-Variable an

  2. Auf diese STRING-Variable schreibts du dir dann die IDs mit einen Trennzeichen (z.B.: „12345 /[AAA\TEST1]/,23456,34567,98754“), wer auch immer dies Variable befüllt (DEIN GEWÜSCHTES DYNAMISCHES ARRAY)

  3. In deinen Timerscript holst Du dir dann die Stringvariable zu verlegts Sie in die einzelnen IDs

foreach(explode(",", GetValueString(12245  /*[AAA\BBB\CCC\VAR4_STRING]*/)) as $ID)
  {
      //hier Verarbeitung der einzelnen IDs durchführen
      echo $ID . "
";
  }

tgusi74

der sinn liegt darin :

ich habe ein script, das am abend alle 20 Homematic verbraucher ausschaltet, bzw das script setzt alle 20 homematic device auf einen bestimmten wert, wenn nun ein device nicht erreichbar ist (schlechter empfang), dann sollen diese devices in einer minute noch einmal geschaltet werden, und dann wieder in einer minute, solange, bis ein timeout kommt (sagen wir mal 5 versuche) oder bis das alle devices erfolgreich geshaltet worden sind …

Hallo!

Hast du denn Probleme damit, das die Befehle an die HM-Aktoren nicht ankommen? Ich habe zwar jetzt keine 20 Aktoren, sondern „nur“ 9 Jalousie-Aktoren, aber die werden abends auch von einem Script in einem Rutsch programmiert und ich hatte noch nie den Fall, das eines einen Befehl „verloren“ hat. Sollte m.E. doch auch bei HM nicht vorkommen, da ja durch BiDi Rückmeldungen bzw. quittierung erfolgt.

Unabhängig davon würde ich es im Prinzip so machen wie tgusi74, nur das ich sowas per serialize/unserialize löse - damit kann man sehr bequem ein Array in einen String wandeln, den in einer IPS-Var. zwischenspeichern und im Zielskript mit einem Befehl wieder in ein Array zurückwandeln, und zwar sogar für verschachtelte Arrays und auch für Objekte usw.:

Im Hauptskript:


...
$IDs = array("30498", "13408", "26329", "17523");
...
SetValue("{ID der IPS-Stringvar}", serialize($IDs));
...

Und im Timerskript dann:


...
$IDs = unserialize(GetValue("{ID der IPS-Stringvar}"));

foreach($IDs as $ID)
{
  // Wird nacheinander für jede ID des Arrays abgearbeitet
  HM_WriteValueBoolean($ID, "STATE", false);
}
...

werds mit dem serialize testen.

Mein Problem ist, das ich einen Aktor habe, der ab und zu nicht empfangen kann (vermute mal reichweiten problem)
nun sagt mir der HM_Write Befehl, das es nicht erfolgreich war, und auch in der HM Zentrale selbst gibts ne Fehlermeldung … aber ein paar minuten später bzw, nach ein paar mal probieren, gehts dann (wie gesagt, die rückmeldung passt eh immer)

Und da ich scripte verwende, die am abend aber beim ausser Haus gehen, alles ausschalten, möchte ich da gerne diese Devices einfach 5 mal im minuten takt schalten, bis ich aufgebe oder der geschalten wurde …