Dann kann es ja losgehen:
Zuerst musst du die Schnittstelle initialisieren:
COMPort_SendText(45593 /*[RS232-EMA]*/, "
MPI;D:0;F:FF
");
Dann nutze ich folgendes Script für die Verarbeitung:
<?
/* Allgemeine Datenvariablen und Statustexte */
$stoerung[0] = "Keine Störung";
$stoerung[1] = "Störung 1* ext gesperrt";
$stoerung[2] = "Akku gespeichert";
$stoerung[3] = "Akku +1* ext gesperrt";
$stoerung[4] = "Netzstörung";
$stoerung[5] = "Netzst.+ 1 ext gesperrt";
$stoerung[6] = "Netz + Akkuw";
$stoerung[7] = "Netzst + Akku + 1 ext. Gesperrt";
$stoerung[8] = "Sonstige Störung";
$stoerung[9] = "Son. Stör. + 1* ext gesperrt";
$stoerung[10] = "Son. Stör. + Akku gespeichert";
$stoerung[11] = "Son. Stör. + Akku +1* ext gesp";
$stoerung[12] = "Son. Stör. + Netzstörung";
$stoerung[13] = "Son. Stör. + Netzst.+ 1 ext gesp";
$stoerung[14] = "Son. Stör. + Netzst + Akku";
$stoerung[15] = "Son. Stör. + Netzst + Akku + 1 ext. Gesperrt";
$stoerung[16] = "Son. Stör. + Undefiniert 16";
$stoerung[17] = "Son. Stör. + Undefiniert 17";
//Zuordnung der Meldegruppen zu IP-Symcon IDs der Obergruppe
$MG[1] = 36836 /*[EMA\Sabotage]*/; //Sabotage
$MG[2] = 22550 /*[EMA\KG\Brandalarm]*/; //Brandalarm
$MG[3] = //Und so weiter .. für jede Meldegruppe ein Objekt anlegen und das hier mappen
IPS_LogMessage('EMA',$IPS_VALUE);
$daten = explode(";",$IPS_VALUE);
$kommando = $daten[0];
$meldepunktnummer = (int)substr($daten[1],2);
$meldezustand = (int)substr($daten[2],2);
$funktionswert = (int)substr($daten[3],2);
//Optional Zusatztext T
if(count($daten)>5)
{
if(substr($daten[4],0,1)=="T")
{
$zusatztext = $daten[4];
if($zusatztext<>"") { SetValueString(36653 /*[EMA\EMA Interne Steuerung\Zusatztext]*/,$zusatztext); }
}
//Optional Datenträgernummer K
if(substr($daten[5],0,1)=="K")
{
$datentraeger = $daten[5];
if($datentraeger<>"") { SetValueString(38540 /*[EMA\EMA Interne Steuerung\Datenträger]*/,$datentraeger); }
$pruefsumme = $daten[6];
}
//Nur 5 Datenteile
} else {
$zusatztext = "";
$datentraeger = "";
$pruefsumme = $daten[4];
}
echo "Meldepunkt: ".$meldepunktnummer." Zustand: ".$meldezustand." Wert: ".$funktionswert;
//Ist die Meldergruppe vorhanden
if(($meldepunktnummer>1100)&($meldepunktnummer<=1148))
{
$id = $MG[$meldepunktnummer-1100];
if($id>0)
{
$name = IPS_GetName($id);
//Alarmauslösung der Meldegruppe
if(($meldezustand=="1")&&($funktionswert==1))
{
SetValueString(32179 /*[EMA\Alarme]*/, GetValueString(32179 /*[EMA\Alarme]*/)."
".$id." - ".$name);
}
//Zustandsänderung der Meldegruppe
if($meldezustand==0)
{
if($funktionswert==1)
{
//aktuelle meldungen aktualisieren
IPS_RunScriptWaitEx(35516 /*[EMA Meldungen\EMA Meldungen]*/, array('action' => 'addupdate', 'text' => date('H:i:s',time()).' '.$name, 'expires' => time() + 0, 'removable' => false, 'msgnum' => $id, 'img' => 'Window'));
//echo("IPS_RunScriptWaitEx(35516 /*[EMA Meldungen\EMA Meldungen]*/, array('action' => 'addupdate', 'text' => date('H:i:s',time()).' '.$name, 'expires' => time() + 0, 'removable' => false, 'msgnum' => $id, 'img' => 'Window'));");
} else {
IPS_RunScriptWaitEx(35516 /*[EMA Meldungen\EMA Meldungen]*/, array('action' => 'rmMsgNum', 'msgnum' => $id));
}
}
//Suche Zustandsobjekt
$child = IPS_GetChildrenIDs($id);
foreach($child as $cid)
{
if(($meldezustand==0)&&(IPS_GetName($cid)=='Zustand'))
{
setvalueinteger($cid,(int)$funktionswert);
}
if(($meldezustand==1)&&(IPS_GetName($cid)=='Alarm'))
{
setvalueboolean($cid,(boolean)$funktionswert);
}
if(($meldezustand==2)&&(IPS_GetName($cid)=='Intern gesperrt'))
{
setvalueboolean($cid,(boolean)$funktionswert);
}
if(($meldezustand==3)&&(IPS_GetName($cid)=='Extern gesperrt'))
{
setvalueboolean($cid,(boolean)$funktionswert);
}
if(($meldezustand==4)&&(IPS_GetName($cid)=='Sabotage'))
{
setvalueboolean($cid,(boolean)$funktionswert);
}
}
}
}
//Umsetzung der Meldepunkte auf IP-Symcon Variablen
if(($meldepunktnummer==72)&&($meldezustand==0))
{
//Scharf-Änderung nur bei Zustandsänderung
if(getvalueinteger(41393 /*[EMA\Anlagenzustand]*/)<>(int)$funktionswert)
{
SetValueInteger(57590 /*[EMA\Anlagenzustand vorher]*/, GetValueInteger(41393 /*[EMA\Anlagenzustand]*/));
setvalueinteger(41393 /*[EMA\Anlagenzustand]*/,(int)$funktionswert);
//Unscharf
if((int)$funktionswert==0)
{
IPS_RunScript(27945 /*[EMA\EMA Interne Steuerung\Unscharf]*/);
}
//INT-Scharf
if((int)$funktionswert==1)
{
IPS_RunScript(59763 /*[EMA\EMA Interne Steuerung\INT-Scharf]*/);
}
//EXT-Scharf
if((int)$funktionswert==2)
{
IPS_RunScript(27317 /*[EMA\EMA Interne Steuerung\EXT-Scharf]*/);
}
}
}
//-- Alarm --
if(($meldepunktnummer==72)&&($meldezustand==1))
{
if($funktionswert==1)
{
setvalueboolean(18384 /*[EMA\EMA Interne Steuerung\EMA Alarm]*/,true);
IPS_RunScript(52973 /*[EMA\EMA Interne Steuerung\EMA Alarm]*/ );
}
else
{
//Alarm rückgesetzt
SetValueString(32179 /*[EMA\Alarme]*/, "");
setvalueboolean(18384 /*[EMA\EMA Interne Steuerung\EMA Alarm]*/,false);
}
}
//--Scharfschaltemöglichkeit--
if(($meldepunktnummer==72)&&($meldezustand==5))
{
switch ($funktionswert) {
case "0":
setvalueboolean(26247 /*[EMA\Intern Scharf möglich]*/,false);
setvalueboolean(39361 /*[EMA\Extern Scharf möglich]*/,false);
break;
case "1":
setvalueboolean(26247 /*[EMA\Intern Scharf möglich]*/,true);
setvalueboolean(39361 /*[EMA\Extern Scharf möglich]*/,false);
break;
case "2":
setvalueboolean(26247 /*[EMA\Intern Scharf möglich]*/,false);
setvalueboolean(39361 /*[EMA\Extern Scharf möglich]*/,true);
break;
case "3":
setvalueboolean(26247 /*[EMA\Intern Scharf möglich]*/,true);
setvalueboolean(39361 /*[EMA\Extern Scharf möglich]*/,true);
break;
}
}
//--Störmeldungen--
if(($meldepunktnummer==72)&&($meldezustand==4))
{
SetValueString(34887 /*[EMA\Störungen]*/,$stoerung[$funktionswert]);
if($funktionswert>0)
{
IPS_RunScriptWaitEx(21334 /*[Meldungen\Meldungen]*/, array('action' => 'addupdate', 'text' => date('d.m.Y H:i:s ',time()).'Sammelstörung EMA', 'expires' => time() + 43200, 'removable' => true, 'msgnum' => 4, 'img' => 'Warning'));
IPS_ExecuteEx("C:/Program Files/nircmd/nircmd.exe", "beep 4000 1000", false, false, 0);
}
}
//Lebenszeichen setzen
SetValueInteger(46296 /*[EMA\EMA Interne Steuerung\EMA Lebenszeichen]*/,time());
?>
Das ist mit sicherheit nicht universell verwendbar, da dir ganze viele IPS Objekte fehlen, aber zumindest solltest du jetzt eine Idee haben, wie das funktioniert, oder?