提交 b0af1fc8 authored 作者: blu's avatar blu

dingbot

上级 fcbb4ee4
...@@ -6,13 +6,27 @@ import base64 ...@@ -6,13 +6,27 @@ import base64
import urllib.parse import urllib.parse
import requests import requests
import os, json import os, json
import datetime
from database import db_session from database import db_session
from models import Terminal from models import Terminal
import paho.mqtt.client as mqtt
import logging
import pdb, traceback, sys, socket
logger = logging.getLogger(__file__)
logger.setLevel(logging.INFO)
ch = logging.StreamHandler()
ch.setFormatter(logging.Formatter(('[%(asctime)s][ota][%(lineno)d][%(levelname)s] %(message)s')))
logger.addHandler(ch)
SECRET = os.getenv('SECRET', 'SEC3219d0b06510f560349170c4d571b8fd10a5dfa616d4f9ef5494f63add766d65') # SECf8938911f24df40a0b86b711179fa7fc8ba88eb5d82e4e9f07bc03b5f29e8f6a SECRET = os.getenv('SECRET', 'SEC3219d0b06510f560349170c4d571b8fd10a5dfa616d4f9ef5494f63add766d65') # SECf8938911f24df40a0b86b711179fa7fc8ba88eb5d82e4e9f07bc03b5f29e8f6a
TOKEN = os.getenv("TOKEN", '3bb560ac5a3ee5943aeeb21c452162a3f23c44d675b42935c56f6685aceb4153') #'3d72d0b376f8061b9cae44c1d1048221bc19e245a631ef31fa195f89fca9215d') TOKEN = os.getenv("TOKEN", '3bb560ac5a3ee5943aeeb21c452162a3f23c44d675b42935c56f6685aceb4153') #'3d72d0b376f8061b9cae44c1d1048221bc19e245a631ef31fa195f89fca9215d')
API_ADDR= os.getenv('API', 'https://oapi.dingtalk.com/robot/send') API_ADDR= os.getenv('API', 'https://oapi.dingtalk.com/robot/send')
API_TPL = API_ADDR+"?access_token={}&timestamp={}&sign={}" API_TPL = API_ADDR+"?access_token={}&timestamp={}&sign={}"
MQTT_HOST='evcloudsvc.ilabservice.cloud'
MQTT_PORT=11883
MQTT_USER='admin'
MQTT_PASSWORD='vJ3zHqWrHbrqxVMT'
app = Flask(__name__, app = Flask(__name__,
static_url_path='', static_url_path='',
...@@ -21,6 +35,7 @@ app = Flask(__name__, ...@@ -21,6 +35,7 @@ app = Flask(__name__,
class DingBot: class DingBot:
secret = None secret = None
token = None token = None
client = None
def __init__(self, token, secret): def __init__(self, token, secret):
self.secret = secret self.secret = secret
self.token = token self.token = token
...@@ -41,10 +56,63 @@ class DingBot: ...@@ -41,10 +56,63 @@ class DingBot:
'text': text 'text': text
}} }}
r = requests.post(url, json = body) r = requests.post(url, json = body)
print(r.status_code, r.text) logger.info("{}, {}".format(r.status_code, r.text))
def destroy(self): def destroy(self):
pass pass
# The callback for when the client receives a CONNACK response from the server.
@staticmethod
def on_connect(client, userdata, flags, rc):
now = datetime.datetime.now()
logger.info("Connected with result code "+str(rc))
topic = 'evsuits/report/evcloudsvc'
client.subscribe(topic, qos=1)
logger.info('subscribed to {}'.format(topic))
# The callback for when a PUBLISH message is received from the server.
@staticmethod
def on_message(client, userdata, msg):
payload = msg.payload.decode('utf-8')
logger.info(msg.topic+" " + payload)
if userdata:
try:
jd = json.loads(payload)
userdata.handle(jd)
except Exception as e:
logger.error('exception in process message: {}'.format(e))
#extype, value, tb = sys.exc_info()
# traceback.print_exc()
# pdb.post_mortem(tb)
@staticmethod
def on_disconnect(client, userdata, rc):
logger.info("disconnected")
def handle(self, jd):
self.send_msg('alarm', json.dumps(jd))
def __init__(self, token, secret, host=MQTT_HOST, port=MQTT_PORT):
'''
Parameters
'''
self.host=host
self.port=port
self.token=token
self.secret = secret
try:
self.client = mqtt.Client("evb-dingbot", userdata=self)
if MQTT_USER and MQTT_PASSWORD:
self.client.username_pw_set(username=MQTT_USER,password=MQTT_PASSWORD)
self.client.on_connect = DingBot.on_connect
self.client.on_message = DingBot.on_message
self.client.connect_async(self.host, self.port, 30)
self.client.loop_start()
except Exception as e:
logger.error('exception in init:', e)
extype, value, tb = sys.exc_info()
traceback.print_exc()
pdb.post_mortem(tb)
@app.teardown_appcontext @app.teardown_appcontext
def shutdown_session(exception=None): def shutdown_session(exception=None):
db_session.remove() db_session.remove()
...@@ -53,13 +121,13 @@ DINGBOT = DingBot(TOKEN, SECRET) ...@@ -53,13 +121,13 @@ DINGBOT = DingBot(TOKEN, SECRET)
@app.route('/') @app.route('/')
def index(): def index():
ret = 'ok'
name = request.args.get("name", "World") name = request.args.get("name", "World")
DINGBOT.send_msg('test', 'this is a test') DINGBOT.send_msg('test', 'this is a test')
term = Terminal.query.filter(Terminal.sn == 'SNaaaaaa').first() # term = Terminal.query.filter(Terminal.sn == 'SNaaaaaa').first()
ret = 'ok' # if term:
if term: # ret = term.sn
ret = term.sn # logger.info(term)
print(term)
return ret return ret
@app.route('/addterminal', methods=['POST']) @app.route('/addterminal', methods=['POST'])
def add_terminal(): def add_terminal():
......
...@@ -142,8 +142,6 @@ class OTAClient: ...@@ -142,8 +142,6 @@ class OTAClient:
self.client.username_pw_set(username=self.username, password=self.password) self.client.username_pw_set(username=self.username, password=self.password)
self.client.on_connect = self.on_connect self.client.on_connect = self.on_connect
self.client.on_message = self.on_message self.client.on_message = self.on_message
#self.client.loop_start()
#self.client.connect_async(self.host, self.port, 30)
def run(self): def run(self):
retry = 0 retry = 0
...@@ -164,6 +162,7 @@ class OTAClient: ...@@ -164,6 +162,7 @@ class OTAClient:
logger.error("updater exiting since network failure") logger.error("updater exiting since network failure")
def run_nonblock(self): def run_nonblock(self):
self.client.connect_async(self.host, self.port, 30)
self.client.loop_start() self.client.loop_start()
def download(self, url): def download(self, url):
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论