updateds
This commit is contained in:
BIN
Pub_Sub/.DS_Store
vendored
BIN
Pub_Sub/.DS_Store
vendored
Binary file not shown.
BIN
Pub_Sub/__pycache__/convert_config.cpython-39.pyc
Normal file
BIN
Pub_Sub/__pycache__/convert_config.cpython-39.pyc
Normal file
Binary file not shown.
BIN
Pub_Sub/advvfdipp/.DS_Store
vendored
BIN
Pub_Sub/advvfdipp/.DS_Store
vendored
Binary file not shown.
@@ -737,7 +737,7 @@
|
||||
},
|
||||
{
|
||||
"ctrlName": "advvfdipp",
|
||||
"dataType": "INT",
|
||||
"dataType": "DINT",
|
||||
"addr": "sts_PID_Control",
|
||||
"readWrite": "rw",
|
||||
"uploadType": "periodic",
|
||||
|
||||
@@ -3,52 +3,71 @@ from common.Logger import logger
|
||||
from quickfaas.global_dict import get as get_params
|
||||
from quickfaas.global_dict import _set_global_args
|
||||
|
||||
def reboot():
|
||||
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 checkFileExist(filename):
|
||||
path = "/var/user/files"
|
||||
try:
|
||||
if not os.path.exists(path):
|
||||
logger.info("no folder making files folder in var/user")
|
||||
logger.debug("no folder making files folder in var/user")
|
||||
os.makedirs(path)
|
||||
with open(path + "/" + filename, "a") as f:
|
||||
json.dump({}, f)
|
||||
except Exception as e:
|
||||
logger.error(f"Something went wrong in checkFileExist while making folder: {e}")
|
||||
|
||||
try:
|
||||
if not os.path.exists(path + "/" + filename):
|
||||
logger.info("no creds file making creds file")
|
||||
logger.debug("no creds file making creds file")
|
||||
with open(path + "/" + filename, "a") as f:
|
||||
json.dump({}, f)
|
||||
except Exception as e:
|
||||
logger.error(f"Something went wrong in checkFileExist wihle making file: {e}")
|
||||
|
||||
def convertDStoJSON(ds):
|
||||
j = dict()
|
||||
try:
|
||||
for x in ds:
|
||||
j[x["key"]] = x["value"]
|
||||
except Exception as e:
|
||||
logger.error(f"Something went wrong in convertDStoJSON: {e}")
|
||||
return j
|
||||
|
||||
def convertJSONtoDS(j):
|
||||
d = []
|
||||
try:
|
||||
for key in j.keys():
|
||||
d.append({"key": key, "value": j[key]})
|
||||
except Exception as e:
|
||||
logger.error(f"Something went wrong in convertJSONtoDS: {e}")
|
||||
return d
|
||||
|
||||
def checkCredentialConfig():
|
||||
logger.info("CHECKING CONFIG")
|
||||
logger.debug("CHECKING CONFIG")
|
||||
cfgpath = "/var/user/cfg/device_supervisor/device_supervisor.cfg"
|
||||
credspath = "/var/user/files/creds.json"
|
||||
cfg = dict()
|
||||
with open(cfgpath, "r") as f:
|
||||
try:
|
||||
cfg = json.load(f)
|
||||
clouds = cfg.get("clouds")
|
||||
logger.info(clouds)
|
||||
logger.debug(clouds)
|
||||
#if not configured then try to configure from stored values
|
||||
if clouds[0]["args"]["clientId"] == "unknown" or clouds[0]["args"]["username"] == "unknown" or not clouds[0]["args"]["passwd"] or clouds[0]["args"]["passwd"] == "unknown":
|
||||
try:
|
||||
checkFileExist("creds.json")
|
||||
except Exception as e:
|
||||
logger.error(f"Error in checkFileExist: {e}")
|
||||
with open(credspath, "r") as c:
|
||||
try:
|
||||
creds = json.load(c)
|
||||
if creds:
|
||||
logger.info("updating config with stored data")
|
||||
logger.debug("updating config with stored data")
|
||||
clouds[0]["args"]["clientId"] = creds["clientId"]
|
||||
clouds[0]["args"]["username"] = creds["userName"]
|
||||
clouds[0]["args"]["passwd"] = creds["password"]
|
||||
@@ -57,11 +76,13 @@ def checkCredentialConfig():
|
||||
with open(cfgpath, "w", encoding='utf-8') as n:
|
||||
json.dump(cfg, n, indent=1, ensure_ascii=False)
|
||||
reboot()
|
||||
except Exception as e:
|
||||
logger.error(f"Error trying to load credentials from file: {e}")
|
||||
else:
|
||||
#assuming clouds is filled out, if data is different then assume someone typed in something new and store it, if creds is empty fill with clouds' data
|
||||
checkFileExist("creds.json")
|
||||
with open(credspath, "r") as c:
|
||||
logger.info("updating stored file with new data")
|
||||
logger.debug("updating stored file with new data")
|
||||
cfg = checkParameterConfig(cfg)
|
||||
with open(cfgpath, "w", encoding='utf-8') as n:
|
||||
json.dump(cfg, n, indent=1, ensure_ascii=False)
|
||||
@@ -79,22 +100,25 @@ def checkCredentialConfig():
|
||||
creds["password"] = clouds[0]["args"]["passwd"]
|
||||
with open(credspath, "w") as cw:
|
||||
json.dump(creds,cw)
|
||||
except Exception as e:
|
||||
logger.error(f"Somethign went wrong in checkCredentialConfig: {e}")
|
||||
|
||||
def checkParameterConfig(cfg):
|
||||
logger.info("Checking Parameters!!!!")
|
||||
try:
|
||||
logger.debug("Checking Parameters!!!!")
|
||||
paramspath = "/var/user/files/params.json"
|
||||
cfgparams = convertDStoJSON(cfg.get("labels"))
|
||||
#check stored values
|
||||
checkFileExist("params.json")
|
||||
with open(paramspath, "r") as f:
|
||||
logger.info("Opened param storage file")
|
||||
logger.debug("Opened param storage file")
|
||||
params = json.load(f)
|
||||
if params:
|
||||
if cfgparams != params:
|
||||
#go through each param
|
||||
#if not "unknown" and cfg and params aren't the same take from cfg likely updated manually
|
||||
#if key in cfg but not in params copy to params
|
||||
logger.info("equalizing params between cfg and stored")
|
||||
logger.debug("equalizing params between cfg and stored")
|
||||
for key in cfgparams.keys():
|
||||
try:
|
||||
if cfgparams[key] != params[key] and cfgparams[key] != "unknown":
|
||||
@@ -107,8 +131,12 @@ def checkParameterConfig(cfg):
|
||||
json.dump(params, p)
|
||||
else:
|
||||
with open(paramspath, "w") as p:
|
||||
logger.info("initializing param file with params in memory")
|
||||
logger.debug("initializing param file with params in memory")
|
||||
json.dump(convertDStoJSON(get_params()), p)
|
||||
cfg["labels"] = get_params()
|
||||
|
||||
return cfg
|
||||
except Exception as e:
|
||||
logger.error(f"Something went wrong in checkParameterConfig: {e}")
|
||||
os.system(f'rm {paramspath}')
|
||||
return cfg
|
||||
308
Pub_Sub/cameratrailer/thingsboard/hikvision_config.cnf
Normal file
308
Pub_Sub/cameratrailer/thingsboard/hikvision_config.cnf
Normal file
@@ -0,0 +1,308 @@
|
||||
!
|
||||
#system config
|
||||
language English
|
||||
hostname EdgeGateway
|
||||
ip domain-name edgegateway.com.cn
|
||||
clock timezone CST6CDT,M3.2.0/2,M11.1.0/2
|
||||
service password-encryption
|
||||
!
|
||||
#log config
|
||||
log persistent severity 7
|
||||
!
|
||||
#user config
|
||||
username ASS privilege 15 password $1$EmiUWl8i$lO4gaFNPRI3xC9tJXSl7/0
|
||||
!
|
||||
enable password $1$kvwao0Sc$zzKGmDaqupdkXYaaObwJx/
|
||||
!
|
||||
#aaa config
|
||||
!
|
||||
#cron config
|
||||
remote-login retry 20
|
||||
!
|
||||
#alarm config
|
||||
!
|
||||
#loopback config
|
||||
interface loopback 1
|
||||
ip address 127.0.0.1 255.0.0.0
|
||||
!
|
||||
!
|
||||
#ethernet interface config
|
||||
interface fastethernet 0/1
|
||||
track l2-state
|
||||
!
|
||||
interface fastethernet 0/2
|
||||
!
|
||||
!
|
||||
#Ethernet sub interface config
|
||||
!
|
||||
#cellular config
|
||||
cellular 1 gsm profile 1 13997.mcs use-blank-dialno auto
|
||||
cellular 1 gsm profile 2 ss01.vzwstatic use-blank-dialno auto
|
||||
cellular 1 dial interval 10
|
||||
cellular 1 signal interval 120
|
||||
cellular 1 network auto
|
||||
cellular 1 dual-sim enable
|
||||
cellular 1 dual-sim main 1
|
||||
cellular 1 dual-sim policy redial 5
|
||||
cellular 1 sms mode text
|
||||
cellular 1 sms interval 30
|
||||
!
|
||||
interface cellular 1
|
||||
dialer profile 1
|
||||
dialer profile 1 secondary
|
||||
dialer timeout 120
|
||||
dialer activate auto
|
||||
ip address negotiated
|
||||
ip mru 1500
|
||||
ip mtu 1500
|
||||
ppp ipcp dns request
|
||||
ppp keepalive 55 5
|
||||
!
|
||||
!
|
||||
#dot11 config
|
||||
dot11 ssid Amerus_Camera_Trailer
|
||||
authentication key-management wpa 2
|
||||
guest-mode
|
||||
wpa-psk ascii $AES$9EC22D9DED6D382D9D3BEE14595D4E26
|
||||
!
|
||||
interface dot11radio 1
|
||||
ssid Amerus_Camera_Trailer
|
||||
encryption mode ciphers aes-ccm
|
||||
802.11n bandwidth 20
|
||||
!
|
||||
!
|
||||
#bridge config
|
||||
!
|
||||
bridge 1
|
||||
!
|
||||
interface bridge 1
|
||||
ip address 192.168.1.1 255.255.255.0
|
||||
!
|
||||
interface fastethernet 0/2
|
||||
bridge-group 1
|
||||
!
|
||||
interface fastethernet 0/1
|
||||
bridge-group 1
|
||||
!
|
||||
interface dot11radio 1
|
||||
bridge-group 1
|
||||
!
|
||||
!
|
||||
!
|
||||
#dialer config
|
||||
!
|
||||
#ipsec config
|
||||
crypto ipsec-daemon stop
|
||||
!
|
||||
#l2tp config
|
||||
!
|
||||
#openvpn config
|
||||
!
|
||||
#openvpn server config
|
||||
!
|
||||
#web config
|
||||
ip web-access timeout 300
|
||||
ip https server port 9191
|
||||
ip https access enable
|
||||
!
|
||||
#device-manager config
|
||||
device-manager enable
|
||||
device-manager server iot.inhandnetworks.com
|
||||
device-manager tls
|
||||
device-manager account nmelone@henry-pump.com
|
||||
device-manager location gps
|
||||
!
|
||||
#InConnect config
|
||||
!
|
||||
#Erlang config
|
||||
erlang mode off
|
||||
!
|
||||
#telnet server config
|
||||
no ip telnet server
|
||||
no ip telnet access enable
|
||||
!
|
||||
#ssh server config
|
||||
!
|
||||
#dhcp-relay config
|
||||
!
|
||||
#dns-relay config
|
||||
ip dns-relay server
|
||||
!
|
||||
#dhcp server config
|
||||
interface bridge 1
|
||||
ip dhcp-server enable
|
||||
ip dhcp-server range 192.168.1.2 192.168.1.254
|
||||
ip dhcp-server lease 1440
|
||||
!
|
||||
!
|
||||
#dns config
|
||||
!
|
||||
#ip host config
|
||||
!
|
||||
#ddns config
|
||||
!
|
||||
#snmp config
|
||||
|
||||
#ovdp config
|
||||
!
|
||||
!
|
||||
|
||||
#dockerd config
|
||||
!
|
||||
|
||||
#portainer config
|
||||
!
|
||||
|
||||
#Azure IoT Edge config
|
||||
!
|
||||
|
||||
#AWS IoT Greengrass config
|
||||
!
|
||||
#ntp server config
|
||||
ntp master 2
|
||||
ntp server 0.pool.ntp.org
|
||||
ntp server 1.pool.ntp.org
|
||||
ntp server 2.pool.ntp.org
|
||||
ntp server 3.pool.ntp.org
|
||||
!
|
||||
!
|
||||
|
||||
#Telegraf config
|
||||
!
|
||||
#email config
|
||||
!
|
||||
#sntp client config
|
||||
sntp-client
|
||||
sntp-client server 0.pool.ntp.org port 123
|
||||
sntp-client server 1.pool.ntp.org port 123
|
||||
sntp-client server 2.pool.ntp.org port 123
|
||||
sntp-client server 3.pool.ntp.org port 123
|
||||
!
|
||||
#gre config
|
||||
!
|
||||
#static route config
|
||||
ip route 0.0.0.0 0.0.0.0 cellular 1 253
|
||||
ip route 0.0.0.0 0.0.0.0 dot11radio 1 250
|
||||
!
|
||||
#rip config
|
||||
!
|
||||
!
|
||||
#ospf config
|
||||
!
|
||||
!
|
||||
#filtering config
|
||||
!
|
||||
#bgp config
|
||||
!
|
||||
!
|
||||
#firewall config
|
||||
!
|
||||
!
|
||||
interface cellular 1
|
||||
ip access-group 192 admin
|
||||
!
|
||||
access-list 100 10 permit ip any any
|
||||
access-list 101 10 permit ip any any
|
||||
access-list 102 10 permit ip any any
|
||||
access-list 192 10 permit tcp any any eq 443 log
|
||||
access-list 192 20 deny tcp any any eq 80
|
||||
access-list 192 30 deny tcp any any eq 23
|
||||
access-list 192 40 deny tcp any any eq 22
|
||||
access-list 192 50 deny tcp any any eq 53
|
||||
access-list 192 60 deny udp any any eq 53
|
||||
interface cellular 1
|
||||
ip nat outside
|
||||
!
|
||||
interface bridge 1
|
||||
ip nat inside
|
||||
!
|
||||
interface fastethernet 0/1
|
||||
ip nat outside
|
||||
!
|
||||
!
|
||||
ip snat inside list 101 interface fastethernet 0/1
|
||||
ip snat inside list 100 interface cellular 1
|
||||
ip dnat outside static tcp interface cellular 1 3200 192.168.1.200 80 description NVR
|
||||
ip dnat outside static tcp interface cellular 1 3201 192.168.1.201 80 description Camera 1
|
||||
ip dnat outside static tcp interface cellular 1 3202 192.168.1.202 80 description Camera 2
|
||||
ip dnat outside static tcp interface cellular 1 3203 192.168.1.203 80 description Camera 3
|
||||
ip dnat outside static tcp interface cellular 1 3204 192.168.1.204 80 description Camera 4
|
||||
ip dnat outside static tcp interface cellular 1 7681 192.168.1.201 7681 description Camera Live
|
||||
ip dnat outside static tcp interface cellular 1 3205 192.168.1.205 3205 description Ubiquiti
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
#tcp mss config
|
||||
ip tcp adjust-mss 1360
|
||||
!
|
||||
!
|
||||
!
|
||||
#netwatcher config
|
||||
!
|
||||
!
|
||||
#sla config
|
||||
!
|
||||
#track config
|
||||
!
|
||||
#vrrpd config
|
||||
!
|
||||
#backup config
|
||||
!
|
||||
#mroute config
|
||||
!
|
||||
#cert config
|
||||
!
|
||||
!
|
||||
#cert enroll config
|
||||
crypto key generate rsa general-keys modulus 1024
|
||||
!
|
||||
!
|
||||
#dls config
|
||||
!
|
||||
#gps config
|
||||
gps enable
|
||||
!
|
||||
#gps serial config
|
||||
!
|
||||
#gps server config
|
||||
!
|
||||
#gps client config
|
||||
!
|
||||
#Serial Configuration
|
||||
serial 1
|
||||
!
|
||||
serial 2
|
||||
!
|
||||
!
|
||||
#python config
|
||||
python enable
|
||||
python log username adm password $AES$BFA541FA10FA3B041CBA4412D12C52B8
|
||||
python app 1 on
|
||||
python appcmd 1 logsize 1
|
||||
device_supervisor
|
||||
quit
|
||||
!
|
||||
!
|
||||
#Modbus IO Configuration
|
||||
!
|
||||
#traffic-stated config
|
||||
interface cellular 1
|
||||
traffic-stated statistic
|
||||
!
|
||||
!
|
||||
#data-usage config
|
||||
data-usage sim1
|
||||
daily units MB
|
||||
daily limit 35
|
||||
monthly units GB
|
||||
monthly limit 1
|
||||
!
|
||||
interface cellular 1
|
||||
traffic-stated sim 1 data-usage sim1
|
||||
traffic-stated sim 1 daily-action only-report
|
||||
traffic-stated sim 1 monthly-action only-report
|
||||
traffic-stated sim 1 monitoring
|
||||
!
|
||||
#end of configuration
|
||||
File diff suppressed because one or more lines are too long
@@ -16,12 +16,12 @@ def reboot():
|
||||
def checkFileExist(filename):
|
||||
path = "/var/user/files"
|
||||
if not os.path.exists(path):
|
||||
logger.info("no folder making files folder in var/user")
|
||||
logger.debug("no folder making files folder in var/user")
|
||||
os.makedirs(path)
|
||||
with open(path + "/" + filename, "a") as f:
|
||||
json.dump({}, f)
|
||||
if not os.path.exists(path + "/" + filename):
|
||||
logger.info("no creds file making creds file")
|
||||
logger.debug("no creds file making creds file")
|
||||
with open(path + "/" + filename, "a") as f:
|
||||
json.dump({}, f)
|
||||
|
||||
@@ -38,21 +38,21 @@ def convertJSONtoDS(j):
|
||||
return d
|
||||
|
||||
def checkCredentialConfig():
|
||||
logger.info("CHECKING CONFIG")
|
||||
logger.debug("CHECKING CONFIG")
|
||||
cfgpath = "/var/user/cfg/device_supervisor/device_supervisor.cfg"
|
||||
credspath = "/var/user/files/creds.json"
|
||||
cfg = dict()
|
||||
with open(cfgpath, "r") as f:
|
||||
cfg = json.load(f)
|
||||
clouds = cfg.get("clouds")
|
||||
logger.info(clouds)
|
||||
logger.debug(clouds)
|
||||
#if not configured then try to configure from stored values
|
||||
if clouds[0]["args"]["clientId"] == "unknown" or clouds[0]["args"]["username"] == "unknown" or not clouds[0]["args"]["passwd"] or clouds[0]["args"]["passwd"] == "unknown":
|
||||
checkFileExist("creds.json")
|
||||
with open(credspath, "r") as c:
|
||||
creds = json.load(c)
|
||||
if creds:
|
||||
logger.info("updating config with stored data")
|
||||
logger.debug("updating config with stored data")
|
||||
clouds[0]["args"]["clientId"] = creds["clientId"]
|
||||
clouds[0]["args"]["username"] = creds["userName"]
|
||||
clouds[0]["args"]["passwd"] = creds["password"]
|
||||
@@ -65,7 +65,7 @@ def checkCredentialConfig():
|
||||
#assuming clouds is filled out, if data is different then assume someone typed in something new and store it, if creds is empty fill with clouds' data
|
||||
checkFileExist("creds.json")
|
||||
with open(credspath, "r") as c:
|
||||
logger.info("updating stored file with new data")
|
||||
logger.debug("updating stored file with new data")
|
||||
cfg = checkParameterConfig(cfg)
|
||||
with open(cfgpath, "w", encoding='utf-8') as n:
|
||||
json.dump(cfg, n, indent=1, ensure_ascii=False)
|
||||
@@ -85,20 +85,24 @@ def checkCredentialConfig():
|
||||
json.dump(creds,cw)
|
||||
|
||||
def checkParameterConfig(cfg):
|
||||
logger.info("Checking Parameters!!!!")
|
||||
logger.debug("Checking Parameters!!!!")
|
||||
paramspath = "/var/user/files/params.json"
|
||||
cfgparams = convertDStoJSON(cfg.get("labels"))
|
||||
#check stored values
|
||||
checkFileExist("params.json")
|
||||
with open(paramspath, "r") as f:
|
||||
logger.info("Opened param storage file")
|
||||
logger.debug("Opened param storage file")
|
||||
try:
|
||||
params = json.load(f)
|
||||
except Exception as e:
|
||||
logger.error(f"Params files error: {e}")
|
||||
params = {}
|
||||
if params:
|
||||
if cfgparams != params:
|
||||
#go through each param
|
||||
#if not "unknown" and cfg and params aren't the same take from cfg likely updated manually
|
||||
#if key in cfg but not in params copy to params
|
||||
logger.info("equalizing params between cfg and stored")
|
||||
logger.debug("equalizing params between cfg and stored")
|
||||
for key in cfgparams.keys():
|
||||
try:
|
||||
if cfgparams[key] != params[key] and cfgparams[key] != "unknown":
|
||||
@@ -111,7 +115,7 @@ def checkParameterConfig(cfg):
|
||||
json.dump(params, p)
|
||||
else:
|
||||
with open(paramspath, "w") as p:
|
||||
logger.info("initializing param file with params in memory")
|
||||
logger.debug("initializing param file with params in memory")
|
||||
json.dump(convertDStoJSON(get_params()), p)
|
||||
cfg["labels"] = get_params()
|
||||
|
||||
@@ -135,8 +139,8 @@ def getGPS():
|
||||
lon_dec = lon_dec * -1
|
||||
#lat_dec = round(lat_dec, 7)
|
||||
#lon_dec = round(lon_dec, 7)
|
||||
logger.info("HERE IS THE GPS COORDS")
|
||||
logger.info(f"LATITUDE: {lat_dec}, LONGITUDE: {lon_dec}")
|
||||
logger.debug("HERE IS THE GPS COORDS")
|
||||
logger.debug(f"LATITUDE: {lat_dec}, LONGITUDE: {lon_dec}")
|
||||
speedKnots = position_status["speed"].split(" ")
|
||||
speedMPH = float(speedKnots[0]) * 1.151
|
||||
publish(__topic__, json.dumps({"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values":{"latitude":f"{lat_dec:.8f}", "longitude":f"{lon_dec:.8f}", "speed": f"{speedMPH:.2f}"}}), __qos__)
|
||||
@@ -146,8 +150,11 @@ def sendData(message,wizard_api):
|
||||
#publish(__topic__, json.dumps(message), __qos__)
|
||||
try:
|
||||
checkCredentialConfig()
|
||||
except Exception as e:
|
||||
logger.error(f"Error in checkCredentialConfig: {e}")
|
||||
try:
|
||||
getGPS()
|
||||
except:
|
||||
logger.error("Could not get gps data!")
|
||||
except Exception as e:
|
||||
logger.error(f"Could not get gps data!: {e}")
|
||||
|
||||
|
||||
255
Pub_Sub/cameratrailer/thingsboard/v5/cameratrailer_hk_tb_v5.cfg
Normal file
255
Pub_Sub/cameratrailer/thingsboard/v5/cameratrailer_hk_tb_v5.cfg
Normal file
File diff suppressed because one or more lines are too long
18
Pub_Sub/cameratrailer/thingsboard/v5/pub_hk/ddns.py
Normal file
18
Pub_Sub/cameratrailer/thingsboard/v5/pub_hk/ddns.py
Normal file
@@ -0,0 +1,18 @@
|
||||
import requests
|
||||
from common.Logger import logger
|
||||
from mobiuspi_lib.cellular import Cellular
|
||||
|
||||
|
||||
def ddns(message):
|
||||
logger.debug(message)
|
||||
try:
|
||||
# Create a cellular instance
|
||||
cellular = Cellular()
|
||||
|
||||
# Retrieve modem information
|
||||
modem = cellular.get_network()
|
||||
#print("get network: %s" % modem)
|
||||
url= "https://nvghm399n8.execute-api.us-east-1.amazonaws.com/default/HPIoTDDNS?hostname=" + __topic__ + ".henrypump.cloud" + "&ip=" + modem[0].get("ip_addr")
|
||||
requests.post(url)
|
||||
except Exception as e:
|
||||
logger.error(f"Error in cellular: {e}")
|
||||
209
Pub_Sub/cameratrailer/thingsboard/v5/pub_hk/sendData.py
Normal file
209
Pub_Sub/cameratrailer/thingsboard/v5/pub_hk/sendData.py
Normal file
@@ -0,0 +1,209 @@
|
||||
import json, os
|
||||
from datetime import datetime as dt
|
||||
from common.Logger import logger
|
||||
from quickfaas.remotebus import publish
|
||||
from mobiuspi_lib.gps import GPS
|
||||
from quickfaas.global_dict import get as get_params
|
||||
from quickfaas.global_dict import _set_global_args
|
||||
|
||||
|
||||
def reboot():
|
||||
#basic = Basic()
|
||||
logger.info("!" * 10 + "REBOOTING DEVICE" + "!"*10)
|
||||
r = os.popen("kill -s SIGHUP `cat /var/run/python/supervisord.pid`").read()
|
||||
logger.info(f"REBOOT : {r}")
|
||||
|
||||
def checkFileExist(filename):
|
||||
path = "/var/user/files"
|
||||
if not os.path.exists(path):
|
||||
logger.debug("no folder making files folder in var/user")
|
||||
os.makedirs(path)
|
||||
with open(path + "/" + filename, "a") as f:
|
||||
json.dump({}, f)
|
||||
if not os.path.exists(path + "/" + filename):
|
||||
logger.debug("no creds file making creds file")
|
||||
with open(path + "/" + filename, "a") as f:
|
||||
json.dump({}, f)
|
||||
|
||||
def convertDStoJSON(ds):
|
||||
j = dict()
|
||||
for x in ds:
|
||||
j[x["key"]] = x["value"]
|
||||
return j
|
||||
|
||||
def convertJSONtoDS(j):
|
||||
d = []
|
||||
for key in j.keys():
|
||||
d.append({"key": key, "value": j[key]})
|
||||
return d
|
||||
|
||||
def checkCredentialConfig():
|
||||
logger.debug("CHECKING CONFIG")
|
||||
cfgpath = "/var/user/cfg/device_supervisor/device_supervisor.cfg"
|
||||
credspath = "/var/user/files/creds.json"
|
||||
cfg = dict()
|
||||
|
||||
# Check if the configuration file exists
|
||||
if not os.path.exists(cfgpath):
|
||||
logger.error("Configuration file does not exist.")
|
||||
return
|
||||
|
||||
try:
|
||||
with open(cfgpath, "r") as f:
|
||||
cfg = json.load(f)
|
||||
clouds = cfg.get("clouds")
|
||||
logger.debug(clouds)
|
||||
|
||||
# Check if the clouds list is empty
|
||||
if not clouds or len(clouds) == 0:
|
||||
logger.error("Clouds list is empty.")
|
||||
return
|
||||
|
||||
cloud_args = clouds[0].get("args")
|
||||
|
||||
# Check if the cloud arguments exist
|
||||
if not cloud_args:
|
||||
logger.error("Cloud arguments do not exist.")
|
||||
return
|
||||
|
||||
# Check if the clientId, username, and password are missing or unknown
|
||||
if (
|
||||
not cloud_args.get("clientId")
|
||||
or not cloud_args.get("username")
|
||||
or not cloud_args.get("passwd")
|
||||
or cloud_args["clientId"] == "unknown"
|
||||
or cloud_args["username"] == "unknown"
|
||||
or cloud_args["passwd"] == "unknown"
|
||||
):
|
||||
try:
|
||||
checkFileExist("creds.json")
|
||||
except Exception as e:
|
||||
logger.error(f"Error in checkFileExist: {e}")
|
||||
return
|
||||
|
||||
with open(credspath, "r") as c:
|
||||
try:
|
||||
creds = json.load(c)
|
||||
|
||||
if creds:
|
||||
logger.debug("Updating config with stored data")
|
||||
cloud_args["clientId"] = creds.get("clientId")
|
||||
cloud_args["username"] = creds.get("userName")
|
||||
cloud_args["passwd"] = creds.get("password")
|
||||
cfg["clouds"] = clouds
|
||||
cfg = checkParameterConfig(cfg)
|
||||
|
||||
with open(cfgpath, "w", encoding="utf-8") as n:
|
||||
json.dump(cfg, n, indent=1, ensure_ascii=False)
|
||||
|
||||
reboot()
|
||||
except Exception as e:
|
||||
logger.error(f"Error trying to load credentials from file: {e}")
|
||||
return
|
||||
else:
|
||||
# Assuming clouds is filled out, if data is different, assume someone typed in something new and store it
|
||||
checkFileExist("creds.json")
|
||||
with open(credspath, "r") as c:
|
||||
logger.debug("Updating stored file with new data")
|
||||
cfg = checkParameterConfig(cfg)
|
||||
|
||||
with open(cfgpath, "w", encoding="utf-8") as n:
|
||||
json.dump(cfg, n, indent=1, ensure_ascii=False)
|
||||
try:
|
||||
creds = json.load(c)
|
||||
except:
|
||||
creds = {}
|
||||
if creds:
|
||||
if creds.get("clientId") != cloud_args["clientId"]:
|
||||
creds["clientId"] = cloud_args["clientId"]
|
||||
if creds.get("userName") != cloud_args["username"]:
|
||||
creds["userName"] = cloud_args["username"]
|
||||
if creds.get("password") != cloud_args["passwd"]:
|
||||
creds["password"] = cloud_args["passwd"]
|
||||
else:
|
||||
creds = {
|
||||
"clientId": cloud_args["clientId"],
|
||||
"userName": cloud_args["username"],
|
||||
"password": cloud_args["passwd"],
|
||||
}
|
||||
|
||||
with open(credspath, "w") as cw:
|
||||
json.dump(creds, cw)
|
||||
except Exception as e:
|
||||
logger.error(f"Something went wrong in checkCredentialConfig: {e}")
|
||||
|
||||
|
||||
def checkParameterConfig(cfg):
|
||||
logger.debug("Checking Parameters!!!!")
|
||||
paramspath = "/var/user/files/params.json"
|
||||
cfgparams = convertDStoJSON(cfg.get("labels"))
|
||||
#check stored values
|
||||
checkFileExist("params.json")
|
||||
with open(paramspath, "r") as f:
|
||||
logger.debug("Opened param storage file")
|
||||
try:
|
||||
params = json.load(f)
|
||||
except Exception as e:
|
||||
logger.error(f"Params files error: {e}")
|
||||
params = {}
|
||||
if params:
|
||||
if cfgparams != params:
|
||||
#go through each param
|
||||
#if not "unknown" and cfg and params aren't the same take from cfg likely updated manually
|
||||
#if key in cfg but not in params copy to params
|
||||
logger.debug("equalizing params between cfg and stored")
|
||||
for key in cfgparams.keys():
|
||||
try:
|
||||
if cfgparams[key] != params[key] and cfgparams[key] != "unknown":
|
||||
params[key] = cfgparams[key]
|
||||
except:
|
||||
params[key] = cfgparams[key]
|
||||
cfg["labels"] = convertJSONtoDS(params)
|
||||
_set_global_args(convertJSONtoDS(params))
|
||||
with open(paramspath, "w") as p:
|
||||
json.dump(params, p)
|
||||
else:
|
||||
with open(paramspath, "w") as p:
|
||||
logger.debug("initializing param file with params in memory")
|
||||
json.dump(convertDStoJSON(get_params()), p)
|
||||
cfg["labels"] = get_params()
|
||||
|
||||
return cfg
|
||||
|
||||
def getGPS():
|
||||
# Create a gps instance
|
||||
gps = GPS()
|
||||
|
||||
# Retrieve GPS information
|
||||
position_status = gps.get_position_status()
|
||||
logger.debug("position_status: ")
|
||||
logger.debug(position_status)
|
||||
latitude = position_status["latitude"].split(" ")
|
||||
longitude = position_status["longitude"].split(" ")
|
||||
lat_dec = int(latitude[0][:-1]) + (float(latitude[1][:-1])/60)
|
||||
lon_dec = int(longitude[0][:-1]) + (float(longitude[1][:-1])/60)
|
||||
if latitude[2] == "S":
|
||||
lat_dec = lat_dec * -1
|
||||
if longitude[2] == "W":
|
||||
lon_dec = lon_dec * -1
|
||||
#lat_dec = round(lat_dec, 7)
|
||||
#lon_dec = round(lon_dec, 7)
|
||||
logger.debug("HERE IS THE GPS COORDS")
|
||||
logger.debug(f"LATITUDE: {lat_dec}, LONGITUDE: {lon_dec}")
|
||||
speedKnots = position_status["speed"].split(" ")
|
||||
speedMPH = float(speedKnots[0]) * 1.151
|
||||
publish(__topic__, json.dumps({"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values":{"latitude":f"{lat_dec:.8f}", "longitude":f"{lon_dec:.8f}", "speed": f"{speedMPH:.2f}"}}), __qos__)
|
||||
|
||||
def sendData(message,wizard_api):
|
||||
logger.debug(message)
|
||||
#publish(__topic__, json.dumps(message), __qos__)
|
||||
try:
|
||||
checkCredentialConfig()
|
||||
except Exception as e:
|
||||
logger.error(f"Error in checkCredentialConfig: {e}")
|
||||
try:
|
||||
getGPS()
|
||||
except Exception as e:
|
||||
logger.error(f"Could not get gps data!: {e}")
|
||||
|
||||
|
||||
71
Pub_Sub/cameratrailer/thingsboard/v5/pub_hk/snapshot.py
Normal file
71
Pub_Sub/cameratrailer/thingsboard/v5/pub_hk/snapshot.py
Normal file
@@ -0,0 +1,71 @@
|
||||
import json, time, requests, base64
|
||||
from common.Logger import logger
|
||||
from quickfaas.remotebus import publish
|
||||
from quickfaas.global_dict import get as get_params
|
||||
from datetime import datetime as dt
|
||||
from requests.adapters import HTTPAdapter, Retry
|
||||
from requests.auth import HTTPDigestAuth
|
||||
from requests.exceptions import ConnectionError, RequestException
|
||||
|
||||
|
||||
|
||||
def convertDStoJSON(ds):
|
||||
j = dict()
|
||||
for x in ds:
|
||||
j[x.get("key")] = x.get("value")
|
||||
return j
|
||||
|
||||
def getImage():
|
||||
try:
|
||||
logger.debug("made it to getImage")
|
||||
params = convertDStoJSON(get_params())
|
||||
logger.debug(params)
|
||||
camera_ip = params.get("camera_ip").replace("_", ".")
|
||||
port = params.get("port")
|
||||
logger.debug(camera_ip)
|
||||
with open('./snapshot.jpg', 'wb') as handle:
|
||||
with requests.Session() as s:
|
||||
retries = Retry(total = 10, backoff_factor=0.1, status_forcelist=[404,408, 500, 502, 503, 504])
|
||||
s.mount('http://', HTTPAdapter(max_retries=retries))
|
||||
resp = s.get("http://" + camera_ip + ":" + port + "/ISAPI/Streaming/channels/101/picture?videoResolutionWidth=352&videoResolutionHeight=288", auth=HTTPDigestAuth("ASS", "amerus@1903"), stream=True, timeout=120)
|
||||
logger.debug(resp)
|
||||
resp.raise_for_status() # Raise an exception for non-2xx status codes
|
||||
for block in resp.iter_content(1024):
|
||||
if not block:
|
||||
break
|
||||
handle.write(block)
|
||||
|
||||
with open('./snapshot.jpg', 'rb') as image_file:
|
||||
encoded_string = base64.b64encode(image_file.read())
|
||||
publish(__topic__, json.dumps({"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values":{"snapshot": encoded_string.decode("UTF-8"), "camera_error": "OK"}}), __qos__)
|
||||
except RequestException as req_err:
|
||||
logger.error("Request exception occurred while getting image from the camera.")
|
||||
logger.error(req_err)
|
||||
publish(
|
||||
__topic__,
|
||||
json.dumps({
|
||||
"ts": (round(dt.timestamp(dt.now()) / 600) * 600) * 1000,
|
||||
"values": {
|
||||
"camera_error": f"Request exception occurred while getting image from the camera.\n\n{req_err}"
|
||||
}
|
||||
}),
|
||||
__qos__
|
||||
)
|
||||
except ConnectionError as ce:
|
||||
logger.error("Could not connect to Camera")
|
||||
logger.error(ce)
|
||||
publish(__topic__, json.dumps({"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values":{"camera_error": f"Could not connect to camera (ConnectionError), check camera connection and power\n\n{ce}"}}), __qos__)
|
||||
except Exception as e:
|
||||
logger.error(f"Something went wrong in getImage: {e}")
|
||||
|
||||
|
||||
def sendSnapshot(message,wizard_api):
|
||||
logger.debug(message)
|
||||
try:
|
||||
getImage()
|
||||
|
||||
except Exception as e:
|
||||
logger.error("Could not get image")
|
||||
logger.error(e)
|
||||
publish(__topic__, json.dumps({"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values":{"camera_error": f"Could not connect to camera, check camera connection, power, IP Address\n\n{e}"}}), __qos__)
|
||||
|
||||
@@ -1,209 +0,0 @@
|
||||
{
|
||||
"controllers": [
|
||||
{
|
||||
"protocol": "Virtual Controller",
|
||||
"name": "cameratrailer",
|
||||
"args": {},
|
||||
"endpoint": "",
|
||||
"samplePeriod": 0,
|
||||
"expired": 0
|
||||
},
|
||||
{
|
||||
"protocol": "Virtual Controller",
|
||||
"name": "snapshot",
|
||||
"args": {},
|
||||
"endpoint": "",
|
||||
"samplePeriod": 0,
|
||||
"expired": 0
|
||||
}
|
||||
],
|
||||
"measures": [
|
||||
{
|
||||
"name": "c",
|
||||
"ctrlName": "cameratrailer",
|
||||
"group": "default",
|
||||
"uploadType": "periodic",
|
||||
"dataType": "BIT",
|
||||
"addr": "",
|
||||
"readWrite": "ro",
|
||||
"unit": "",
|
||||
"desc": "",
|
||||
"transformType": 0,
|
||||
"bitMap": 0
|
||||
},
|
||||
{
|
||||
"name": "s",
|
||||
"ctrlName": "snapshot",
|
||||
"group": "snapshot",
|
||||
"uploadType": "periodic",
|
||||
"dataType": "BIT",
|
||||
"addr": "",
|
||||
"readWrite": "ro",
|
||||
"unit": "",
|
||||
"desc": "",
|
||||
"transformType": 0,
|
||||
"bitMap": 0
|
||||
}
|
||||
],
|
||||
"alarmLables": [
|
||||
"default"
|
||||
],
|
||||
"alarms": [],
|
||||
"groups": [
|
||||
{
|
||||
"name": "default",
|
||||
"uploadInterval": 600
|
||||
},
|
||||
{
|
||||
"name": "snapshot",
|
||||
"uploadInterval": 3600
|
||||
}
|
||||
],
|
||||
"misc": {
|
||||
"maxAlarmRecordSz": 2000,
|
||||
"logLvl": "INFO",
|
||||
"coms": [
|
||||
{
|
||||
"name": "rs232",
|
||||
"baud": 9600,
|
||||
"bits": 8,
|
||||
"stopbits": 1,
|
||||
"parityChk": "n"
|
||||
},
|
||||
{
|
||||
"name": "rs485",
|
||||
"baud": 9600,
|
||||
"bits": 8,
|
||||
"stopbits": 1,
|
||||
"parityChk": "n"
|
||||
}
|
||||
]
|
||||
},
|
||||
"clouds": [
|
||||
{
|
||||
"cacheSize": 10000,
|
||||
"enable": 1,
|
||||
"name": "default",
|
||||
"type": "Standard MQTT",
|
||||
"args": {
|
||||
"host": "thingsboard.cloud",
|
||||
"port": 1883,
|
||||
"clientId": "camera-trailer-110",
|
||||
"auth": 1,
|
||||
"tls": 0,
|
||||
"cleanSession": 0,
|
||||
"mqttVersion": "v3.1.1",
|
||||
"keepalive": 60,
|
||||
"key": "",
|
||||
"cert": "",
|
||||
"rootCA": "",
|
||||
"verifyServer": 0,
|
||||
"verifyClient": 0,
|
||||
"username": "assmqtt",
|
||||
"passwd": "assmqtt@1903",
|
||||
"authType": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"quickfaas": {
|
||||
"genericFuncs": [],
|
||||
"uploadFuncs": [
|
||||
{
|
||||
"qos": 1,
|
||||
"funcName": "sendData",
|
||||
"script": "# Enter your python code.\nimport json\nfrom common.Logger import logger\nfrom quickfaas.remotebus import publish\nfrom mobiuspi_lib.gps import GPS \n\ndef getGPS():\n # Create a gps instance\n gps = GPS()\n\n # Retrieve GPS information\n position_status = gps.get_position_status()\n logger.debug(\"position_status: \")\n logger.debug(position_status)\n latitude = position_status[\"latitude\"].split(\" \")\n longitude = position_status[\"longitude\"].split(\" \")\n lat_dec = int(latitude[0][:-1]) + (float(latitude[1][:-1])/60)\n lon_dec = int(longitude[0][:-1]) + (float(longitude[1][:-1])/60)\n if latitude[2] == \"S\":\n lat_dec = lat_dec * -1\n if longitude[2] == \"W\":\n lon_dec = lon_dec * -1\n #lat_dec = round(lat_dec, 7)\n #lon_dec = round(lon_dec, 7)\n logger.info(\"HERE IS THE GPS COORDS\")\n logger.info(f\"LATITUDE: {lat_dec}, LONGITUDE: {lon_dec}\")\n speedKnots = position_status[\"speed\"].split(\" \")\n speedMPH = float(speedKnots[0]) * 1.151\n publish(__topic__, json.dumps({\"latitude\":f\"{lat_dec:.8f}\", \"longitude\":f\"{lon_dec:.8f}\", \"speed\": f\"{speedMPH:.2f}\"}), __qos__)\n\ndef sendData(message,wizard_api):\n logger.debug(message)\n #publish(__topic__, json.dumps(message), __qos__)\n try:\n getGPS()\n except:\n logger.error(\"Could not get gps data!\")\n\n ",
|
||||
"name": "sendData",
|
||||
"trigger": "measure_event",
|
||||
"topic": "v1/devices/me/telemetry",
|
||||
"cloudName": "default",
|
||||
"groups": [
|
||||
"default"
|
||||
],
|
||||
"msgType": 0
|
||||
},
|
||||
{
|
||||
"qos": 1,
|
||||
"funcName": "sendSnapshot",
|
||||
"script": "# Enter your python code.\nimport json\nfrom common.Logger import logger\nfrom quickfaas.remotebus import publish\nimport requests\nfrom requests.auth import HTTPDigestAuth\nfrom requests.exceptions import ConnectionError\nimport base64\n\ndef getImage():\n with open('./snapshot.jpg', 'wb') as handle:\n resp = requests.get(\"http://192.168.1.97:3097/cgi-bin/SnapshotJPEG?Resolution=640x360\", auth=HTTPDigestAuth(\"ASS\", \"amerus@1903\"), stream=True)\n for block in resp.iter_content(1024):\n if not block:\n break\n handle.write(block)\n \n with open('./snapshot.jpg', 'rb') as image_file:\n encoded_string = base64.b64encode(image_file.read())\n publish(__topic__, json.dumps({\"snapshot\": encoded_string.decode(\"UTF-8\"), \"camera_error\": \"OK\"}), __qos__)\n\n\ndef sendSnapshot(message,wizard_api):\n logger.debug(message)\n try:\n getImage()\n except ConnectionError as ce:\n logger.error(\"Could not connect to Camera\")\n logger.error(ce)\n publish(__topic__, json.dumps({\"camera_error\": f\"Could not connect to camera, check camera connection and power\\n\\n{ce}\"}), __qos__)\n except Exception as e:\n logger.error(\"Could not get image\")\n logger.error(e)\n publish(__topic__, json.dumps({\"camera_error\": f\"Could not connect to camera, check camera connection and power\\n\\n{e}\"}), __qos__)\n ",
|
||||
"name": "snapshot",
|
||||
"trigger": "measure_event",
|
||||
"topic": "v1/devices/me/telemetry",
|
||||
"cloudName": "default",
|
||||
"groups": [
|
||||
"snapshot"
|
||||
],
|
||||
"msgType": 0
|
||||
}
|
||||
],
|
||||
"downloadFuncs": []
|
||||
},
|
||||
"labels": [
|
||||
{
|
||||
"key": "SN",
|
||||
"value": "GF5022132004824"
|
||||
},
|
||||
{
|
||||
"key": "MAC",
|
||||
"value": "00:18:05:19:bf:b2"
|
||||
}
|
||||
],
|
||||
"modbusSlave": {
|
||||
"enable": 0,
|
||||
"protocol": "Modbus-TCP",
|
||||
"port": 502,
|
||||
"slaveAddr": 1,
|
||||
"int16Ord": "ab",
|
||||
"int32Ord": "abcd",
|
||||
"float32Ord": "abcd",
|
||||
"maxConnection": 5,
|
||||
"mapping_table": []
|
||||
},
|
||||
"iec104Server": {
|
||||
"enable": 0,
|
||||
"cotSize": 2,
|
||||
"port": 2404,
|
||||
"serverList": [
|
||||
{
|
||||
"asduAddr": 1
|
||||
}
|
||||
],
|
||||
"kValue": 12,
|
||||
"wValue": 8,
|
||||
"t0": 15,
|
||||
"t1": 15,
|
||||
"t2": 10,
|
||||
"t3": 20,
|
||||
"maximumLink": 5,
|
||||
"timeSet": 1,
|
||||
"byteOrder": "abcd",
|
||||
"mapping_table": []
|
||||
},
|
||||
"opcuaServer": {
|
||||
"enable": 0,
|
||||
"port": 4840,
|
||||
"maximumLink": 5,
|
||||
"securityMode": 0,
|
||||
"identifierType": "String",
|
||||
"mapping_table": []
|
||||
},
|
||||
"southMetadata": {},
|
||||
"bindMetadata": {
|
||||
"version": "",
|
||||
"timestamp": ""
|
||||
},
|
||||
"bindConfig": {
|
||||
"enable": 0,
|
||||
"bind": {
|
||||
"modelId": "",
|
||||
"modelName": "",
|
||||
"srcId": "",
|
||||
"srcName": "",
|
||||
"devId": "",
|
||||
"devName": ""
|
||||
},
|
||||
"varGroups": [],
|
||||
"variables": [],
|
||||
"alerts": []
|
||||
},
|
||||
"version": "2.2.1"
|
||||
}
|
||||
@@ -1,196 +0,0 @@
|
||||
{
|
||||
"controllers": [
|
||||
{
|
||||
"protocol": "Virtual Controller",
|
||||
"name": "cameratrailer",
|
||||
"args": {},
|
||||
"endpoint": "",
|
||||
"samplePeriod": 0,
|
||||
"expired": 0
|
||||
},
|
||||
{
|
||||
"protocol": "Virtual Controller",
|
||||
"name": "snapshot",
|
||||
"args": {},
|
||||
"endpoint": "",
|
||||
"samplePeriod": 0,
|
||||
"expired": 0
|
||||
}
|
||||
],
|
||||
"measures": [
|
||||
{
|
||||
"name": "c",
|
||||
"ctrlName": "cameratrailer",
|
||||
"group": "default",
|
||||
"uploadType": "periodic",
|
||||
"dataType": "BIT",
|
||||
"addr": "",
|
||||
"readWrite": "ro",
|
||||
"unit": "",
|
||||
"desc": "",
|
||||
"transformType": 0,
|
||||
"bitMap": 0
|
||||
},
|
||||
{
|
||||
"name": "s",
|
||||
"ctrlName": "snapshot",
|
||||
"group": "snapshot",
|
||||
"uploadType": "periodic",
|
||||
"dataType": "BIT",
|
||||
"addr": "",
|
||||
"readWrite": "ro",
|
||||
"unit": "",
|
||||
"desc": "",
|
||||
"transformType": 0,
|
||||
"bitMap": 0
|
||||
}
|
||||
],
|
||||
"alarms": [],
|
||||
"groups": [
|
||||
{
|
||||
"name": "default",
|
||||
"uploadInterval": 600
|
||||
},
|
||||
{
|
||||
"name": "snapshot",
|
||||
"uploadInterval": 3600
|
||||
}
|
||||
],
|
||||
"misc": {
|
||||
"maxAlarmRecordSz": 2000,
|
||||
"logLvl": "INFO",
|
||||
"coms": [
|
||||
{
|
||||
"name": "rs232",
|
||||
"baud": 9600,
|
||||
"bits": 8,
|
||||
"stopbits": 1,
|
||||
"parityChk": "n"
|
||||
},
|
||||
{
|
||||
"name": "rs485",
|
||||
"baud": 9600,
|
||||
"bits": 8,
|
||||
"stopbits": 1,
|
||||
"parityChk": "n"
|
||||
}
|
||||
]
|
||||
},
|
||||
"clouds": [
|
||||
{
|
||||
"cacheSize": 10000,
|
||||
"enable": 1,
|
||||
"name": "default",
|
||||
"type": "Standard MQTT",
|
||||
"args": {
|
||||
"host": "thingsboard.cloud",
|
||||
"port": 1883,
|
||||
"clientId": "camera-trailer",
|
||||
"auth": 1,
|
||||
"tls": 0,
|
||||
"cleanSession": 0,
|
||||
"mqttVersion": "v3.1.1",
|
||||
"keepalive": 60,
|
||||
"key": "",
|
||||
"cert": "",
|
||||
"rootCA": "",
|
||||
"verifyServer": 0,
|
||||
"verifyClient": 0,
|
||||
"username": "assmqtt",
|
||||
"passwd": "assmqtt@1903",
|
||||
"authType": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"quickfaas": {
|
||||
"genericFuncs": [],
|
||||
"uploadFuncs": [
|
||||
{
|
||||
"qos": 1,
|
||||
"funcName": "sendData",
|
||||
"script": "# Enter your python code.\nimport json\nfrom common.Logger import logger\nfrom quickfaas.remotebus import publish\nfrom mobiuspi_lib.gps import GPS \n\ndef getGPS():\n # Create a gps instance\n gps = GPS()\n\n # Retrieve GPS information\n position_status = gps.get_position_status()\n logger.debug(\"position_status: \")\n logger.debug(position_status)\n latitude = position_status[\"latitude\"].split(\" \")\n longitude = position_status[\"longitude\"].split(\" \")\n lat_dec = int(latitude[0][:-1]) + (float(latitude[1][:-1])/60)\n lon_dec = int(longitude[0][:-1]) + (float(longitude[1][:-1])/60)\n if latitude[2] == \"S\":\n lat_dec = lat_dec * -1\n if longitude[2] == \"W\":\n lon_dec = lon_dec * -1\n #lat_dec = round(lat_dec, 7)\n #lon_dec = round(lon_dec, 7)\n logger.info(\"HERE IS THE GPS COORDS\")\n logger.info(f\"LATITUDE: {lat_dec}, LONGITUDE: {lon_dec}\")\n speedKnots = position_status[\"speed\"].split(\" \")\n speedMPH = float(speedKnots[0]) * 1.151\n publish(__topic__, json.dumps({\"latitude\":f\"{lat_dec:.8f}\", \"longitude\":f\"{lon_dec:.8f}\", \"speed\": f\"{speedMPH:.2f}\"}), __qos__)\n\ndef sendData(message,wizard_api):\n logger.debug(message)\n #publish(__topic__, json.dumps(message), __qos__)\n try:\n getGPS()\n except:\n logger.error(\"Could not get gps data!\")\n\n ",
|
||||
"name": "sendData",
|
||||
"trigger": "measure_event",
|
||||
"topic": "v1/devices/me/telemetry",
|
||||
"cloudName": "default",
|
||||
"groups": [
|
||||
"default"
|
||||
],
|
||||
"msgType": 0
|
||||
},
|
||||
{
|
||||
"qos": 1,
|
||||
"funcName": "sendSnapshot",
|
||||
"script": "# Enter your python code.\nimport json\nfrom common.Logger import logger\nfrom quickfaas.remotebus import publish\nimport requests\nfrom requests.auth import HTTPDigestAuth\nfrom requests.exceptions import ConnectionError\nimport base64\n\ndef getImage():\n with open('./snapshot.jpg', 'wb') as handle:\n resp = requests.get(\"http://192.168.1.97:3097/cgi-bin/SnapshotJPEG?Resolution=640x360\", auth=HTTPDigestAuth(\"ASS\", \"amerus@1903\"), stream=True)\n for block in resp.iter_content(1024):\n if not block:\n break\n handle.write(block)\n \n with open('./snapshot.jpg', 'rb') as image_file:\n encoded_string = base64.b64encode(image_file.read())\n publish(__topic__, json.dumps({\"snapshot\": encoded_string.decode(\"UTF-8\"), \"camera_error\": \"OK\"}), __qos__)\n\n\ndef sendSnapshot(message,wizard_api):\n logger.debug(message)\n try:\n getImage()\n except ConnectionError as ce:\n logger.error(\"Could not connect to Camera\")\n logger.error(ce)\n publish(__topic__, json.dumps({\"camera_error\": f\"Could not connect to camera, check camera connection and power\\n\\n{ce}\"}), __qos__)\n except Exception as e:\n logger.error(\"Could not get image\")\n logger.error(e)\n publish(__topic__, json.dumps({\"camera_error\": f\"Could not connect to camera, check camera connection and power\\n\\n{e}\"}), __qos__)\n ",
|
||||
"name": "snapshot",
|
||||
"trigger": "measure_event",
|
||||
"topic": "v1/devices/me/telemetry",
|
||||
"cloudName": "default",
|
||||
"groups": [
|
||||
"snapshot"
|
||||
],
|
||||
"msgType": 0
|
||||
}
|
||||
],
|
||||
"downloadFuncs": []
|
||||
},
|
||||
"modbusSlave": {
|
||||
"enable": 0,
|
||||
"protocol": "Modbus-TCP",
|
||||
"port": 502,
|
||||
"slaveAddr": 1,
|
||||
"int16Ord": "ab",
|
||||
"int32Ord": "abcd",
|
||||
"float32Ord": "abcd",
|
||||
"maxConnection": 5,
|
||||
"mapping_table": []
|
||||
},
|
||||
"iec104Server": {
|
||||
"enable": 0,
|
||||
"cotSize": 2,
|
||||
"port": 2404,
|
||||
"serverList": [
|
||||
{
|
||||
"asduAddr": 1
|
||||
}
|
||||
],
|
||||
"kValue": 12,
|
||||
"wValue": 8,
|
||||
"t0": 15,
|
||||
"t1": 15,
|
||||
"t2": 10,
|
||||
"t3": 20,
|
||||
"maximumLink": 5,
|
||||
"timeSet": 1,
|
||||
"byteOrder": "abcd",
|
||||
"mapping_table": []
|
||||
},
|
||||
"opcuaServer": {
|
||||
"enable": 0,
|
||||
"port": 4840,
|
||||
"maximumLink": 5,
|
||||
"securityMode": 0,
|
||||
"identifierType": "String",
|
||||
"mapping_table": []
|
||||
},
|
||||
"southMetadata": {},
|
||||
"bindMetadata": {
|
||||
"version": "",
|
||||
"timestamp": ""
|
||||
},
|
||||
"bindConfig": {
|
||||
"enable": 0,
|
||||
"bind": {
|
||||
"modelId": "",
|
||||
"modelName": "",
|
||||
"srcId": "",
|
||||
"srcName": "",
|
||||
"devId": "",
|
||||
"devName": ""
|
||||
},
|
||||
"varGroups": [],
|
||||
"variables": [],
|
||||
"alerts": []
|
||||
},
|
||||
"version": "2.2.1"
|
||||
}
|
||||
164
Pub_Sub/flowmeterskid/flowmeterskid_ethernetip_baseline.py
Normal file
164
Pub_Sub/flowmeterskid/flowmeterskid_ethernetip_baseline.py
Normal file
@@ -0,0 +1,164 @@
|
||||
import json, os, struct
|
||||
from datetime import datetime as dt
|
||||
from common.Logger import logger
|
||||
from quickfaas.remotebus import publish
|
||||
from mobiuspi_lib.gps import GPS
|
||||
from quickfaas.global_dict import get as get_params
|
||||
from quickfaas.global_dict import _set_global_args
|
||||
from pycomm3 import CIPDriver
|
||||
|
||||
|
||||
def reboot():
|
||||
#basic = Basic()
|
||||
logger.info("!" * 10 + "REBOOTING DEVICE" + "!"*10)
|
||||
r = os.popen("kill -s SIGHUP `cat /var/run/python/supervisord.pid`").read()
|
||||
logger.info(f"REBOOT : {r}")
|
||||
|
||||
def checkFileExist(filename):
|
||||
path = "/var/user/files"
|
||||
if not os.path.exists(path):
|
||||
logger.info("no folder making files folder in var/user")
|
||||
os.makedirs(path)
|
||||
with open(path + "/" + filename, "a") as f:
|
||||
json.dump({}, f)
|
||||
if not os.path.exists(path + "/" + filename):
|
||||
logger.info("no creds file making creds file")
|
||||
with open(path + "/" + filename, "a") as f:
|
||||
json.dump({}, f)
|
||||
|
||||
def convertDStoJSON(ds):
|
||||
j = dict()
|
||||
for x in ds:
|
||||
j[x["key"]] = x["value"]
|
||||
return j
|
||||
|
||||
def convertJSONtoDS(j):
|
||||
d = []
|
||||
for key in j.keys():
|
||||
d.append({"key": key, "value": j[key]})
|
||||
return d
|
||||
|
||||
def checkCredentialConfig():
|
||||
logger.info("CHECKING CONFIG")
|
||||
cfgpath = "/var/user/cfg/device_supervisor/device_supervisor.cfg"
|
||||
credspath = "/var/user/files/creds.json"
|
||||
cfg = dict()
|
||||
with open(cfgpath, "r") as f:
|
||||
cfg = json.load(f)
|
||||
clouds = cfg.get("clouds")
|
||||
logger.info(clouds)
|
||||
#if not configured then try to configure from stored values
|
||||
if clouds[0]["args"]["clientId"] == "unknown" or clouds[0]["args"]["username"] == "unknown" or not clouds[0]["args"]["passwd"] or clouds[0]["args"]["passwd"] == "unknown":
|
||||
checkFileExist("creds.json")
|
||||
with open(credspath, "r") as c:
|
||||
creds = json.load(c)
|
||||
if creds:
|
||||
logger.info("updating config with stored data")
|
||||
clouds[0]["args"]["clientId"] = creds["clientId"]
|
||||
clouds[0]["args"]["username"] = creds["userName"]
|
||||
clouds[0]["args"]["passwd"] = creds["password"]
|
||||
cfg["clouds"] = clouds
|
||||
cfg = checkParameterConfig(cfg)
|
||||
with open(cfgpath, "w", encoding='utf-8') as n:
|
||||
json.dump(cfg, n, indent=1, ensure_ascii=False)
|
||||
reboot()
|
||||
else:
|
||||
#assuming clouds is filled out, if data is different then assume someone typed in something new and store it, if creds is empty fill with clouds' data
|
||||
checkFileExist("creds.json")
|
||||
with open(credspath, "r") as c:
|
||||
logger.info("updating stored file with new data")
|
||||
cfg = checkParameterConfig(cfg)
|
||||
with open(cfgpath, "w", encoding='utf-8') as n:
|
||||
json.dump(cfg, n, indent=1, ensure_ascii=False)
|
||||
creds = json.load(c)
|
||||
if creds:
|
||||
if creds["clientId"] != clouds[0]["args"]["clientId"]:
|
||||
creds["clientId"] = clouds[0]["args"]["clientId"]
|
||||
if creds["userName"] != clouds[0]["args"]["username"]:
|
||||
creds["userName"] = clouds[0]["args"]["username"]
|
||||
if creds["password"] != clouds[0]["args"]["passwd"]:
|
||||
creds["password"] = clouds[0]["args"]["passwd"]
|
||||
else:
|
||||
creds["clientId"] = clouds[0]["args"]["clientId"]
|
||||
creds["userName"] = clouds[0]["args"]["username"]
|
||||
creds["password"] = clouds[0]["args"]["passwd"]
|
||||
with open(credspath, "w") as cw:
|
||||
json.dump(creds,cw)
|
||||
|
||||
def checkParameterConfig(cfg):
|
||||
logger.info("Checking Parameters!!!!")
|
||||
paramspath = "/var/user/files/params.json"
|
||||
cfgparams = convertDStoJSON(cfg.get("labels"))
|
||||
#check stored values
|
||||
checkFileExist("params.json")
|
||||
with open(paramspath, "r") as f:
|
||||
logger.info("Opened param storage file")
|
||||
params = json.load(f)
|
||||
if params:
|
||||
if cfgparams != params:
|
||||
#go through each param
|
||||
#if not "unknown" and cfg and params aren't the same take from cfg likely updated manually
|
||||
#if key in cfg but not in params copy to params
|
||||
logger.info("equalizing params between cfg and stored")
|
||||
for key in cfgparams.keys():
|
||||
try:
|
||||
if cfgparams[key] != params[key] and cfgparams[key] != "unknown":
|
||||
params[key] = cfgparams[key]
|
||||
except:
|
||||
params[key] = cfgparams[key]
|
||||
cfg["labels"] = convertJSONtoDS(params)
|
||||
_set_global_args(convertJSONtoDS(params))
|
||||
with open(paramspath, "w") as p:
|
||||
json.dump(params, p)
|
||||
else:
|
||||
with open(paramspath, "w") as p:
|
||||
logger.info("initializing param file with params in memory")
|
||||
json.dump(convertDStoJSON(get_params()), p)
|
||||
cfg["labels"] = get_params()
|
||||
|
||||
return cfg
|
||||
|
||||
def getGPS():
|
||||
# Create a gps instance
|
||||
gps = GPS()
|
||||
|
||||
# Retrieve GPS information
|
||||
position_status = gps.get_position_status()
|
||||
logger.debug("position_status: ")
|
||||
logger.debug(position_status)
|
||||
latitude = position_status["latitude"].split(" ")
|
||||
longitude = position_status["longitude"].split(" ")
|
||||
lat_dec = int(latitude[0][:-1]) + (float(latitude[1][:-1])/60)
|
||||
lon_dec = int(longitude[0][:-1]) + (float(longitude[1][:-1])/60)
|
||||
if latitude[2] == "S":
|
||||
lat_dec = lat_dec * -1
|
||||
if longitude[2] == "W":
|
||||
lon_dec = lon_dec * -1
|
||||
#lat_dec = round(lat_dec, 7)
|
||||
#lon_dec = round(lon_dec, 7)
|
||||
logger.info("HERE IS THE GPS COORDS")
|
||||
logger.info(f"LATITUDE: {lat_dec}, LONGITUDE: {lon_dec}")
|
||||
speedKnots = position_status["speed"].split(" ")
|
||||
speedMPH = float(speedKnots[0]) * 1.151
|
||||
publish(__topic__, json.dumps({"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values":{"latitude":f"{lat_dec:.8f}", "longitude":f"{lon_dec:.8f}", "speed": f"{speedMPH:.2f}"}}), __qos__)
|
||||
|
||||
def sendData(message,wizard_api):
|
||||
logger.debug(message)
|
||||
#publish(__topic__, json.dumps(message), __qos__)
|
||||
try:
|
||||
#checkCredentialConfig()
|
||||
with CIPDriver('192.168.1.223') as fm:
|
||||
resp = fm.generic_message(service=b"\x0E", #get_single_attribute
|
||||
class_code=b"\x04", #assembly
|
||||
instance=b"\x64", #assembly 100 which is a 40byte array
|
||||
attribute=b"\x03", #similar to function code in modbus
|
||||
route_path=True)
|
||||
print("Bytes", resp[1])
|
||||
logger.info("Volume Flow", struct.unpack('f',resp[1][8:12])[0]) #volume flow is byte 9 - 12
|
||||
logger.info("Totalizer 1",struct.unpack('f',resp[1][28:32])[0]) #totalizer 1 is byte 29 - 32
|
||||
logger.info("Totalizer 2", struct.unpack('f',resp[1][32:36])[0]) #totalizer 2 is byte 33 - 36
|
||||
logger.info("Totalizer 3", struct.unpack('f',resp[1][36:40])[0]) #totalizer 3 is byte 37 - 40
|
||||
except:
|
||||
logger.error("Could not get gps data!")
|
||||
|
||||
|
||||
@@ -29,13 +29,11 @@
|
||||
"uploadType": "periodic",
|
||||
"dataType": "FLOAT",
|
||||
"addr": "43874",
|
||||
"decimal": 2,
|
||||
"readWrite": "ro",
|
||||
"unit": "",
|
||||
"desc": "",
|
||||
"transformType": 0,
|
||||
"decimal": 2,
|
||||
"gain": "1.0",
|
||||
"offset": "0.0",
|
||||
"msecSample": 0
|
||||
},
|
||||
{
|
||||
@@ -45,13 +43,11 @@
|
||||
"uploadType": "periodic",
|
||||
"dataType": "FLOAT",
|
||||
"addr": "42610",
|
||||
"decimal": 2,
|
||||
"readWrite": "ro",
|
||||
"unit": "",
|
||||
"desc": "",
|
||||
"transformType": 0,
|
||||
"decimal": 2,
|
||||
"gain": "1.0",
|
||||
"offset": "0.0",
|
||||
"msecSample": 0
|
||||
},
|
||||
{
|
||||
@@ -61,13 +57,11 @@
|
||||
"uploadType": "periodic",
|
||||
"dataType": "FLOAT",
|
||||
"addr": "42810",
|
||||
"decimal": 2,
|
||||
"readWrite": "ro",
|
||||
"unit": "",
|
||||
"desc": "",
|
||||
"transformType": 0,
|
||||
"decimal": 2,
|
||||
"gain": "1.0",
|
||||
"offset": "0.0",
|
||||
"msecSample": 0
|
||||
},
|
||||
{
|
||||
@@ -77,59 +71,57 @@
|
||||
"uploadType": "periodic",
|
||||
"dataType": "FLOAT",
|
||||
"addr": "43010",
|
||||
"decimal": 2,
|
||||
"readWrite": "ro",
|
||||
"unit": "",
|
||||
"desc": "",
|
||||
"transformType": 0,
|
||||
"decimal": 2,
|
||||
"gain": "1.0",
|
||||
"offset": "0.0",
|
||||
"msecSample": 0
|
||||
},
|
||||
{
|
||||
"name": "flow_unit",
|
||||
"ctrlName": "flowmeter",
|
||||
"group": "default",
|
||||
"uploadType": "periodic",
|
||||
"uploadType": "onChange",
|
||||
"dataType": "INT",
|
||||
"addr": "42103",
|
||||
"readWrite": "ro",
|
||||
"unit": "",
|
||||
"desc": "",
|
||||
"transformType": 0,
|
||||
"msecSample": 0,
|
||||
"gain": "1.0",
|
||||
"offset": "0.0",
|
||||
"msecSample": 0
|
||||
"offset": "0.0"
|
||||
},
|
||||
{
|
||||
"name": "totalizer_1_unit",
|
||||
"ctrlName": "flowmeter",
|
||||
"group": "default",
|
||||
"uploadType": "periodic",
|
||||
"uploadType": "onChange",
|
||||
"dataType": "INT",
|
||||
"addr": "44604",
|
||||
"readWrite": "ro",
|
||||
"unit": "",
|
||||
"desc": "",
|
||||
"transformType": 0,
|
||||
"msecSample": 0,
|
||||
"gain": "1.0",
|
||||
"offset": "0.0",
|
||||
"msecSample": 0
|
||||
"offset": "0.0"
|
||||
},
|
||||
{
|
||||
"name": "totalizer_2_unit",
|
||||
"ctrlName": "flowmeter",
|
||||
"group": "default",
|
||||
"uploadType": "periodic",
|
||||
"uploadType": "onChange",
|
||||
"dataType": "INT",
|
||||
"addr": "44605",
|
||||
"readWrite": "ro",
|
||||
"unit": "",
|
||||
"desc": "",
|
||||
"transformType": 0,
|
||||
"msecSample": 0,
|
||||
"gain": "1.0",
|
||||
"offset": "0.0",
|
||||
"msecSample": 0
|
||||
"offset": "0.0"
|
||||
},
|
||||
{
|
||||
"name": "totalizer_3_unit",
|
||||
@@ -142,24 +134,69 @@
|
||||
"unit": "",
|
||||
"desc": "",
|
||||
"transformType": 0,
|
||||
"gain": "1.0",
|
||||
"offset": "0.0",
|
||||
"msecSample": 0
|
||||
},
|
||||
{
|
||||
"name": "reset_totalizers",
|
||||
"ctrlName": "flowmeter",
|
||||
"group": "default",
|
||||
"uploadType": "periodic",
|
||||
"group": "",
|
||||
"uploadType": "never",
|
||||
"dataType": "INT",
|
||||
"addr": "42609",
|
||||
"readWrite": "rw",
|
||||
"unit": "",
|
||||
"desc": "",
|
||||
"transformType": 0,
|
||||
"msecSample": 0,
|
||||
"gain": "1.0",
|
||||
"offset": "0.0",
|
||||
"msecSample": 0
|
||||
"offset": "0.0"
|
||||
},
|
||||
{
|
||||
"name": "byte_order",
|
||||
"ctrlName": "flowmeter",
|
||||
"group": "default",
|
||||
"uploadType": "onChange",
|
||||
"dataType": "INT",
|
||||
"addr": "44915",
|
||||
"readWrite": "rw",
|
||||
"unit": "",
|
||||
"desc": "",
|
||||
"transformType": 0,
|
||||
"msecSample": 0,
|
||||
"gain": "1.0",
|
||||
"offset": "0.0"
|
||||
},
|
||||
{
|
||||
"name": "device_name",
|
||||
"ctrlName": "flowmeter",
|
||||
"group": "default",
|
||||
"uploadType": "onChange",
|
||||
"dataType": "STRING",
|
||||
"addr": "47238",
|
||||
"len": 14,
|
||||
"readWrite": "ro",
|
||||
"unit": "",
|
||||
"desc": "",
|
||||
"transformType": 0,
|
||||
"msecSample": 0,
|
||||
"gain": "1.0",
|
||||
"offset": "0.0"
|
||||
},
|
||||
{
|
||||
"name": "serial_number",
|
||||
"ctrlName": "flowmeter",
|
||||
"group": "default",
|
||||
"uploadType": "onChange",
|
||||
"dataType": "STRING",
|
||||
"addr": "47003",
|
||||
"len": 12,
|
||||
"readWrite": "ro",
|
||||
"unit": "",
|
||||
"desc": "",
|
||||
"transformType": 0,
|
||||
"msecSample": 0,
|
||||
"gain": "1.0",
|
||||
"offset": "0.0"
|
||||
}
|
||||
],
|
||||
"alarmLables": [
|
||||
|
||||
@@ -6,52 +6,71 @@ from mobiuspi_lib.gps import GPS
|
||||
from quickfaas.global_dict import get as get_params
|
||||
from quickfaas.global_dict import _set_global_args
|
||||
|
||||
def reboot():
|
||||
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 checkFileExist(filename):
|
||||
path = "/var/user/files"
|
||||
try:
|
||||
if not os.path.exists(path):
|
||||
logger.info("no folder making files folder in var/user")
|
||||
logger.debug("no folder making files folder in var/user")
|
||||
os.makedirs(path)
|
||||
with open(path + "/" + filename, "a") as f:
|
||||
json.dump({}, f)
|
||||
except Exception as e:
|
||||
logger.error(f"Something went wrong in checkFileExist while making folder: {e}")
|
||||
|
||||
try:
|
||||
if not os.path.exists(path + "/" + filename):
|
||||
logger.info("no creds file making creds file")
|
||||
logger.debug("no creds file making creds file")
|
||||
with open(path + "/" + filename, "a") as f:
|
||||
json.dump({}, f)
|
||||
except Exception as e:
|
||||
logger.error(f"Something went wrong in checkFileExist wihle making file: {e}")
|
||||
|
||||
def convertDStoJSON(ds):
|
||||
j = dict()
|
||||
try:
|
||||
for x in ds:
|
||||
j[x["key"]] = x["value"]
|
||||
except Exception as e:
|
||||
logger.error(f"Something went wrong in convertDStoJSON: {e}")
|
||||
return j
|
||||
|
||||
def convertJSONtoDS(j):
|
||||
d = []
|
||||
try:
|
||||
for key in j.keys():
|
||||
d.append({"key": key, "value": j[key]})
|
||||
except Exception as e:
|
||||
logger.error(f"Something went wrong in convertJSONtoDS: {e}")
|
||||
return d
|
||||
|
||||
def checkCredentialConfig():
|
||||
logger.info("CHECKING CONFIG")
|
||||
logger.debug("CHECKING CONFIG")
|
||||
cfgpath = "/var/user/cfg/device_supervisor/device_supervisor.cfg"
|
||||
credspath = "/var/user/files/creds.json"
|
||||
cfg = dict()
|
||||
with open(cfgpath, "r") as f:
|
||||
try:
|
||||
cfg = json.load(f)
|
||||
clouds = cfg.get("clouds")
|
||||
logger.info(clouds)
|
||||
logger.debug(clouds)
|
||||
#if not configured then try to configure from stored values
|
||||
if clouds[0]["args"]["clientId"] == "unknown" or clouds[0]["args"]["username"] == "unknown" or not clouds[0]["args"]["passwd"] or clouds[0]["args"]["passwd"] == "unknown":
|
||||
try:
|
||||
checkFileExist("creds.json")
|
||||
except Exception as e:
|
||||
logger.error(f"Error in checkFileExist: {e}")
|
||||
with open(credspath, "r") as c:
|
||||
try:
|
||||
creds = json.load(c)
|
||||
if creds:
|
||||
logger.info("updating config with stored data")
|
||||
logger.debug("updating config with stored data")
|
||||
clouds[0]["args"]["clientId"] = creds["clientId"]
|
||||
clouds[0]["args"]["username"] = creds["userName"]
|
||||
clouds[0]["args"]["passwd"] = creds["password"]
|
||||
@@ -60,11 +79,13 @@ def checkCredentialConfig():
|
||||
with open(cfgpath, "w", encoding='utf-8') as n:
|
||||
json.dump(cfg, n, indent=1, ensure_ascii=False)
|
||||
reboot()
|
||||
except Exception as e:
|
||||
logger.error(f"Error trying to load credentials from file: {e}")
|
||||
else:
|
||||
#assuming clouds is filled out, if data is different then assume someone typed in something new and store it, if creds is empty fill with clouds' data
|
||||
checkFileExist("creds.json")
|
||||
with open(credspath, "r") as c:
|
||||
logger.info("updating stored file with new data")
|
||||
logger.debug("updating stored file with new data")
|
||||
cfg = checkParameterConfig(cfg)
|
||||
with open(cfgpath, "w", encoding='utf-8') as n:
|
||||
json.dump(cfg, n, indent=1, ensure_ascii=False)
|
||||
@@ -82,22 +103,25 @@ def checkCredentialConfig():
|
||||
creds["password"] = clouds[0]["args"]["passwd"]
|
||||
with open(credspath, "w") as cw:
|
||||
json.dump(creds,cw)
|
||||
except Exception as e:
|
||||
logger.error(f"Somethign went wrong in checkCredentialConfig: {e}")
|
||||
|
||||
def checkParameterConfig(cfg):
|
||||
logger.info("Checking Parameters!!!!")
|
||||
try:
|
||||
logger.debug("Checking Parameters!!!!")
|
||||
paramspath = "/var/user/files/params.json"
|
||||
cfgparams = convertDStoJSON(cfg.get("labels"))
|
||||
#check stored values
|
||||
checkFileExist("params.json")
|
||||
with open(paramspath, "r") as f:
|
||||
logger.info("Opened param storage file")
|
||||
logger.debug("Opened param storage file")
|
||||
params = json.load(f)
|
||||
if params:
|
||||
if cfgparams != params:
|
||||
#go through each param
|
||||
#if not "unknown" and cfg and params aren't the same take from cfg likely updated manually
|
||||
#if key in cfg but not in params copy to params
|
||||
logger.info("equalizing params between cfg and stored")
|
||||
logger.debug("equalizing params between cfg and stored")
|
||||
for key in cfgparams.keys():
|
||||
try:
|
||||
if cfgparams[key] != params[key] and cfgparams[key] != "unknown":
|
||||
@@ -110,11 +134,15 @@ def checkParameterConfig(cfg):
|
||||
json.dump(params, p)
|
||||
else:
|
||||
with open(paramspath, "w") as p:
|
||||
logger.info("initializing param file with params in memory")
|
||||
logger.debug("initializing param file with params in memory")
|
||||
json.dump(convertDStoJSON(get_params()), p)
|
||||
cfg["labels"] = get_params()
|
||||
|
||||
return cfg
|
||||
except Exception as e:
|
||||
logger.error(f"Something went wrong in checkParameterConfig: {e}")
|
||||
os.system(f'rm {paramspath}')
|
||||
return cfg
|
||||
|
||||
payload = {}
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ def resetTotalizers():
|
||||
|
||||
totalizers["dayHolding"] = 0
|
||||
totalizers["weekHolding"] = 0
|
||||
totalizers["MonthHolding"] = 0
|
||||
totalizers["monthHolding"] = 0
|
||||
totalizers["yearHolding"] = 0
|
||||
saveTotalizers(totalizers)
|
||||
return True
|
||||
|
||||
382
Pub_Sub/flowmeterskid/thingsboard/v2/flowmeterskid_tb_v2.cfg
Normal file
382
Pub_Sub/flowmeterskid/thingsboard/v2/flowmeterskid_tb_v2.cfg
Normal file
File diff suppressed because one or more lines are too long
299
Pub_Sub/flowmeterskid/thingsboard/v2/pub/sendData.py
Normal file
299
Pub_Sub/flowmeterskid/thingsboard/v2/pub/sendData.py
Normal file
@@ -0,0 +1,299 @@
|
||||
import json, os
|
||||
from datetime import datetime as dt
|
||||
from common.Logger import logger
|
||||
from quickfaas.remotebus import publish
|
||||
from mobiuspi_lib.gps import GPS
|
||||
from quickfaas.global_dict import get as get_params
|
||||
from quickfaas.global_dict import _set_global_args
|
||||
|
||||
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 checkFileExist(filename):
|
||||
path = "/var/user/files"
|
||||
try:
|
||||
if not os.path.exists(path):
|
||||
logger.debug("no folder making files folder in var/user")
|
||||
os.makedirs(path)
|
||||
with open(path + "/" + filename, "a") as f:
|
||||
json.dump({}, f)
|
||||
except Exception as e:
|
||||
logger.error(f"Something went wrong in checkFileExist while making folder: {e}")
|
||||
|
||||
try:
|
||||
if not os.path.exists(path + "/" + filename):
|
||||
logger.debug("no creds file making creds file")
|
||||
with open(path + "/" + filename, "a") as f:
|
||||
json.dump({}, f)
|
||||
except Exception as e:
|
||||
logger.error(f"Something went wrong in checkFileExist wihle making file: {e}")
|
||||
|
||||
def convertDStoJSON(ds):
|
||||
j = dict()
|
||||
try:
|
||||
for x in ds:
|
||||
j[x["key"]] = x["value"]
|
||||
except Exception as e:
|
||||
logger.error(f"Something went wrong in convertDStoJSON: {e}")
|
||||
return j
|
||||
|
||||
def convertJSONtoDS(j):
|
||||
d = []
|
||||
try:
|
||||
for key in j.keys():
|
||||
d.append({"key": key, "value": j[key]})
|
||||
except Exception as e:
|
||||
logger.error(f"Something went wrong in convertJSONtoDS: {e}")
|
||||
return d
|
||||
|
||||
def checkCredentialConfig():
|
||||
logger.debug("CHECKING CONFIG")
|
||||
cfgpath = "/var/user/cfg/device_supervisor/device_supervisor.cfg"
|
||||
credspath = "/var/user/files/creds.json"
|
||||
cfg = dict()
|
||||
with open(cfgpath, "r") as f:
|
||||
try:
|
||||
cfg = json.load(f)
|
||||
clouds = cfg.get("clouds")
|
||||
logger.debug(clouds)
|
||||
#if not configured then try to configure from stored values
|
||||
if clouds[0]["args"]["clientId"] == "unknown" or clouds[0]["args"]["username"] == "unknown" or not clouds[0]["args"]["passwd"] or clouds[0]["args"]["passwd"] == "unknown":
|
||||
try:
|
||||
checkFileExist("creds.json")
|
||||
except Exception as e:
|
||||
logger.error(f"Error in checkFileExist: {e}")
|
||||
with open(credspath, "r") as c:
|
||||
try:
|
||||
creds = json.load(c)
|
||||
if creds:
|
||||
logger.debug("updating config with stored data")
|
||||
clouds[0]["args"]["clientId"] = creds["clientId"]
|
||||
clouds[0]["args"]["username"] = creds["userName"]
|
||||
clouds[0]["args"]["passwd"] = creds["password"]
|
||||
cfg["clouds"] = clouds
|
||||
cfg = checkParameterConfig(cfg)
|
||||
with open(cfgpath, "w", encoding='utf-8') as n:
|
||||
json.dump(cfg, n, indent=1, ensure_ascii=False)
|
||||
reboot()
|
||||
except Exception as e:
|
||||
logger.error(f"Error trying to load credentials from file: {e}")
|
||||
else:
|
||||
#assuming clouds is filled out, if data is different then assume someone typed in something new and store it, if creds is empty fill with clouds' data
|
||||
checkFileExist("creds.json")
|
||||
with open(credspath, "r") as c:
|
||||
logger.debug("updating stored file with new data")
|
||||
cfg = checkParameterConfig(cfg)
|
||||
with open(cfgpath, "w", encoding='utf-8') as n:
|
||||
json.dump(cfg, n, indent=1, ensure_ascii=False)
|
||||
creds = json.load(c)
|
||||
if creds:
|
||||
if creds["clientId"] != clouds[0]["args"]["clientId"]:
|
||||
creds["clientId"] = clouds[0]["args"]["clientId"]
|
||||
if creds["userName"] != clouds[0]["args"]["username"]:
|
||||
creds["userName"] = clouds[0]["args"]["username"]
|
||||
if creds["password"] != clouds[0]["args"]["passwd"]:
|
||||
creds["password"] = clouds[0]["args"]["passwd"]
|
||||
else:
|
||||
creds["clientId"] = clouds[0]["args"]["clientId"]
|
||||
creds["userName"] = clouds[0]["args"]["username"]
|
||||
creds["password"] = clouds[0]["args"]["passwd"]
|
||||
with open(credspath, "w") as cw:
|
||||
json.dump(creds,cw)
|
||||
except Exception as e:
|
||||
logger.error(f"Somethign went wrong in checkCredentialConfig: {e}")
|
||||
|
||||
def checkParameterConfig(cfg):
|
||||
try:
|
||||
logger.debug("Checking Parameters!!!!")
|
||||
paramspath = "/var/user/files/params.json"
|
||||
cfgparams = convertDStoJSON(cfg.get("labels"))
|
||||
#check stored values
|
||||
checkFileExist("params.json")
|
||||
with open(paramspath, "r") as f:
|
||||
logger.debug("Opened param storage file")
|
||||
params = json.load(f)
|
||||
if params:
|
||||
if cfgparams != params:
|
||||
#go through each param
|
||||
#if not "unknown" and cfg and params aren't the same take from cfg likely updated manually
|
||||
#if key in cfg but not in params copy to params
|
||||
logger.debug("equalizing params between cfg and stored")
|
||||
for key in cfgparams.keys():
|
||||
try:
|
||||
if cfgparams[key] != params[key] and cfgparams[key] != "unknown":
|
||||
params[key] = cfgparams[key]
|
||||
except:
|
||||
params[key] = cfgparams[key]
|
||||
cfg["labels"] = convertJSONtoDS(params)
|
||||
_set_global_args(convertJSONtoDS(params))
|
||||
with open(paramspath, "w") as p:
|
||||
json.dump(params, p)
|
||||
else:
|
||||
with open(paramspath, "w") as p:
|
||||
logger.debug("initializing param file with params in memory")
|
||||
json.dump(convertDStoJSON(get_params()), p)
|
||||
cfg["labels"] = get_params()
|
||||
|
||||
return cfg
|
||||
except Exception as e:
|
||||
logger.error(f"Something went wrong in checkParameterConfig: {e}")
|
||||
os.system(f'rm {paramspath}')
|
||||
return cfg
|
||||
|
||||
payload = {}
|
||||
|
||||
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 sendData(message,wizard_api):
|
||||
logger.debug(message)
|
||||
checkCredentialConfig()
|
||||
payload = {"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values": {}}
|
||||
resetPayload = {"ts": "", "values": {}}
|
||||
dayReset, weekReset, monthReset, yearReset = False, False, False, False
|
||||
for measure in message["values"]["flowmeter"].keys():
|
||||
try:
|
||||
if measure in ["totalizer_1"]:
|
||||
payload["values"]["day_volume"], dayReset = totalizeDay(message["values"]["flowmeter"][measure]["raw_data"])
|
||||
payload["values"]["week_volume"], weekReset = totalizeWeek(message["values"]["flowmeter"][measure]["raw_data"])
|
||||
payload["values"]["month_volume"], monthReset = totalizeMonth(message["values"]["flowmeter"][measure]["raw_data"])
|
||||
payload["values"]["year_volume"], yearReset = totalizeYear(message["values"]["flowmeter"][measure]["raw_data"])
|
||||
payload["values"][measure] = message["values"]["flowmeter"][measure]["raw_data"]
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
try:
|
||||
payload["values"]["latitude"], payload["values"]["longitude"], payload["values"]["speed"] = getGPS()
|
||||
except:
|
||||
logger.error("Could not get GPS coordinates")
|
||||
publish(__topic__, json.dumps(payload), __qos__)
|
||||
|
||||
if dayReset:
|
||||
resetPayload["values"]["yesterday_volume"] = payload["values"]["day_volume"]
|
||||
resetPayload["values"]["day_volume"] = 0
|
||||
if weekReset:
|
||||
resetPayload["values"]["last_week_volume"] = payload["values"]["week_volume"]
|
||||
resetPayload["values"]["week_volume"] = 0
|
||||
if monthReset:
|
||||
resetPayload["values"]["last_month_volume"] = payload["values"]["month_volume"]
|
||||
resetPayload["values"]["month_volume"] = 0
|
||||
if yearReset:
|
||||
resetPayload["values"]["last_year_volume"] = payload["values"]["year_volume"]
|
||||
resetPayload["values"]["year_volume"] = 0
|
||||
|
||||
if resetPayload["values"]:
|
||||
resetPayload["ts"] = 1 + (round(dt.timestamp(dt.now())/600)*600)*1000
|
||||
publish(__topic__, json.dumps(resetPayload), __qos__)
|
||||
|
||||
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 getGPS():
|
||||
# Create a gps instance
|
||||
gps = GPS()
|
||||
|
||||
# Retrieve GPS information
|
||||
position_status = gps.get_position_status()
|
||||
logger.debug("position_status: ")
|
||||
logger.debug(position_status)
|
||||
latitude = position_status["latitude"].split(" ")
|
||||
longitude = position_status["longitude"].split(" ")
|
||||
lat_dec = int(latitude[0][:-1]) + (float(latitude[1][:-1])/60)
|
||||
lon_dec = int(longitude[0][:-1]) + (float(longitude[1][:-1])/60)
|
||||
if latitude[2] == "S":
|
||||
lat_dec = lat_dec * -1
|
||||
if longitude[2] == "W":
|
||||
lon_dec = lon_dec * -1
|
||||
#lat_dec = round(lat_dec, 7)
|
||||
#lon_dec = round(lon_dec, 7)
|
||||
logger.info("HERE IS THE GPS COORDS")
|
||||
logger.info(f"LATITUDE: {lat_dec}, LONGITUDE: {lon_dec}")
|
||||
speedKnots = position_status["speed"].split(" ")
|
||||
speedMPH = float(speedKnots[0]) * 1.151
|
||||
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(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") or totalizers["week"] == 0:
|
||||
totalizers["weekHolding"] = lifetime
|
||||
totalizers["week"] = now.strftime("%U")
|
||||
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(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(totalizers)
|
||||
reset = True
|
||||
return (value, reset)
|
||||
97
Pub_Sub/flowmeterskid/thingsboard/v2/sub/receiveCommand.py
Normal file
97
Pub_Sub/flowmeterskid/thingsboard/v2/sub/receiveCommand.py
Normal file
@@ -0,0 +1,97 @@
|
||||
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)
|
||||
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))
|
||||
except Exception as e:
|
||||
logger.error("Failed to write message")
|
||||
logger.error(e)
|
||||
|
||||
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": ""}))
|
||||
1
Pub_Sub/hrswd/thingsboard/hrswd.tags.json
Normal file
1
Pub_Sub/hrswd/thingsboard/hrswd.tags.json
Normal file
@@ -0,0 +1 @@
|
||||
[{"tag_name": "Local:1:C", "dim": 0, "alias": false, "instance_id": 3, "symbol_address": 84496, "symbol_object_address": 957828, "software_control": 201392131, "external_access": "Read/Write", "dimensions": [0, 0, 0], "template_instance_id": 822, "data_type": {"name": "AB:Embedded_DiscreteIO:C:0", "internal_tags": {"CfgSize": {"offset": 0, "tag_type": "atomic", "data_type": "DINT", "data_type_name": "DINT", "array": 0, "type_class":
|
||||
76
Pub_Sub/hrswd/thingsboard/v1/hrswd.csv
Normal file
76
Pub_Sub/hrswd/thingsboard/v1/hrswd.csv
Normal file
@@ -0,0 +1,76 @@
|
||||
MeasuringPointName,ControllerName,GroupName,UploadType,DataType,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,bitMap,msecSample
|
||||
plc_io_fault_alm,hrswd,default,periodic,BIT,IO_Fault_Alarm,,,ro,,,none,,,,,,,,,0,
|
||||
plc_fault,hrswd,default,periodic,BIT,PLC_FAULT,,,ro,,,none,,,,,,,,,0,
|
||||
plc_fault_code,hrswd,default,periodic,DINT,MAJOR_FAULT_CODE,,,ro,,,none,,,,,,,,,0,
|
||||
analog_01_alm,hrswd,default,periodic,BIT,Fault_Analog_Mod_01,,,ro,,,none,,,,,,,,,0,
|
||||
analog_02_alm,hrswd,default,periodic,BIT,Fault_Analog_Mod_02,,,ro,,,none,,,,,,,,,0,
|
||||
analog_03_alm,hrswd,default,periodic,BIT,Fault_Analog_Mod_03,,,ro,,,none,,,,,,,,,0,
|
||||
analog_04_alm,hrswd,default,periodic,BIT,Fault_Analog_Mod_04,,,ro,,,none,,,,,,,,,0,
|
||||
digital_05_alm,hrswd,default,periodic,BIT,Fault_Digital_In_Mod_05,,,ro,,,none,,,,,,,,,0,
|
||||
containment_high_alm,hrswd,default,periodic,BIT,Contain_Hi_Level.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
dc_power_alm,hrswd,default,periodic,BIT,UPS_DC_OK.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
esd_push_button,hrswd,default,periodic,BIT,ESD_Switch.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
water_run_tank,hrswd,default,periodic,DINT,WT_Selector,,,ro,,,none,,,,,,,,,,
|
||||
water_01_level,hrswd,default,periodic,FLOAT,WT_1.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_01_hihi_alm,hrswd,default,periodic,BIT,WT_1.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_01_hi_alm,hrswd,default,periodic,BIT,WT_1.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_01_tx_alm,hrswd,default,periodic,BIT,WT_1.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_01_hihi_spt,hrswd,default,periodic,FLOAT,WT_1.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_01_hi_spt,hrswd,default,periodic,FLOAT,WT_1.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_01_max_height,hrswd,default,periodic,FLOAT,WT_1.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_02_level,hrswd,default,periodic,FLOAT,WT_2.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_02_hihi_alm,hrswd,default,periodic,BIT,WT_2.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_02_hi_alm,hrswd,default,periodic,BIT,WT_2.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_02_tx_alm,hrswd,default,periodic,BIT,WT_2.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_02_hihi_spt,hrswd,default,periodic,FLOAT,WT_2.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_02_hi_spt,hrswd,default,periodic,FLOAT,WT_2.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_02_max_height,hrswd,default,periodic,FLOAT,WT_2.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_03_level,hrswd,default,periodic,FLOAT,WT_3.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_03_hihi_alm,hrswd,default,periodic,BIT,WT_3.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_03_hi_alm,hrswd,default,periodic,BIT,WT_3.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_03_tx_alm,hrswd,default,periodic,BIT,WT_3.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_03_hihi_spt,hrswd,default,periodic,FLOAT,WT_3.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_03_hi_spt,hrswd,default,periodic,FLOAT,WT_3.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_03_max_height,hrswd,default,periodic,FLOAT,WT_3.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_04_level,hrswd,default,periodic,FLOAT,WT_4.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_04_hihi_alm,hrswd,default,periodic,BIT,WT_4.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_04_hi_alm,hrswd,default,periodic,BIT,WT_4.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_04_tx_alm,hrswd,default,periodic,BIT,WT_4.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_04_hihi_spt,hrswd,default,periodic,FLOAT,WT_4.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_04_hi_spt,hrswd,default,periodic,FLOAT,WT_4.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_04_max_height,hrswd,default,periodic,FLOAT,WT_4.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_01_level,hrswd,default,periodic,FLOAT,OT_1.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_01_hihi_alm,hrswd,default,periodic,BIT,OT_1.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_01_hi_alm,hrswd,default,periodic,BIT,OT_1.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_01_tx_alm,hrswd,default,periodic,BIT,OT_1.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_01_hihi_spt,hrswd,default,periodic,FLOAT,OT_1.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_01_hi_spt,hrswd,default,periodic,FLOAT,OT_1.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_01_max_height,hrswd,default,periodic,FLOAT,OT_1.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
pump_01_sts,hrswd,default,periodic,BIT,East_Pump_Motor_01.Sts_Running,,,ro,,,none,,,,,,,,,0,
|
||||
pump_01_failed_alm,hrswd,default,periodic,BIT,East_Pump_Motor_01.Alm_FailToStart,,,ro,,,none,,,,,,,,,0,
|
||||
pump_01_suction,hrswd,default,periodic,FLOAT,East_Pump_Suction_PSI.Val,2,,ro,,,none,,,,,,,,,,
|
||||
pump_01_suction_hihi_alm,hrswd,default,periodic,BIT,East_Pump_Suction_PSI.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
pump_01_suction_lolo_alm,hrswd,default,periodic,BIT,East_Pump_Suction_PSI.Alm_LoLo,,,ro,,,none,,,,,,,,,0,
|
||||
pump_01_discharge,hrswd,default,periodic,FLOAT,East_Pump_Discharge_PSI.Val,2,,ro,,,none,,,,,,,,,,
|
||||
pump_01_discharge_hihi_alm,hrswd,default,periodic,BIT,East_Pump_Discharge_PSI.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
pump_01_discharge_lolo_alm,hrswd,default,periodic,BIT,East_Pump_Discharge_PSI.Alm_LoLo,,,ro,,,none,,,,,,,,,0,
|
||||
pump_01_flow_rate,hrswd,default,periodic,FLOAT,East_Pump_Flow_Meter.Val,2,,ro,,,none,,,,,,,,,,
|
||||
pump_01_flow_rate_hihi_alm,hrswd,default,periodic,BIT,East_Pump_Flow_Meter.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
pump_01_flow_rate_lolo_alm,hrswd,default,periodic,BIT,East_Pump_Flow_Meter.Alm_LoLo,,,ro,,,none,,,,,,,,,0,
|
||||
pump_01_oil_level_alm,hrswd,default,periodic,BIT,East_Pump_Oil_Level_Switch.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
pump_01_vibration_alm,hrswd,default,periodic,BIT,East_Pump_Vib_Switch.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
pump_01_fault_alm,hrswd,default,periodic,BIT,East_Pump_Fault.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
pump_02_sts,hrswd,default,periodic,BIT,West_Pump_Motor_02.Sts_Running,,,ro,,,none,,,,,,,,,0,
|
||||
pump_02_failed_alm,hrswd,default,periodic,BIT,West_Pump_Motor_02.Alm_FailToStart,,,ro,,,none,,,,,,,,,0,
|
||||
pump_02_suction,hrswd,default,periodic,FLOAT,West_Pump_Suction_PSI.Val,2,,ro,,,none,,,,,,,,,,
|
||||
pump_02_suction_hihi_alm,hrswd,default,periodic,BIT,West_Pump_Suction_PSI.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
pump_02_suction_lolo_alm,hrswd,default,periodic,BIT,West_Pump_Suction_PSI.Alm_LoLo,,,ro,,,none,,,,,,,,,0,
|
||||
pump_02_discharge,hrswd,default,periodic,FLOAT,West_Pump_Discharge_PSI.Val,2,,ro,,,none,,,,,,,,,,
|
||||
pump_02_discharge_hihi_alm,hrswd,default,periodic,BIT,West_Pump_Discharge_PSI.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
pump_02_discharge_lolo_alm,hrswd,default,periodic,BIT,West_Pump_Discharge_PSI.Alm_LoLo,,,ro,,,none,,,,,,,,,0,
|
||||
pump_02_flow_rate,hrswd,default,periodic,FLOAT,West_Pump_Flow_Meter.Val,2,,ro,,,none,,,,,,,,,,
|
||||
pump_02_flow_rate_hihi_alm,hrswd,default,periodic,BIT,West_Pump_Flow_Meter.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
pump_02_flow_rate_lolo_alm,hrswd,default,periodic,BIT,West_Pump_Flow_Meter.Alm_LoLo,,,ro,,,none,,,,,,,,,0,
|
||||
pump_02_oil_level_alm,hrswd,default,periodic,BIT,West_Pump_Oil_Level_Switch.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
pump_02_vibration_alm,hrswd,default,periodic,BIT,West_Pump_Vib_Switch.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
pump_02_fault_alm,hrswd,default,periodic,BIT,West_Pump_Fault.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
|
46
Pub_Sub/hrswd/thingsboard/v1/hrswd_alert.csv
Normal file
46
Pub_Sub/hrswd/thingsboard/v1/hrswd_alert.csv
Normal file
@@ -0,0 +1,46 @@
|
||||
AlarmName,ControllerName,MeasuringPointName,AlarmLevel,Condition1,Operand1,CombineMethod,Condition2,Operand2,AlarmContent,AlarmTag
|
||||
plc_io_fault_alm,hrswd,plc_io_fault_alm,5,eq,1.0,none,eq,,PLC IO has faulted,default
|
||||
plc_fault,hrswd,plc_fault,5,eq,1.0,none,eq,,PLC has faulted,default
|
||||
analog_01_alm,hrswd,analog_01_alm,5,eq,1.0,none,eq,,Analog Module 1 has faulted,default
|
||||
analog_02_alm,hrswd,analog_02_alm,5,eq,1.0,none,eq,,Analog Module 2 has faulted,default
|
||||
analog_03_alm,hrswd,analog_03_alm,5,eq,1.0,none,eq,,Analog Module 3 has faulted,default
|
||||
analog_04_alm,hrswd,analog_04_alm,5,eq,1.0,none,eq,,Analog Module 4 has faulted,default
|
||||
digital_05_alm,hrswd,digital_05_alm,5,eq,1.0,none,eq,,Analog Module 5 has faulted,default
|
||||
containment_high_alm,hrswd,containment_high_alm,5,eq,1.0,none,eq,,Containment Level has crossed the Hi threshold.,default
|
||||
dc_power_alm,hrswd,dc_power_alm,5,eq,1.0,none,eq,,DC Power Fault,default
|
||||
esd_push_button,hrswd,esd_push_button,5,eq,1.0,none,eq,,ESD Button Pressed,default
|
||||
water_01_hihi_alm,hrswd,water_01_hihi_alm,5,eq,1.0,none,eq,,Water Tank 1 crossed HiHi threshold,default
|
||||
water_01_hi_alm,hrswd,water_01_hi_alm,5,eq,1.0,none,eq,,Water Tank 1 crossed Hi threshold,default
|
||||
water_01_tx_alm,hrswd,water_01_tx_alm,5,eq,1.0,none,eq,,Water Tank 1 transmission error,default
|
||||
water_02_hihi_alm,hrswd,water_02_hihi_alm,5,eq,1.0,none,eq,,Water Tank 2 crossed HiHi threshold,default
|
||||
water_02_hi_alm,hrswd,water_02_hi_alm,5,eq,1.0,none,eq,,Water Tank 2 crossed Hi threshold,default
|
||||
water_02_tx_alm,hrswd,water_02_tx_alm,5,eq,1.0,none,eq,,Water Tank 2 transmission error,default
|
||||
water_03_hihi_alm,hrswd,water_03_hihi_alm,5,eq,1.0,none,eq,,Water Tank 3 crossed HiHi threshold,default
|
||||
water_03_hi_alm,hrswd,water_03_hi_alm,5,eq,1.0,none,eq,,Water Tank 3 crossed Hi threshold,default
|
||||
water_03_tx_alm,hrswd,water_03_tx_alm,5,eq,1.0,none,eq,,Water Tank 3 transmission error,default
|
||||
water_04_hihi_alm,hrswd,water_04_hihi_alm,5,eq,1.0,none,eq,,Water Tank 4 crossed HiHi threshold,default
|
||||
water_04_hi_alm,hrswd,water_04_hi_alm,5,eq,1.0,none,eq,,Water Tank 4 crossed Hi threshold,default
|
||||
water_04_tx_alm,hrswd,water_04_tx_alm,5,eq,1.0,none,eq,,Water Tank 4 transmission error,default
|
||||
oil_01_hihi_alm,hrswd,oil_01_hihi_alm,5,eq,1.0,none,eq,,Oil Tank 1 crossed HiHi threshold,default
|
||||
oil_01_hi_alm,hrswd,oil_01_hi_alm,5,eq,1.0,none,eq,,Oil Tank 1 crossed Hi threshold,default
|
||||
oil_01_tx_alm,hrswd,oil_01_tx_alm,5,eq,1.0,none,eq,,Oil Tank 1 transmission error,default
|
||||
pump_01_failed_alm,hrswd,pump_01_failed_alm,5,eq,1.0,none,eq,,Pump 1 failed to start,default
|
||||
pump_01_suction_hihi_alm,hrswd,pump_01_suction_hihi_alm,5,eq,1.0,none,eq,,Pump 1 crossed suction HiHi threshold,default
|
||||
pump_01_suction_lolo_alm,hrswd,pump_01_suction_lolo_alm,5,eq,1.0,none,eq,,Pump 1 crossed suction LoLo threshold,default
|
||||
pump_01_discharge_hihi_alm,hrswd,pump_01_discharge_hihi_alm,5,eq,1.0,none,eq,,Pump 1 crossed discharge HiHi threshold,default
|
||||
pump_01_discharge_lolo_alm,hrswd,pump_01_discharge_lolo_alm,5,eq,1.0,none,eq,,Pump 1 crossed discharge LoLo threshold,default
|
||||
pump_01_flow_rate_hihi_alm,hrswd,pump_01_flow_rate_hihi_alm,5,eq,1.0,none,eq,,Pump 1 crossed flow rate HiHi threshold,default
|
||||
pump_01_flow_rate_lolo_alm,hrswd,pump_01_flow_rate_lolo_alm,5,eq,1.0,none,eq,,Pump 1 crossed flow rate LoLo threshold,default
|
||||
pump_01_oil_level_alm,hrswd,pump_01_oil_level_alm,5,eq,1.0,none,eq,,Pump 1 oil level triggered,default
|
||||
pump_01_vibration_alm,hrswd,pump_01_vibration_alm,5,eq,1.0,none,eq,,Pump 1 vibration triggered,default
|
||||
pump_01_fault_alm,hrswd,pump_01_fault_alm,5,eq,1.0,none,eq,,Pump 1 faulted,default
|
||||
pump_02_failed_alm,hrswd,pump_02_failed_alm,5,eq,1.0,none,eq,,Pump 2 failed to start,default
|
||||
pump_02_suction_hihi_alm,hrswd,pump_02_suction_hihi_alm,5,eq,1.0,none,eq,,Pump 2 crossed suction HiHi threshold,default
|
||||
pump_02_suction_lolo_alm,hrswd,pump_02_suction_lolo_alm,5,eq,1.0,none,eq,,Pump 2 crossed suction LoLo threshold,default
|
||||
pump_02_discharge_hihi_alm,hrswd,pump_02_discharge_hihi_alm,5,eq,1.0,none,eq,,Pump 2 crossed discharge HiHi threshold,default
|
||||
pump_02_discharge_lolo_alm,hrswd,pump_02_discharge_lolo_alm,5,eq,1.0,none,eq,,Pump 2 crossed discharge LoLo threshold,default
|
||||
pump_02_flow_rate_hihi_alm,hrswd,pump_02_flow_rate_hihi_alm,5,eq,1.0,none,eq,,Pump 2 crossed flow rate HiHi threshold,default
|
||||
pump_02_flow_rate_lolo_alm,hrswd,pump_02_flow_rate_lolo_alm,5,eq,1.0,none,eq,,Pump 2 crossed flow rate LoLo threshold,default
|
||||
pump_02_oil_level_alm,hrswd,pump_02_oil_level_alm,5,eq,1.0,none,eq,,Pump 2 oil level triggered,default
|
||||
pump_02_vibration_alm,hrswd,pump_02_vibration_alm,5,eq,1.0,none,eq,,Pump 2 vibration triggered,default
|
||||
pump_02_fault_alm,hrswd,pump_02_fault_alm,5,eq,1.0,none,eq,,Pump 2 faulted,default
|
||||
|
1955
Pub_Sub/hrswd/thingsboard/v1/hrswd_tb_v1.cfg
Normal file
1955
Pub_Sub/hrswd/thingsboard/v1/hrswd_tb_v1.cfg
Normal file
File diff suppressed because one or more lines are too long
12
Pub_Sub/hrswd/thingsboard/v1/pub/sendAlarms.py
Normal file
12
Pub_Sub/hrswd/thingsboard/v1/pub/sendAlarms.py
Normal file
@@ -0,0 +1,12 @@
|
||||
# Enter your python code.
|
||||
import json, time
|
||||
from common.Logger import logger
|
||||
from quickfaas.remotebus import publish
|
||||
|
||||
|
||||
def sendAlarm(message):
|
||||
logger.info(message)
|
||||
payload = {}
|
||||
payload["ts"] = time.time()*1000
|
||||
payload["values"] = {message["measureName"]: message["value"]}
|
||||
publish(__topic__, json.dumps(payload), __qos__)
|
||||
145
Pub_Sub/hrswd/thingsboard/v1/pub/sendData.py
Normal file
145
Pub_Sub/hrswd/thingsboard/v1/pub/sendData.py
Normal file
@@ -0,0 +1,145 @@
|
||||
# Enter your python code.
|
||||
import json, os
|
||||
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
|
||||
|
||||
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 checkFileExist(filename):
|
||||
path = "/var/user/files"
|
||||
if not os.path.exists(path):
|
||||
logger.info("no folder making files folder in var/user")
|
||||
os.makedirs(path)
|
||||
with open(path + "/" + filename, "a") as f:
|
||||
json.dump({}, f)
|
||||
if not os.path.exists(path + "/" + filename):
|
||||
logger.info("no creds file making creds file")
|
||||
with open(path + "/" + filename, "a") as f:
|
||||
json.dump({}, f)
|
||||
|
||||
def convertDStoJSON(ds):
|
||||
j = dict()
|
||||
for x in ds:
|
||||
j[x["key"]] = x["value"]
|
||||
return j
|
||||
|
||||
def convertJSONtoDS(j):
|
||||
d = []
|
||||
for key in j.keys():
|
||||
d.append({"key": key, "value": j[key]})
|
||||
return d
|
||||
|
||||
def checkCredentialConfig():
|
||||
logger.debug("CHECKING CONFIG")
|
||||
cfgpath = "/var/user/cfg/device_supervisor/device_supervisor.cfg"
|
||||
credspath = "/var/user/files/creds.json"
|
||||
cfg = dict()
|
||||
with open(cfgpath, "r") as f:
|
||||
cfg = json.load(f)
|
||||
clouds = cfg.get("clouds")
|
||||
logger.debug(clouds)
|
||||
#if not configured then try to configure from stored values
|
||||
if clouds[0]["args"]["clientId"] == "unknown" or clouds[0]["args"]["username"] == "unknown" or not clouds[0]["args"]["passwd"] or clouds[0]["args"]["passwd"] == "unknown":
|
||||
checkFileExist("creds.json")
|
||||
with open(credspath, "r") as c:
|
||||
creds = json.load(c)
|
||||
if creds:
|
||||
logger.debug("updating config with stored data")
|
||||
clouds[0]["args"]["clientId"] = creds["clientId"]
|
||||
clouds[0]["args"]["username"] = creds["userName"]
|
||||
clouds[0]["args"]["passwd"] = creds["password"]
|
||||
cfg["clouds"] = clouds
|
||||
cfg = checkParameterConfig(cfg)
|
||||
with open(cfgpath, "w", encoding='utf-8') as n:
|
||||
json.dump(cfg, n, indent=1, ensure_ascii=False)
|
||||
reboot()
|
||||
else:
|
||||
#assuming clouds is filled out, if data is different then assume someone typed in something new and store it, if creds is empty fill with clouds' data
|
||||
checkFileExist("creds.json")
|
||||
with open(credspath, "r") as c:
|
||||
logger.debug("updating stored file with new data")
|
||||
cfg = checkParameterConfig(cfg)
|
||||
with open(cfgpath, "w", encoding='utf-8') as n:
|
||||
json.dump(cfg, n, indent=1, ensure_ascii=False)
|
||||
creds = json.load(c)
|
||||
if creds:
|
||||
if creds["clientId"] != clouds[0]["args"]["clientId"]:
|
||||
creds["clientId"] = clouds[0]["args"]["clientId"]
|
||||
if creds["userName"] != clouds[0]["args"]["username"]:
|
||||
creds["userName"] = clouds[0]["args"]["username"]
|
||||
if creds["password"] != clouds[0]["args"]["passwd"]:
|
||||
creds["password"] = clouds[0]["args"]["passwd"]
|
||||
else:
|
||||
creds["clientId"] = clouds[0]["args"]["clientId"]
|
||||
creds["userName"] = clouds[0]["args"]["username"]
|
||||
creds["password"] = clouds[0]["args"]["passwd"]
|
||||
with open(credspath, "w") as cw:
|
||||
json.dump(creds,cw)
|
||||
|
||||
def checkParameterConfig(cfg):
|
||||
logger.debug("Checking Parameters!!!!")
|
||||
paramspath = "/var/user/files/params.json"
|
||||
cfgparams = convertDStoJSON(cfg.get("labels"))
|
||||
#check stored values
|
||||
checkFileExist("params.json")
|
||||
with open(paramspath, "r") as f:
|
||||
logger.debug("Opened param storage file")
|
||||
params = json.load(f)
|
||||
if params:
|
||||
if cfgparams != params:
|
||||
#go through each param
|
||||
#if not "unknown" and cfg and params aren't the same take from cfg likely updated manually
|
||||
#if key in cfg but not in params copy to params
|
||||
logger.debug("equalizing params between cfg and stored")
|
||||
for key in cfgparams.keys():
|
||||
try:
|
||||
if cfgparams[key] != params[key] and cfgparams[key] != "unknown":
|
||||
params[key] = cfgparams[key]
|
||||
except:
|
||||
params[key] = cfgparams[key]
|
||||
cfg["labels"] = convertJSONtoDS(params)
|
||||
_set_global_args(convertJSONtoDS(params))
|
||||
with open(paramspath, "w") as p:
|
||||
json.dump(params, p)
|
||||
else:
|
||||
with open(paramspath, "w") as p:
|
||||
logger.debug("initializing param file with params in memory")
|
||||
json.dump(convertDStoJSON(get_params()), p)
|
||||
cfg["labels"] = get_params()
|
||||
|
||||
return cfg
|
||||
|
||||
def sendData(message):
|
||||
#logger.debug(message)
|
||||
try:
|
||||
checkCredentialConfig()
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
payload = {"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values": {}}
|
||||
run_tanks = {}
|
||||
|
||||
for measure in message["measures"]:
|
||||
try:
|
||||
logger.debug(measure)
|
||||
if abs(payload["ts"]/1000 - measure["timestamp"]) > 3600:
|
||||
reboot(reason="Poll timestamp and actual timestamp out of sync. Actual: {} Poll: {}".format(payload["ts"]/1000,measure["timestamp"]))
|
||||
if measure["name"] in ["oil_run_tank","water_run_tank"]:
|
||||
run_tanks[measure["name"]] = measure["value"]
|
||||
if "_level" in measure["name"]:
|
||||
run_tanks[measure["name"]] = measure["value"]
|
||||
payload["values"][measure["name"]] = measure["value"]
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
payload["values"]["oil_run_tank_level"] = run_tanks["oil_0" + str(run_tanks["oil_run_tank"]) + "_level"]
|
||||
payload["values"]["water_run_tank_level"] = run_tanks["water_0" + str(run_tanks["water_run_tank"]) + "_level"]
|
||||
publish(__topic__, json.dumps(payload), __qos__)
|
||||
publish("v1/devices/me/attributes", json.dumps({"latestReportTime": (round(dt.timestamp(dt.now())/600)*600)*1000}), __qos__)
|
||||
|
||||
66
Pub_Sub/hrswd/thingsboard/v1/sub/receiveCommand.py
Normal file
66
Pub_Sub/hrswd/thingsboard/v1/sub/receiveCommand.py
Normal file
@@ -0,0 +1,66 @@
|
||||
import json, time
|
||||
from quickfaas.measure import recall, write
|
||||
from quickfaas.remotebus import publish
|
||||
from common.Logger import logger
|
||||
|
||||
def sync():
|
||||
#get new values and send
|
||||
payload = {}
|
||||
topic = "v1/devices/me/telemetry"
|
||||
try:
|
||||
data = recall()#json.loads(recall().decode("utf-8"))
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
logger.debug(data)
|
||||
for controller in data:
|
||||
for measure in controller["measures"]:
|
||||
#publish measure
|
||||
payload[measure["name"]] = measure["value"]
|
||||
logger.debug("Sending on topic: {}".format(topic))
|
||||
logger.debug("Sending value: {}".format(payload))
|
||||
publish(topic, json.dumps(payload), 1)
|
||||
def writeplctag(value):
|
||||
#value in the form {"measurement": <measurement_name>, "value": <value to write>}
|
||||
try:
|
||||
#value = json.loads(value.replace("'",'"'))
|
||||
logger.debug(value)
|
||||
#payload format: [{"name": "advvfdipp", "measures": [{"name": "manualfrequencysetpoint", "value": 49}]}]
|
||||
message = [{"name": "hrtankbattery", "measures":[{"name":value["measurement"], "value": value["value"]}]}]
|
||||
resp = write(message)
|
||||
logger.debug("RETURN FROM WRITE: {}".format(resp))
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.debug(e)
|
||||
return False
|
||||
|
||||
def receiveCommand(topic, payload):
|
||||
try:
|
||||
logger.debug(topic)
|
||||
logger.debug(json.loads(payload))
|
||||
p = json.loads(payload)
|
||||
command = p["method"]
|
||||
commands = {
|
||||
"sync": sync,
|
||||
"writeplctag": writeplctag,
|
||||
}
|
||||
if command == "setPLCTag":
|
||||
try:
|
||||
result = commands["writeplctag"](p["params"])
|
||||
logger.debug(result)
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
#logger.debug(command)
|
||||
ack(topic.split("/")[-1])
|
||||
time.sleep(5)
|
||||
sync()
|
||||
except Exception as e:
|
||||
logger.debug(e)
|
||||
|
||||
|
||||
def ack(msgid):
|
||||
#logger.debug(msgid)
|
||||
#logger.debug(mac)
|
||||
#logger.debug(name)
|
||||
#logger.debug(value)
|
||||
publish("v1/devices/me/rpc/response/" + str(msgid), json.dumps({"msg": {"time": time.time()}, "metadata": "", "msgType": ""}), 1)
|
||||
|
||||
250061
Pub_Sub/hrtankbattery/hrtankbattery_tags.json
Normal file
250061
Pub_Sub/hrtankbattery/hrtankbattery_tags.json
Normal file
File diff suppressed because it is too large
Load Diff
172
Pub_Sub/hrtankbattery/thingsboard/hrbattery_2023_FEB_06.csv
Normal file
172
Pub_Sub/hrtankbattery/thingsboard/hrbattery_2023_FEB_06.csv
Normal file
@@ -0,0 +1,172 @@
|
||||
MeasuringPointName,ControllerName,GroupName,UploadType,DataType,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,bitMap,msecSample
|
||||
plc_io_fault_alm,hrtankbattery,default,periodic,BIT,IO_Fault_Alarm,,,ro,,,none,,,,,,,,,0,
|
||||
plc_fault,hrtankbattery,default,periodic,BIT,PLC_FAULT,,,ro,,,none,,,,,,,,,0,
|
||||
analog_01_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_01,,,ro,,,none,,,,,,,,,0,
|
||||
analog_02_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_02,,,ro,,,none,,,,,,,,,0,
|
||||
analog_03_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_03,,,ro,,,none,,,,,,,,,0,
|
||||
analog_04_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_04,,,ro,,,none,,,,,,,,,0,
|
||||
analog_05_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_05,,,ro,,,none,,,,,,,,,0,
|
||||
analog_06_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_06,,,ro,,,none,,,,,,,,,0,
|
||||
ac_power_alm,hrtankbattery,default,periodic,BIT,Alm_AC_Pwr.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
ups_alm,hrtankbattery,default,periodic,BIT,Alm_UPS.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
dc_power_alm,hrtankbattery,default,periodic,BIT,DC_Power_OK.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
three_phase_pwr_alm,hrtankbattery,default,periodic,BIT,Three_Phase_Power_Alarm.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
count_oil_tanks,hrtankbattery,default,periodic,DINT,NUMBER_OF_OIL_TANKS,,,ro,,,none,,,,,,,,,,
|
||||
count_water_tanks,hrtankbattery,default,periodic,DINT,NUMBER_OF_WTR_TANKS,,,ro,,,none,,,,,,,,,,
|
||||
count_flow_meters,hrtankbattery,default,periodic,DINT,NUMBER_OF_FLOWMETERS,,,ro,,,none,,,,,,,,,,
|
||||
count_transfer_pumps,hrtankbattery,default,periodic,DINT,NUMBER_OF_TRANSFER_PUMPS,,,ro,,,none,,,,,,,,,,
|
||||
count_lacts,hrtankbattery,default,periodic,DINT,NUMBER_OF_LACTS,,,ro,,,none,,,,,,,,,,
|
||||
water_run_tank,hrtankbattery,default,periodic,DINT,WT_Selector,,,ro,,,none,,,,,,,,,,
|
||||
water_run_tank_volume,hrtankbattery,default,periodic,FLOAT,Curent_Water_Tank_Volume,2,,ro,,,none,,,,,,,,,,
|
||||
water_gauge_off_volume,hrtankbattery,default,periodic,FLOAT,Gauge_Off_Water_Tank_Volume,2,,ro,,,none,,,,,,,,,,
|
||||
water_01_level,hrtankbattery,default,periodic,FLOAT,WT_1.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_01_hihi_alm,hrtankbattery,default,periodic,BIT,WT_1.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_01_hi_alm,hrtankbattery,default,periodic,BIT,WT_1.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_01_tx_alm,hrtankbattery,default,periodic,BIT,WT_1.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_01_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_1.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_01_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_1.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_01_max_height,hrtankbattery,default,periodic,FLOAT,WT_1.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_02_level,hrtankbattery,default,periodic,FLOAT,WT_2.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_02_hihi_alm,hrtankbattery,default,periodic,BIT,WT_2.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_02_hi_alm,hrtankbattery,default,periodic,BIT,WT_2.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_02_tx_alm,hrtankbattery,default,periodic,BIT,WT_2.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_02_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_2.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_02_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_2.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_02_max_height,hrtankbattery,default,periodic,FLOAT,WT_2.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_03_level,hrtankbattery,default,periodic,FLOAT,WT_3.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_03_hihi_alm,hrtankbattery,default,periodic,BIT,WT_3.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_03_hi_alm,hrtankbattery,default,periodic,BIT,WT_3.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_03_tx_alm,hrtankbattery,default,periodic,BIT,WT_3.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_03_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_3.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_03_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_3.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_03_max_height,hrtankbattery,default,periodic,FLOAT,WT_3.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_04_level,hrtankbattery,default,periodic,FLOAT,WT_4.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_04_hihi_alm,hrtankbattery,default,periodic,BIT,WT_4.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_04_hi_alm,hrtankbattery,default,periodic,BIT,WT_4.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_04_tx_alm,hrtankbattery,default,periodic,BIT,WT_4.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_04_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_4.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_04_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_4.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_04_max_height,hrtankbattery,default,periodic,FLOAT,WT_4.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_05_level,hrtankbattery,default,periodic,FLOAT,WT_5.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_05_hihi_alm,hrtankbattery,default,periodic,BIT,WT_5.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_05_hi_alm,hrtankbattery,default,periodic,BIT,WT_5.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_05_tx_alm,hrtankbattery,default,periodic,BIT,WT_5.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_05_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_5.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_05_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_5.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_05_max_height,hrtankbattery,default,periodic,FLOAT,WT_5.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_06_level,hrtankbattery,default,periodic,FLOAT,WT_6.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_06_hihi_alm,hrtankbattery,default,periodic,BIT,WT_6.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_06_hi_alm,hrtankbattery,default,periodic,BIT,WT_6.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_06_tx_alm,hrtankbattery,default,periodic,BIT,WT_6.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_06_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_6.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_06_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_6.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_06_max_height,hrtankbattery,default,periodic,FLOAT,WT_6.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_07_level,hrtankbattery,default,periodic,FLOAT,WT_7.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_07_hihi_alm,hrtankbattery,default,periodic,BIT,WT_7.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_07_hi_alm,hrtankbattery,default,periodic,BIT,WT_7.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_07_tx_alm,hrtankbattery,default,periodic,BIT,WT_7.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_07_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_7.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_07_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_7.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_07_max_height,hrtankbattery,default,periodic,FLOAT,WT_7.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_08_level,hrtankbattery,default,periodic,FLOAT,WT_8.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_08_hihi_alm,hrtankbattery,default,periodic,BIT,WT_8.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_08_hi_alm,hrtankbattery,default,periodic,BIT,WT_8.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_08_tx_alm,hrtankbattery,default,periodic,BIT,WT_8.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_08_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_8.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_08_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_8.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_08_max_height,hrtankbattery,default,periodic,FLOAT,WT_8.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_09_level,hrtankbattery,default,periodic,FLOAT,WT_9.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_09_hihi_alm,hrtankbattery,default,periodic,BIT,WT_9.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_09_hi_alm,hrtankbattery,default,periodic,BIT,WT_9.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_09_tx_alm,hrtankbattery,default,periodic,BIT,WT_9.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_09_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_9.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_09_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_9.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_09_max_height,hrtankbattery,default,periodic,FLOAT,WT_9.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_run_tank,hrtankbattery,default,periodic,DINT,OT_Selector,,,ro,,,none,,,,,,,,,,
|
||||
oil_run_tank_level,hrtankbattery,default,periodic,FLOAT,Current_Oil_Tank_Level,2,,ro,,,none,,,,,,,,,,
|
||||
oil_run_tank_volume,hrtankbattery,default,periodic,FLOAT,Current_Oil_Tank_Volume,2,,ro,,,none,,,,,,,,,,
|
||||
oil_gauge_off_volume,hrtankbattery,default,periodic,FLOAT,Gauge_Off_Oil_Tank_Volume,2,,ro,,,none,,,,,,,,,,
|
||||
oil_01_level,hrtankbattery,default,periodic,FLOAT,OT_1.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_01_hihi_alm,hrtankbattery,default,periodic,BIT,OT_1.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_01_hi_alm,hrtankbattery,default,periodic,BIT,OT_1.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_01_tx_alm,hrtankbattery,default,periodic,BIT,OT_1.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_01_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_1.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_01_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_1.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_01_max_height,hrtankbattery,default,periodic,FLOAT,OT_1.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_02_level,hrtankbattery,default,periodic,FLOAT,OT_2.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_02_hihi_alm,hrtankbattery,default,periodic,BIT,OT_2.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_02_hi_alm,hrtankbattery,default,periodic,BIT,OT_2.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_02_tx_alm,hrtankbattery,default,periodic,BIT,OT_2.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_02_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_2.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_02_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_2.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_02_max_height,hrtankbattery,default,periodic,FLOAT,OT_2.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_03_level,hrtankbattery,default,periodic,FLOAT,OT_3.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_03_hihi_alm,hrtankbattery,default,periodic,BIT,OT_3.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_03_hi_alm,hrtankbattery,default,periodic,BIT,OT_3.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_03_tx_alm,hrtankbattery,default,periodic,BIT,OT_3.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_03_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_3.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_03_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_3.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_03_max_height,hrtankbattery,default,periodic,FLOAT,OT_3.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_04_level,hrtankbattery,default,periodic,FLOAT,OT_4.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_04_hihi_alm,hrtankbattery,default,periodic,BIT,OT_4.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_04_hi_alm,hrtankbattery,default,periodic,BIT,OT_4.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_04_tx_alm,hrtankbattery,default,periodic,BIT,OT_4.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_04_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_4.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_04_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_4.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_04_max_height,hrtankbattery,default,periodic,FLOAT,OT_4.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_05_level,hrtankbattery,default,periodic,FLOAT,OT_5.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_05_hihi_alm,hrtankbattery,default,periodic,BIT,OT_5.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_05_hi_alm,hrtankbattery,default,periodic,BIT,OT_5.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_05_tx_alm,hrtankbattery,default,periodic,BIT,OT_5.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_05_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_5.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_05_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_5.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_05_max_height,hrtankbattery,default,periodic,FLOAT,OT_5.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_06_level,hrtankbattery,default,periodic,FLOAT,OT_6.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_06_hihi_alm,hrtankbattery,default,periodic,BIT,OT_6.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_06_hi_alm,hrtankbattery,default,periodic,BIT,OT_6.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_06_tx_alm,hrtankbattery,default,periodic,BIT,OT_6.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_06_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_6.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_06_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_6.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_06_max_height,hrtankbattery,default,periodic,FLOAT,OT_6.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_07_level,hrtankbattery,default,periodic,FLOAT,OT_7.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_07_hihi_alm,hrtankbattery,default,periodic,BIT,OT_7.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_07_hi_alm,hrtankbattery,default,periodic,BIT,OT_7.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_07_tx_alm,hrtankbattery,default,periodic,BIT,OT_7.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_07_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_7.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_07_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_7.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_07_max_height,hrtankbattery,default,periodic,FLOAT,OT_7.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
transfer_01_sts,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_01.Sts_Running,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_01_alm,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_01.Alm_FailToStart,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_01_discharge,hrtankbattery,default,periodic,FLOAT,XferPump_01_Dis_PSI.Val,2,,ro,,,none,,,,,,,,,,
|
||||
transfer_01_discharge_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_01_Dis_PSI.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_01_discharge_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_01_Dis_PSI.Alm_LoLo,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_01_flow_rate,hrtankbattery,default,periodic,FLOAT,XferPump_01_FlowRate.Val,2,,ro,,,none,,,,,,,,,,
|
||||
transfer_01_flow_rate_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_01_FlowRate.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_01_flow_rate_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_01_FlowRate.Alm_LoLo,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_01_3_phase_pwr_alm,hrtankbattery,default,periodic,BIT,Transfer_Pump_3_Phase_Power_Alarm.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_02_sts,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_02.Sts_Running,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_02_alm,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_02.Alm_FailToStart,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_02_discharge,hrtankbattery,default,periodic,FLOAT,XferPump_02_Dis_PSI.Val,2,,ro,,,none,,,,,,,,,,
|
||||
transfer_02_discharge_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_02_Dis_PSI.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_02_discharge_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_02_Dis_PSI.Alm_LoLo,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_02_flow_rate,hrtankbattery,default,periodic,FLOAT,XferPump_02_FlowRate.Val,2,,ro,,,none,,,,,,,,,,
|
||||
transfer_02_flow_rate_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_02_FlowRate.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_02_flow_rate_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_02_FlowRate.Alm_LoLo,,,ro,,,none,,,,,,,,,0,
|
||||
lact_01_permissive,hrtankbattery,default,periodic,BIT,LACT_01_Permissive,,,ro,,,none,,,,,,,,,0,
|
||||
lact_01_sts,hrtankbattery,default,periodic,BIT,LACT_01_Run_Status,,,ro,,,none,,,,,,,,,0,
|
||||
lact_01_alm,hrtankbattery,default,periodic,BIT,LACT_01_Failure,,,ro,,,none,,,,,,,,,0,
|
||||
lact_01_oil_shutdown,hrtankbattery,default,periodic,BIT,LACT_01_Bad_Oil_Shutdown,,,ro,,,none,,,,,,,,,0,
|
||||
lact_01_flow_rate,hrtankbattery,default,periodic,FLOAT,Lact_01_Realtime_Flow_Rate,2,,ro,,,none,,,,,,,,,,
|
||||
lact_01_bs_w,hrtankbattery,default,periodic,FLOAT,Lact_01_BS_and_W_Reading,2,,ro,,,none,,,,,,,,,,
|
||||
lact_01_daily_volume,hrtankbattery,default,periodic,FLOAT,Lact_01_Current_Daily_Ind_Volume_Total,2,,ro,,,none,,,,,,,,,,
|
||||
lact_01_prev_day,hrtankbattery,default,periodic,FLOAT,Lact_01_History.Previous_Day_1,2,,ro,,,none,,,,,,,,,,
|
||||
lact_02_permissive,hrtankbattery,default,periodic,BIT,LACT_02_Permissive,,,ro,,,none,,,,,,,,,0,
|
||||
lact_02_sts,hrtankbattery,default,periodic,BIT,LACT_02_Run_Status,,,ro,,,none,,,,,,,,,0,
|
||||
lact_02_alm,hrtankbattery,default,periodic,BIT,LACT_02_Failure,,,ro,,,none,,,,,,,,,0,
|
||||
lact_02_oil_shutdown,hrtankbattery,default,periodic,BIT,LACT_02_Bad_Oil_Shutdown,,,ro,,,none,,,,,,,,,0,
|
||||
lact_02_flow_rate,hrtankbattery,default,periodic,FLOAT,Lact_02_Realtime_Flow_Rate,2,,ro,,,none,,,,,,,,,,
|
||||
lact_02_bs_w,hrtankbattery,default,periodic,FLOAT,Lact_02_BS_and_W_Reading,2,,ro,,,none,,,,,,,,,,
|
||||
lact_02_daily_volume,hrtankbattery,default,periodic,FLOAT,Lact_02_Current_Daily_Ind_Volume_Total,2,,ro,,,none,,,,,,,,,,
|
||||
lact_02_prev_day,hrtankbattery,default,periodic,FLOAT,Lact_02_History.Previous_Day_1,2,,ro,,,none,,,,,,,,,,
|
||||
containment_high_alm,hrtankbattery,default,periodic,BIT,Contain_Hi_Level.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
h2s_alm,hrtankbattery,default,periodic,BIT,H2s_Alarm.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
|
302
Pub_Sub/hrtankbattery/thingsboard/hrtankbattery_noel.csv
Normal file
302
Pub_Sub/hrtankbattery/thingsboard/hrtankbattery_noel.csv
Normal file
@@ -0,0 +1,302 @@
|
||||
MeasuringPointName,ControllerName,GroupName,UploadType,DataType,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,bitMap,msecSample
|
||||
plc_io_fault_alm,hrtankbattery,default,periodic,BIT,IO_Fault_Alarm,,,ro,,,none,,,,,,,,,0,
|
||||
plc_fault,hrtankbattery,default,periodic,BIT,PLC_FAULT,,,ro,,,none,,,,,,,,,0,
|
||||
analog_01_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_01,,,ro,,,none,,,,,,,,,0,
|
||||
analog_02_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_02,,,ro,,,none,,,,,,,,,0,
|
||||
analog_03_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_03,,,ro,,,none,,,,,,,,,0,
|
||||
analog_04_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_04,,,ro,,,none,,,,,,,,,0,
|
||||
analog_05_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_05,,,ro,,,none,,,,,,,,,0,
|
||||
analog_06_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_06,,,ro,,,none,,,,,,,,,0,
|
||||
ac_power_alm,hrtankbattery,default,periodic,BIT,Alm_AC_Pwr.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
ups_alm,hrtankbattery,default,periodic,BIT,Alm_UPS.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
dc_power_alm,hrtankbattery,default,periodic,BIT,DC_Power_OK.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
three_phase_pwr_alm,hrtankbattery,default,periodic,BIT,Three_Phase_Power_Alarm.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
count_oil_tanks,hrtankbattery,default,periodic,DINT,NUMBER_OF_OIL_TANKS,,,ro,,,none,,,,,,,,,,
|
||||
count_water_tanks,hrtankbattery,default,periodic,DINT,NUMBER_OF_WTR_TANKS,,,ro,,,none,,,,,,,,,,
|
||||
count_flow_meters,hrtankbattery,default,periodic,DINT,NUMBER_OF_FLOWMETERS,,,ro,,,none,,,,,,,,,,
|
||||
count_transfer_pumps,hrtankbattery,default,periodic,DINT,NUMBER_OF_TRANSFER_PUMPS,,,ro,,,none,,,,,,,,,,
|
||||
count_lacts,hrtankbattery,default,periodic,DINT,NUMBER_OF_LACTS,,,ro,,,none,,,,,,,,,,
|
||||
water_run_tank,hrtankbattery,default,periodic,DINT,WT_Selector,,,ro,,,none,,,,,,,,,,
|
||||
water_01_level,hrtankbattery,default,periodic,FLOAT,WT_1.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_run_tank_volume,hrtankbattery,default,periodic,FLOAT,Curent_Water_Tank_Volume,2,,ro,,,none,,,,,,,,,,
|
||||
water_gauge_off_volume,hrtankbattery,default,periodic,FLOAT,Gauge_Off_Water_Tank_Volume,2,,ro,,,none,,,,,,,,,,
|
||||
water_01_hihi_alm,hrtankbattery,default,periodic,BIT,WT_1.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_01_hi_alm,hrtankbattery,default,periodic,BIT,WT_1.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_01_tx_alm,hrtankbattery,default,periodic,BIT,WT_1.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_01_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_1.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_01_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_1.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_01_max_height,hrtankbattery,default,periodic,FLOAT,WT_1.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_02_level,hrtankbattery,default,periodic,FLOAT,WT_2.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_02_hihi_alm,hrtankbattery,default,periodic,BIT,WT_2.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_02_hi_alm,hrtankbattery,default,periodic,BIT,WT_2.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_02_tx_alm,hrtankbattery,default,periodic,BIT,WT_2.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_02_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_2.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_02_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_2.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_02_max_height,hrtankbattery,default,periodic,FLOAT,WT_2.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_03_level,hrtankbattery,default,periodic,FLOAT,WT_3.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_03_hihi_alm,hrtankbattery,default,periodic,BIT,WT_3.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_03_hi_alm,hrtankbattery,default,periodic,BIT,WT_3.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_03_tx_alm,hrtankbattery,default,periodic,BIT,WT_3.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_03_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_3.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_03_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_3.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_03_max_height,hrtankbattery,default,periodic,FLOAT,WT_3.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_04_level,hrtankbattery,default,periodic,FLOAT,WT_4.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_04_hihi_alm,hrtankbattery,default,periodic,BIT,WT_4.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_04_hi_alm,hrtankbattery,default,periodic,BIT,WT_4.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_04_tx_alm,hrtankbattery,default,periodic,BIT,WT_4.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_04_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_4.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_04_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_4.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_04_max_height,hrtankbattery,default,periodic,FLOAT,WT_4.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_05_level,hrtankbattery,default,periodic,FLOAT,WT_5.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_05_hihi_alm,hrtankbattery,default,periodic,BIT,WT_5.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_05_hi_alm,hrtankbattery,default,periodic,BIT,WT_5.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_05_tx_alm,hrtankbattery,default,periodic,BIT,WT_5.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_05_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_5.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_05_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_5.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_05_max_height,hrtankbattery,default,periodic,FLOAT,WT_5.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_06_level,hrtankbattery,default,periodic,FLOAT,WT_6.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_06_hihi_alm,hrtankbattery,default,periodic,BIT,WT_6.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_06_hi_alm,hrtankbattery,default,periodic,BIT,WT_6.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_06_tx_alm,hrtankbattery,default,periodic,BIT,WT_6.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_06_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_6.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_06_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_6.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_06_max_height,hrtankbattery,default,periodic,FLOAT,WT_6.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_07_level,hrtankbattery,default,periodic,FLOAT,WT_7.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_07_hihi_alm,hrtankbattery,default,periodic,BIT,WT_7.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_07_hi_alm,hrtankbattery,default,periodic,BIT,WT_7.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_07_tx_alm,hrtankbattery,default,periodic,BIT,WT_7.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_07_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_7.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_07_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_7.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_07_max_height,hrtankbattery,default,periodic,FLOAT,WT_7.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_08_level,hrtankbattery,default,periodic,FLOAT,WT_8.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_08_hihi_alm,hrtankbattery,default,periodic,BIT,WT_8.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_08_hi_alm,hrtankbattery,default,periodic,BIT,WT_8.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_08_tx_alm,hrtankbattery,default,periodic,BIT,WT_8.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_08_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_8.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_08_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_8.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_08_max_height,hrtankbattery,default,periodic,FLOAT,WT_8.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_09_level,hrtankbattery,default,periodic,FLOAT,WT_9.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_09_hihi_alm,hrtankbattery,default,periodic,BIT,WT_9.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_09_hi_alm,hrtankbattery,default,periodic,BIT,WT_9.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_09_tx_alm,hrtankbattery,default,periodic,BIT,WT_9.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_09_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_9.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_09_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_9.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_09_max_height,hrtankbattery,default,periodic,FLOAT,WT_9.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_run_tank,hrtankbattery,default,periodic,DINT,OT_Selector,,,ro,,,none,,,,,,,,,,
|
||||
oil_run_tank_volume,hrtankbattery,default,periodic,FLOAT,Current_Oil_Tank_Volume,2,,ro,,,none,,,,,,,,,,
|
||||
oil_gauge_off_volume,hrtankbattery,default,periodic,FLOAT,Gauge_Off_Oil_Tank_Volume,2,,ro,,,none,,,,,,,,,,
|
||||
oil_01_level,hrtankbattery,default,periodic,FLOAT,OT_1.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_01_hihi_alm,hrtankbattery,default,periodic,BIT,OT_1.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_01_hi_alm,hrtankbattery,default,periodic,BIT,OT_1.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_01_tx_alm,hrtankbattery,default,periodic,BIT,OT_1.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_01_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_1.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_01_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_1.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_01_max_height,hrtankbattery,default,periodic,FLOAT,OT_1.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_02_level,hrtankbattery,default,periodic,FLOAT,OT_2.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_02_hihi_alm,hrtankbattery,default,periodic,BIT,OT_2.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_02_hi_alm,hrtankbattery,default,periodic,BIT,OT_2.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_02_tx_alm,hrtankbattery,default,periodic,BIT,OT_2.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_02_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_2.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_02_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_2.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_02_max_height,hrtankbattery,default,periodic,FLOAT,OT_2.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_03_level,hrtankbattery,default,periodic,FLOAT,OT_3.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_03_hihi_alm,hrtankbattery,default,periodic,BIT,OT_3.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_03_hi_alm,hrtankbattery,default,periodic,BIT,OT_3.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_03_tx_alm,hrtankbattery,default,periodic,BIT,OT_3.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_03_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_3.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_03_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_3.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_03_max_height,hrtankbattery,default,periodic,FLOAT,OT_3.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_04_level,hrtankbattery,default,periodic,FLOAT,OT_4.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_04_hihi_alm,hrtankbattery,default,periodic,BIT,OT_4.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_04_hi_alm,hrtankbattery,default,periodic,BIT,OT_4.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_04_tx_alm,hrtankbattery,default,periodic,BIT,OT_4.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_04_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_4.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_04_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_4.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_04_max_height,hrtankbattery,default,periodic,FLOAT,OT_4.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_05_level,hrtankbattery,default,periodic,FLOAT,OT_5.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_05_hihi_alm,hrtankbattery,default,periodic,BIT,OT_5.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_05_hi_alm,hrtankbattery,default,periodic,BIT,OT_5.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_05_tx_alm,hrtankbattery,default,periodic,BIT,OT_5.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_05_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_5.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_05_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_5.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_05_max_height,hrtankbattery,default,periodic,FLOAT,OT_5.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_06_level,hrtankbattery,default,periodic,FLOAT,OT_6.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_06_hihi_alm,hrtankbattery,default,periodic,BIT,OT_6.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_06_hi_alm,hrtankbattery,default,periodic,BIT,OT_6.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_06_tx_alm,hrtankbattery,default,periodic,BIT,OT_6.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_06_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_6.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_06_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_6.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_06_max_height,hrtankbattery,default,periodic,FLOAT,OT_6.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_07_level,hrtankbattery,default,periodic,FLOAT,OT_7.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_07_hihi_alm,hrtankbattery,default,periodic,BIT,OT_7.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_07_hi_alm,hrtankbattery,default,periodic,BIT,OT_7.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_07_tx_alm,hrtankbattery,default,periodic,BIT,OT_7.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_07_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_7.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_07_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_7.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_07_max_height,hrtankbattery,default,periodic,FLOAT,OT_7.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
transfer_01_sts,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_01.Sts_Running,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_01_alm,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_01.Alm_FailToStart,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_01_discharge,hrtankbattery,default,periodic,FLOAT,XferPump_01_Dis_PSI.Val,2,,ro,,,none,,,,,,,,,,
|
||||
transfer_01_discharge_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_01_Dis_PSI.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_01_discharge_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_01_Dis_PSI.Alm_LoLo,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_01_flow_rate,hrtankbattery,default,periodic,FLOAT,XferPump_01_FlowRate.Val,2,,ro,,,none,,,,,,,,,,
|
||||
transfer_01_flow_rate_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_01_FlowRate.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_01_flow_rate_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_01_FlowRate.Alm_LoLo,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_01_3_phase_pwr_alm,hrtankbattery,default,periodic,BIT,Transfer_Pump_3_Phase_Power_Alarm.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_02_sts,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_02.Sts_Running,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_02_alm,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_02.Alm_FailToStart,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_02_discharge,hrtankbattery,default,periodic,FLOAT,XferPump_02_Dis_PSI.Val,2,,ro,,,none,,,,,,,,,,
|
||||
transfer_02_discharge_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_02_Dis_PSI.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_02_discharge_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_02_Dis_PSI.Alm_LoLo,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_02_flow_rate,hrtankbattery,default,periodic,FLOAT,XferPump_02_FlowRate.Val,2,,ro,,,none,,,,,,,,,,
|
||||
transfer_02_flow_rate_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_02_FlowRate.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_02_flow_rate_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_02_FlowRate.Alm_LoLo,,,ro,,,none,,,,,,,,,0,
|
||||
lact_01_permissive,hrtankbattery,default,periodic,BIT,LACT_01_Permissive,,,ro,,,none,,,,,,,,,0,
|
||||
lact_01_sts,hrtankbattery,default,periodic,BIT,LACT_01_Run_Status,,,ro,,,none,,,,,,,,,0,
|
||||
lact_01_alm,hrtankbattery,default,periodic,BIT,LACT_01_Failure,,,ro,,,none,,,,,,,,,0,
|
||||
lact_01_oil_shutdown,hrtankbattery,default,periodic,BIT,LACT_01_Bad_Oil_Shutdown,,,ro,,,none,,,,,,,,,0,
|
||||
lact_01_flow_rate,hrtankbattery,default,periodic,FLOAT,Lact_01_Realtime_Flow_Rate,2,,ro,,,none,,,,,,,,,,
|
||||
lact_01_bs_w,hrtankbattery,default,periodic,FLOAT,Lact_01_BS_and_W_Reading,2,,ro,,,none,,,,,,,,,,
|
||||
lact_01_daily_volume,hrtankbattery,default,periodic,FLOAT,Lact_01_Current_Daily_Ind_Volume_Total,2,,ro,,,none,,,,,,,,,,
|
||||
lact_01_prev_day,hrtankbattery,default,periodic,FLOAT,Lact_01_History.Previous_Day_1,2,,ro,,,none,,,,,,,,,,
|
||||
lact_02_permissive,hrtankbattery,default,periodic,BIT,LACT_02_Permissive,,,ro,,,none,,,,,,,,,0,
|
||||
lact_02_sts,hrtankbattery,default,periodic,BIT,LACT_02_Run_Status,,,ro,,,none,,,,,,,,,0,
|
||||
lact_02_alm,hrtankbattery,default,periodic,BIT,LACT_02_Failure,,,ro,,,none,,,,,,,,,0,
|
||||
lact_02_oil_shutdown,hrtankbattery,default,periodic,BIT,LACT_02_Bad_Oil_Shutdown,,,ro,,,none,,,,,,,,,0,
|
||||
lact_02_flow_rate,hrtankbattery,default,periodic,FLOAT,Lact_02_Realtime_Flow_Rate,2,,ro,,,none,,,,,,,,,,
|
||||
lact_02_bs_w,hrtankbattery,default,periodic,FLOAT,Lact_02_BS_and_W_Reading,2,,ro,,,none,,,,,,,,,,
|
||||
lact_02_daily_volume,hrtankbattery,default,periodic,FLOAT,Lact_02_Current_Daily_Ind_Volume_Total,2,,ro,,,none,,,,,,,,,,
|
||||
lact_02_prev_day,hrtankbattery,default,periodic,FLOAT,Lact_02_History.Previous_Day_1,2,,ro,,,none,,,,,,,,,,
|
||||
containment_high_alm,hrtankbattery,default,periodic,BIT,Contain_Hi_Level.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
h2s_alm,hrtankbattery,default,periodic,BIT,H2s_Alarm.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
tf_sales_battery_voltage,hrtankbattery,default,periodic,FLOAT,Val_Sales_TF_Battery_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_sales_charger_voltage,hrtankbattery,default,periodic,FLOAT,Val_Sales_TF_Charger_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_sales_differential_pressure,hrtankbattery,default,periodic,FLOAT,Val_Sales_TF_Differential_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_sales_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Sales_TF_Flow_Rate,2,,ro,,,none,,,,,,,,,,
|
||||
tf_sales_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Sales_TF_Lifetime,2,,ro,,,none,,,,,,,,,,
|
||||
tf_sales_static_pressure,hrtankbattery,default,periodic,FLOAT,Val_Sales_TF_Static_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_sales_temperature,hrtankbattery,default,periodic,FLOAT,Val_Sales_TF_Temperature,2,,ro,,,none,,,,,,,,,,
|
||||
tf_sales_yesterday_total,hrtankbattery,default,periodic,FLOAT,Val_Sales_TF_Yesterday_Total,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v1_battery_voltage,hrtankbattery,default,periodic,FLOAT,Val_V1_TF_Battery_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v1_charger_voltage,hrtankbattery,default,periodic,FLOAT,Val_V1_TF_Charger_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v1_differential_pressure,hrtankbattery,default,periodic,FLOAT,Val_V1_TF_Differential_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v1_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_V1_TF_Flow_Rate,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v1_lifetime,hrtankbattery,default,periodic,FLOAT,Val_V1_TF_Lifetime,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v1_static_pressure,hrtankbattery,default,periodic,FLOAT,Val_V1_TF_Static_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v1_temperature,hrtankbattery,default,periodic,FLOAT,Val_V1_TF_Temperature,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v1_yesterday_total,hrtankbattery,default,periodic,FLOAT,Val_V1_TF_Yesterday_Total,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v2_battery_voltage,hrtankbattery,default,periodic,FLOAT,Val_V2_TF_Battery_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v2_charger_voltage,hrtankbattery,default,periodic,FLOAT,Val_V2_TF_Charger_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v2_differential_pressure,hrtankbattery,default,periodic,FLOAT,Val_V2_TF_Differential_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v2_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_V2_TF_Flow_Rate,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v2_lifetime,hrtankbattery,default,periodic,FLOAT,Val_V2_TF_Lifetime,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v2_static_pressure,hrtankbattery,default,periodic,FLOAT,Val_V2_TF_Static_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v2_temperature,hrtankbattery,default,periodic,FLOAT,Val_V2_TF_Temperature,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v2_yesterday_total,hrtankbattery,default,periodic,FLOAT,Val_V2_TF_Yesterday_Total,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v3_battery_voltage,hrtankbattery,default,periodic,FLOAT,Val_V3_TF_Battery_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v3_charger_voltage,hrtankbattery,default,periodic,FLOAT,Val_V3_TF_Charger_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v3_differential_pressure,hrtankbattery,default,periodic,FLOAT,Val_V3_TF_Differential_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v3_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_V3_TF_Flow_Rate,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v3_lifetime,hrtankbattery,default,periodic,FLOAT,Val_V3_TF_Lifetime,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v3_static_pressure,hrtankbattery,default,periodic,FLOAT,Val_V3_TF_Static_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v3_temperature,hrtankbattery,default,periodic,FLOAT,Val_V3_TF_Temperature,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v3_yesterday_total,hrtankbattery,default,periodic,FLOAT,Val_V3_TF_Yesterday_Total,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v4_battery_voltage,hrtankbattery,default,periodic,FLOAT,Val_V4_TF_Battery_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v4_charger_voltage,hrtankbattery,default,periodic,FLOAT,Val_V4_TF_Charger_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v4_differential_pressure,hrtankbattery,default,periodic,FLOAT,Val_V4_TF_Differential_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v4_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_V4_TF_Flow_Rate,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v4_lifetime,hrtankbattery,default,periodic,FLOAT,Val_V4_TF_Lifetime,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v4_static_pressure,hrtankbattery,default,periodic,FLOAT,Val_V4_TF_Static_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v4_temperature,hrtankbattery,default,periodic,FLOAT,Val_V4_TF_Temperature,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v4_yesterday_total,hrtankbattery,default,periodic,FLOAT,Val_V4_TF_Yesterday_Total,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v5_battery_voltage,hrtankbattery,default,periodic,FLOAT,Val_V5_TF_Battery_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v5_charger_voltage,hrtankbattery,default,periodic,FLOAT,Val_V5_TF_Charger_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v5_differential_pressure,hrtankbattery,default,periodic,FLOAT,Val_V5_TF_Differential_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v5_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_V5_TF_Flow_Rate,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v5_lifetime,hrtankbattery,default,periodic,FLOAT,Val_V5_TF_Lifetime,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v5_static_pressure,hrtankbattery,default,periodic,FLOAT,Val_V5_TF_Static_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v5_temperature,hrtankbattery,default,periodic,FLOAT,Val_V5_TF_Temperature,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v5_yesterday_total,hrtankbattery,default,periodic,FLOAT,Val_V5_TF_Yesterday_Total,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_gas_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Gas_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_oil_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Oil_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_oil_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_OIL_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_oil_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_OIL_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_oil_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Oil_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_oil_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Oil_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_oil_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Oil_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_oil_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Oil_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_water_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Water_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_water_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Water_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_water_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Water_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_water_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Water_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_water_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Water_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_water_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Water_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_water_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Water_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_gas_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Gas_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_oil_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Oil_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_oil_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_OIL_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_oil_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_OIL_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_oil_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Oil_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_oil_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Oil_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_oil_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Oil_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_oil_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_OIL_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_water_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Water_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_water_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Water_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_water_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Water_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_water_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Water_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_water_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Water_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_water_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Water_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_water_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Water_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_gas_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Gas_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_oil_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Oil_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_oil_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_OIL_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_oil_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_OIL_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_oil_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Oil_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_oil_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Oil_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_oil_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Oil_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_oil_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_OIL_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_water_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Water_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_water_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Water_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_water_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Water_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_water_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Water_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_water_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Water_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_water_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Water_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_water_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Water_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_gas_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Gas_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_oil_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Oil_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_oil_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_OIL_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_oil_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_OIL_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_oil_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Oil_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_oil_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Oil_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_oil_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Oil_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_oil_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_OIL_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_water_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Water_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_water_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Water_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_water_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Water_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_water_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Water_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_water_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Water_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_water_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Water_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_water_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Water_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_gas_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Gas_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_oil_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Oil_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_oil_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_OIL_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_oil_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_OIL_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_oil_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Oil_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_oil_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Oil_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_oil_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Oil_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_oil_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_OIL_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_water_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Water_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_water_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Water_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_water_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Water_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_water_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Water_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_water_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Water_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_water_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Water_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_water_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Water_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
wtp_1_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_WTP_FM_FR_MBS,2,,ro,,,none,,,,,,,,,,
|
||||
wtp_1_last_month,hrtankbattery,default,periodic,FLOAT,Val_WTP_FM_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
wtp_1_month,hrtankbattery,default,periodic,FLOAT,Val_WTP_FM_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
wtp_1_net_volume,hrtankbattery,default,periodic,FLOAT,Val_WTP_FM_T1_MBS,2,,ro,,,none,,,,,,,,,,
|
||||
wtp_1_forward_volume,hrtankbattery,default,periodic,FLOAT,Val_WTP_FM_T2_MBS,2,,ro,,,none,,,,,,,,,,
|
||||
wtp_1_reverse_volume,hrtankbattery,default,periodic,FLOAT,Val_WTP_FM_T3_MBS,2,,ro,,,none,,,,,,,,,,
|
||||
wtp_1_today,hrtankbattery,default,periodic,FLOAT,Val_WTP_FM_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
wtp_1_yesterday,hrtankbattery,default,periodic,FLOAT,Val_WTP_FM_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
|
298
Pub_Sub/hrtankbattery/thingsboard/test.csv
Normal file
298
Pub_Sub/hrtankbattery/thingsboard/test.csv
Normal file
@@ -0,0 +1,298 @@
|
||||
MeasuringPointName,ControllerName,GroupName,UploadType,DataType,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,bitMap,msecSample
|
||||
plc_io_fault_alm,hrtankbattery,default,periodic,BIT,IO_Fault_Alarm,,,ro,,,none,,,,,,,,,0,
|
||||
plc_fault,hrtankbattery,default,periodic,BIT,PLC_FAULT,,,ro,,,none,,,,,,,,,0,
|
||||
analog_01_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_01,,,ro,,,none,,,,,,,,,0,
|
||||
analog_02_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_02,,,ro,,,none,,,,,,,,,0,
|
||||
analog_03_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_03,,,ro,,,none,,,,,,,,,0,
|
||||
analog_04_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_04,,,ro,,,none,,,,,,,,,0,
|
||||
analog_05_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_05,,,ro,,,none,,,,,,,,,0,
|
||||
analog_06_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_06,,,ro,,,none,,,,,,,,,0,
|
||||
ac_power_alm,hrtankbattery,default,periodic,BIT,Alm_AC_Pwr.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
ups_alm,hrtankbattery,default,periodic,BIT,Alm_UPS.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
dc_power_alm,hrtankbattery,default,periodic,BIT,DC_Power_OK.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
three_phase_pwr_alm,hrtankbattery,default,periodic,BIT,Three_Phase_Power_Alarm.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
count_oil_tanks,hrtankbattery,default,periodic,DINT,NUMBER_OF_OIL_TANKS,,,ro,,,none,,,,,,,,,,
|
||||
count_water_tanks,hrtankbattery,default,periodic,DINT,NUMBER_OF_WTR_TANKS,,,ro,,,none,,,,,,,,,,
|
||||
count_flow_meters,hrtankbattery,default,periodic,DINT,NUMBER_OF_FLOWMETERS,,,ro,,,none,,,,,,,,,,
|
||||
count_transfer_pumps,hrtankbattery,default,periodic,DINT,NUMBER_OF_TRANSFER_PUMPS,,,ro,,,none,,,,,,,,,,
|
||||
count_lacts,hrtankbattery,default,periodic,DINT,NUMBER_OF_LACTS,,,ro,,,none,,,,,,,,,,
|
||||
water_run_tank,hrtankbattery,default,periodic,DINT,WT_Selector,,,ro,,,none,,,,,,,,,,
|
||||
water_01_level,hrtankbattery,default,periodic,FLOAT,WT_1.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_run_tank_volume,hrtankbattery,default,periodic,FLOAT,Curent_Water_Tank_Volume,2,,ro,,,none,,,,,,,,,,
|
||||
water_gauge_off_volume,hrtankbattery,default,periodic,FLOAT,Gauge_Off_Water_Tank_Volume,2,,ro,,,none,,,,,,,,,,
|
||||
water_01_hihi_alm,hrtankbattery,default,periodic,BIT,WT_1.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_01_hi_alm,hrtankbattery,default,periodic,BIT,WT_1.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_01_tx_alm,hrtankbattery,default,periodic,BIT,WT_1.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_01_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_1.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_01_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_1.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_01_max_height,hrtankbattery,default,periodic,FLOAT,WT_1.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_02_level,hrtankbattery,default,periodic,FLOAT,WT_2.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_02_hihi_alm,hrtankbattery,default,periodic,BIT,WT_2.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_02_hi_alm,hrtankbattery,default,periodic,BIT,WT_2.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_02_tx_alm,hrtankbattery,default,periodic,BIT,WT_2.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_02_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_2.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_02_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_2.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_02_max_height,hrtankbattery,default,periodic,FLOAT,WT_2.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_03_level,hrtankbattery,default,periodic,FLOAT,WT_3.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_03_hihi_alm,hrtankbattery,default,periodic,BIT,WT_3.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_03_hi_alm,hrtankbattery,default,periodic,BIT,WT_3.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_03_tx_alm,hrtankbattery,default,periodic,BIT,WT_3.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_03_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_3.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_03_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_3.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_03_max_height,hrtankbattery,default,periodic,FLOAT,WT_3.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_04_level,hrtankbattery,default,periodic,FLOAT,WT_4.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_04_hihi_alm,hrtankbattery,default,periodic,BIT,WT_4.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_04_hi_alm,hrtankbattery,default,periodic,BIT,WT_4.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_04_tx_alm,hrtankbattery,default,periodic,BIT,WT_4.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_04_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_4.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_04_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_4.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_04_max_height,hrtankbattery,default,periodic,FLOAT,WT_4.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_05_level,hrtankbattery,default,periodic,FLOAT,WT_5.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_05_hihi_alm,hrtankbattery,default,periodic,BIT,WT_5.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_05_hi_alm,hrtankbattery,default,periodic,BIT,WT_5.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_05_tx_alm,hrtankbattery,default,periodic,BIT,WT_5.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_05_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_5.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_05_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_5.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_05_max_height,hrtankbattery,default,periodic,FLOAT,WT_5.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_06_level,hrtankbattery,default,periodic,FLOAT,WT_6.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_06_hihi_alm,hrtankbattery,default,periodic,BIT,WT_6.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_06_hi_alm,hrtankbattery,default,periodic,BIT,WT_6.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_06_tx_alm,hrtankbattery,default,periodic,BIT,WT_6.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_06_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_6.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_06_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_6.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_06_max_height,hrtankbattery,default,periodic,FLOAT,WT_6.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_07_level,hrtankbattery,default,periodic,FLOAT,WT_7.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_07_hihi_alm,hrtankbattery,default,periodic,BIT,WT_7.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_07_hi_alm,hrtankbattery,default,periodic,BIT,WT_7.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_07_tx_alm,hrtankbattery,default,periodic,BIT,WT_7.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_07_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_7.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_07_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_7.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_07_max_height,hrtankbattery,default,periodic,FLOAT,WT_7.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_08_level,hrtankbattery,default,periodic,FLOAT,WT_8.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_08_hihi_alm,hrtankbattery,default,periodic,BIT,WT_8.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_08_hi_alm,hrtankbattery,default,periodic,BIT,WT_8.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_08_tx_alm,hrtankbattery,default,periodic,BIT,WT_8.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_08_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_8.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_08_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_8.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_08_max_height,hrtankbattery,default,periodic,FLOAT,WT_8.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
water_09_level,hrtankbattery,default,periodic,FLOAT,WT_9.Val,2,,ro,,,none,,,,,,,,,,
|
||||
water_09_hihi_alm,hrtankbattery,default,periodic,BIT,WT_9.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
water_09_hi_alm,hrtankbattery,default,periodic,BIT,WT_9.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
water_09_tx_alm,hrtankbattery,default,periodic,BIT,WT_9.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
water_09_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_9.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_09_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_9.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
water_09_max_height,hrtankbattery,default,periodic,FLOAT,WT_9.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_run_tank,hrtankbattery,default,periodic,DINT,OT_Selector,,,ro,,,none,,,,,,,,,,
|
||||
oil_run_tank_volume,hrtankbattery,default,periodic,FLOAT,Current_Oil_Tank_Volume,2,,ro,,,none,,,,,,,,,,
|
||||
oil_gauge_off_volume,hrtankbattery,default,periodic,FLOAT,Gauge_Off_Oil_Tank_Volume,2,,ro,,,none,,,,,,,,,,
|
||||
oil_01_level,hrtankbattery,default,periodic,FLOAT,OT_1.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_01_hihi_alm,hrtankbattery,default,periodic,BIT,OT_1.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_01_hi_alm,hrtankbattery,default,periodic,BIT,OT_1.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_01_tx_alm,hrtankbattery,default,periodic,BIT,OT_1.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_01_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_1.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_01_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_1.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_01_max_height,hrtankbattery,default,periodic,FLOAT,OT_1.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_02_level,hrtankbattery,default,periodic,FLOAT,OT_2.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_02_hihi_alm,hrtankbattery,default,periodic,BIT,OT_2.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_02_hi_alm,hrtankbattery,default,periodic,BIT,OT_2.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_02_tx_alm,hrtankbattery,default,periodic,BIT,OT_2.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_02_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_2.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_02_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_2.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_02_max_height,hrtankbattery,default,periodic,FLOAT,OT_2.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_03_level,hrtankbattery,default,periodic,FLOAT,OT_3.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_03_hihi_alm,hrtankbattery,default,periodic,BIT,OT_3.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_03_hi_alm,hrtankbattery,default,periodic,BIT,OT_3.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_03_tx_alm,hrtankbattery,default,periodic,BIT,OT_3.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_03_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_3.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_03_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_3.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_03_max_height,hrtankbattery,default,periodic,FLOAT,OT_3.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_04_level,hrtankbattery,default,periodic,FLOAT,OT_4.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_04_hihi_alm,hrtankbattery,default,periodic,BIT,OT_4.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_04_hi_alm,hrtankbattery,default,periodic,BIT,OT_4.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_04_tx_alm,hrtankbattery,default,periodic,BIT,OT_4.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_04_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_4.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_04_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_4.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_04_max_height,hrtankbattery,default,periodic,FLOAT,OT_4.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_05_level,hrtankbattery,default,periodic,FLOAT,OT_5.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_05_hihi_alm,hrtankbattery,default,periodic,BIT,OT_5.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_05_hi_alm,hrtankbattery,default,periodic,BIT,OT_5.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_05_tx_alm,hrtankbattery,default,periodic,BIT,OT_5.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_05_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_5.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_05_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_5.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_05_max_height,hrtankbattery,default,periodic,FLOAT,OT_5.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_06_level,hrtankbattery,default,periodic,FLOAT,OT_6.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_06_hihi_alm,hrtankbattery,default,periodic,BIT,OT_6.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_06_hi_alm,hrtankbattery,default,periodic,BIT,OT_6.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_06_tx_alm,hrtankbattery,default,periodic,BIT,OT_6.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_06_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_6.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_06_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_6.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_06_max_height,hrtankbattery,default,periodic,FLOAT,OT_6.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
oil_07_level,hrtankbattery,default,periodic,FLOAT,OT_7.Val,2,,ro,,,none,,,,,,,,,,
|
||||
oil_07_hihi_alm,hrtankbattery,default,periodic,BIT,OT_7.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_07_hi_alm,hrtankbattery,default,periodic,BIT,OT_7.Alm_Hi,,,ro,,,none,,,,,,,,,0,
|
||||
oil_07_tx_alm,hrtankbattery,default,periodic,BIT,OT_7.Alm_Fail,,,ro,,,none,,,,,,,,,0,
|
||||
oil_07_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_7.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_07_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_7.PSet_HiLim,2,,ro,,,none,,,,,,,,,,
|
||||
oil_07_max_height,hrtankbattery,default,periodic,FLOAT,OT_7.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,,
|
||||
transfer_01_sts,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_01.Sts_Running,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_01_alm,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_01.Alm_FailToStart,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_01_discharge,hrtankbattery,default,periodic,FLOAT,XferPump_01_Dis_PSI.Val,2,,ro,,,none,,,,,,,,,,
|
||||
transfer_01_discharge_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_01_Dis_PSI.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_01_discharge_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_01_Dis_PSI.Alm_LoLo,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_01_flow_rate,hrtankbattery,default,periodic,FLOAT,XferPump_01_FlowRate.Val,2,,ro,,,none,,,,,,,,,,
|
||||
transfer_01_flow_rate_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_01_FlowRate.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_01_flow_rate_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_01_FlowRate.Alm_LoLo,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_01_3_phase_pwr_alm,hrtankbattery,default,periodic,BIT,Transfer_Pump_3_Phase_Power_Alarm.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_02_sts,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_02.Sts_Running,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_02_alm,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_02.Alm_FailToStart,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_02_discharge,hrtankbattery,default,periodic,FLOAT,XferPump_02_Dis_PSI.Val,2,,ro,,,none,,,,,,,,,,
|
||||
transfer_02_discharge_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_02_Dis_PSI.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_02_discharge_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_02_Dis_PSI.Alm_LoLo,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_02_flow_rate,hrtankbattery,default,periodic,FLOAT,XferPump_02_FlowRate.Val,2,,ro,,,none,,,,,,,,,,
|
||||
transfer_02_flow_rate_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_02_FlowRate.Alm_HiHi,,,ro,,,none,,,,,,,,,0,
|
||||
transfer_02_flow_rate_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_02_FlowRate.Alm_LoLo,,,ro,,,none,,,,,,,,,0,
|
||||
lact_01_permissive,hrtankbattery,default,periodic,BIT,LACT_01_Permissive,,,ro,,,none,,,,,,,,,0,
|
||||
lact_01_sts,hrtankbattery,default,periodic,BIT,LACT_01_Run_Status,,,ro,,,none,,,,,,,,,0,
|
||||
lact_01_alm,hrtankbattery,default,periodic,BIT,LACT_01_Failure,,,ro,,,none,,,,,,,,,0,
|
||||
lact_01_oil_shutdown,hrtankbattery,default,periodic,BIT,LACT_01_Bad_Oil_Shutdown,,,ro,,,none,,,,,,,,,0,
|
||||
lact_01_flow_rate,hrtankbattery,default,periodic,FLOAT,Lact_01_Realtime_Flow_Rate,2,,ro,,,none,,,,,,,,,,
|
||||
lact_01_bs_w,hrtankbattery,default,periodic,FLOAT,Lact_01_BS_and_W_Reading,2,,ro,,,none,,,,,,,,,,
|
||||
lact_01_daily_volume,hrtankbattery,default,periodic,FLOAT,Lact_01_Current_Daily_Ind_Volume_Total,2,,ro,,,none,,,,,,,,,,
|
||||
lact_01_prev_day,hrtankbattery,default,periodic,FLOAT,Lact_01_History.Previous_Day_1,2,,ro,,,none,,,,,,,,,,
|
||||
lact_02_permissive,hrtankbattery,default,periodic,BIT,LACT_02_Permissive,,,ro,,,none,,,,,,,,,0,
|
||||
lact_02_sts,hrtankbattery,default,periodic,BIT,LACT_02_Run_Status,,,ro,,,none,,,,,,,,,0,
|
||||
lact_02_alm,hrtankbattery,default,periodic,BIT,LACT_02_Failure,,,ro,,,none,,,,,,,,,0,
|
||||
lact_02_oil_shutdown,hrtankbattery,default,periodic,BIT,LACT_02_Bad_Oil_Shutdown,,,ro,,,none,,,,,,,,,0,
|
||||
lact_02_flow_rate,hrtankbattery,default,periodic,FLOAT,Lact_02_Realtime_Flow_Rate,2,,ro,,,none,,,,,,,,,,
|
||||
lact_02_bs_w,hrtankbattery,default,periodic,FLOAT,Lact_02_BS_and_W_Reading,2,,ro,,,none,,,,,,,,,,
|
||||
lact_02_daily_volume,hrtankbattery,default,periodic,FLOAT,Lact_02_Current_Daily_Ind_Volume_Total,2,,ro,,,none,,,,,,,,,,
|
||||
lact_02_prev_day,hrtankbattery,default,periodic,FLOAT,Lact_02_History.Previous_Day_1,2,,ro,,,none,,,,,,,,,,
|
||||
containment_high_alm,hrtankbattery,default,periodic,BIT,Contain_Hi_Level.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
h2s_alm,hrtankbattery,default,periodic,BIT,H2s_Alarm.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0,
|
||||
tf_sales_battery_voltage,hrtankbattery,default,periodic,FLOAT,Val_Sales_TF_Battery_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_sales_charger_voltage,hrtankbattery,default,periodic,FLOAT,Val_Sales_TF_Charger_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_sales_differential_pressure,hrtankbattery,default,periodic,FLOAT,Val_Sales_TF_Differential_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_sales_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Sales_TF_Flow_Rate,2,,ro,,,none,,,,,,,,,,
|
||||
tf_sales_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Sales_TF_Lifetime,2,,ro,,,none,,,,,,,,,,
|
||||
tf_sales_static_pressure,hrtankbattery,default,periodic,FLOAT,Val_Sales_TF_Static_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_sales_temperature,hrtankbattery,default,periodic,FLOAT,Val_Sales_TF_Temperature,2,,ro,,,none,,,,,,,,,,
|
||||
tf_sales_yesterday_total,hrtankbattery,default,periodic,FLOAT,Val_Sales_TF_Yesterday_Total,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v1_battery_voltage,hrtankbattery,default,periodic,FLOAT,Val_V1_TF_Battery_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v1_charger_voltage,hrtankbattery,default,periodic,FLOAT,Val_V1_TF_Charger_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v1_differential_pressure,hrtankbattery,default,periodic,FLOAT,Val_V1_TF_Differential_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v1_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_V1_TF_Flow_Rate,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v1_lifetime,hrtankbattery,default,periodic,FLOAT,Val_V1_TF_Lifetime,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v1_static_pressure,hrtankbattery,default,periodic,FLOAT,Val_V1_TF_Static_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v1_temperature,hrtankbattery,default,periodic,FLOAT,Val_V1_TF_Temperature,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v1_yesterday_total,hrtankbattery,default,periodic,FLOAT,Val_V1_TF_Yesterday_Total,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v2_battery_voltage,hrtankbattery,default,periodic,FLOAT,Val_V2_TF_Battery_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v2_charger_voltage,hrtankbattery,default,periodic,FLOAT,Val_V2_TF_Charger_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v2_differential_pressure,hrtankbattery,default,periodic,FLOAT,Val_V2_TF_Differential_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v2_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_V2_TF_Flow_Rate,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v2_lifetime,hrtankbattery,default,periodic,FLOAT,Val_V2_TF_Lifetime,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v2_static_pressure,hrtankbattery,default,periodic,FLOAT,Val_V2_TF_Static_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v2_temperature,hrtankbattery,default,periodic,FLOAT,Val_V2_TF_Temperature,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v2_yesterday_total,hrtankbattery,default,periodic,FLOAT,Val_V2_TF_Yesterday_Total,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v3_battery_voltage,hrtankbattery,default,periodic,FLOAT,Val_V3_TF_Battery_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v3_charger_voltage,hrtankbattery,default,periodic,FLOAT,Val_V3_TF_Charger_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v3_differential_pressure,hrtankbattery,default,periodic,FLOAT,Val_V3_TF_Differential_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v3_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_V3_TF_Flow_Rate,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v3_lifetime,hrtankbattery,default,periodic,FLOAT,Val_V3_TF_Lifetime,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v3_static_pressure,hrtankbattery,default,periodic,FLOAT,Val_V3_TF_Static_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v3_temperature,hrtankbattery,default,periodic,FLOAT,Val_V3_TF_Temperature,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v3_yesterday_total,hrtankbattery,default,periodic,FLOAT,Val_V3_TF_Yesterday_Total,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v4_battery_voltage,hrtankbattery,default,periodic,FLOAT,Val_V4_TF_Battery_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v4_charger_voltage,hrtankbattery,default,periodic,FLOAT,Val_V4_TF_Charger_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v4_differential_pressure,hrtankbattery,default,periodic,FLOAT,Val_V4_TF_Differential_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v4_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_V4_TF_Flow_Rate,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v4_lifetime,hrtankbattery,default,periodic,FLOAT,Val_V4_TF_Lifetime,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v4_static_pressure,hrtankbattery,default,periodic,FLOAT,Val_V4_TF_Static_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v4_temperature,hrtankbattery,default,periodic,FLOAT,Val_V4_TF_Temperature,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v4_yesterday_total,hrtankbattery,default,periodic,FLOAT,Val_V4_TF_Yesterday_Total,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v5_battery_voltage,hrtankbattery,default,periodic,FLOAT,Val_V5_TF_Battery_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v5_charger_voltage,hrtankbattery,default,periodic,FLOAT,Val_V5_TF_Charger_Voltage,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v5_differential_pressure,hrtankbattery,default,periodic,FLOAT,Val_V5_TF_Differential_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v5_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_V5_TF_Flow_Rate,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v5_lifetime,hrtankbattery,default,periodic,FLOAT,Val_V5_TF_Lifetime,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v5_static_pressure,hrtankbattery,default,periodic,FLOAT,Val_V5_TF_Static_Pressure,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v5_temperature,hrtankbattery,default,periodic,FLOAT,Val_V5_TF_Temperature,2,,ro,,,none,,,,,,,,,,
|
||||
tf_v5_yesterday_total,hrtankbattery,default,periodic,FLOAT,Val_V5_TF_Yesterday_Total,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_gas_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Gas_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_oil_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Oil_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_oil_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_OIL_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_oil_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_OIL_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_oil_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Oil_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_oil_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Oil_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_oil_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Oil_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_oil_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Oil_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_water_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Water_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_water_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Water_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_water_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Water_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_water_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Water_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_water_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Water_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_water_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Water_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_1_water_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_1_Water_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_oil_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Oil_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_oil_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_OIL_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_oil_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_OIL_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_oil_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Oil_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_oil_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Oil_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_oil_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Oil_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_oil_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_OIL_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_water_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Water_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_water_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Water_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_water_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Water_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_water_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Water_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_water_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Water_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_water_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Water_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_2_water_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_2_Water_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_oil_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Oil_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_oil_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_OIL_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_oil_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_OIL_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_oil_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Oil_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_oil_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Oil_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_oil_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Oil_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_oil_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_OIL_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_water_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Water_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_water_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Water_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_water_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Water_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_water_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Water_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_water_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Water_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_water_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Water_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_3_water_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_3_Water_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_oil_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Oil_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_oil_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_OIL_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_oil_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_OIL_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_oil_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Oil_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_oil_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Oil_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_oil_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Oil_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_oil_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_OIL_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_water_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Water_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_water_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Water_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_water_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Water_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_water_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Water_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_water_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Water_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_water_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Water_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_4_water_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_4_Water_Vest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_oil_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Oil_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_oil_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_OIL_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_oil_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_OIL_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_oil_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Oil_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_oil_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Oil_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_oil_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Oil_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_oil_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_OIL_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_water_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Water_FR,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_water_last_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Water_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_water_month,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Water_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_water_lifetime,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Water_T1,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_water_temperature,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Water_Temp,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_water_today,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Water_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
vessel_5_water_yesterday,hrtankbattery,default,periodic,FLOAT,Val_Vessel_5_Water_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
wtp_1_flow_rate,hrtankbattery,default,periodic,FLOAT,Val_WTP_FM_FR_MBS,2,,ro,,,none,,,,,,,,,,
|
||||
wtp_1_last_month,hrtankbattery,default,periodic,FLOAT,Val_WTP_FM_LastMonth_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
wtp_1_month,hrtankbattery,default,periodic,FLOAT,Val_WTP_FM_Month_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
wtp_1_net_volume,hrtankbattery,default,periodic,FLOAT,Val_WTP_FM_T1_MBS,2,,ro,,,none,,,,,,,,,,
|
||||
wtp_1_forward_volume,hrtankbattery,default,periodic,FLOAT,Val_WTP_FM_T2_MBS,2,,ro,,,none,,,,,,,,,,
|
||||
wtp_1_reverse_volume,hrtankbattery,default,periodic,FLOAT,Val_WTP_FM_T3_MBS,2,,ro,,,none,,,,,,,,,,
|
||||
wtp_1_today,hrtankbattery,default,periodic,FLOAT,Val_WTP_FM_Todays_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
wtp_1_yesterday,hrtankbattery,default,periodic,FLOAT,Val_WTP_FM_Yest_Accum,2,,ro,,,none,,,,,,,,,,
|
||||
|
@@ -124,15 +124,22 @@ def sendData(message):
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
payload = {"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values": {}}
|
||||
run_tanks = {}
|
||||
|
||||
for measure in message["measures"]:
|
||||
try:
|
||||
logger.debug(measure)
|
||||
if abs(payload["ts"]/1000 - measure["timestamp"]) > 3600:
|
||||
reboot(reason="Poll timestamp and actual timestamp out of sync. Actual: {} Poll: {}".format(payload["ts"]/1000,measure["timestamp"]))
|
||||
if measure["name"] in ["oil_run_tank","water_run_tank"]:
|
||||
run_tanks[measure["name"]] = measure["value"]
|
||||
if "_level" in measure["name"]:
|
||||
run_tanks[measure["name"]] = measure["value"]
|
||||
payload["values"][measure["name"]] = measure["value"]
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
|
||||
payload["values"]["oil_run_tank_level"] = run_tanks["oil_0" + str(run_tanks["oil_run_tank"]) + "_level"]
|
||||
payload["values"]["water_run_tank_level"] = run_tanks["water_0" + str(run_tanks["water_run_tank"]) + "_level"]
|
||||
publish(__topic__, json.dumps(payload), __qos__)
|
||||
publish("v1/devices/me/attributes", json.dumps({"latestReportTime": (round(dt.timestamp(dt.now())/600)*600)*1000}), __qos__)
|
||||
|
||||
|
||||
3739
Pub_Sub/hrtankbattery/thingsboard/v3/hrtankbattery_tb_v3.cfg
Normal file
3739
Pub_Sub/hrtankbattery/thingsboard/v3/hrtankbattery_tb_v3.cfg
Normal file
File diff suppressed because one or more lines are too long
3803
Pub_Sub/hrtankbattery/thingsboard/v3/hrtankbattery_tb_v3_emma.cfg
Normal file
3803
Pub_Sub/hrtankbattery/thingsboard/v3/hrtankbattery_tb_v3_emma.cfg
Normal file
File diff suppressed because one or more lines are too long
3803
Pub_Sub/hrtankbattery/thingsboard/v3/hrtankbattery_tb_v3_lisa.cfg
Normal file
3803
Pub_Sub/hrtankbattery/thingsboard/v3/hrtankbattery_tb_v3_lisa.cfg
Normal file
File diff suppressed because one or more lines are too long
12
Pub_Sub/hrtankbattery/thingsboard/v3/pub/sendAlarms.py
Normal file
12
Pub_Sub/hrtankbattery/thingsboard/v3/pub/sendAlarms.py
Normal file
@@ -0,0 +1,12 @@
|
||||
# Enter your python code.
|
||||
import json, time
|
||||
from common.Logger import logger
|
||||
from quickfaas.remotebus import publish
|
||||
|
||||
|
||||
def sendAlarm(message):
|
||||
logger.info(message)
|
||||
payload = {}
|
||||
payload["ts"] = time.time()*1000
|
||||
payload["values"] = {message["measureName"]: message["value"]}
|
||||
publish(__topic__, json.dumps(payload), __qos__)
|
||||
145
Pub_Sub/hrtankbattery/thingsboard/v3/pub/sendData.py
Normal file
145
Pub_Sub/hrtankbattery/thingsboard/v3/pub/sendData.py
Normal file
@@ -0,0 +1,145 @@
|
||||
# Enter your python code.
|
||||
import json, os
|
||||
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
|
||||
|
||||
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 checkFileExist(filename):
|
||||
path = "/var/user/files"
|
||||
if not os.path.exists(path):
|
||||
logger.info("no folder making files folder in var/user")
|
||||
os.makedirs(path)
|
||||
with open(path + "/" + filename, "a") as f:
|
||||
json.dump({}, f)
|
||||
if not os.path.exists(path + "/" + filename):
|
||||
logger.info("no creds file making creds file")
|
||||
with open(path + "/" + filename, "a") as f:
|
||||
json.dump({}, f)
|
||||
|
||||
def convertDStoJSON(ds):
|
||||
j = dict()
|
||||
for x in ds:
|
||||
j[x["key"]] = x["value"]
|
||||
return j
|
||||
|
||||
def convertJSONtoDS(j):
|
||||
d = []
|
||||
for key in j.keys():
|
||||
d.append({"key": key, "value": j[key]})
|
||||
return d
|
||||
|
||||
def checkCredentialConfig():
|
||||
logger.debug("CHECKING CONFIG")
|
||||
cfgpath = "/var/user/cfg/device_supervisor/device_supervisor.cfg"
|
||||
credspath = "/var/user/files/creds.json"
|
||||
cfg = dict()
|
||||
with open(cfgpath, "r") as f:
|
||||
cfg = json.load(f)
|
||||
clouds = cfg.get("clouds")
|
||||
logger.debug(clouds)
|
||||
#if not configured then try to configure from stored values
|
||||
if clouds[0]["args"]["clientId"] == "unknown" or clouds[0]["args"]["username"] == "unknown" or not clouds[0]["args"]["passwd"] or clouds[0]["args"]["passwd"] == "unknown":
|
||||
checkFileExist("creds.json")
|
||||
with open(credspath, "r") as c:
|
||||
creds = json.load(c)
|
||||
if creds:
|
||||
logger.debug("updating config with stored data")
|
||||
clouds[0]["args"]["clientId"] = creds["clientId"]
|
||||
clouds[0]["args"]["username"] = creds["userName"]
|
||||
clouds[0]["args"]["passwd"] = creds["password"]
|
||||
cfg["clouds"] = clouds
|
||||
cfg = checkParameterConfig(cfg)
|
||||
with open(cfgpath, "w", encoding='utf-8') as n:
|
||||
json.dump(cfg, n, indent=1, ensure_ascii=False)
|
||||
reboot()
|
||||
else:
|
||||
#assuming clouds is filled out, if data is different then assume someone typed in something new and store it, if creds is empty fill with clouds' data
|
||||
checkFileExist("creds.json")
|
||||
with open(credspath, "r") as c:
|
||||
logger.debug("updating stored file with new data")
|
||||
cfg = checkParameterConfig(cfg)
|
||||
with open(cfgpath, "w", encoding='utf-8') as n:
|
||||
json.dump(cfg, n, indent=1, ensure_ascii=False)
|
||||
creds = json.load(c)
|
||||
if creds:
|
||||
if creds["clientId"] != clouds[0]["args"]["clientId"]:
|
||||
creds["clientId"] = clouds[0]["args"]["clientId"]
|
||||
if creds["userName"] != clouds[0]["args"]["username"]:
|
||||
creds["userName"] = clouds[0]["args"]["username"]
|
||||
if creds["password"] != clouds[0]["args"]["passwd"]:
|
||||
creds["password"] = clouds[0]["args"]["passwd"]
|
||||
else:
|
||||
creds["clientId"] = clouds[0]["args"]["clientId"]
|
||||
creds["userName"] = clouds[0]["args"]["username"]
|
||||
creds["password"] = clouds[0]["args"]["passwd"]
|
||||
with open(credspath, "w") as cw:
|
||||
json.dump(creds,cw)
|
||||
|
||||
def checkParameterConfig(cfg):
|
||||
logger.debug("Checking Parameters!!!!")
|
||||
paramspath = "/var/user/files/params.json"
|
||||
cfgparams = convertDStoJSON(cfg.get("labels"))
|
||||
#check stored values
|
||||
checkFileExist("params.json")
|
||||
with open(paramspath, "r") as f:
|
||||
logger.debug("Opened param storage file")
|
||||
params = json.load(f)
|
||||
if params:
|
||||
if cfgparams != params:
|
||||
#go through each param
|
||||
#if not "unknown" and cfg and params aren't the same take from cfg likely updated manually
|
||||
#if key in cfg but not in params copy to params
|
||||
logger.debug("equalizing params between cfg and stored")
|
||||
for key in cfgparams.keys():
|
||||
try:
|
||||
if cfgparams[key] != params[key] and cfgparams[key] != "unknown":
|
||||
params[key] = cfgparams[key]
|
||||
except:
|
||||
params[key] = cfgparams[key]
|
||||
cfg["labels"] = convertJSONtoDS(params)
|
||||
_set_global_args(convertJSONtoDS(params))
|
||||
with open(paramspath, "w") as p:
|
||||
json.dump(params, p)
|
||||
else:
|
||||
with open(paramspath, "w") as p:
|
||||
logger.debug("initializing param file with params in memory")
|
||||
json.dump(convertDStoJSON(get_params()), p)
|
||||
cfg["labels"] = get_params()
|
||||
|
||||
return cfg
|
||||
|
||||
def sendData(message):
|
||||
#logger.debug(message)
|
||||
try:
|
||||
checkCredentialConfig()
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
payload = {"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values": {}}
|
||||
run_tanks = {}
|
||||
|
||||
for measure in message["measures"]:
|
||||
try:
|
||||
logger.debug(measure)
|
||||
if abs(payload["ts"]/1000 - measure["timestamp"]) > 3600:
|
||||
reboot(reason="Poll timestamp and actual timestamp out of sync. Actual: {} Poll: {}".format(payload["ts"]/1000,measure["timestamp"]))
|
||||
if measure["name"] in ["oil_run_tank","water_run_tank"]:
|
||||
run_tanks[measure["name"]] = measure["value"]
|
||||
if "_level" in measure["name"]:
|
||||
run_tanks[measure["name"]] = measure["value"]
|
||||
payload["values"][measure["name"]] = measure["value"]
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
payload["values"]["oil_run_tank_level"] = run_tanks["oil_0" + str(run_tanks["oil_run_tank"]) + "_level"]
|
||||
payload["values"]["water_run_tank_level"] = run_tanks["water_0" + str(run_tanks["water_run_tank"]) + "_level"]
|
||||
publish(__topic__, json.dumps(payload), __qos__)
|
||||
publish("v1/devices/me/attributes", json.dumps({"latestReportTime": (round(dt.timestamp(dt.now())/600)*600)*1000}), __qos__)
|
||||
|
||||
66
Pub_Sub/hrtankbattery/thingsboard/v3/sub/receiveCommand.py
Normal file
66
Pub_Sub/hrtankbattery/thingsboard/v3/sub/receiveCommand.py
Normal file
@@ -0,0 +1,66 @@
|
||||
import json, time
|
||||
from quickfaas.measure import recall, write
|
||||
from quickfaas.remotebus import publish
|
||||
from common.Logger import logger
|
||||
|
||||
def sync():
|
||||
#get new values and send
|
||||
payload = {}
|
||||
topic = "v1/devices/me/telemetry"
|
||||
try:
|
||||
data = recall()#json.loads(recall().decode("utf-8"))
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
logger.debug(data)
|
||||
for controller in data:
|
||||
for measure in controller["measures"]:
|
||||
#publish measure
|
||||
payload[measure["name"]] = measure["value"]
|
||||
logger.debug("Sending on topic: {}".format(topic))
|
||||
logger.debug("Sending value: {}".format(payload))
|
||||
publish(topic, json.dumps(payload), 1)
|
||||
def writeplctag(value):
|
||||
#value in the form {"measurement": <measurement_name>, "value": <value to write>}
|
||||
try:
|
||||
#value = json.loads(value.replace("'",'"'))
|
||||
logger.debug(value)
|
||||
#payload format: [{"name": "advvfdipp", "measures": [{"name": "manualfrequencysetpoint", "value": 49}]}]
|
||||
message = [{"name": "hrtankbattery", "measures":[{"name":value["measurement"], "value": value["value"]}]}]
|
||||
resp = write(message)
|
||||
logger.debug("RETURN FROM WRITE: {}".format(resp))
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.debug(e)
|
||||
return False
|
||||
|
||||
def receiveCommand(topic, payload):
|
||||
try:
|
||||
logger.debug(topic)
|
||||
logger.debug(json.loads(payload))
|
||||
p = json.loads(payload)
|
||||
command = p["method"]
|
||||
commands = {
|
||||
"sync": sync,
|
||||
"writeplctag": writeplctag,
|
||||
}
|
||||
if command == "setPLCTag":
|
||||
try:
|
||||
result = commands["writeplctag"](p["params"])
|
||||
logger.debug(result)
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
#logger.debug(command)
|
||||
ack(topic.split("/")[-1])
|
||||
time.sleep(5)
|
||||
sync()
|
||||
except Exception as e:
|
||||
logger.debug(e)
|
||||
|
||||
|
||||
def ack(msgid):
|
||||
#logger.debug(msgid)
|
||||
#logger.debug(mac)
|
||||
#logger.debug(name)
|
||||
#logger.debug(value)
|
||||
publish("v1/devices/me/rpc/response/" + str(msgid), json.dumps({"msg": {"time": time.time()}, "metadata": "", "msgType": ""}), 1)
|
||||
|
||||
19
Pub_Sub/plcfreshwater/v1/plcfreshv2.csv
Normal file
19
Pub_Sub/plcfreshwater/v1/plcfreshv2.csv
Normal file
@@ -0,0 +1,19 @@
|
||||
MeasuringPointName,ControllerName,GroupName,UploadType,DataType,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit
|
||||
scaled_flow_meter,plcfreshwater,default,periodic,FLOAT,Scaled_Flow_Meter,2,1,ro,,,none,,,,,,,,
|
||||
scaled_pressure_transducer,plcfreshwater,default,periodic,FLOAT,Scaled_Pressure_Transducer,2,1,ro,,,none,,,,,,,,
|
||||
raw_hand_input,plcfreshwater,default,periodic,BIT,Raw_Hand_Input,2,1,ro,,,none,,,,,,,,
|
||||
raw_auto_input,plcfreshwater,default,periodic,BIT,Raw_Auto_Input,2,1,ro,,,none,,,,,,,,
|
||||
raw_run_status,plcfreshwater,default,periodic,BIT,Raw_Run_Status,2,1,ro,,,none,,,,,,,,
|
||||
raw_local_start,plcfreshwater,default,periodic,BIT,Raw_Local_Start,2,1,ro,,,none,,,,,,,,
|
||||
lifetime_flow_meter_gal,plcfreshwater,default,periodic,FLOAT,Lifetime_Flow_Meter_Gal,2,1,ro,,,none,,,,,,,,
|
||||
spt_flow_meter_unit,plcfreshwater,default,periodic,BIT,SPT_Flow_Meter_Unit,2,1,ro,,,none,,,,,,,,
|
||||
raw_overload_status,plcfreshwater,default,periodic,BIT,Raw_Overload_Status,2,1,ro,,,none,,,,,,,,
|
||||
CMD_Cloud_Control,plcfreshwater,default,periodic,BIT,CMD_Cloud_Control,2,1,ro,,,none,,,,,,,,
|
||||
total_fm_yesterday_gal,plcfreshwater,default,periodic,FLOAT,Totalizer_FM_Yesterday_Total_Gal,2,1,ro,,,none,,,,,,,,
|
||||
total_fm_day_gal,plcfreshwater,default,periodic,FLOAT,Totalizer_FM_Current_Day_Total_Gal,2,1,ro,,,none,,,,,,,,
|
||||
total_fm_last_month_gal,plcfreshwater,default,periodic,FLOAT,Totalizer_FM_Last_Month_Gal,2,1,ro,,,none,,,,,,,,
|
||||
total_fm_month_gal,plcfreshwater,default,periodic,FLOAT,Totalizer_FM_Current_Month_Gal,2,1,ro,,,none,,,,,,,,
|
||||
total_fm_yesterday_bbls,plcfreshwater,default,periodic,FLOAT,Totalizer_FM_Yesterday_Total_BBLs,2,1,ro,,,none,,,,,,,,
|
||||
total_fm_day_bbls,plcfreshwater,default,periodic,FLOAT,Totalizer_FM_Current_Day_Total_BBLs,2,1,ro,,,none,,,,,,,,
|
||||
total_fm_last_month_bbls,plcfreshwater,default,periodic,FLOAT,Totalizer_FM_Last_Month_BBLs,2,1,ro,,,none,,,,,,,,
|
||||
total_fm_month_bbls,plcfreshwater,default,periodic,FLOAT,Totalizer_FM_Current_Month_BBLs,2,1,ro,,,none,,,,,,,,
|
||||
|
6
Pub_Sub/plcfreshwater/v1/plcfreshv21.csv
Normal file
6
Pub_Sub/plcfreshwater/v1/plcfreshv21.csv
Normal file
@@ -0,0 +1,6 @@
|
||||
MeasuringPointName,ControllerName,GroupName,UploadType,DataType,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit
|
||||
flowrate,plcfreshwater,default,periodic,FLOAT,Scaled_Flow_Meter,2,1,ro,,,none,,,,,,,,
|
||||
tubingpressure,plcfreshwater,default,periodic,FLOAT,Scaled_Pressure_Transducer,2,1,ro,,,none,,,,,,,,
|
||||
flowtotalyesterday,plcfreshwater,default,periodic,FLOAT,Totalizer_FM_Yesterday_Total_BBLs,2,1,ro,,,none,,,,,,,,
|
||||
flowtotal,plcfreshwater,default,periodic,FLOAT,Totalizer_FM_Current_Day_Total_BBLs,2,1,ro,,,none,,,,,,,,
|
||||
wellstatus,plcfreshwater,default,periodic,BIT,Raw_Run_Status,2,1,ro,,,none,,,,,,,,
|
||||
|
181
getPLCData.ipynb
181
getPLCData.ipynb
@@ -1,135 +1,122 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from pycomm3 import LogixDriver\n",
|
||||
"import json"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"with LogixDriver('166.195.17.16') as plc:\n",
|
||||
" plctags = plc.get_tag_list()"
|
||||
"from pycomm3 import LogixDriver\n",
|
||||
"import json, pprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"{'tag_name': '_IO_EM_DO_00', 'dim': 0, 'alias': True, 'instance_id': 1, 'symbol_address': 1044, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_DO_01', 'dim': 0, 'alias': True, 'instance_id': 2, 'symbol_address': 1045, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_DO_02', 'dim': 0, 'alias': True, 'instance_id': 3, 'symbol_address': 1046, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_DO_03', 'dim': 0, 'alias': True, 'instance_id': 4, 'symbol_address': 1047, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_DO_04', 'dim': 0, 'alias': True, 'instance_id': 5, 'symbol_address': 1048, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_DO_05', 'dim': 0, 'alias': True, 'instance_id': 6, 'symbol_address': 1049, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_DO_06', 'dim': 0, 'alias': True, 'instance_id': 7, 'symbol_address': 1050, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_DI_00', 'dim': 0, 'alias': True, 'instance_id': 8, 'symbol_address': 1051, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_DI_01', 'dim': 0, 'alias': True, 'instance_id': 9, 'symbol_address': 1052, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_DI_02', 'dim': 0, 'alias': True, 'instance_id': 10, 'symbol_address': 1053, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_DI_03', 'dim': 0, 'alias': True, 'instance_id': 11, 'symbol_address': 1054, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_DI_04', 'dim': 0, 'alias': True, 'instance_id': 12, 'symbol_address': 1055, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_DI_05', 'dim': 0, 'alias': True, 'instance_id': 13, 'symbol_address': 1056, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_DI_06', 'dim': 0, 'alias': True, 'instance_id': 14, 'symbol_address': 1057, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_DI_07', 'dim': 0, 'alias': True, 'instance_id': 15, 'symbol_address': 1058, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_DI_08', 'dim': 0, 'alias': True, 'instance_id': 16, 'symbol_address': 1059, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_DI_09', 'dim': 0, 'alias': True, 'instance_id': 17, 'symbol_address': 1060, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_DI_10', 'dim': 0, 'alias': True, 'instance_id': 18, 'symbol_address': 1061, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_DI_11', 'dim': 0, 'alias': True, 'instance_id': 19, 'symbol_address': 1062, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_AI_00', 'dim': 0, 'alias': True, 'instance_id': 20, 'symbol_address': 1064, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'UINT', 'data_type_name': 'UINT', 'type_class': UINT, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_AI_01', 'dim': 0, 'alias': True, 'instance_id': 21, 'symbol_address': 1066, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'UINT', 'data_type_name': 'UINT', 'type_class': UINT, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_AI_02', 'dim': 0, 'alias': True, 'instance_id': 22, 'symbol_address': 1068, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'UINT', 'data_type_name': 'UINT', 'type_class': UINT, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_AI_03', 'dim': 0, 'alias': True, 'instance_id': 23, 'symbol_address': 1070, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'UINT', 'data_type_name': 'UINT', 'type_class': UINT, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_EM_AO_00', 'dim': 0, 'alias': True, 'instance_id': 24, 'symbol_address': 1072, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'UINT', 'data_type_name': 'UINT', 'type_class': UINT, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_P1_AI_00', 'dim': 0, 'alias': True, 'instance_id': 25, 'symbol_address': 1074, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'UINT', 'data_type_name': 'UINT', 'type_class': UINT, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': '_IO_P1_AI_01', 'dim': 0, 'alias': True, 'instance_id': 26, 'symbol_address': 1076, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'UINT', 'data_type_name': 'UINT', 'type_class': UINT, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Hi_Set', 'dim': 0, 'alias': True, 'instance_id': 27, 'symbol_address': 1116, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Hi_Reset', 'dim': 0, 'alias': True, 'instance_id': 28, 'symbol_address': 1117, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Hi_Alarm', 'dim': 0, 'alias': True, 'instance_id': 29, 'symbol_address': 1118, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Hi_Set', 'dim': 0, 'alias': True, 'instance_id': 30, 'symbol_address': 1119, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Hi_Reset', 'dim': 0, 'alias': True, 'instance_id': 31, 'symbol_address': 1120, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Hi_Alarm', 'dim': 0, 'alias': True, 'instance_id': 32, 'symbol_address': 1121, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Lo_Set', 'dim': 0, 'alias': True, 'instance_id': 33, 'symbol_address': 1122, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Lo_Reset', 'dim': 0, 'alias': True, 'instance_id': 34, 'symbol_address': 1123, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Lo_Alarm', 'dim': 0, 'alias': True, 'instance_id': 35, 'symbol_address': 1124, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Lo_Set', 'dim': 0, 'alias': True, 'instance_id': 36, 'symbol_address': 1125, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Lo_Reset', 'dim': 0, 'alias': True, 'instance_id': 37, 'symbol_address': 1126, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Lo_Alarm', 'dim': 0, 'alias': True, 'instance_id': 38, 'symbol_address': 1127, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Hi_Alarm_Enable', 'dim': 0, 'alias': True, 'instance_id': 39, 'symbol_address': 1128, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Hi_Alarm_Enabled', 'dim': 0, 'alias': True, 'instance_id': 40, 'symbol_address': 1129, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Save', 'dim': 0, 'alias': True, 'instance_id': 41, 'symbol_address': 1130, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'BOOL', 'data_type_name': 'BOOL', 'type_class': BOOL, 'bit_position': 0, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Lev', 'dim': 0, 'alias': True, 'instance_id': 42, 'symbol_address': 1136, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_ScaledMin', 'dim': 0, 'alias': True, 'instance_id': 43, 'symbol_address': 1140, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_ScaledMax', 'dim': 0, 'alias': True, 'instance_id': 44, 'symbol_address': 1144, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Lev', 'dim': 0, 'alias': True, 'instance_id': 45, 'symbol_address': 1148, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_ScaledMin', 'dim': 0, 'alias': True, 'instance_id': 46, 'symbol_address': 1152, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_ScaledMax', 'dim': 0, 'alias': True, 'instance_id': 47, 'symbol_address': 1156, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Hi_Setpoint', 'dim': 0, 'alias': True, 'instance_id': 48, 'symbol_address': 1160, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Hi_Clr_Setpoint', 'dim': 0, 'alias': True, 'instance_id': 49, 'symbol_address': 1164, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Hi_Setpoint', 'dim': 0, 'alias': True, 'instance_id': 50, 'symbol_address': 1168, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Hi_Clr_Setpoint', 'dim': 0, 'alias': True, 'instance_id': 51, 'symbol_address': 1172, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_CU_Ft', 'dim': 0, 'alias': True, 'instance_id': 52, 'symbol_address': 1176, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Dim_A', 'dim': 0, 'alias': True, 'instance_id': 53, 'symbol_address': 1180, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Dim_B', 'dim': 0, 'alias': True, 'instance_id': 54, 'symbol_address': 1184, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Dim_C', 'dim': 0, 'alias': True, 'instance_id': 55, 'symbol_address': 1188, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Dim_D', 'dim': 0, 'alias': True, 'instance_id': 56, 'symbol_address': 1192, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Cubic_Feet_To_Barrels', 'dim': 0, 'alias': True, 'instance_id': 57, 'symbol_address': 1196, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Total_Barrels', 'dim': 0, 'alias': True, 'instance_id': 58, 'symbol_address': 1200, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Lo_Setpoint', 'dim': 0, 'alias': True, 'instance_id': 59, 'symbol_address': 1204, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Lev_Temp', 'dim': 0, 'alias': True, 'instance_id': 60, 'symbol_address': 1208, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Lo_Clr_Setpoint', 'dim': 0, 'alias': True, 'instance_id': 61, 'symbol_address': 1212, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Lo_Setpoint', 'dim': 0, 'alias': True, 'instance_id': 62, 'symbol_address': 1216, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Lo_Clr_Setpoint', 'dim': 0, 'alias': True, 'instance_id': 63, 'symbol_address': 1220, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_Tot_Bbls_Temp', 'dim': 0, 'alias': True, 'instance_id': 64, 'symbol_address': 1224, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Lev_Temp', 'dim': 0, 'alias': True, 'instance_id': 65, 'symbol_address': 1228, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Dim_C', 'dim': 0, 'alias': True, 'instance_id': 66, 'symbol_address': 1232, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Dim_D', 'dim': 0, 'alias': True, 'instance_id': 67, 'symbol_address': 1236, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_CU_Ft', 'dim': 0, 'alias': True, 'instance_id': 68, 'symbol_address': 1240, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Tot_Bbls_Temp', 'dim': 0, 'alias': True, 'instance_id': 69, 'symbol_address': 1244, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Cubic_Feet_To_Barrels', 'dim': 0, 'alias': True, 'instance_id': 70, 'symbol_address': 1248, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Dim_A', 'dim': 0, 'alias': True, 'instance_id': 71, 'symbol_address': 1252, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Dim_B', 'dim': 0, 'alias': True, 'instance_id': 72, 'symbol_address': 1256, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_Total_Barrels', 'dim': 0, 'alias': True, 'instance_id': 73, 'symbol_address': 1260, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_EU_Min', 'dim': 0, 'alias': True, 'instance_id': 74, 'symbol_address': 1264, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_1_EU_Max', 'dim': 0, 'alias': True, 'instance_id': 75, 'symbol_address': 1268, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_EU_Min', 'dim': 0, 'alias': True, 'instance_id': 76, 'symbol_address': 1272, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n",
|
||||
"{'tag_name': 'Pond_2_EU_Max', 'dim': 0, 'alias': True, 'instance_id': 77, 'symbol_address': 1276, 'symbol_object_address': 1077544924, 'software_control': 0, 'external_access': 'Unknown', 'dimensions': [0, 0, 0], 'data_type': 'REAL', 'data_type_name': 'REAL', 'type_class': REAL, 'tag_type': 'atomic'}\n"
|
||||
"{'vendor': 'Rockwell Automation/Allen-Bradley', 'product_type': 'Programmable Logic Controller', 'product_code': 180, 'revision': {'major': 12, 'minor': 11}, 'status': b'4\\x00', 'serial': 'd05b07d5', 'product_name': '2080-LC20-20QWB', 'keyswitch': 'UNKNOWN'}\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"for x in plctags:\n",
|
||||
" print(x)"
|
||||
"with LogixDriver('107.84.238.170') as plc:\n",
|
||||
" #info = plc.get_plc_info()\n",
|
||||
" plctags = plc.get_tag_list()\n",
|
||||
" #print(info)\n",
|
||||
" print(json.dumps(plc.tags_json, indent=4))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"print(plctags)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"ename": "TypeError",
|
||||
"evalue": "Object of type _DataTypeMeta is not JSON serializable",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||||
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
|
||||
"\u001b[1;32m/Users/nico/Documents/GitHub/HP_InHand_IG502/getPLCData.ipynb Cell 3\u001b[0m in \u001b[0;36m<cell line: 1>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> <a href='vscode-notebook-cell:/Users/nico/Documents/GitHub/HP_InHand_IG502/getPLCData.ipynb#X13sZmlsZQ%3D%3D?line=0'>1</a>\u001b[0m json\u001b[39m.\u001b[39;49mdumps(plctags, indent\u001b[39m=\u001b[39;49m\u001b[39m4\u001b[39;49m)\n",
|
||||
"File \u001b[0;32m~/miniforge3/envs/thingsboard/lib/python3.10/json/__init__.py:238\u001b[0m, in \u001b[0;36mdumps\u001b[0;34m(obj, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, default, sort_keys, **kw)\u001b[0m\n\u001b[1;32m 232\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mcls\u001b[39m \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 233\u001b[0m \u001b[39mcls\u001b[39m \u001b[39m=\u001b[39m JSONEncoder\n\u001b[1;32m 234\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mcls\u001b[39;49m(\n\u001b[1;32m 235\u001b[0m skipkeys\u001b[39m=\u001b[39;49mskipkeys, ensure_ascii\u001b[39m=\u001b[39;49mensure_ascii,\n\u001b[1;32m 236\u001b[0m check_circular\u001b[39m=\u001b[39;49mcheck_circular, allow_nan\u001b[39m=\u001b[39;49mallow_nan, indent\u001b[39m=\u001b[39;49mindent,\n\u001b[1;32m 237\u001b[0m separators\u001b[39m=\u001b[39;49mseparators, default\u001b[39m=\u001b[39;49mdefault, sort_keys\u001b[39m=\u001b[39;49msort_keys,\n\u001b[0;32m--> 238\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkw)\u001b[39m.\u001b[39;49mencode(obj)\n",
|
||||
"File \u001b[0;32m~/miniforge3/envs/thingsboard/lib/python3.10/json/encoder.py:201\u001b[0m, in \u001b[0;36mJSONEncoder.encode\u001b[0;34m(self, o)\u001b[0m\n\u001b[1;32m 199\u001b[0m chunks \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39miterencode(o, _one_shot\u001b[39m=\u001b[39m\u001b[39mTrue\u001b[39;00m)\n\u001b[1;32m 200\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39misinstance\u001b[39m(chunks, (\u001b[39mlist\u001b[39m, \u001b[39mtuple\u001b[39m)):\n\u001b[0;32m--> 201\u001b[0m chunks \u001b[39m=\u001b[39m \u001b[39mlist\u001b[39;49m(chunks)\n\u001b[1;32m 202\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39m'\u001b[39m\u001b[39m'\u001b[39m\u001b[39m.\u001b[39mjoin(chunks)\n",
|
||||
"File \u001b[0;32m~/miniforge3/envs/thingsboard/lib/python3.10/json/encoder.py:429\u001b[0m, in \u001b[0;36m_make_iterencode.<locals>._iterencode\u001b[0;34m(o, _current_indent_level)\u001b[0m\n\u001b[1;32m 427\u001b[0m \u001b[39myield\u001b[39;00m _floatstr(o)\n\u001b[1;32m 428\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39misinstance\u001b[39m(o, (\u001b[39mlist\u001b[39m, \u001b[39mtuple\u001b[39m)):\n\u001b[0;32m--> 429\u001b[0m \u001b[39myield from\u001b[39;00m _iterencode_list(o, _current_indent_level)\n\u001b[1;32m 430\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39misinstance\u001b[39m(o, \u001b[39mdict\u001b[39m):\n\u001b[1;32m 431\u001b[0m \u001b[39myield from\u001b[39;00m _iterencode_dict(o, _current_indent_level)\n",
|
||||
"File \u001b[0;32m~/miniforge3/envs/thingsboard/lib/python3.10/json/encoder.py:325\u001b[0m, in \u001b[0;36m_make_iterencode.<locals>._iterencode_list\u001b[0;34m(lst, _current_indent_level)\u001b[0m\n\u001b[1;32m 323\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 324\u001b[0m chunks \u001b[39m=\u001b[39m _iterencode(value, _current_indent_level)\n\u001b[0;32m--> 325\u001b[0m \u001b[39myield from\u001b[39;00m chunks\n\u001b[1;32m 326\u001b[0m \u001b[39mif\u001b[39;00m newline_indent \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 327\u001b[0m _current_indent_level \u001b[39m-\u001b[39m\u001b[39m=\u001b[39m \u001b[39m1\u001b[39m\n",
|
||||
"File \u001b[0;32m~/miniforge3/envs/thingsboard/lib/python3.10/json/encoder.py:405\u001b[0m, in \u001b[0;36m_make_iterencode.<locals>._iterencode_dict\u001b[0;34m(dct, _current_indent_level)\u001b[0m\n\u001b[1;32m 403\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 404\u001b[0m chunks \u001b[39m=\u001b[39m _iterencode(value, _current_indent_level)\n\u001b[0;32m--> 405\u001b[0m \u001b[39myield from\u001b[39;00m chunks\n\u001b[1;32m 406\u001b[0m \u001b[39mif\u001b[39;00m newline_indent \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 407\u001b[0m _current_indent_level \u001b[39m-\u001b[39m\u001b[39m=\u001b[39m \u001b[39m1\u001b[39m\n",
|
||||
"File \u001b[0;32m~/miniforge3/envs/thingsboard/lib/python3.10/json/encoder.py:405\u001b[0m, in \u001b[0;36m_make_iterencode.<locals>._iterencode_dict\u001b[0;34m(dct, _current_indent_level)\u001b[0m\n\u001b[1;32m 403\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 404\u001b[0m chunks \u001b[39m=\u001b[39m _iterencode(value, _current_indent_level)\n\u001b[0;32m--> 405\u001b[0m \u001b[39myield from\u001b[39;00m chunks\n\u001b[1;32m 406\u001b[0m \u001b[39mif\u001b[39;00m newline_indent \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 407\u001b[0m _current_indent_level \u001b[39m-\u001b[39m\u001b[39m=\u001b[39m \u001b[39m1\u001b[39m\n",
|
||||
" \u001b[0;31m[... skipping similar frames: _make_iterencode.<locals>._iterencode_dict at line 405 (1 times)]\u001b[0m\n",
|
||||
"File \u001b[0;32m~/miniforge3/envs/thingsboard/lib/python3.10/json/encoder.py:405\u001b[0m, in \u001b[0;36m_make_iterencode.<locals>._iterencode_dict\u001b[0;34m(dct, _current_indent_level)\u001b[0m\n\u001b[1;32m 403\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 404\u001b[0m chunks \u001b[39m=\u001b[39m _iterencode(value, _current_indent_level)\n\u001b[0;32m--> 405\u001b[0m \u001b[39myield from\u001b[39;00m chunks\n\u001b[1;32m 406\u001b[0m \u001b[39mif\u001b[39;00m newline_indent \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 407\u001b[0m _current_indent_level \u001b[39m-\u001b[39m\u001b[39m=\u001b[39m \u001b[39m1\u001b[39m\n",
|
||||
"File \u001b[0;32m~/miniforge3/envs/thingsboard/lib/python3.10/json/encoder.py:438\u001b[0m, in \u001b[0;36m_make_iterencode.<locals>._iterencode\u001b[0;34m(o, _current_indent_level)\u001b[0m\n\u001b[1;32m 436\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\u001b[39m\"\u001b[39m\u001b[39mCircular reference detected\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[1;32m 437\u001b[0m markers[markerid] \u001b[39m=\u001b[39m o\n\u001b[0;32m--> 438\u001b[0m o \u001b[39m=\u001b[39m _default(o)\n\u001b[1;32m 439\u001b[0m \u001b[39myield from\u001b[39;00m _iterencode(o, _current_indent_level)\n\u001b[1;32m 440\u001b[0m \u001b[39mif\u001b[39;00m markers \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n",
|
||||
"File \u001b[0;32m~/miniforge3/envs/thingsboard/lib/python3.10/json/encoder.py:179\u001b[0m, in \u001b[0;36mJSONEncoder.default\u001b[0;34m(self, o)\u001b[0m\n\u001b[1;32m 160\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mdefault\u001b[39m(\u001b[39mself\u001b[39m, o):\n\u001b[1;32m 161\u001b[0m \u001b[39m\"\"\"Implement this method in a subclass such that it returns\u001b[39;00m\n\u001b[1;32m 162\u001b[0m \u001b[39m a serializable object for ``o``, or calls the base implementation\u001b[39;00m\n\u001b[1;32m 163\u001b[0m \u001b[39m (to raise a ``TypeError``).\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 177\u001b[0m \n\u001b[1;32m 178\u001b[0m \u001b[39m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 179\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mTypeError\u001b[39;00m(\u001b[39mf\u001b[39m\u001b[39m'\u001b[39m\u001b[39mObject of type \u001b[39m\u001b[39m{\u001b[39;00mo\u001b[39m.\u001b[39m\u001b[39m__class__\u001b[39m\u001b[39m.\u001b[39m\u001b[39m__name__\u001b[39m\u001b[39m}\u001b[39;00m\u001b[39m \u001b[39m\u001b[39m'\u001b[39m\n\u001b[1;32m 180\u001b[0m \u001b[39mf\u001b[39m\u001b[39m'\u001b[39m\u001b[39mis not JSON serializable\u001b[39m\u001b[39m'\u001b[39m)\n",
|
||||
"\u001b[0;31mTypeError\u001b[0m: Object of type _DataTypeMeta is not JSON serializable"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"json.dumps(plctags, indent=4)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Transfer_Pump_3_Phase_Power_Alarm.Alm_TgtDisagree, False, BOOL, None\n"
|
||||
"Lact_01_Monthly_Total, None, None, Tag doesn't exist - Lact_01_Monthly_Total\n",
|
||||
"Lact_01_Prev_Month_Total, None, None, Tag doesn't exist - Lact_01_Prev_Month_Total\n",
|
||||
"Lact_01_Today_Total, None, None, Tag doesn't exist - Lact_01_Today_Total\n",
|
||||
"Lact_01_Yesterday_Total, None, None, Tag doesn't exist - Lact_01_Yesterday_Total\n",
|
||||
"Lact_02_Monthly_Total, 0.0, REAL, None\n",
|
||||
"Lact_02_Prev_Month_Total, 0.0, REAL, None\n",
|
||||
"Lact_02_Today_Total, 684.0, REAL, None\n",
|
||||
"Lact_02_Yesterday_Total, 1631.27197265625, REAL, None\n",
|
||||
"XferPump_01_Daily_Totalizer.Total, 226.14686584472656, REAL, None\n",
|
||||
"XferPump_01_Daily_Totalizer.OldTotal, 1106.1217041015625, REAL, None\n",
|
||||
"XferPump_02_Monthly_Totalizer.Total, 6236.13525390625, REAL, None\n",
|
||||
"XferPump_02_Monthly_Totalizer.OldTotal, 0.0, REAL, None\n",
|
||||
"Val_Water_Xfer_Current_Day, 6898.751953125, REAL, None\n",
|
||||
"Val_Water_Xfer_Prev_Day, 10086.0771484375, REAL, None\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"with LogixDriver('166.195.17.26') as plc:\n",
|
||||
" print(plc.read(\"Transfer_Pump_3_Phase_Power_Alarm.Alm_TgtDisagree\"))"
|
||||
"readtags = [\n",
|
||||
" \"Lact_01_Monthly_Total\",\n",
|
||||
" \"Lact_01_Prev_Month_Total\",\n",
|
||||
" \"Lact_01_Today_Total\",\n",
|
||||
" \"Lact_01_Yesterday_Total\",\n",
|
||||
" \"Lact_02_Monthly_Total\",\n",
|
||||
" \"Lact_02_Prev_Month_Total\",\n",
|
||||
" \"Lact_02_Today_Total\",\n",
|
||||
" \"Lact_02_Yesterday_Total\",\n",
|
||||
" \"XferPump_01_Daily_Totalizer.Total\",\n",
|
||||
" \"XferPump_01_Daily_Totalizer.OldTotal\",\n",
|
||||
" \"XferPump_02_Monthly_Totalizer.Total\",\n",
|
||||
" \"XferPump_02_Monthly_Totalizer.OldTotal\",\n",
|
||||
" \"Val_Water_Xfer_Current_Day\",\n",
|
||||
" \"Val_Water_Xfer_Prev_Day\"\n",
|
||||
"]\n",
|
||||
"with LogixDriver('63.40.227.154') as plc:\n",
|
||||
" print(*plc.read(*readtags), sep=\"\\n\")\n",
|
||||
" "
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -438,7 +425,7 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.10.5 | packaged by conda-forge | (main, Jun 14 2022, 07:05:37) [Clang 13.0.1 ]"
|
||||
"version": "3.10.5"
|
||||
},
|
||||
"orig_nbformat": 4,
|
||||
"vscode": {
|
||||
|
||||
Reference in New Issue
Block a user