78 lines
3.2 KiB
Python
Executable File
78 lines
3.2 KiB
Python
Executable File
#!/usr/bin/python3
|
|
# encoding: utf-8
|
|
'''
|
|
notify -- termux notification
|
|
Send sms or notification to a smartphone
|
|
@author: deunix
|
|
@contact: deuxnix@e-educ.fr
|
|
'''
|
|
|
|
import os, sys, ssl, json
|
|
|
|
from argparse import ArgumentParser
|
|
import paho.mqtt.publish as publish
|
|
|
|
CA_CERTS = """
|
|
-----BEGIN CERTIFICATE-----
|
|
EAYDVQQKDAllLWVkdWMuZnIxDDAKBgNVBAsMA29yZzESMBAGA1UEAwwJZS1lZHVj
|
|
LmZyMR0wGwYJKoZIhvcNAQkBFg5yb290QGUtZWR1Yy5mcjAeFw0yMDA2MTUwNzMw
|
|
MjVaFw0zMDA2MTMwNzMwMjVaMH4xCzAJBgNVBAYTAkZSMQswCQYDVQQIDAJPQzEN
|
|
MAsGA1UEBwwEQUxCSTESMBAGA1UECgwJZS1lZHVjLmZyMQwwCgYDVQQLDANvcmcx
|
|
EjAQBgNVBAMMCWUtZWR1Yy5mcjEdMBsGCSqGSIb3DQEJARYOcm9vdEBlLWVkdWMu
|
|
ZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCesN2Xt6uKezWj55gK
|
|
qBxzqyIe06GQqerGXWMQhdP5KiSP1PKRZVBcZzze0A//Qcd/f204CTu1P5Qj9pcG
|
|
2LIgGiH5r89j2cyvKDtgbwYT2HdWAJtqnI1d9LWl2RLLaaKijmwJl0rhFdOojxsz
|
|
s09sdXq3aSkpYG8f5y166jRPOCusOC+OdnqOJObVUWYI25gQUJ4KYd13oMVmCB90
|
|
tsqpjLcWa3y/sZ7ngYJr2EzFDpGv299dqgw+fVuxeOgMvlCllw6mgXenegjyHRZP
|
|
9BS5742LIdDsc11BcA4bEW97+M7gZg/s0hPJim5oZqXdYJFZ5VFK7GQuyah3euHw
|
|
V97PAgMBAAGjUzBRMB0GA1UdDgQWBBRb1QVCTMLstcT9rClf106cLrK2lTAfBgNV
|
|
HSMEGDAWgBRb1QVCTMLstcT9rClf106cLrK2lTAPBgNVHRMBAf8EBTADAQH/MA0G
|
|
CSqGSIb3DQEBCwUAA4IBAQALmdJCtU3k5OKYkA3iiriW5NVya7XplmcGMg4KMtRL
|
|
E3kb6yS6sk7Msri1YNA/6noWSHAZIDfBmoadrCNm4XB/
|
|
-----END CERTIFICATE-----
|
|
"""
|
|
|
|
def publish_message(topic, payload, host='127.0.0.1', port=1883, auth={}, ca_certs=None):
|
|
publish.single(topic, payload.encode('utf_8'), qos=0, hostname=host, port=port, auth=auth, \
|
|
tls={'ca_certs': ca_certs, 'tls_version': ssl.PROTOCOL_TLSv1_2} if ca_certs else None,)
|
|
|
|
def main():
|
|
try:
|
|
parser = ArgumentParser()
|
|
parser.add_argument("-H", "--host", dest="host", action="store", type=str, default="broker.emqx.io")
|
|
parser.add_argument("-P", "--port", dest="port", action="store", type=int, default=1883)
|
|
parser.add_argument("-u", "--user", dest="user", action="store", type=str, default='emqx')
|
|
parser.add_argument("-p", "--password", dest="password", action="store", type=str, default='public')
|
|
parser.add_argument("-a", "--apikey", dest="apikey", action="store", type=str, required=True)
|
|
parser.add_argument("-m", "--method", dest="method", action="store", type=str, default='notify')
|
|
parser.add_argument("-s", "--phone", dest="phone", action="store", type=str, default='')
|
|
parser.add_argument("-t", "--text", dest="message", action="store", type=str, required=True)
|
|
parser.add_argument("--tls", dest="ca_certs", action="store_true", default=False, help="--tls if ca certification")
|
|
|
|
args = parser.parse_args()
|
|
|
|
topic = args.apikey + '/pub/' + args.method
|
|
payload = { 'msg': args.message };
|
|
if args.method=='sms':
|
|
payload['mobile'] = args.phone.split(',')
|
|
|
|
publish_message(
|
|
topic,
|
|
json.dumps(payload),
|
|
host=args.host,
|
|
port=args.port,
|
|
auth={'username': args.user, 'password': args.password },
|
|
ca_certs=CA_CERTS if args.ca_certs else None,
|
|
)
|
|
return 0
|
|
except KeyboardInterrupt:
|
|
return 0
|
|
except Exception as e:
|
|
print("notify error", e)
|
|
return 2
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|
|
|
|
|