def iot_device_data(sn=None, vsn=None): sn = sn or frappe.form_dict.get('sn') vsn = vsn or sn doc = frappe.get_doc('IOT Device', sn) doc.has_permission("read") if vsn != sn: if vsn not in iot_device_tree(sn): return "" cfg = iot_device_cfg(sn, vsn) if not cfg: return "" client = redis.Redis.from_url(IOTHDBSettings.get_redis_server() + "/2") hs = client.hgetall(vsn) data = {} if cfg.has_key("nodes"): nodes = cfg.get("nodes") for node in nodes: tags = node.get("tags") for tag in tags: name = node.get("name")+"."+tag.get('name') data[name] = {"PV": hs.get(name + ".PV"), "TM": hs.get(name + ".TM"), "Q": hs.get(name + ".Q"), "DESC": tag.get("desc"), } if cfg.has_key("tags"): tags = cfg.get("tags") for tag in tags: name = tag.get('name') data[name] = {"PV": hs.get(name + ".PV"), "TM": hs.get(name + ".TM"), "Q": hs.get(name + ".Q"), "DESC": tag.get("desc"), } return data
def iot_device_data_array(sn=None, vsn=None): sn = sn or frappe.form_dict.get('sn') vsn = vsn or sn doc = frappe.get_doc('IOT Device', sn) doc.has_permission("read") if vsn != sn: if vsn not in iot_device_tree(sn): return "" cfg = iot_device_cfg(sn, vsn) if not cfg: return "" client = redis.Redis.from_url(IOTHDBSettings.get_redis_server() + "/2") hs = client.hgetall(vsn) data = [] if cfg.has_key("nodes"): nodes = cfg.get("nodes") for node in nodes: tags = node.get("tags") for tag in tags: name = tag.get('name') tt = hs.get(name + ".TM") timestr = '' if tt: timestr = str( convert_utc_to_user_timezone( datetime.datetime.utcfromtimestamp( int(int(tt) / 1000))).replace(tzinfo=None)) data.append({ "NAME": name, "PV": hs.get(name + ".PV"), # "TM": hs.get(name + ".TM"), "TM": timestr, "Q": hs.get(name + ".Q"), "DESC": tag.get("desc"), }) if cfg.has_key("tags"): tags = cfg.get("tags") for tag in tags: name = tag.get('name') tt = hs.get(name + ".TM") timestr = '' if tt: timestr = str( convert_utc_to_user_timezone( datetime.datetime.utcfromtimestamp(int( int(tt) / 1000))).replace(tzinfo=None)) data.append({ "NAME": name, "PV": hs.get(name + ".PV"), # "TM": hs.get(name + ".TM"), "TM": timestr, "Q": hs.get(name + ".Q"), "DESC": tag.get("desc"), }) return data
def iot_device_write(): ctrl = _dict(get_post_json_data()) doc = frappe.get_doc('IOT Device', ctrl.sn) doc.has_permission("read") cmd = { "sn": ctrl.vsn, "tag": ctrl.tag, "nrsp": ctrl.nrsp, "vt": ctrl.vt, "val": ctrl.val, "pris": ctrl.pris or uuid.uuid1() } client = redis.Redis.from_url(IOTHDBSettings.get_redis_server()) r = client.publish("ziotagwrites", json.dumps({"cmds": [cmd], "ver": 0})) return {"result": r, "uuid": cmd["pris"]}
def iot_device_cfg(sn=None, vsn=None): sn = sn or frappe.form_dict.get('sn') doc = frappe.get_doc('IOT Device', sn) doc.has_permission("read") client = redis.Redis.from_url(IOTHDBSettings.get_redis_server() + "/0") return json.loads(client.get(vsn or sn) or "")
def iot_device_tree(sn=None): sn = sn or frappe.form_dict.get('sn') doc = frappe.get_doc('IOT Device', sn) doc.has_permission("read") client = redis.Redis.from_url(IOTHDBSettings.get_redis_server() + "/1") return client.lrange(sn, 0, -1)