Bin am Basteln einer Anwesenheitssimulation. Dies ist erstmal das Kern Script und es fehlt noch die Funktion zum Schalten. In der Simulation funktioniert es schon mal. Was haltet ihr von der Idee?
Grundidee ist folgende:
Es wird einmal gestartet (extern, Wenn keiner da ist und dunkel)
Es können beliebig viele Lichter verwendet werden
Man kann angeben wie viele Lichter max gleichzeitig leuchten sollen
es ist sichergestellt, dass bei der nächsten Ausführung sich der Zustand ändert.
Ablauf
Es wird für jede Lampe ein neuer Status per Zufall generiert
Ist die Gesamt Anzahl über der angegebenen zulässigen, startet das Skript von vorne
Ist der Zustand der gleiche wie zuvor, startet das Skript von vorne
Wenn zufällig gar keine Lampe aktiv ist, startet das Skript von vorne
Sind alle Zustände OK, werden die Lampen demensprechend geschalten.
Die neue Wartezeit wird gesetzt und das Skript startet nach der zufälligen Zeit erneut (noch nicht umgesetzt)
Wer es mal testen will (aktuelle Vorabversion):
Unter dem Skript muss als Sohn eine String-Variable mit dem Namen „speicher“ angelegt sein.
<?
$AnzahlLichterGesamt = 4;
$AnzahlLichterMaxGleichzeitigAn = 2;
$LaufzeitMinimum = 3;
$LaufzeitMaximumMehrAlsEineLampe = 10;
$LaufzeitMaximum = 40;
// IDs für die Lampen hier eintragen
$IDLampe1 = 1234;
$IDLampe2 = 4567;
$IDLampe3 = 1234;
$IDLampe4 = 1333;
$IDLampe5 = 0;
$IDLampe6 = 0;
// IPS Light Befehle integrieren
IPSUtils_Include ('IPSLight.inc.php', 'IPSLibrary::app::modules::IPSLight');
// Speicherort für alter Zustand der Lampen
$IDSpeicher = IPS_GetVariableIDByName ("speicher",$_IPS['SELF']);
$SpeicherAlt = getvalue ($IDSpeicher);
$AnzahlDruchlauf = 0;
// Anfang der Funktion
Start:
// Neuen Zustand generieren
$AnzahlDruchlauf = $AnzahlDruchlauf + 1;
$SummeLichter = 0;
$Speicher = "";
for ($i = 1; $i < $AnzahlLichterGesamt+1; $i++) {
$ZustandNeu = rand(0, 1);
$SummeLichter = $SummeLichter + $ZustandNeu;
$Speicher = $Speicher . $ZustandNeu;
}
// Prüfung ob der Neuzustand sich in den Grenzwerten befindet
if ($Speicher == $SpeicherAlt) {goto Start;}else{}
if ($SummeLichter == 0) {goto Start;}else{}
if ($SummeLichter > $AnzahlLichterMaxGleichzeitigAn) {goto Start;}else{}
if ($SummeLichter == 1){
$Wartezeit = rand ($LaufzeitMaximumMehrAlsEineLampe, $LaufzeitMaximum);
}else{
$Wartezeit = rand ($LaufzeitMinimum, $LaufzeitMaximumMehrAlsEineLampe);
}
// Lampen mit dem Neuen Status schalten
setvalue ($IDSpeicher, $Speicher);
for ($i = 1; $i < $AnzahlLichterGesamt+1; $i++) {
$IDSchalter = "IDLampe".$i;
$Aktuell = $i - 1;
//IPSLight_SetSwitch
echo $$IDSchalter ." = ". $Speicher[$Aktuell] . "
";
}
// Ausgabe für Diagnose
echo "Alt: ".$SpeicherAlt."
";
echo "Neu: ".$Speicher;
echo " ";
echo "$AnzahlDruchlauf Versuch(e) für $SummeLichter Lichter für ".$Wartezeit ." min einschalten
";
?>
Ich hatte ihm meine Ideen dazu noch per PN geschickt (PN hab ich leider nicht mehr), weil ich selbst so ein Modul auf der 2do habe/hatte. Kam aber keine Reaktion.
Habe aber noch ein paar Notizen, mit den Gedanken die ich mir zu so einem Modul bereits gemacht hatte. Vielleicht kannst du damit was anfangen Ich komme so bald eh nicht dazu da was zu machen, also überlasse ich dir/euch mal mein „Gedankengut“
Anwesenheitssimulation (Modul zur Simulation von Anwesenheit)
>> In der Form z.B. 3 Timeslots definieren lassen (z.B. 8-10Uhr, 18-20Uhr, 21-23Uhr)
>> In der Form dann jeweils ein „Aktion-Skript“ Skript auswählbar machen, welches dann innerhalb dieser Timeslots zu einer zufälligen Zeit ausgeführt wird (in diesen Skripten können die Benutzer dann verschiedene Lichter schalten oder Rollläden bewegen)
>> +2 Skripte definierbar machen bei Sonnenaufgang/-untergang
…ich denke daraus wird klar, was ich vor hab/hatte