added better reset and totalizer handling
This commit is contained in:
BIN
Pub_Sub/.DS_Store
vendored
BIN
Pub_Sub/.DS_Store
vendored
Binary file not shown.
BIN
Pub_Sub/advvfdipp/.DS_Store
vendored
BIN
Pub_Sub/advvfdipp/.DS_Store
vendored
Binary file not shown.
@@ -118,34 +118,36 @@ def checkParameterConfig(cfg):
|
|||||||
|
|
||||||
payload = {}
|
payload = {}
|
||||||
|
|
||||||
try:
|
def get_totalizers():
|
||||||
with open("/var/user/files/totalizers.json", "r") as t:
|
try:
|
||||||
totalizers = json.load(t)
|
with open("/var/user/files/totalizers.json", "r") as t:
|
||||||
if not totalizers:
|
totalizers = json.load(t)
|
||||||
logger.info("-----INITIALIZING TOTALIZERS-----")
|
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 = {
|
totalizers = {
|
||||||
"day": 0,
|
"day": 0,
|
||||||
"week": 0,
|
"week": 0,
|
||||||
"month": 0,
|
"month": 0,
|
||||||
"year": 0,
|
"year": 0,
|
||||||
"lifetime": 0,
|
"lifetime": 0,
|
||||||
"dayHolding": 0,
|
"dayHolding": 0,
|
||||||
"weekHolding": 0,
|
"weekHolding": 0,
|
||||||
"monthHolding": 0,
|
"monthHolding": 0,
|
||||||
"yearHolding": 0
|
"yearHolding": 0
|
||||||
}
|
}
|
||||||
except:
|
return totalizers
|
||||||
totalizers = {
|
|
||||||
"day": 0,
|
|
||||||
"week": 0,
|
|
||||||
"month": 0,
|
|
||||||
"year": 0,
|
|
||||||
"lifetime": 0,
|
|
||||||
"dayHolding": 0,
|
|
||||||
"weekHolding": 0,
|
|
||||||
"monthHolding": 0,
|
|
||||||
"yearHolding": 0
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -188,7 +190,7 @@ def sendData(message,wizard_api):
|
|||||||
resetPayload["ts"] = 1 + (round(dt.timestamp(dt.now())/600)*600)*1000
|
resetPayload["ts"] = 1 + (round(dt.timestamp(dt.now())/600)*600)*1000
|
||||||
publish(__topic__, json.dumps(resetPayload), __qos__)
|
publish(__topic__, json.dumps(resetPayload), __qos__)
|
||||||
|
|
||||||
def saveTotalizers():
|
def saveTotalizers(totalizers):
|
||||||
try:
|
try:
|
||||||
with open("/var/user/files/totalizers.json", "w") as t:
|
with open("/var/user/files/totalizers.json", "w") as t:
|
||||||
json.dump(totalizers,t)
|
json.dump(totalizers,t)
|
||||||
@@ -220,45 +222,49 @@ def getGPS():
|
|||||||
return (f"{lat_dec:.8f}",f"{lon_dec:.8f}",f"{speedMPH:.2f}")
|
return (f"{lat_dec:.8f}",f"{lon_dec:.8f}",f"{speedMPH:.2f}")
|
||||||
|
|
||||||
def totalizeDay(lifetime):
|
def totalizeDay(lifetime):
|
||||||
|
totalizers = get_totalizers()
|
||||||
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
|
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
|
||||||
reset = False
|
reset = False
|
||||||
value = lifetime - totalizers["dayHolding"]
|
value = lifetime - totalizers["dayHolding"]
|
||||||
if not int(now.strftime("%d")) == int(totalizers["day"]):
|
if not int(now.strftime("%d")) == int(totalizers["day"]):
|
||||||
totalizers["dayHolding"] = lifetime
|
totalizers["dayHolding"] = lifetime
|
||||||
totalizers["day"] = int(now.strftime("%d"))
|
totalizers["day"] = int(now.strftime("%d"))
|
||||||
saveTotalizers()
|
saveTotalizers(totalizers)
|
||||||
reset = True
|
reset = True
|
||||||
return (value,reset)
|
return (value,reset)
|
||||||
|
|
||||||
def totalizeWeek(lifetime):
|
def totalizeWeek(lifetime):
|
||||||
|
totalizers = get_totalizers()
|
||||||
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
|
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
|
||||||
reset = False
|
reset = False
|
||||||
value = lifetime - totalizers["weekHolding"]
|
value = lifetime - totalizers["weekHolding"]
|
||||||
if not now.strftime("%U") == totalizers["week"] and now.strftime("%a") == "Sun":
|
if not now.strftime("%U") == totalizers["week"] and now.strftime("%a") == "Sun":
|
||||||
totalizers["weekHolding"] = lifetime
|
totalizers["weekHolding"] = lifetime
|
||||||
totalizers["week"] = now.strftime("%U")
|
totalizers["week"] = now.strftime("%U")
|
||||||
saveTotalizers()
|
saveTotalizers(totalizers)
|
||||||
reset = True
|
reset = True
|
||||||
return (value, reset)
|
return (value, reset)
|
||||||
|
|
||||||
def totalizeMonth(lifetime):
|
def totalizeMonth(lifetime):
|
||||||
|
totalizers = get_totalizers()
|
||||||
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
|
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
|
||||||
reset = False
|
reset = False
|
||||||
value = lifetime - totalizers["monthHolding"]
|
value = lifetime - totalizers["monthHolding"]
|
||||||
if not int(now.strftime("%m")) == int(totalizers["month"]):
|
if not int(now.strftime("%m")) == int(totalizers["month"]):
|
||||||
totalizers["monthHolding"] = lifetime
|
totalizers["monthHolding"] = lifetime
|
||||||
totalizers["month"] = now.strftime("%m")
|
totalizers["month"] = now.strftime("%m")
|
||||||
saveTotalizers()
|
saveTotalizers(totalizers)
|
||||||
reset = True
|
reset = True
|
||||||
return (value,reset)
|
return (value,reset)
|
||||||
|
|
||||||
def totalizeYear(lifetime):
|
def totalizeYear(lifetime):
|
||||||
|
totalizers = get_totalizers()
|
||||||
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
|
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
|
||||||
reset = False
|
reset = False
|
||||||
value = lifetime - totalizers["yearHolding"]
|
value = lifetime - totalizers["yearHolding"]
|
||||||
if not int(now.strftime("%Y")) == int(totalizers["year"]):
|
if not int(now.strftime("%Y")) == int(totalizers["year"]):
|
||||||
totalizers["yearHolding"] = lifetime
|
totalizers["yearHolding"] = lifetime
|
||||||
totalizers["year"] = now.strftime("%Y")
|
totalizers["year"] = now.strftime("%Y")
|
||||||
saveTotalizers()
|
saveTotalizers(totalizers)
|
||||||
reset = True
|
reset = True
|
||||||
return (value, reset)
|
return (value, reset)
|
||||||
96
Pub_Sub/flowmeterskid/thingsboard/v1/sub/receiveCommand.py
Normal file
96
Pub_Sub/flowmeterskid/thingsboard/v1/sub/receiveCommand.py
Normal 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": ""}))
|
||||||
Reference in New Issue
Block a user