From f113c564ef41f1a347815abbf90d64b0d5e33b33 Mon Sep 17 00:00:00 2001 From: Recolic <git@me.recolic.net> Date: Fri, 5 Apr 2024 20:09:56 -0700 Subject: [PATCH] .add-dockerfile --- README.md | 4 --- apiserver.py | 81 +-------------------------------------------- docker/README.md | 10 ++++++ docker/apiserver.py | 80 ++++++++++++++++++++++++++++++++++++++++++++ docker/dockerfile | 20 +++++++++++ 5 files changed, 111 insertions(+), 84 deletions(-) mode change 100755 => 120000 apiserver.py create mode 100644 docker/README.md create mode 100755 docker/apiserver.py create mode 100644 docker/dockerfile diff --git a/README.md b/README.md index 35ff3a8..6c45af9 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,3 @@ curl "http://localhost:8080/mO0c7JlqE1n5r/smsget" curl "http://localhost:8080/mO0c7JlqE1n5r/smsdel" ``` - - - - diff --git a/apiserver.py b/apiserver.py deleted file mode 100755 index b99ca36..0000000 --- a/apiserver.py +++ /dev/null @@ -1,80 +0,0 @@ -# pip3 install web.py -# -# Run this program like: python this.py 30801 -# Usage: curl "http://localhost:30801/mO0c7JlqE1n5r/smsget" -# Usage: curl "http://localhost:30801/mO0c7JlqE1n5r/smsdel" -# Modified: no telegram notify - -from usim800 import sim800 -import sys - -def sms_get_or_del(get_or_del): - # Param: True for get, False for del - # Return: message - gsm = sim800(baudrate=9600,path="/dev/ttyUSB0") - if get_or_del: - res_dict = gsm.sms.readAll() - result_str = "" - if len(res_dict) == 0: - result_str = "No SMS on this SIM." - else: - result_str = "SIM <b>17386011111</b><br />" - for k in res_dict: - num, sender, time, body = [res_dict[k][index] for index in [0,2,4,5]] - result_str += '<b>{}</b> {} {} {}<br />'.format(num, sender, time, body) - # with open('/tmp/debug', 'wb+') as f: - # f.write(result_str.encode("utf-8", "ignore")) - return result_str[-4000:] # Max: 4096 chars - else: - gsm.sms.deleteAllReadMsg() - return "Deleted all message on SIM" - -def send_666_to_12306(): - gsm = sim800(baudrate=9600,path="/dev/ttyUSB0") - print('Test send 666 to 12306...') - gsm.sms.send('12306','666') - -# import json,requests # callback: telegram api -# def telegram_notify(msg): -# url = "https://maker.ifttt.com/trigger/recolxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -# payload = { -# "value1": msg -# } -# headers = { -# "Content-Type": "application/json" -# } -# requests.post(url, data=json.dumps(payload), headers=headers) - -import web - -urls = ( - '/(.*)', 'hello' -) -app = web.application(urls, globals()) - -class hello: - def GET(self, uri): - if not uri.startswith('mO0c7JlqE1n5r'): - return "Wrong API key" - try: - action = uri.split('/')[1].lower() - if action == "smsget": - get_or_del = True - elif action == "smsdel": - get_or_del = False - elif action == "send12306": - send_666_to_12306() - return "Sent 666 to 12306, success" - else: - return "Wrong API usage. Expect smsget/smsdel" - msg = sms_get_or_del(get_or_del) - # telegram_notify(msg) - return '<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">' + "Done. Result:<br />" + msg - except Exception as e: - raise - # return "API Error: " + str(e) - -if __name__ == "__main__": - app.run() - - diff --git a/apiserver.py b/apiserver.py new file mode 120000 index 0000000..a27aff6 --- /dev/null +++ b/apiserver.py @@ -0,0 +1 @@ +docker/apiserver.py \ No newline at end of file diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 0000000..b858147 --- /dev/null +++ b/docker/README.md @@ -0,0 +1,10 @@ +# docker image for sms-remote-access + +``` +docker build -t recolic/sms --build-arg R_SEC_HMSAPI_KEY=$R_SEC_HMSAPI_KEY . + +docker run -d --restart always --log-opt max-size=10M --name rsms --device=/dev/ttyUSB0 -p 30801:30801 recolic/sms +``` + + + diff --git a/docker/apiserver.py b/docker/apiserver.py new file mode 100755 index 0000000..ea15bf0 --- /dev/null +++ b/docker/apiserver.py @@ -0,0 +1,80 @@ +# pip3 install web.py +# +# Run this program like: python this.py 30801 +# Usage: curl "http://localhost:30801/_PLACEHOLDER_APIKEY_/smsget" +# Usage: curl "http://localhost:30801/_PLACEHOLDER_APIKEY_/smsdel" +# Modified: no telegram notify + +from usim800 import sim800 +import sys + +def sms_get_or_del(get_or_del): + # Param: True for get, False for del + # Return: message + gsm = sim800(baudrate=9600,path="/dev/ttyUSB0") + if get_or_del: + res_dict = gsm.sms.readAll() + result_str = "" + if len(res_dict) == 0: + result_str = "No SMS on this SIM." + else: + result_str = "SIM <b>17386011111</b><br />" + for k in res_dict: + num, sender, time, body = [res_dict[k][index] for index in [0,2,4,5]] + result_str += '<b>{}</b> {} {} {}<br />'.format(num, sender, time, body) + # with open('/tmp/debug', 'wb+') as f: + # f.write(result_str.encode("utf-8", "ignore")) + return result_str[-4000:] # Max: 4096 chars + else: + gsm.sms.deleteAllReadMsg() + return "Deleted all message on SIM" + +def send_666_to_12306(): + gsm = sim800(baudrate=9600,path="/dev/ttyUSB0") + print('Test send 666 to 12306...') + gsm.sms.send('12306','666') + +# import json,requests # callback: telegram api +# def telegram_notify(msg): +# url = "https://maker.ifttt.com/trigger/recolxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +# payload = { +# "value1": msg +# } +# headers = { +# "Content-Type": "application/json" +# } +# requests.post(url, data=json.dumps(payload), headers=headers) + +import web + +urls = ( + '/(.*)', 'hello' +) +app = web.application(urls, globals()) + +class hello: + def GET(self, uri): + if not uri.startswith('_PLACEHOLDER_APIKEY_'): + return "Wrong API key" + try: + action = uri.split('/')[1].lower() + if action == "smsget": + get_or_del = True + elif action == "smsdel": + get_or_del = False + elif action == "send12306": + send_666_to_12306() + return "Sent 666 to 12306, success" + else: + return "Wrong API usage. Expect smsget/smsdel" + msg = sms_get_or_del(get_or_del) + # telegram_notify(msg) + return '<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">' + "Done. Result:<br />" + msg + except Exception as e: + raise + # return "API Error: " + str(e) + +if __name__ == "__main__": + app.run() + + diff --git a/docker/dockerfile b/docker/dockerfile new file mode 100644 index 0000000..7f8a61e --- /dev/null +++ b/docker/dockerfile @@ -0,0 +1,20 @@ +from ubuntu:22.04 +label org.opencontainers.image.authors="docker.pub@me.recolic.net" + +arg DEBIAN_FRONTEND=noninteractive +arg R_SEC_HMSAPI_KEY=PleaseChangeMe +run apt update && apt install -y python3 python3-pip wget +# For sms-remote-access, requires --device=/dev/ttyUSB0 +run pip install web.py usim800 +# # For door-watchdog, requires --device=/dev/tty0 +# run pip install smartrent pytz + +copy apiserver.py / +run sed -i s/_PLACEHOLDER_APIKEY_/${R_SEC_HMSAPI_KEY}/g /apiserver.py + +# Download latest version of usim800, not published to pip yet +run wget https://raw.githubusercontent.com/Bhagyarsh/usim800/master/usim800/Sms/sms.py -O /tmp/sms.py && \ + find /usr -name sms.py -exec cp /tmp/sms.py '{}' ';' + +cmd python3 /apiserver.py 30801 + -- GitLab