Benötigt werden eine POP3 oder IMAP Instanz unter der ein Skript mit dem nachfolgen Inhalt erstellt wird. Wer Rückmeldungen erhalten will, kann die ID einer SMTP Instanz angeben. Die ID = 0 bedeutet, dass dieses Feature deaktiviert bleibt.
Nach dem Erstellen, ist das Skript einmal auszuführen. Im anhängenden Screenshot ist zu sehen, wie das ganze im Objektbaum im Endeffekt aussehen sollte.
Der Befehl LICHTAN muss in der Betreffszeile an das POP3/IMAP Konto gesendet werden im Format: IPS LICHTAN.
Allgemein:
IPS BEFEHL
<?
$allowedSenders = Array("hans@wurst.com", "max@mustermann.de"); //Erlaubte Absender!
$sendResponse = 0; //ID einer SMTP Instanz angeben, um Rückmelde-Funktion zu aktivieren
$prefix = "IPS";
//Hier im switch-case die einzelnen Kommandos einfügen. Wer nicht weiß wie, sollte die PHP Doku zu switch-case lesen
function processCommand($str)
{
switch($str)
{
case "LICHTAN":
MXC_SwitchMode(53013 /*[Erdgeschoss\Flur\Deckenlampe]*/, true);
return true;
}
return false; //Fehler zurückschicken!
}
/*
* Ab hier nichts mehr ändern!
*
*/
$iid = IPS_GetParent($IPS_SELF);
if($IPS_SENDER == "Variable")
{
$ins = IPS_GetInstance($iid);
switch($ins['ModuleInfo']['ModuleID'])
{
case "{CABFCCA1-FBFF-4AB7-B11B-9879E67E152F}":
$isIMAP = true;
break;
case "{69CA7DBF-5FCE-4FDF-9F36-C05E0136ECFD}":
$isIMAP = false;
break;
default:
die("Diese Skript muss unterhalb einer POP3 oder IMAP Instanz liegen");
}
if($isIMAP)
{
$mails = IMAP_GetCachedMails($iid);
}
else
{
$mails = POP3_GetCachedMails($iid);
}
$uid = CreateVariableByName($IPS_SELF, "LastRun", 1);
$last = GetValue($uid);
//$mails = array_reverse($mails);
if(sizeof($mails) == 0)
return;
$lastmail = $last;
foreach($mails as $mail)
{
if(($last > 0) && ($mail['Date'] > $last))
{
if(substr($mail['Subject'], 0, strlen($prefix)) == $prefix)
{
if(in_array($mail['SenderAddress'], $allowedSenders))
{
$cmd = substr($mail['Subject'], strlen($prefix)+1);
$status = processCommand($cmd);
if($status)
{
$message = $cmd." ausgeführt!";
} else {
$message = $cmd." ist nicht bekannt!";
}
if(IPS_InstanceExists($sendResponse))
{
SMTP_SendMailEx($sendResponse, $mail['SenderAddress'], "IP-Symcon Rückmeldung", $message);
}
} else {
if(IPS_InstanceExists($sendResponse))
{
SMTP_SendMail($sendResponse, "IP-Symcon Rückmeldung", "Unerlaubter Zugriff: ". $mail['SenderAddress'].", Befehl: ".$cmd);
}
}
}
}
$lastmail = max($lastmail, $mail['Date']);
}
SetValue($uid, $lastmail);
}
if($IPS_SENDER == "Execute")
{
$vid = @IPS_GetStatusVariableID($iid, "LastMessage");
if($vid === false)
die("Irgendwie fehlt die benötigte StatusVariablen!");
$eid = @IPS_GetEventIDByName("MailUpdate", $IPS_SELF);
if($eid === false)
{
$eid = IPS_CreateEvent(0);
IPS_SetEventTrigger($eid, 1, $vid);
IPS_SetParent($eid, $IPS_SELF);
IPS_SetName($eid, "MailUpdate");
IPS_SetEventActive($eid, true);
}
IPS_SetHidden($IPS_SELF, true);
echo "Skript erfolgreich installiert!";
}
function CreateVariableByName($id, $name, $type)
{
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid === false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
}
return $vid;
}
?>