Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 14 additions & 3 deletions code/Python/classic_mqtt.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"), \
Expand All @@ -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("START_AWAKE", str(DEFAULT_START_AWAKE)).lower() in ('True', 'true', 'yes', 'y', '1', 't'))}

# --------------------------------------------------------------------------- #
# Counters and status variables
Expand Down Expand Up @@ -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...")

Expand Down Expand 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:
Expand Down
13 changes: 8 additions & 5 deletions code/Python/support/classic_validate.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 <username> --mqtt_pass <password> --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 <username> --mqtt_pass <password> --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 <username> --mqtt_pass <password> --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 <username> --mqtt_pass <password> --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'):
Expand All @@ -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']):
Expand All @@ -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']))
Expand All @@ -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("/")):
Expand Down