import pndSRC as mypnd import pndConfig as cfg import ntptime import ujson import time import machine import array import gc gc.enable() from machine import Pin, I2C, ADC gc.enable() class rt(): def run(self): self.cycle = 1 while True: try: ## main loop gc.collect() machine.idle() self.mq = mqService() self.mq.logConf(self.Psystem) if hasattr(cfg.tasks, "gc_sensors"): print("trying to log sensors") time.sleep(5) self.mq.logSensors(self.Sensors) self.mq.close() del self.mq print(self.Psystem.status()) year, mon, day, h, m, s, nope, nope2 = time.localtime() if((m % 55) == 0): self.wifi.reconnect() self.cycle = self.cycle + 1 if(self.cycle > 10000): self.cycle = 1 machine.idle() time.sleep(self.looping) except OSError as e: mypnd.ecx.handle(self,e) def backgroundTask(self): lhttp = mypnd.webserver() print('starting Webserver...') ## method with main loop goes here lhttp.run() def init(self, lastTry): try: self.bt = mypnd.bt() self.wifi = mypnd.wifi() self.wifi.disableAP() self.Psystem = mypnd.system() self.lastTry = 0 self.cycle = 0 self.looping = 0 self.Psystem.setCallback(self) i = 0 self.lastTry = lastTry self.wifi.connect() ntptime.host = cfg.defaults.gc_ntp_host try: ntptime.settime() except: pass if hasattr(cfg.tasks, "gc_sensors"): self.Sensors = {} for sens in cfg.tasks.gc_sensors: if cfg.tasks.gc_sensors[sens]['ADC']: self.Sensors[i] = mypnd.adcsens(cfg.tasks.gc_sensors[sens]['name'],cfg.tasks.gc_sensors[sens]['pin']) else: self.Sensors[i] = mypnd.sens(cfg.tasks.gc_sensors[sens]['name'],cfg.tasks.gc_sensors[sens]['type'],cfg.tasks.gc_sensors[sens]['pin']) i += 1 self.looping = cfg.defaults.gc_looping except OSError as e: mypnd.ecx.handle(self,e) class mqService(): def __init__(self): try: self.mqtt = mypnd.mqtt() self.mqclient = self.mqtt.connect() except OSError as e: self.lastTry = 1 mypnd.ecx.handle(mypnd.ecx(),self,e) def logConf(self, psys): topic = cfg.mqtt.gc_topic_config sys = psys status = sys.statusJSON() self.mqtt.publish(self.mqclient, topic, status) def logSensors(self, sensors): year, mon, day, h, m, s, nope, nope2 = time.localtime() date = str(year) + "-" + str(mon) + "-" + str(day) + "T" + str(h) + ":" + str(m) + ":" + str(s) for sens in sensors: if sensors[sens].ADC: jsens = ujson.dumps({ "name" : cfg.gc_name, "Time": date, "senso_name": sensors[sens].id, "value": sensors[sens].update()}) self.mqtt.publish(self.mqclient, cfg.mqtt.gc_topic_sensor, jsens) else: temp, hum = sensors[sens].update() jsens = ujson.dumps({ "name" : cfg.gc_name, "Time": date, "senso_name": "Temperature_" + sensors[sens].id[-1], "value": temp}) self.mqtt.publish(self.mqclient, cfg.mqtt.gc_topic_sensor, jsens) jsens = ujson.dumps({ "name" : cfg.gc_name, "Time": date, "senso_name": "Humidity_" + sensors[sens].id[-1], "value": hum}) self.mqtt.publish(self.mqclient, cfg.mqtt.gc_topic_sensor, jsens) def close(self): self.mqtt.disconnect(self.mqclient) del self.mqclient del self.mqtt