added better reset and totalizer handling

This commit is contained in:
Nico Melone
2022-09-08 17:48:56 -05:00
parent 8a5875166f
commit 55f34b5c08
4 changed files with 134 additions and 32 deletions

BIN
Pub_Sub/.DS_Store vendored

Binary file not shown.

Binary file not shown.

View File

@@ -118,34 +118,36 @@ def checkParameterConfig(cfg):
payload = {}
try:
with open("/var/user/files/totalizers.json", "r") as t:
totalizers = json.load(t)
if not totalizers:
logger.info("-----INITIALIZING TOTALIZERS-----")
def get_totalizers():
try:
with open("/var/user/files/totalizers.json", "r") as t:
totalizers = json.load(t)
if not totalizers:
logger.info("-----INITIALIZING TOTALIZERS-----")
totalizers = {
"day": 0,
"week": 0,
"month": 0,
"year": 0,
"lifetime": 0,
"dayHolding": 0,
"weekHolding": 0,
"monthHolding": 0,
"yearHolding": 0
}
except:
totalizers = {
"day": 0,
"week": 0,
"month": 0,
"year": 0,
"lifetime": 0,
"dayHolding": 0,
"weekHolding": 0,
"monthHolding": 0,
"yearHolding": 0
}
except:
totalizers = {
"day": 0,
"week": 0,
"month": 0,
"year": 0,
"lifetime": 0,
"dayHolding": 0,
"weekHolding": 0,
"monthHolding": 0,
"yearHolding": 0
}
"day": 0,
"week": 0,
"month": 0,
"year": 0,
"lifetime": 0,
"dayHolding": 0,
"weekHolding": 0,
"monthHolding": 0,
"yearHolding": 0
}
return totalizers
@@ -188,7 +190,7 @@ def sendData(message,wizard_api):
resetPayload["ts"] = 1 + (round(dt.timestamp(dt.now())/600)*600)*1000
publish(__topic__, json.dumps(resetPayload), __qos__)
def saveTotalizers():
def saveTotalizers(totalizers):
try:
with open("/var/user/files/totalizers.json", "w") as t:
json.dump(totalizers,t)
@@ -220,45 +222,49 @@ def getGPS():
return (f"{lat_dec:.8f}",f"{lon_dec:.8f}",f"{speedMPH:.2f}")
def totalizeDay(lifetime):
totalizers = get_totalizers()
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
reset = False
value = lifetime - totalizers["dayHolding"]
if not int(now.strftime("%d")) == int(totalizers["day"]):
totalizers["dayHolding"] = lifetime
totalizers["day"] = int(now.strftime("%d"))
saveTotalizers()
saveTotalizers(totalizers)
reset = True
return (value,reset)
def totalizeWeek(lifetime):
totalizers = get_totalizers()
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
reset = False
value = lifetime - totalizers["weekHolding"]
if not now.strftime("%U") == totalizers["week"] and now.strftime("%a") == "Sun":
totalizers["weekHolding"] = lifetime
totalizers["week"] = now.strftime("%U")
saveTotalizers()
saveTotalizers(totalizers)
reset = True
return (value, reset)
def totalizeMonth(lifetime):
totalizers = get_totalizers()
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
reset = False
value = lifetime - totalizers["monthHolding"]
if not int(now.strftime("%m")) == int(totalizers["month"]):
totalizers["monthHolding"] = lifetime
totalizers["month"] = now.strftime("%m")
saveTotalizers()
saveTotalizers(totalizers)
reset = True
return (value,reset)
def totalizeYear(lifetime):
totalizers = get_totalizers()
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
reset = False
value = lifetime - totalizers["yearHolding"]
if not int(now.strftime("%Y")) == int(totalizers["year"]):
totalizers["yearHolding"] = lifetime
totalizers["year"] = now.strftime("%Y")
saveTotalizers()
saveTotalizers(totalizers)
reset = True
return (value, reset)

View File

@@ -0,0 +1,96 @@
import json
from datetime import datetime as dt
from common.Logger import logger
from quickfaas.measure import write
from quickfaas.remotebus import publish
def get_totalizers():
try:
with open("/var/user/files/totalizers.json", "r") as t:
totalizers = json.load(t)
if not totalizers:
logger.info("-----INITIALIZING TOTALIZERS-----")
totalizers = {
"day": 0,
"week": 0,
"month": 0,
"year": 0,
"lifetime": 0,
"dayHolding": 0,
"weekHolding": 0,
"monthHolding": 0,
"yearHolding": 0
}
except:
totalizers = {
"day": 0,
"week": 0,
"month": 0,
"year": 0,
"lifetime": 0,
"dayHolding": 0,
"weekHolding": 0,
"monthHolding": 0,
"yearHolding": 0
}
return totalizers
def saveTotalizers(totalizers):
try:
with open("/var/user/files/totalizers.json", "w") as t:
json.dump(totalizers,t)
except Exception as e:
logger.error(e)
def resetTotalizers():
try:
totalizers = get_totalizers()
totalizers["dayHolding"] = 0
totalizers["weekHolding"] = 0
totalizers["MonthHolding"] = 0
totalizers["yearHolding"] = 0
saveTotalizers(totalizers)
return True
except Exception as e:
logger.error(e)
return e
def receiveCommand(topic, payload):
logger.debug(topic)
logger.debug(json.loads(payload))
p = json.loads(payload)
command = p["method"]
if command == "resetTotalizers":
r = resetTotalizers()
if r == True:
message = [{"name": "flowmeter", "measures":[{"name":"reset_totalizers", "value": 1}]}]
try:
resp = write(message)
except Exception as e:
logger.error("Failed to write message")
logger.error(e)
payload = {
"ts": (round(dt.timestamp(dt.now())/600)*600)*1000,
"values": {
"day_volume": 0,
"yesterday_volume": 0,
"week_volume": 0,
"last_week_volume": 0,
"month_volume": 0,
"last_month_volume": 0,
"year_volume": 0,
"last_year_volume": 0
}
}
publish("v1/devices/me/telemetry",json.dumps(payload))
ack(topic.split("/")[-1], r)
def ack(msgid, r):
#logger.debug(msgid)
#logger.debug(mac)
#logger.debug(name)
#logger.debug(value)
publish("v1/devices/me/rpc/response/" + str(msgid), json.dumps({"msg": {"time": (round(dt.timestamp(dt.now())/600)*600)*1000, "response": r}, "metadata": "", "msgType": ""}))