60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
# Enter your python code.
|
|
import json, os, time
|
|
from datetime import datetime as dt
|
|
from common.Logger import logger
|
|
from quickfaas.remotebus import publish
|
|
from quickfaas.global_dict import get as get_params
|
|
from quickfaas.global_dict import _set_global_args
|
|
from mobiuspi_lib.gps import GPS
|
|
|
|
def reboot(reason="Rebooting for config file update"):
|
|
#basic = Basic()
|
|
logger.info("!" * 10 + "REBOOTING DEVICE" + "!"*10)
|
|
logger.info(reason)
|
|
r = os.popen("kill -s SIGHUP `cat /var/run/python/supervisord.pid`").read()
|
|
logger.info(f"REBOOT : {r}")
|
|
|
|
def chunk_payload(payload, chunk_size=20):
|
|
if "values" in payload:
|
|
# Original format: {"ts": ..., "values": {...}}
|
|
chunked_values = list(payload["values"].items())
|
|
for i in range(0, len(chunked_values), chunk_size):
|
|
yield {
|
|
"ts": payload["ts"],
|
|
"values": dict(chunked_values[i:i+chunk_size])
|
|
}
|
|
else:
|
|
# New format: {"key1": "value1", "key2": "value2"}
|
|
chunked_keys = list(payload.keys())
|
|
for i in range(0, len(chunked_keys), chunk_size):
|
|
yield {k: payload[k] for k in chunked_keys[i:i+chunk_size]}
|
|
|
|
def sendData(message):
|
|
#logger.debug(message)
|
|
payload = {"ts": (round(dt.timestamp(dt.now())/60)*60)*1000, "values": {}}
|
|
attributes_payload = {}
|
|
for measure in message["measures"]:
|
|
try:
|
|
logger.debug(measure)
|
|
if measure["health"] == 1:
|
|
if "_spt" in measure["name"]:
|
|
attributes_payload[measure["name"]] = measure["value"]
|
|
payload["values"][measure["name"]] = measure["value"]
|
|
|
|
except Exception as e:
|
|
logger.error(e)
|
|
|
|
for chunk in chunk_payload(payload=payload):
|
|
publish(__topic__, json.dumps(chunk), __qos__)
|
|
time.sleep(2)
|
|
|
|
attributes_payload["latestReportTime"] = (round(dt.timestamp(dt.now())/600)*600)*1000
|
|
for chunk in chunk_payload(payload=attributes_payload):
|
|
publish("v1/devices/me/attributes", json.dumps(chunk), __qos__)
|
|
time.sleep(2)
|
|
|
|
if not payload["values"]:
|
|
publish(__topic__, json.dumps({"rebooted": dt.now()}), __qos__)
|
|
reboot(reason="PLC not connected")
|
|
|