mosquitto_ex: mosq_sub_cmd_v1.py

File mosq_sub_cmd_v1.py, 2.7 KB (added by krit, 12 days ago)
Line 
1#!/usr/bin/env python3
2# -*- coding: utf-8 -*-
3
4import paho.mqtt.client as paho
5from subprocess import Popen, PIPE
6import os
7import json
8
9import logging
10import datetime
11
12DEBUG = False
13
14############################################
15#    Initial logging to file               #
16############################################
17# Gets or creates a logger
18logger = logging.getLogger("mosq_sub_cmd_v1.py")
19# set log level
20logger.setLevel(logging.DEBUG)
21# define file handler and set formatter
22file_handler = logging.FileHandler('/tmp/mosq_sub_cmd_v1.log')
23formatter = logging.Formatter(
24    '%(asctime)s : %(levelname)s : %(name)s : %(message)s')
25file_handler.setFormatter(formatter)
26# add file handler to logger
27logger.addHandler(file_handler)
28logger.info("log start")
29
30def is_json(myjson):
31    try:
32        json_object = json.loads(myjson)
33    except ValueError as e:
34        if (DEBUG):
35            print("is_json() false")
36        logger.error(f"is_json() False = {e}")
37        return False
38    if (DEBUG):
39        print("is_json() True")
40    logger.info("is_json() True")
41    return True
42
43def on_subscribe(client, userdata, mid, granted_qos):
44    if (DEBUG):
45        print("Subscribed: "+str(mid)+" "+str(granted_qos))
46
47def process_id( resp ):
48    try:
49        if (DEBUG):
50            print("id=%s cmd=%s " %( resp['id'], resp['cmd']))
51        id = resp['id']
52        cmd = resp['cmd']
53        cmd = cmd
54        if (DEBUG):
55            print (cmd)
56        logger.info(cmd)
57        output = os.popen(cmd)
58    except Exception as e:
59        if (DEBUG):
60            print(f"An error at process_id() :{e}")
61        logger.error(f"process_id() error = {e}")
62    return
63
64def on_message(client, userdata, msg):
65    try:
66        text = msg.payload.decode("utf-8")
67        if (DEBUG):
68            print(f"\r\n{datetime.datetime.now()} {msg.topic} {msg.qos} {text}")
69        if ( is_json(text) == False ):
70            if (DEBUG):
71                print("not json")
72        else:
73            resp = json.loads(text)
74            if (DEBUG):
75                print( resp )
76            logger.info( resp )
77            process_id(resp)
78    except Exception as e:
79        if (DEBUG):
80            print(f"An error at on_message() :{e}")
81        logger.error(f"on_message() error = {e}")
82    return
83
84user = 'user1'
85password = 'pass1234'
86try:
87    client = paho.Client(client_id="20250210", clean_session=False)
88    client.username_pw_set(user, password=password)    #set username and password
89    client.on_subscribe = on_subscribe
90    client.on_message = on_message
91    client.connect("127.0.0.1", 1883)
92    client.subscribe("kmitlt108/cmd", qos=1)
93    client.loop_forever()
94except Exception as e:
95    if (DEBUG):
96        print(f"An error at mosq_sub :{e}")
97    logger.error(f"mosq_sub error = {e}")