diff --git a/src/DummyClient.py b/src/DummyClient.py new file mode 100644 index 0000000..3482862 --- /dev/null +++ b/src/DummyClient.py @@ -0,0 +1,73 @@ +from loguru import logger +import os +import configparser +import json +import argparse +import importlib +import sys +import paho.mqtt.client as mqtt +from time import sleep + +DEFAULT_CONFIG_FILE = './config/dummyClientConfig.ini' + + + + +parser = argparse.ArgumentParser(description="DummyClient.py") +parser.add_argument('--operation', '-o', + help='Operation to perform.', + required=True) +parser.add_argument('--params', '-p', + help='JSON string with parameter for the selected operation, default: {}', + required=False, + default="{}") +parser.add_argument('--config', '-c', + help='configuration file, default: {}'.format(DEFAULT_CONFIG_FILE), + required=False, + default=DEFAULT_CONFIG_FILE) +parser.add_argument('--verbosity', '-v', + help='Minimal log level for output: DEBUG, INFO, WARNING, ..., default: DEBUG', + required=False, + default="DEBUG") +parser.add_argument('--nocolorize', '-n', + help='disable colored output (for cron)', + required=False, + action='store_true', + default=False) + +args = parser.parse_args() +operation = args.operation +params = json.loads(args.params) +logLevel = args.verbosity +noColorize = args.nocolorize + +config = configparser.ConfigParser() +config.read(args.config) + + +logger.remove() +logger.add(sys.stderr, colorize=(not noColorize), level=logLevel) + +logger.info("Start DummyClient") +try: + client = mqtt.Client() + if ("login" in config["mqtt"]) and ("password" in config["mqtt"]): + client.username_pw_set(config["mqtt"]["login"], config["mqtt"]["password"]) + client.connect(config["mqtt"]["broker"]) + client.loop_start() + logger.debug("mqtt loop started") + + opMod = importlib.import_module(operation) + logger.info(f"Operation {operation} loaded, about to perform operation") + opMod.perform(client, params) + logger.info("Operation returned") +except Exception as err: + logger.error("Exception: {}".format(str(err))) + raise err +finally: + logger.info("About to shutdown mqtt connection") + client.disconnect() + client.loop_stop() + logger.info("mqtt connection down") + + diff --git a/src/DummyEGM1.py b/src/DummyEGM1.py new file mode 100644 index 0000000..badf3bf --- /dev/null +++ b/src/DummyEGM1.py @@ -0,0 +1,64 @@ +from loguru import logger +from datetime import datetime +from time import sleep +import json +from random import random, sample + +TOPIC_PRE = "rd/set01" + +def sendCmd(client, cmd): + msg = { + "ts": str(datetime.now()), + "en": "EGM Test Experiment", + "ec": "Lorem ipsum dolor sit amet", + "es": cmd + } + topic = f"{TOPIC_PRE}/rig01/cmd" + client.publish(topic, json.dumps(msg)) + +def sendLog(client): + msg = { + "ts": str(datetime.now()), + "v": [ + { "n": "v1", "v": random() }, + { "n": "v2", "v": random() }, + { "n": "v3", "v": random() }, + { "n": "v4", "v": random() }, + { "n": "v5", "v": random() }, + { "n": "v6", "v": random() }, + ] + } + topic = f"{TOPIC_PRE}/rig01/log" + client.publish(topic, json.dumps(msg)) + +def sendValue(client): + msg = { + "ts": str(datetime.now()), + "dt": 100, + "v": sample(range(0xffffffff), 1000) + } + topic = f"{TOPIC_PRE}/rig01/dev05/md" + client.publish(topic, json.dumps(msg)) + + +def perform(client, params): + logger.info("Start") + sendCmd(client, "start") + + for i in range(10): + sendValue(client) + sleep(1.0) + sendValue(client) + sleep(1.0) + sendValue(client) + sleep(1.0) + sendValue(client) + sleep(1.0) + sendValue(client) + sleep(1.0) + sendValue(client) + sendLog(client) + sleep(1.0) + + logger.info("Stop") + sendCmd(client, "stop") diff --git a/src/config/dummyClientConfig.ini b/src/config/dummyClientConfig.ini new file mode 100644 index 0000000..64684c5 --- /dev/null +++ b/src/config/dummyClientConfig.ini @@ -0,0 +1,4 @@ +[mqtt] +login= +password= +broker=172.16.2.16