Ankündigung

Einklappen
Keine Ankündigung bisher.

GSM-Modem zum SMS-Versenden nutzen

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • daviid
    antwortet
    So, hab mal bischen weiter gescripted, raus kam dabei folgendes:

    Code:
    #!/usr/bin/perl -w
    
    use CGI::Carp qw(fatalsToBrowser);
    use CGI;
    use Device::SerialPort;
    
    my $cgi = new CGI;
    
    $r_number=$cgi->param('number');
    $sms_text=$cgi->param('sms_text');
    
    my $schnittstelle = '/dev/ttyUSB-1-1';
    
    
    # HTTP HEADER
    print "content-type: text/html \n\n";
    
    
    #my $s_number = $cnum;
    #my $s_text = $ctext;
    
    #print $s_number;
    
    #print $Name;
    
    #ab hier nichts mehr ändern
    # Zyklischer Aufruf nach restart, empfang GA oder nach einstellung rrd (typisch 300sek).
    #$plugin_info{$plugname.'_cycle'}  = 25; 
    
    
    if( length($r_number) > 0 && length($sms_text) >0 )
    {
    	print 'receiver number: ' .$r_number;
    	print '<br/><br/>';
    	print 'SMS-Text: ' .$sms_text;
    	
    	$command_number = 'AT+CMGS="' .$r_number .'" \r';
    	$command_text = $sms_text .'<CTRL-Z>';
    	
    	my $serial = Device::SerialPort->new($schnittstelle) || die "can't open $schnittstelle! ($!)\n";
    	$serial->baudrate(9600);
    	$serial->parity("none");
    	$serial->databits(8);
    	$serial->stopbits(1);
    
    	$serial->write($command_number); #Befehl an das Modem senden
    	select(undef, undef, undef, 0.2);
    	$serial->write($command_text); #Befehl an das Modem senden
    }
    das script liegt jetzt im cgi-bin und die Variablen $r_number und $sms_text werden per get übergeben.

    Was mir jetzt noch fehlt is wie ich die richtige Adresse für die im Wiregate eingebaute serielle Schnittstelle heraus find, bzw wie die heißt.

    Und ob das wie ich das bei $command_number mit dem CR gemacht hab funtioniert?

    Und vor allem wie ich das Ascii Zeichen 26 hinter den SMS-Text hängen kann?


    Gruß
    David



    EDIT:
    Ich hab das Script jetzt mal laufen lassen, dann gibts folgenden Error:
    Software error:
    can't open /dev/tty0! at /usr/lib/cgi-bin/gsm-sms.pl line 42.

    For help, please send mail to this site's webmaster, giving this error message and the time and date of the error.
    An was kann das liegen?

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Leider lässt sich nicht alles über Sockets lösen und ein Device::SerialPort ist manchmal einfach einfacher .
    Socat hat da auch noch ein paar böse Fallen auf Lager. Solange Du nicht alle 5 Sekunden ne SMS senden willst kann man es auch ohne Socket machen.

    Ich würde dennoch hier ne Socket-Verbindung in einem qx oder system(socat ...) unterbringen.
    Das macht die Auswertung der Antwort von der seriellen etwas einfacher. Vgl. dazu mal SVN->Tools->IEC60256. Das funktioniert super, der Ansatz kam damals von jemand anderem. Bei den Plugins stellt sich bei mir mittlerweile der Verdacht ein dass Socketverbindungen auch potentielle Speicherlecks sind .. Kann aber auch Zufall sein oder an meiner Vorliebe für etliche verschiedene Subs liegen.

    Einen Kommentar schreiben:


  • daviid
    antwortet
    Von mir aus kann man das gerne über einen Socket lösen.

    Gibts da schon ein Plugin in dem ich spicken kann?

    Zu dem biderektionalen, dass mit dem ">" kann man laut Doku auch durch ein kurzes warten von 100ms weg lassen, aber die Bestätigung in Form des "OK"s hätte ich doch gerne, das sollte sich doch eigentlich machen lassen, oder?


    Gesteuert wird über ganz normale AT-Kommandos, die explizite Kommando-Liste gibts hier: http://webs.uvigo.es/jagfernandez/ET...User_guide.pdf


    Gruß
    David

    Einen Kommentar schreiben:


  • swiss
    antwortet
    @daviid: Warst du in mienem Plugin spicken

    Naja ehrlich gesagt würde ich versuchen das ganze übereinen Socket zu lösen. Ich weiss nicht warum aber mir scheint es so, als sei seit dem ComfoAir-Plugin die Mode aufgekommen direkt an der seriellen Schnittstelle zu fummeln. Habe in letzter Zeit schon ein paar solche Plugins gesehen. Das würde ich aber in jedem Fall wenn immer möglich vermeiden und einen Socket zwischenschalten.

    Hast du eine Doku zu dem GSM-Modem? Sollte sich doch relativ leicht realisieren lassen

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Nur mal kurz geantworteet da im Moment keine Zeit.

    Das geht schon, aber meine bisherigen Erfahrungen mit bidirektionaler Kommunikation mit dem seriellen Port zeigen eigentlich dass man es lassen sollte wenn es auch anders geht. ich würde mir nen billigen UMTS-Stick besorgen (max. 20€) und den oben genannten Weg nehmen.

    Falls Du doch auf Basteln Lust hast dann wäre einer der Threads zur "Zählerabfrage" ganz hilfreich, dort habe ich und andere ein paar Codes gepostet wo bidirektional mit der Schnittstelle kommuniziert wird. Falls ich morgen nochmal Zeit habe kann ich da ein Beispiel posten.

    Das ausführen des Plugins kannst du mir einem plugin_subscribe (Forensuche) machen und durch eine GA auslösen lassen. Was möchtest Du denn über SMS signalisieren lassen?

    Gruß

    Einen Kommentar schreiben:


  • daviid
    antwortet
    Naja, das hilft mir eigentlich nicht weiter, ich bin eher auf der Suche nach einer Möglichkeit aus einem Plugin was an die serielle Schnittstelle schicken zu können, das sieht momentan folgendermaßen aus:
    Code:
    my $schnittstelle = '/dev/ttyUSB-1-1';
    
    
    
    #ab hier nichts mehr ändern
    # Zyklischer Aufruf nach restart, empfang GA oder nach einstellung rrd (typisch 300sek).
    $plugin_info{$plugname.'_cycle'}  = 25; 
    
    use Device::SerialPort;
    
    my $serial = Device::SerialPort->new($schnittstelle) || die "can't open $schnittstelle! ($!)\n";
    $serial->baudrate(9600);
    $serial->parity("none");
    $serial->databits(8);
    $serial->stopbits(1);
    
    
    
    
    $serial->write($command); #Befehl an das Modem senden
    Bitte nicht auslachen

    Ich bin mir nur noch nicht sicher wie das Plugin den befehl zum Senden der SMS bekommen soll.
    Ich hatte mir gedacht irgendwie übers Netzwerk, so dass das eine Plugin eine Störmeldung produziert und die irgendwie an das SMS-Plugin weiterleitet, wie genau das gehen soll weiß ich aber nocht nicht.
    Hat da jemand Ideen?

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Für einen einfachen UMTS-Stick hab ich das hier:

    https://knx-user-forum.de/forum/supp...wiregate/21645

    Einen Kommentar schreiben:


  • daviid
    hat ein Thema erstellt [wiregate] GSM-Modem zum SMS-Versenden nutzen.

    GSM-Modem zum SMS-Versenden nutzen

    Moin ich hab mir auf eBay für 20€ nen MC-Technologies TC65 JavaTerminal geschossen.
    Ein GSM-Modem mit dem ich SMS versenden, und zwar nicht übers Internet oder per ISDN, sondern völlig unabhängig übers Handy-Netz.

    Soweit so gut, gesteuert wird das ganze per RS232 über AT-Befehle, und zwar folgendermaßen:

    Man sendet dem Modem folgendes:
    AT+CMGS="+49-handy-nummer",145 <CR>
    dieses Antwortet mit:
    >
    und wenn dieses ">" empfangen wird muss man den Text hinterher senden:
    SMS-Text <CTRL+Z>
    und danach kommt noch ein
    OK
    zurück

    Hat schon jemand sowas ähnliches als Plugin?

    Gruß
    David
Lädt...
X