#!/usr/bin/python3 #!/usr/bin/python3 # # Module: smsalert.py # # Description: This module provides a utility for sending SMS text # messages to an SMS Gateway server. The gateway server sends the # text message to the supplied phone number. This class acts as a # library module that can be imported into and called from other # Python programs. # # Copyright 2022 Jeff Owrey # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see http://www.gnu.org/license. # # Revision History # * v10 released 16 March 2022 by J L Owrey; first release # #2345678901234567890123456789012345678901234567890123456789012345678901234567890 import telnetlib _DEFAULT_HOST = 'ai7nc-aprs-is-vm.local.mesh' _DEFAULT_PORT = '14580' _DEFAULT_SERVER = 'AI7NC-30' class smsalert: def __init__(self, callsign, passcode, host=_DEFAULT_HOST, \ port=_DEFAULT_PORT, server=_DEFAULT_SERVER, debug=False): """ Initialize an instance of this class. Parameters: callsign - amateur radio callsign of user (must be verified) passcode - passcode for verified callsign host - domain name or IP address of APRS-IS server port - port on which the APRS-IS server receives messages server - APRS service name debug - set equal to True for debug output Returns: nothing """ # Initialize class instance variables. self.callsign = callsign self.passcode = passcode self.host = host self.port = port self.server = server self.debug = debug ## end def def sendSMS(self, phone_number, text_message): """ Sends an SMS text message to the provided phone number. Parameters: phone_number - phone number to which to send the text message text_message - text message to be sent to the provided phone number Returns: True if successful, False otherwise """ initial_prompt = '# aprsc 2.1.8-gf8824e8' login_string = 'user ' + self.callsign + \ ' pass ' + self.passcode + '\n' login_result = self.server # For compatibility with python 2 telnet library, convert # utf-8 strings to bytes. initial_prompt = initial_prompt.encode() login_string = login_string.encode() login_result = login_result.encode() try: # Establish network connection to APRS-IS server. Look for tn = telnetlib.Telnet(self.host, self.port) tn.read_until(initial_prompt) # Login and verify passcode accepted. tn.write(login_string) response = tn.read_until(login_result) response = response.decode() # convert response to utf-8 string if self.debug: print('sms response: ' + response[0:]) if not response.find('verified'): print('sms error: unverified user') del tn return False # Format and send SMS message to SMS gateway. cmd = '%s>%s::SMSGTE:@%s %s\n' % \ (self.callsign, self.server, phone_number, text_message) if self.debug: print('sms cmd: ' + cmd) tn.write(cmd.encode()) del tn return True except Exception as exError: print("sms error: %s" % (exError)) return False ## end def ## end class def test_smsalert(): import time # Initialize a telnet instance. Default host, port, and server # automatically defined if not included in function call. sm = smsalert('KA7JLO', '17318', debug=True) # Send a text message to a phone number. message = 'Python script test message sent via AREDN: msg %d' % time.time() sm.sendSMS('5416021314', message) ## end def if __name__ == '__main__': test_smsalert()