From d04824c34f3b789e4a01fd52a28b68c221c81b6c Mon Sep 17 00:00:00 2001 From: Laurent Dinclaux Date: Sun, 5 Sep 2021 15:59:23 +1100 Subject: [PATCH 1/2] Allow starting in awake mode. Fixes ClassicDIY/ClassicMQTT#29 --- code/Python/classic_mqtt.py | 17 ++++++++++++++--- code/Python/support/classic_validate.py | 13 ++++++++----- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/code/Python/classic_mqtt.py b/code/Python/classic_mqtt.py index 9a24160..04a95e1 100644 --- a/code/Python/classic_mqtt.py +++ b/code/Python/classic_mqtt.py @@ -32,13 +32,16 @@ MIN_SNOOZE_RATE = 1*60 #in seconds (1 minute) DEFAULT_SNOOZE_RATE = 5*60 #in seconds (5 minutes) +DEFAULT_START_AWAKE = False + MODBUS_MAX_ERROR_COUNT = 300 #Number of errors on the MODBUS before the tool exits MQTT_MAX_ERROR_COUNT = 300 #Number of errors on the MQTT before the tool exits MAIN_LOOP_SLEEP_SECS = 5 #Seconds to sleep in the main loop # --------------------------------------------------------------------------- # # Default startup values. Can be over-ridden by command line options. -# --------------------------------------------------------------------------- # +# --------------------------------------------------------------------------- # + argumentValues = { \ 'classicHost':os.getenv('CLASSIC', "ClassicHost"), \ 'classicPort':os.getenv('CLASSIC_PORT', "502"), \ @@ -50,7 +53,8 @@ 'mqttPassword':os.getenv('MQTT_PASS', "ClassicPub123"), \ 'awakePublishRate':int(os.getenv('AWAKE_PUBLISH_RATE', str(DEFAULT_WAKE_RATE))), \ 'snoozePublishRate':int(os.getenv('SNOOZE_PUBLISH_RATE', str(DEFAULT_SNOOZE_RATE))), \ - 'awakePublishLimit':int(os.getenv('AWAKE_PUBLISH_LIMIT', str(DEFAULT_WAKE_PUBLISHES)))} + 'awakePublishLimit':int(os.getenv('AWAKE_PUBLISH_LIMIT', str(DEFAULT_WAKE_PUBLISHES))), \ + 'startAwake':(os.getenv("DEFAULT_START_AWAKE", str(DEFAULT_START_AWAKE)).lower() in ('True', 'true', 'yes', 'y', '1', 't'))} # --------------------------------------------------------------------------- # # Counters and status variables @@ -275,7 +279,7 @@ def periodic(modbus_stop): # --------------------------------------------------------------------------- # def run(argv): - global doStop, mqttClient, awakePublishCycles, snoozePublishCycles, currentPollRate, snoozeCycleLimit + global doStop, mqttClient, awakePublishCycles, awakePublishCount, snoozePublishCycles, currentPollRate, snoozeCycleLimit, modeAwake, infoPublished log.info("classic_mqtt starting up...") @@ -324,6 +328,13 @@ def run(argv): # start calling periodic now and every periodic(periodic_stop) + if argumentValues['startAwake']: + log.info("Start awake") + #Make info packet get published + infoPublished = False + modeAwake = True + awakePublishCount = 0 #reset the publish count + log.debug("Starting main loop...") while not doStop: try: diff --git a/code/Python/support/classic_validate.py b/code/Python/support/classic_validate.py index ddd169d..1edcf71 100644 --- a/code/Python/support/classic_validate.py +++ b/code/Python/support/classic_validate.py @@ -70,14 +70,16 @@ def handleArgs(argv,argVals): "mqtt_pass=", "wake_publish_rate=", "snooze_publish_rate=", - "wake_publishes="]) + "wake_publishes=", + "start_awake" + ]) except getopt.GetoptError: - print("Error parsing command line parameters, please use: py --classic <{}> --classic_port <{}> --classic_name <{}> --mqtt <{}> --mqtt_port <{}> --mqtt_root <{}> --mqtt_user --mqtt_pass --wake_publish_rate <{}> --snooze_publish_rate <{}> --wake_publishes <{}>".format( \ + print("Error parsing command line parameters, please use: py --classic <{}> --classic_port <{}> --classic_name <{}> --mqtt <{}> --mqtt_port <{}> --mqtt_root <{}> --mqtt_user --mqtt_pass --wake_publish_rate <{}> --snooze_publish_rate <{}> --wake_publishes <{}> --start_awake".format( \ argVals['classicHost'], argVals['classicPort'], argVals['classicName'], argVals['mqttHost'], argVals['mqttPort'], argVals['mqttRoot'], argVals['awakePublishRate'], argVals['snoozePublishRate'], int(argVals['awakePublishLimit']*argVals['awakePublishRate']))) sys.exit(2) for opt, arg in opts: if opt == '-h': - print ("Parameter help: py --classic <{}> --classic_port <{}> --classic_name <{}> --mqtt <{}> --mqtt_port <{}> --mqtt_root <{}> --mqtt_user --mqtt_pass --wake_publish_rate <{}> --snooze_publish_rate <{}> --wake_publishes <{}>".format( \ + print ("Parameter help: py --classic <{}> --classic_port <{}> --classic_name <{}> --mqtt <{}> --mqtt_port <{}> --mqtt_root <{}> --mqtt_user --mqtt_pass --wake_publish_rate <{}> --snooze_publish_rate <{}> --wake_publishes <{}> [--start-awake]".format( \ argVals['classicHost'], argVals['classicPort'], argVals['classicName'], argVals['mqttHost'], argVals['mqttPort'], argVals['mqttRoot'], argVals['awakePublishRate'], argVals['snoozePublishRate'], int(argVals['awakePublishLimit']*argVals['awakePublishRate']))) sys.exit() elif opt in ('--classic'): @@ -102,6 +104,8 @@ def handleArgs(argv,argVals): argVals['snoozePublishRate'] = int(validateIntParameter(arg,"snooze_publish_rate", argVals['snoozePublishRate'])) elif opt in ("--wake_publishes"): argVals['awakePublishLimit'] = int(validateIntParameter(arg,"wake_publishes", argVals['awakePublishLimit'])) + elif opt in ("--start_awake"): + argVals['startAwake'] = True #Validate the wake/snooze stuff if (argVals['snoozePublishRate'] < argVals['awakePublishRate']): @@ -127,8 +131,6 @@ def handleArgs(argv,argVals): argVals['mqttHost'] = argVals['mqttHost'].strip() argVals['mqttUser'] = argVals['mqttUser'].strip() - - log.info("classicHost = {}".format(argVals['classicHost'])) log.info("classicPort = {}".format(argVals['classicPort'])) log.info("classicName = {}".format(argVals['classicName'])) @@ -141,6 +143,7 @@ def handleArgs(argv,argVals): log.info("awakePublishRate = {}".format(argVals['awakePublishRate'])) log.info("snoozePublishRate = {}".format(argVals['snoozePublishRate'])) log.info("awakePublishLimit = {}".format(argVals['awakePublishLimit'])) + log.info("startAwake = {}".format(argVals['startAwake'])) #Make sure the last character in the root is a "/" if (not argVals['mqttRoot'].endswith("/")): From 18a55baac00fcef9e764c3e3c1bbb36579063fc5 Mon Sep 17 00:00:00 2001 From: Laurent Dinclaux Date: Sun, 5 Sep 2021 17:32:50 +1100 Subject: [PATCH 2/2] Change env variable name for starting awake --- code/Python/classic_mqtt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/Python/classic_mqtt.py b/code/Python/classic_mqtt.py index 04a95e1..23af704 100644 --- a/code/Python/classic_mqtt.py +++ b/code/Python/classic_mqtt.py @@ -54,7 +54,7 @@ 'awakePublishRate':int(os.getenv('AWAKE_PUBLISH_RATE', str(DEFAULT_WAKE_RATE))), \ 'snoozePublishRate':int(os.getenv('SNOOZE_PUBLISH_RATE', str(DEFAULT_SNOOZE_RATE))), \ 'awakePublishLimit':int(os.getenv('AWAKE_PUBLISH_LIMIT', str(DEFAULT_WAKE_PUBLISHES))), \ - 'startAwake':(os.getenv("DEFAULT_START_AWAKE", str(DEFAULT_START_AWAKE)).lower() in ('True', 'true', 'yes', 'y', '1', 't'))} + 'startAwake':(os.getenv("START_AWAKE", str(DEFAULT_START_AWAKE)).lower() in ('True', 'true', 'yes', 'y', '1', 't'))} # --------------------------------------------------------------------------- # # Counters and status variables