Hallo,
mir wurde geholfen ein Skript zur Abfrage einer Empfangenen SMS aus einem Mobile-Baustein zu realisieren. Zur Programmierung haben wir ein Notebook benutzt auf dem leider noch ein älteres IPS installiert ist, ich glaube ist 2.6.
Nun hab ich das Skript und die Variable auf meinem 3.1 System eingerichtet, und…:eek: …geht nicht.
Ich vermute es liegt an dem if ($IPS_VALUE{0} == ‚+‘) //wenn an erster stelle ein „+“ - finde aber nicht wie es anders geht.
$jahrhundert = 20;
$Arbeitsspeicher = getValueString(22697 /*[Objekt #22697 existiert nicht]*/ ); //hole Zustand von Variable - ist gerade an oder aus?
if ($IPS_VALUE{0} == '+')
//if(isset($IPS_VALUE) && (substr($IPS_VALUE,0,1) == '+'))
{
$response = substr($IPS_VALUE,0,5);
switch($response)
{
case "+CMTI":
// Neue SMS eingegangen
// Z.B. +CMTI: "ME",1
// Auslesen mit AT+CMGR=1
$nachricht = "";
$nachricht = trim(substr($IPS_VALUE,12,2));
echo "Nachricht: ".$nachricht."
";
COMPort_SendText(49891 /*[Serial Port 08 / 3-7a RFID]*/ , "AT+CMGR=".$nachricht."
");
IPS_Sleep (500); // Warte auf '>' Antwort vom Modem
COMPort_SendText(49891 /*[Serial Port 08 / 3-7a RFID]*/ , "AT+CMGD=".$nachricht."
");
// IPS_Sleep (500); // Warte auf '>' Antwort vom Modem
break;
case "+CMGR":
// SMS lesen
#echo "MSG Beginn
";
if($Arbeitsspeicher == "") //ist Variable leer
{
$Arbeitsspeicher = $IPS_VALUE;
SetValueString(22697 /*[Objekt #22697 existiert nicht]*/,$Arbeitsspeicher);
}
#echo $Arbeitsspeicher."
";
break;
default:
//Wenn kein case zutrifft
echo "default
";
break;
}//switch
}//if
elseif(substr($IPS_VALUE,0,3) != "AT+")
//dann wenn IPS_VALUE ersten 3 zeichen nicht AT+ sind, mache hier weiter
{
$Arbeitsspeicher .= $IPS_VALUE;
// $Arbeitsspeicher = $Arbeitsspeicher.$IPS_VALUE; lang IPS_value angehangen an dem was im Arbeitsspeicher schon steht
SetValueString(22697 /*[Objekt #22697 existiert nicht]*/,$Arbeitsspeicher);
#echo "MSG weiter
";
#echo $Arbeitsspeicher."
";
if(substr($Arbeitsspeicher,-4,4)== "OKOK")
//wenn okok, dann ende der nachricht
{
#echo "MSG ende
";
//+CMGR: "REC UNREAD","+49199999999",,"15/1/19,16:18:25+04"NachrichtOKOK
$len = strlen($Arbeitsspeicher);
$string = substr($Arbeitsspeicher,21); //SMS ohne Anfangsquark
$posRufnummerEnde = strpos($string,"\"");
$rufnummer = substr($string,0,$posRufnummerEnde);
$string = substr($string,$posRufnummerEnde+1); //SMS ohne Anfangsquark und Rufnummer
$posDatumStart = strpos($string,"\"")+1;
$string = substr($string,$posDatumStart); //SMS ohne Anfangsquark und Rufnummer und Zwischengedoens
$posDatumEnde = strpos($string,"\"", $posDatumStart);
$datum = substr($string,0,$posDatumEnde);
$string = substr($string,$posDatumEnde+1); //SMS ohne Anfangsquark und Rufnummer und Zwischengedoens und Datum
$nachricht = substr($string,0,strlen($string)-4);
// Datum aufteilen
// 1 character position 10er
// 01234567890123456789 character position 1er
// 15/01/20,16:18:25+04 datumstring
$tag = substr($datum,6,2);
$monat = substr($datum,3,2);
$jahr = substr($datum,0,2);
$std = substr($datum,9,2);
$min = substr($datum,12,2);
$sec = substr($datum,15,2);
$addon = substr($datum,18,2);
#echo $std."
";
#echo $min."
";
#echo $sec."
";
#echo $addon."
";
echo "
SMS empfangen am ".$tag.".".$monat.".".$jahrhundert.$jahr." um ".$std.":".$min.":".
$sec." von ".$rufnummer." mit dem Inhalt: ".$nachricht."
";
//Vriablen leeren
SetValueString(22697 /*[Objekt #22697 existiert nicht]*/,"");
$rufnummer = $datum = $nachricht = $tag = $monat = $jahr = $std = $min = $sec = $addon = ""; //dies wird eigendlich nicht benötigt
}
}//else
?>
Habt Ihr ne Lösung für die Abfrage oder eine Idee ob es wo anders dran liegt?
Danke
Jan