Files
esp-base/pg26/pnd.py
pndadm bd19860ae7 Dateien nach "pg26" hochladen
work in progress implementation of new framework
2025-10-30 00:20:18 +00:00

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