+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 18
  1. #1
    Registriert seit
    Sep 2008
    Ort
    25k nördlich v. Hannover
    Beiträge
    1,008

    Standard Skript läuft unter IPS 2.6 aber nicht unter 3.1

    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... ...geht nicht.

    Ich vermute es liegt an dem if ($IPS_VALUE{0} == '+') //wenn an erster stelle ein "+" - finde aber nicht wie es anders geht.

    PHP-Code:
    $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."\r\n";
             
    COMPort_SendText(49891 /*[Serial Port 08 / 3-7a RFID]*/ "AT+CMGR=".$nachricht."\r\n");
             
    IPS_Sleep (500); // Warte auf '>' Antwort vom Modem
             
    COMPort_SendText(49891 /*[Serial Port 08 / 3-7a RFID]*/ "AT+CMGD=".$nachricht."\r\n");
             
             
    //         IPS_Sleep (500); // Warte auf '>' Antwort vom Modem
             
    break;
         case 
    "+CMGR":
           
    // SMS lesen
    #echo "MSG Beginn\r\n";
           
    if($Arbeitsspeicher == ""//ist Variable leer
            
    {
               
    $Arbeitsspeicher $IPS_VALUE;
               
    SetValueString(22697 /*[Objekt #22697 existiert nicht]*/,$Arbeitsspeicher);
           }
    #echo $Arbeitsspeicher."\r\n";
           
           
    break;
         default:
         
    //Wenn kein case zutrifft
    echo "default \r\n";
           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\r\n";
    #echo $Arbeitsspeicher."\r\n";
        
    if(substr($Arbeitsspeicher,-4,4)== "OKOK")
        
    //wenn okok, dann ende der nachricht
        
    {
    #echo "MSG ende\r\n";
           //+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."\r\n";
    #echo $min."\r\n";
    #echo $sec."\r\n";
    #echo $addon."\r\n";

    echo "\r\nSMS empfangen am ".$tag.".".$monat.".".$jahrhundert.$jahr." um ".$std.":".$min.":".
                    
    $sec." von ".$rufnummer." mit dem Inhalt: ".$nachricht."\r\n";

            
    //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
    Geändert von Brownson (26.01.15 um 13:31 Uhr) Grund: Telefonnummer aus Script entfernt

  2. #2
    Registriert seit
    May 2006
    Ort
    Hannover
    Beiträge
    3,034

    Moin Jan,

    fang mal mit $_IPS['VALUE'] anstatt $IPS_VALUE an und wenn das nicht hilft, welche Fehlermeldung in welcher Zeile?

    Die "neue" Schreibweise der Systemvariablen gilt schon ein paar Jahre.

    Und $IPS_VALUE{0} gibt es nicht, Alternative wäre z.B. substr, das nutzt du ja zwei Zeilen tiefer.
    Geändert von ralf (26.01.15 um 13:06 Uhr)
    MfG Ralf

  3. #3
    Registriert seit
    Sep 2014
    Ort
    Limeshain (Hessen)
    Beiträge
    5,278

    Hi Jan!

    An mehreren Stellen steht in deinem Skript "22697 /*[Objekt #22697 existiert nicht]*/", sollte das aktuell sein, dann ist das sicher auch ein Problem


    @Ralf: Dieses in geschweiften Klammern funktioniert schon. Siehe Test-Skript, welches "OK" ausgibt.
    PHP-Code:
    <?
    $test 
    "12345";

    if (
    $test{2} == 3) {
        echo 
    "OK";
    }
    ?>

    Grüße,
    Chris
    Geändert von Bayaro (26.01.15 um 13:23 Uhr) Grund: Beispiel-Skript für $var{0}
    IP-Symcon Module >> www.bayaro.net << Verfügbare Module: BatterieMonitor, BundesligaTabelle, Enigma2BY, HeizölPreise, Helios, Horoskop, HostMonitor, IPSInformations, MELCloud, Müllabfuhr, PJLink, RSS, TankerkönigSpritpreise, xREL
    IPS Unlimited, ~1200 Scripte, ~7000 Variablen

  4. #4
    Registriert seit
    Dec 2006
    Ort
    Oberkrämer bei Berlin
    Beiträge
    1,402

    Ja, "geht nicht" ist extrem mager.
    Außer den ganzen ($IPS_VALUE,X,Y) die schon recht merkwürdig sind, ist schon die zweite Zeile falsch.
    getValueString(22697 /*[Objekt #22697 existiert nicht]*/ )
    Es fehlt mehrfach die ID und Get wird groß geschrieben. Das kann nie unter 2.6 gelaufen sein.
    Geändert von Heidewinkler (26.01.15 um 13:22 Uhr) Grund: einfach zu langsam
    MfG: Heiner_________________IPS5.1, NUC-i5 Lüfterlos, SSD, Win10Home, 24/7; IPS-Mobile Android V5.1.0; FHZ1300PC: FS20, HMS100, KS300, PS50, FHT; WDE1; Harmony1100 + Wandlung einzelner FHT80TF in FS20 Adressen mit FS20Manager; 3x ChromoflexII + 14x IIIRC; DMX4ALL, ArtNet (Dimmer6); IPS-868: EKM, RGBW, WDT, JKM/Termojet; 1Wire über blauem DS9490R; HomeMatic: CCU3, LAN_Adapter, Hm + HmIP, Winmatic; XBee Pro: Roomba;

  5. #5
    Registriert seit
    Sep 2008
    Ort
    25k nördlich v. Hannover
    Beiträge
    1,008

    Die Variablen existieren nicht weil ich für das Forum die Datei von dem IPS 2.6 Rechner mit dem IPS 3.1 geöffnet habe. In der anderen hatte ich schon so viel probiert, aber natürlich auch die ID des Com-Ports wie auch der Variable angepasst.
    Fehlermeldung erhalte ich keine.

  6. #6
    Registriert seit
    Sep 2014
    Ort
    Limeshain (Hessen)
    Beiträge
    5,278

    Dann lass dir doch mit echo mal ein paar Variablen ausgeben an verschiedenen Stellen, damit du eingrenzen kannst wo es klemmt...
    Die echos siehst du ja dann im Meldungsfenster. Mach ein Prefix davor, dann kannste im Meldungsfenster filtern, falls zuviel durchläuft.

    -Chris-
    IP-Symcon Module >> www.bayaro.net << Verfügbare Module: BatterieMonitor, BundesligaTabelle, Enigma2BY, HeizölPreise, Helios, Horoskop, HostMonitor, IPSInformations, MELCloud, Müllabfuhr, PJLink, RSS, TankerkönigSpritpreise, xREL
    IPS Unlimited, ~1200 Scripte, ~7000 Variablen

  7. #7
    Registriert seit
    Sep 2008
    Ort
    25k nördlich v. Hannover
    Beiträge
    1,008

    Ja, hab ich ganz viele ECHOS eingebaut (z.B. echo "Zeile 7 : ".$Arbeitsspeicher." --\r\n"; ).
    Deshalb wollt ich euch auch nicht das verschluderte Skript senden, sondern hatte das Originale vom anderen Rechner geholt - nur blöderweise nicht daran gedacht die ID´s noch für Euch anzupassen (vons wegen der Falschmeldungen).
    Das GROSSE "G" vom Get war es auch nicht.
    Versuche gerade mit meinem super PHP-Wissen das if ($IPS_VALUE{0} == '+') zu ersetzen.

  8. #8
    Registriert seit
    Sep 2014
    Ort
    Limeshain (Hessen)
    Beiträge
    5,278

    Warum willst du das ersetzen? Kommt nicht immer ein + am Anfang?

    Was sagen die echos denn? Wo kommt etwas das nicht sein sollte? Wo kommt nichts?

    Sorry, aber wir müssen so doof Fragen, weil ist halt schlecht nachzustellen und so weiß halt keiner was bei dir nicht geht...Glaskugel mangel Ist halt problematisch mit einer Ferndiagnose...


    Grüße,
    Chris
    IP-Symcon Module >> www.bayaro.net << Verfügbare Module: BatterieMonitor, BundesligaTabelle, Enigma2BY, HeizölPreise, Helios, Horoskop, HostMonitor, IPSInformations, MELCloud, Müllabfuhr, PJLink, RSS, TankerkönigSpritpreise, xREL
    IPS Unlimited, ~1200 Scripte, ~7000 Variablen

  9. #9
    Registriert seit
    Sep 2008
    Ort
    25k nördlich v. Hannover
    Beiträge
    1,008

    Das die Ferndiagnose schwierig wird hab ich mir gedacht wenn nicht ein Befehl sichtbar ist der unter 3.1 nicht läuft. Ich bekomme ja auch keine Fehlermeldung.
    Ersetzen wollt ich den Befehl, da weiter oben etwas zweifel dazu aufkam.
    Ich werde mal was mit den Echos / Meldungen /... zusamen schreiben.

    Danke

    Jan - der leider auch keine Kugel aus Glas hat

  10. #10
    Registriert seit
    May 2006
    Ort
    Hannover
    Beiträge
    3,034

    Zitat Zitat von Bayaro Beitrag anzeigen
    @Ralf: Dieses in geschweiften Klammern funktioniert schon.
    Cool, das kannte ich noch nicht .
    MfG Ralf

Ähnliche Themen

  1. Läuft symcon unter OS X 10.10?
    Von Buzz2912 im Forum Allgemeine Diskussion
    Antworten: 37
    Letzter Beitrag: 01.03.15, 10:50
  2. IPS unter Windows 7 nicht mehr erreichbar.
    Von Uhlhorn im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 4
    Letzter Beitrag: 04.10.14, 15:42
  3. WF - BoolVar - Skript erzeugt immer Fehler unter V3.1 Stable
    Von remote-it im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 4
    Letzter Beitrag: 04.03.14, 18:55
  4. IPS Homecontrol läuft nicht unter 2.2
    Von IPS_nn im Forum ipsHomecontrol (abgekündigt)
    Antworten: 7
    Letzter Beitrag: 31.01.10, 23:28
  5. WIIPS 3.0b funktioniert nicht unter IPS 2.1
    Von khge im Forum IP-Symcon WIIPS
    Antworten: 5
    Letzter Beitrag: 29.09.09, 20:38