115 lines
4.1 KiB
Python
115 lines
4.1 KiB
Python
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
|