Fehler im Script aber wo?!

Hallo zusammen,
ich habe folgendes Script geschrieben ab das funktioniert nicht kann mir jemand sagen wieso?!

Folgende String Variablen habe ich in IPS angelegt:

  • SMSWitch_Sender
  • SMSWitch_Content
  • Text

Und folgende Bool Variablen habe ich in IPS angelegt:

  • Erfolg
  
<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : SMS_Senden.ips.php
Trigger  :
Interval :
*/

SetValueString("SMSWitch_Sender", "+4917329xxxxx");
SetValueString("SMSWitch_Content", "Hauskontrolle: Test SMS!");

    if ($IPS_SENDER == "SMSWitch")
   {
    $Text = $SMSWitch_Content." Dein Server";
    $Erfolg = SMSWitch_SendMessage(10474, $SMSWitch_Sender, $Text);
    if ($Erfolg)
       SetValueString("SMSStatus", "SMS versendet");
    else
       SetValueString("SMSStatus", "Senden fehlgeschlagen");
    }
?>
 

Hoffe mir kann jemand helfen!

Gruß
Tim

PS. Die Telefonnummer wurde natürlich nur für das Forum zensiert :wink:

Hallo Tim,

nur so beim drüberschauen, ohne Test, denke ich fehlen schon mal bei der else Bedingung die Klammern.


if ($IPS_SENDER == "SMSWitch") 
{ 
$Text = $SMSWitch_Content." Dein Server"; 
$Erfolg = SMSWitch_SendMessage(10474, $SMSWitch_Sender, $Text); 
if ($Erfolg) 
{
SetValueString("SMSStatus", "SMS versendet"); 
}
else 
{
SetValueString("SMSStatus", "Senden fehlgeschlagen"); 
}
} 


Gruß Thomas

Das war leider nicht der Fehler! Habe ich gerade aber auch nochmal ausprobiert!

Das Problem ist das er nicht über diese Anweisung hinwegkommt:


if ($IPS_SENDER == "SMSWitch")

Was macht denn das Script, bleibt es stehen und es kommt dann ein TimeOut?
Oder gibt es eine Fehlermeldung?

Macht gar nichts!


SetValueString("SMSWitch_Sender", "+4917329xxxxx"); 
SetValueString("SMSWitch_Content", "Hauskontrolle: Test SMS!"); 

Das geht noch! Und dann kommt diese Zeile

if ($IPS_SENDER == "SMSWitch") 

Alles was danach kommt wird nicht abgearbeitet! Hab mal einen test gemacht mit


SetValueString("Test", "Hallo Welt"); 

Das wurde dann nicht mehr abgearbeitet! Natürlich gibt es die String Variable Test!

Mal ne ganz blöde Frage, hast du die dll von Toni auch installiert?

:smiley: Ja habe ich !

Das:


$Erfolg = SMSWitch_SendMessage(10474, "+4917329xxxxx", "Das ist ein test"); 

Funktioniert ja einzelnt!

Also Tim werde mich jetzt mal in den Garten verdrücken, vieleicht schreibst Du an Toni mal ne PM, der Hilft Dir bestimmt.

Gruß Thomas

Was mir auffällt:
die lokale Variable „$SMSWitch_Content“
und die IPS-Variable „SMSWitch_Content“

sind zwei verschiedene Dinge

Oder?

Hallo Tim,

wenn Du etwas mit SetValueString(…) in eine Variable hineinschreibst, dann kannst Du es nur mit GetValueString(…) wieder herausholen.
Nur einfach eine gleichnamige $-Variable anzulegen weist ihr noch keinen Wert zu.

Die Variablen $SMSWitch_Content und $SMSWitch_Sender sind in Deinem Skript folglich leer!

Gruß
HJH

QUOTE=HJH;28969]Hallo Tim,

wenn Du etwas mit SetValueString(…) in eine Variable hineinschreibst, dann kannst Du es nur mit GetValueString(…) wieder herausholen.
Nur einfach eine gleichnamige $-Variable anzulegen weist ihr noch keinen Wert zu.

Die Variablen $SMSWitch_Content und $SMSWitch_Sender sind in Deinem Skript folglich leer!

Gruß
HJH[/QUOTE]

-,- und wie schreibe ich da jetzt was rein?

So?:


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : SMS_Senden.ips.php
Trigger  :
Interval :
*/

$SMSWitch_Sender = "+4917329xxxxx";
$SMSWitch_Content =  "Hauskontrolle: Alarm wurde ausgelöst! Einbruch Tür-Wintergarten.";

    if ($IPS_SENDER == "SMSWitch")
    {
    $Text = $SMSWitch_Content." Dein Server";
    $Erfolg = SMSWitch_SendMessage(10474, $SMSWitch_Sender, $Text);
    if ($Erfolg)
       SetValueString("SMSStatus", "SMS versendet");
    else
       SetValueString("SMSStatus", "Senden fehlgeschlagen");
    }


?>

geht nicht -,-

Also:


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : SMS_Senden.ips.php
Trigger  :
Interval :
*/

$SMSWitch_Sender = "+4917329xxxx";
$SMSWitch_Content =  "Hauskontrolle: Alarm wurde ausgelöst! Einbruch Tür-Wintergarten.";

echo $SMSWitch_Sender;
echo $SMSWitch_Content;

#if ($IPS_SENDER == "SMSWitch")
{
$Text = $SMSWitch_Content." Dein Server";

echo $Text;

$Erfolg = SMSWitch_SendMessage(10474, $SMSWitch_Sender, $Text);

echo $Erfolg;

if ($Erfolg)
    SetValueString("SMSStatus", "SMS versendet");
else
    SetValueString("SMSStatus", "Senden fehlgeschlagen");
}
?>

