<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: gsm code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 18 May 2008 05:21:27 GMT</pubDate>
    <description>DZone Snippets: gsm code</description>
    <item>
      <title>Send and receive SMS text messages with Ruby and a GSM/GPRS modem</title>
      <link>http://snippets.dzone.com/posts/show/3647</link>
      <description>&lt;code&gt;require 'serialport'&lt;br /&gt;require 'time'&lt;br /&gt;&lt;br /&gt;class GSM&lt;br /&gt;  &lt;br /&gt;  SMSC = "+447785016005"  # SMSC for Vodafone UK - change for other networks&lt;br /&gt;&lt;br /&gt;  def initialize(options = {})&lt;br /&gt;    @port = SerialPort.new(options[:port] || 3, options[:baud] || 38400, options[:bits] || 8, options[:stop] || 1, SerialPort::NONE)&lt;br /&gt;    @debug = options[:debug]&lt;br /&gt;    cmd("AT")&lt;br /&gt;    # Set to text mode&lt;br /&gt;    cmd("AT+CMGF=1")&lt;br /&gt;    # Set SMSC number&lt;br /&gt;    cmd("AT+CSCA=\"#{SMSC}\"")    &lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def close&lt;br /&gt;    @port.close&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def cmd(cmd)&lt;br /&gt;    @port.write(cmd + "\r")&lt;br /&gt;    wait&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def wait&lt;br /&gt;    buffer = ''&lt;br /&gt;    while IO.select([@port], [], [], 0.25)&lt;br /&gt;      chr = @port.getc.chr;&lt;br /&gt;      print chr if @debug == true&lt;br /&gt;      buffer += chr&lt;br /&gt;    end&lt;br /&gt;    buffer&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def send_sms(options)&lt;br /&gt;    cmd("AT+CMGS=\"#{options[:number]}\"")&lt;br /&gt;    cmd("#{options[:message][0..140]}#{26.chr}\r\r")&lt;br /&gt;    sleep 3&lt;br /&gt;    wait&lt;br /&gt;    cmd("AT")&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  class SMS&lt;br /&gt;    attr_accessor :id, :sender, :message, :connection&lt;br /&gt;    attr_writer :time&lt;br /&gt;    &lt;br /&gt;    def initialize(params)&lt;br /&gt;        @id = params[:id]; @sender = params[:sender]; @time = params[:time]; @message = params[:message]; @connection = params[:connection]&lt;br /&gt;    end&lt;br /&gt;    &lt;br /&gt;    def delete&lt;br /&gt;      @connection.cmd("AT+CMGD=#{@id}")&lt;br /&gt;    end&lt;br /&gt;    &lt;br /&gt;    def time&lt;br /&gt;      # This MAY need to be changed for non-UK situations, I'm not sure&lt;br /&gt;      # how standardized SMS timestamps are..&lt;br /&gt;      Time.parse(@time.sub(/(\d+)\D+(\d+)\D+(\d+)/, '\2/\3/20\1'))&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def messages&lt;br /&gt;    sms = cmd("AT+CMGL=\"ALL\"")&lt;br /&gt;    # Ugly, ugly, ugly!&lt;br /&gt;    msgs = sms.scan(/\+CMGL\:\s*?(\d+)\,.*?\,\"(.+?)\"\,.*?\,\"(.+?)\".*?\n(.*)/)&lt;br /&gt;    return nil unless msgs&lt;br /&gt;    msgs.collect!{ |m| GSM::SMS.new(:connection =&gt; self, :id =&gt; m[0], :sender =&gt; m[1], :time =&gt; m[2], :message =&gt; m[3].chomp) } rescue nil&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;destination_number = "+44 someone else"&lt;br /&gt;&lt;br /&gt;p = GSM.new(:debug =&gt; false)&lt;br /&gt;&lt;br /&gt;# Send a text message&lt;br /&gt;p.send_sms(:number =&gt; destination_number, :message =&gt; "Test at #{Time.now}")&lt;br /&gt;&lt;br /&gt;# Read text messages from phone&lt;br /&gt;p.messages.each do |msg|&lt;br /&gt;  puts "#{msg.id} - #{msg.time} - #{msg.sender} - #{msg.message}"&lt;br /&gt;  # msg.delete&lt;br /&gt;end&lt;/code&gt;</description>
      <pubDate>Thu, 08 Mar 2007 11:41:34 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3647</guid>
      <author>peter (Peter Cooperx)</author>
    </item>
    <item>
      <title>Python - SendSMS over BT and AT</title>
      <link>http://snippets.dzone.com/posts/show/3041</link>
      <description>// Send SMS over Bluetooth (AT Command)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import bluetooth&lt;br /&gt;&lt;br /&gt;sockfd = bluetooth.BluetoothSocket(bluetooth.RFCOMM)&lt;br /&gt;sockfd.connect(('00:00:00:00:00:00', 1)) # BT Address&lt;br /&gt;sockfd.send('ATZ\r')&lt;br /&gt;sockfd.send('AT+CMGF=1\r')&lt;br /&gt;sockfd.send('AT+CSCA="+393359609600"\r') # Client TIM ITA&lt;br /&gt;sockfd.send('AT+CMGS="+39xxxxxxxxxx"\r') # TO PhoneNumber&lt;br /&gt;sockfd.send('Messaggio da mandare...\n')&lt;br /&gt;sockfd.send(chr(26)) # CTRL+Z&lt;br /&gt;sockfd.close()&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 26 Nov 2006 21:31:03 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3041</guid>
      <author>whitetiger ()</author>
    </item>
    <item>
      <title>gps gsm location python s60</title>
      <link>http://snippets.dzone.com/posts/show/2029</link>
      <description>Hi Guys,&lt;br /&gt;&lt;br /&gt;I've just put together two smaller Python apps I've seen around in this discussion board.&lt;br /&gt;&lt;br /&gt;The resulting app prints 1) info obtained by a BT gps (i.e. $GPRMC sentence, but may change as you like) and 2) GSM cell id.&lt;br /&gt;&lt;br /&gt;My wish is to collect these info periodically (i.e. 2/3 minutes) and send them back via an HTTP POST to a specified host.... could anybody help? ;-)&lt;br /&gt;&lt;br /&gt;Thanks&lt;br /&gt;&lt;br /&gt;-Luca&lt;br /&gt;&lt;br /&gt;____________________________________&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Simple BT App&lt;br /&gt;#$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598, ,*10&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import socket,location,urllib&lt;br /&gt;&lt;br /&gt;class BTReader:&lt;br /&gt;&lt;br /&gt;def connect(self):&lt;br /&gt;self.sock=socket.socket(socket.AF_BT,socket.SOCK_STREAM)&lt;br /&gt;address,services=socket.bt_discover()&lt;br /&gt;print "Discovered: %s, %s"%(address,services)&lt;br /&gt;target=(address,services.values()[0])&lt;br /&gt;print "Connecting to "+str(target)&lt;br /&gt;self.sock.connect(target)&lt;br /&gt;&lt;br /&gt;def readposition(self):&lt;br /&gt;try:&lt;br /&gt;buffer=""&lt;br /&gt;ch = self.sock.recv(1)&lt;br /&gt;while(ch !='\n'):&lt;br /&gt;buffer+=ch&lt;br /&gt;ch = self.sock.recv(1)&lt;br /&gt;# print buffer&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (buffer[0:6]=="$GPRMC"):&lt;br /&gt;(GPRMC,utc,status,lat,latns,lon,lonew,knots,course,date,xx1,xx2)=buffer.split(",")&lt;br /&gt;return "GPS (%s,%s,%s,%s,%s)"%(utc,lat+latns,lon+lonew,knots,course)&lt;br /&gt;except Error:&lt;br /&gt;return "Error!\n"&lt;br /&gt;return ""&lt;br /&gt;&lt;br /&gt;def close(self):&lt;br /&gt;self.sock.close()&lt;br /&gt;&lt;br /&gt;class GSM_loc:&lt;br /&gt;&lt;br /&gt;def upd(self):&lt;br /&gt;self.loc = location.gsm_location()&lt;br /&gt;return "GSM (MCC:%s MNC:%s LAC:%s CID=%s)"%(self.loc[0], self.loc[1], self.loc[2], self.loc[3])&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;gsm = GSM_loc()&lt;br /&gt;&lt;br /&gt;bt=BTReader()&lt;br /&gt;bt.connect()&lt;br /&gt;&lt;br /&gt;i=0&lt;br /&gt;while (i&lt;15):&lt;br /&gt;print gsm.upd()&lt;br /&gt;print bt.readposition()&lt;br /&gt;i+=1&lt;br /&gt;&lt;br /&gt;bt.close()</description>
      <pubDate>Mon, 15 May 2006 21:09:44 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2029</guid>
      <author>ollip1 ()</author>
    </item>
  </channel>
</rss>
