Zugangskontrollskript (Keycode-Eingabe)


<?

 //Dieses Skript erwartet eine Abfolge von Variablenaktualisierungen, und setzt eine
 //"unlocked" Variable bei Eingabe der korrekten Kombination.

 //Die Variablen müssen in das Array eingetragen werden und entsprechenden der Kombination.
 //in der eingegebenen Reihenfolge. Doppelnennungen von Variable sind möglich.
 
 //Timeout ist die Zeit, bis der interne Merker die bisher korrekte Kombination löscht.
 //Timeout zählt von vorne, sobald eine neue korrekte Eingabe erfolgt ist
 //Nach einem erfolgreichen Unlock, wird die Unlock Variable nach Timeout wieder auf FALSE gesetzt.

 //Hier Konfigurieren und per "Ausführen" installieren
 $timeout = 10; //s
 $items =
  Array(
   15510,
   52510,
   37940,
  );

 //Ab hier nichts mehr verändern
 $kid = CreateVariableByName("KeyInput", 3);
 $uid = CreateVariableByName("Unlocked", 0);

 if($IPS_SENDER === "Execute") {

  //Helper
  $found = Array();
 
  //Delete Events
  $eids = IPS_GetScriptEventList($IPS_SELF);
  foreach($eids as $id)
  {
   $e = IPS_GetEvent($id);
    if($e['EventType'] == 0)
    {
    if(!in_array($e['TriggerVariableID'], $items))
    {
     IPS_DeleteEvent($id);
    } else {
      $found[] = $id;
    }
    }
  }

  //Register Events
  foreach($items as $id) {
   if(!in_array($id, $found)) {
     $eid = IPS_CreateEvent(0);
     IPS_SetEventTrigger($eid, 0, $id);
    IPS_SetParent($eid, $IPS_SELF);
    IPS_SetEventActive($eid, true);
   }
  }
  
  //Initialize
  SetValue($kid, "");
  SetValue($uid, false);
  IPS_SetScriptTimer($IPS_SELF, 0);

 } elseif($IPS_SENDER == "TimerEvent") {

  //Reset
  SetValue($kid, "");
  SetValue($uid, false);
  IPS_SetScriptTimer($IPS_SELF, 0);

 } elseif($IPS_SENDER == "Variable") {

  $key = GetValue($kid);
  if(strlen($key) >= sizeof($items))
   return;
  
  if($IPS_VARIABLE == $items[strlen($key)]) {
    SetValue($kid, $key."*");
   if(strlen(GetValue($kid)) == sizeof($items)) {
    SetValue($kid, "");
     SetValue($uid, true);
   }
   IPS_SetScriptTimer($IPS_SELF, $timeout);
  }
  
 }

function CreateVariableByName($name, $type, $profile = "")
{
    global $IPS_SELF;
    $id = @IPS_GetVariableIDByName($name, $IPS_SELF);
    if ($id === false)
    {
        $id = IPS_CreateVariable($type);
        IPS_SetParent($id, $IPS_SELF);
        IPS_SetName($id, $name);
        IPS_SetInfo($id, "this variable was created by script #$IPS_SELF");
        if ($profile !== "") { IPS_SetVariableCustomProfile($id, $profile); }
    }
    return $id;
}

?>

paresy

Danke Paresy
Dann fehlt uns ja nur noch ein Keypadfeld fürs Webfront.Ein Paar versteckte Seiten,anspringen nach Eingabe des korrekten Code.

Danke Schöne Sache

:loveips:

Super, das hatte ich ja vor monaten schon mal erbeten.

In Verbindung mit einem Keypad wäre das der Knaller !