So gehts! Und wie mache ich das jetzt das ich da Variable Texte rein mache?Also Immer eine andere Fehlermeldung?!

Hallo Tim,

alle hilfsbereiten Forumsmitglieder freuen sich immer riesig, wenn so schöne, ausführliche Fehlerbeschreibungen kommen, wie z.B.

geht nicht -,-

Mit Execute kannst Du das nicht testen, da „Execute“ nun mal nicht „SMSWitch“ ist.

Ersetze zum Testen mal diese Zeile

if ($IPS_SENDER == "SMSWitch")

durch diese

if ($IPS_SENDER == "Execute")

oder durch diese

if (true)

Wie gesagt, das ist nur für den Test, damit Du weiterkommst.

Gruß
HJH

Sorry, ich bin etwas verzweifelt :o

Aber du hast mir SUPER geholfen!! Vielen Dank! Mein Script Funktioniert jetzt!! Und damit es auch andere die es vielleicht machen wollen so ist es richtig:


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : SMS_Senden.ips.php
Trigger  :
Interval :
*/
// Das hier erstmal nur zum Test!!!
SetValueString("SMSNummer", "+4917329xxxxx");
SetValueString("SMSInfo", "Hauskontrolle: Alarm wurde ausgelöst! Einbruch Tuer-Wintergarten.");
// Testzeilen ende

$SMSWitch_Sender = GetValueString("SMSNummer") ;
$SMSWitch_Content =  GetValueString("SMSInfo");

if ($IPS_SENDER == "Execute")
{
$Text = $SMSWitch_Content." Dein Server";
$Erfolg = SMSWitch_SendMessage(10474, $SMSWitch_Sender, $Text);
if ($Erfolg)
    SetValueString("SMSStatus", "SMS versendet");
else
    SetValueString("SMSStatus", "Senden fehlgeschlagen");
}
?>

DANKE an allen die mir hier wieder super geholfen haben!! So langsam verstehe ich die Programmierung! Ich befürchte aber ich gehe euch noch öfters auf den Geist!

Gruß und Danke
Tim

Hallo Tim,

Dein Skript funktioniert so, wie es jetzt ist, nur durch Starten von Hand (über den Execute-Button). Das ist bestimmt nicht das, was Du Dir vorgestellt hast!

Wodurch soll den Dein Skript normalerweise getriggert (gestartet) werden?

Irgendeine konkrete Vorstellung musst Du doch gehabt haben.

Bitte lies hierzu auch die Dokumentation zum Thema Variablen und Events.

Gruß
HJH

Die Vorstellung ist, das ich verschieden SMS vorgebe! Wenn jetzt zum Beispiel das Fenster geöffnet wir, ohne vorher den Alarm abzustellen, soll er eine bestimmte SMS versenden! Also möchte ich das Script mit einer Variable triggern oder aus einem andern Script aus ausführen, allerdings weiß ich noch nicht wie!
IPS_RunScript(„SMS_Senden“); Das geht nicht, keine Fehler es geht einfach nicht…

Ist auch völlig logisch - Wenn du dir die Anleitung durchgelesen hättest. ;).

mit dieser zeile

if ($IPS_SENDER == "Execute") 

fragst du ob das Script ausgeführt wurde weil der execute Button geklickt wurde. wurde er aber nicht. Das Script verhält sich so wie es soll. Es tut nichts.

Die Variable $SMSWitch_Content beinhaltet den Text einer eingehenden SMS und existiert nur, wenn das SMSWitch-Modul selbst das Script aufgerufen hat. Darum prüfe ich mit

if ($IPS_SENDER == "SMSWitch")

ob es so ist, um sicherzustellen, dass $SMSWitch_Content auch wirklich existiert. Es wurde aber nicht durch das SMSWitch aufgerufen. Das Script verhält sich so wie es soll. Es tut nichts.

Wenn du das Script aber für einen völlig anderen Zweck einsetzen willst, so musst du das Script umbauen, weil es ja nie durch den Execute-Button oder das SMSWitch selbst aufgerufen wird.

Für deinen Fall würde ich vorschlagen so ein Script zu verwenden:


$Nummer = '+4917329xxxxx';
$Text =  'Hauskontrolle: Alarm wurde ausgelöst! Einbruch Tuer-Wintergarten. Dein Server';

$Erfolg = SMSWitch_SendMessage(10474, $Nummer , $Text);
if ($Erfolg)
    SetValueString("SMSStatus", "SMS versendet");
else
    SetValueString("SMSStatus", "Senden fehlgeschlagen");

Jetzt musst du noch eine IPS-Variable vom Typ String anlegen und ihr den Namen „SMSStatus“ geben. Die anderen sind dann überflüssig. In „SMSStatus“ steht dann ob die SMS erfolgreich gesendet wurde. Wenn dich das nicht interessiert lass es weg:

$Nummer = '+4917329xxxxx';
$Text =  'Hauskontrolle: Alarm wurde ausgelöst! Einbruch Tuer-Wintergarten. Dein Server';
SMSWitch_SendMessage(10474, $Nummer , $Text);

Dann brauchst du sie auch nicht anlegen. Thats all

Für dein Problem mit dem Zuweisen von Text in Variablen könntest du dich mit der Einführung in Scrip-Programmierungin Tonis kleinem Programmierhandbuch befassen.

Ein Computer tut niemals das was du willst, sondern das was du ihm sagst! :wink:

Gruß,

Toni

Ah ok.

Ich habe es ja jetzt soweit das es alles geht wie ich das will! :smiley:

Mir war nur die Bedeutung dieser Zeile nicht klar, welche ich übrigens aus deiner Anleitung habe!! (Im Bespiel)

Schönes Teil hast du da gebastelt und funktioniert mit dem T610 und dem NoName Kabel tadellos und sofort!