def output(gateway, name, output, prop, value, id=None): try: valid_auth_code() doc = frappe.get_doc('IOT Device', gateway) if not doc.has_permission("write"): throw("has_no_permission") if not id: id = str(uuid.uuid1()).upper() try: ret = send_action("output", id=id, device=gateway, data={ "device": name, "output": output, "prop": prop, "value": value }) frappe.response.update({"ok": True, "data": ret}) except Exception as ex: throw("exception") except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def command(gateway, name, command, param=None, id=None): try: valid_auth_code() doc = frappe.get_doc('IOT Device', gateway) if not doc.has_permission("write"): throw("has_no_permission") if not id: id = str(uuid.uuid1()).upper() try: ret = send_action("command", id=id, device=gateway, data={ "device": name, "cmd": command, "param": param, }) frappe.response.update({"ok": True, "data": ret}) except Exception as ex: throw("exception") except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def list(filters=[]): try: valid_auth_code() # data = get_sidebar_stats(stats="_user_tags", doctype='IOT Application') # # frappe.response.update({ # "ok": True, # "data": data.get('stats').get('_user_tags') # }) _user_tags = [] if frappe.request and frappe.request.method == "POST": data = get_post_json_data() filters = data.get("filters") or [] for tag in frappe.get_all("Tag Link", filters={"document_type": 'IOT Application'}, fields=["tag"]): tag_filters = [] tag_filters.extend(filters) tag_filters.extend([['Tag Link', 'tag', '=', tag.tag]]) count = frappe.get_all('IOT Application', filters=tag_filters, fields=["count(*)"]) if count[0].get("count(*)") > 0: _user_tags.append([tag.tag, count[0].get("count(*)")]) frappe.response.update({"ok": True, "data": _user_tags}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def read(name): try: valid_auth_code() doc = frappe.get_doc("IOT Virtual Device", name) return gateway_read(name) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def dispose(activities, disposed=1): try: valid_auth_code() postdata = get_post_json_data() activities = postdata['activities'] or {} disposed = postdata['disposed'] or 1 warns = [] for activity in activities: try: doc = frappe.get_doc("IOT Device Activity", activity) doc.dispose(disposed) except Exception as ex: warns.append(str(ex)) if len(warns) > 0: frappe.response.update({ "ok": True, "warning": warns }) else: frappe.response.update({ "ok": True, }) except Exception as ex: frappe.response.update({ "ok": False, "error": str(ex) })
def invite(): try: valid_auth_code() data = get_post_json_data() if 'Company Admin' not in frappe.get_roles(): throw("only_admin_can_create_employee") if not data.get("user"): throw("user_id_missing") if not data.get("company"): throw("company_id_missing") if frappe.get_value("Cloud Company", data.get('company'), "admin") != frappe.session.user: throw("you_are_not_admin_of_this_company") if frappe.get_value("Cloud Employee", data.get("user")): throw("user_is_already_joined_other_company") to_find = {"user": data.get('user'), "company": data.get('company')} if frappe.get_value("Cloud Employee Invitation", to_find, "docstatus") == 0: throw("user_has_been_invited") data.update({ "doctype": "Cloud Employee Invitation", }) doc = frappe.get_doc(data).insert() frappe.response.update({"ok": True, "data": doc.name}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def update_id_card_image(): try: valid_auth_code() name = frappe.form_dict.name if not frappe.get_value("App Developer Requisition", name, "name"): throw("object_not_found") f = frappe.request.files.get('file') # 从表单的file字段获取文件,app_file为该表单的name值 if not f: throw("id_card_image_file_not_attached") doc = frappe.get_doc("App Developer Requisition", name) file_path = save_image_file(doc.comp_name, f, 'id_card_image') doc.set("id_card_image", file_path) doc.save() frappe.response.update({ "ok": True, "data": file_path }) except Exception as ex: frappe.response.update({ "ok": False, "error": str(ex) })
def upload_cfg(name, host=None, id=None): ''' Download IOT Device CFG, data example: {"host": "ioe.symgrid.com"} host is optional :return: ''' try: valid_auth_code() doc = frappe.get_doc('IOT Device', name) if not doc.has_permission("write"): throw("has_no_permission") data = {} if host is not None: data.update({"host": host}) ret = fire_action(id=id, action="cfg/upload", gateway=name, data=data) frappe.response.update({ "ok": True, "data": ret }) except Exception as ex: frappe.response.update({ "ok": False, "error": str(ex) })
def release(app, version): try: valid_auth_code() valid_app_owner(app) beta = frappe.get_value('IOT Application Version', { "app": app, "version": version }, "beta") if beta == 0: frappe.response.update({ "ok": False, "data": "version_already_released" }) else: # Currently we change the beta flag directly doc_name = frappe.get_value('IOT Application Version', { "app": app, "version": version }, "name") doc = frappe.get_doc('IOT Application Version', doc_name) doc.set('beta', 0) doc.save(ignore_permissions=True) frappe.response.update({"ok": True, "data": as_dict(doc)}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def create(): try: valid_auth_code() data = get_post_json_data() # TODO: Enable all employee to create/edit/delete for now! # if 'Company Admin' not in frappe.get_roles(): # throw("only_admin_can_create_shared_group") # if frappe.get_value("Cloud Company", data.get('company'), "admin") != frappe.session.user: # throw("you_are_not_admin_of_this_company") if not data.get("group_name"): throw("group_name_missing") if not data.get("company"): throw("company_id_missing") data.update({ "doctype": "IOT Share Group", }) doc = frappe.get_doc(data).insert() frappe.response.update({"ok": True, "data": doc.name}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def upgrade(name, version=None, no_ack=1, skynet_version=None, id=None): try: if not version and not skynet_version: throw("version_missing") valid_auth_code() doc = frappe.get_doc('IOT Device', name) if not doc.has_permission("write"): throw("has_no_permission") data = { "no_ack": no_ack, } if version is not None: data.update({ "version": version }) if skynet_version is not None: data.update({ "skynet": {"version": skynet_version} }) ret = fire_action(id=id, action="upgrade", gateway=name, data=data) frappe.response.update({ "ok": True, "data": ret }) except Exception as ex: frappe.response.update({ "ok": False, "error": str(ex) })
def remove(name): try: valid_auth_code() frappe.delete_doc("Coud Company Requisition", name) frappe.response.update({"ok": True, "message": "company_updated"}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def add_user(name, user, role='Admin'): try: valid_auth_code() if 'Company Admin' not in frappe.get_roles(): throw("not_permitted") group = frappe.get_doc("Cloud Company Group", name) user_comp = frappe.get_value("Cloud Employee", user, "company") if user_comp and user_comp != group.company: throw("user_in_another_company") if group.group_name == "root" and user_comp is None: doc = frappe.get_doc({"doctype": "Cloud Employee", "user": user, "company": group.company}) doc.insert(ignore_permissions=True) group.add_users(role, user) frappe.response.update({ "ok": True, "message": "user_added" }) except Exception as ex: frappe.response.update({ "ok": False, "error": str(ex) })
def create(task_name, description, timeout, script, *gateways): try: valid_auth_code() ''' post_data = get_post_json_data() name = post_data.get('name') script = post_data.get('script') devices = post_data.get('devices') ''' if not isinstance(task_name, string_types): throw("invalid_task_name_type") if not isinstance(script, string_types): throw("invalid_script_type") if not isinstance(gateways, list): throw("gateways_required_as_array") doc = frappe.get_doc({ "doctype": "IOT Batch Task", "task_name": task_name, "task_description": description, "batch_script": script, "timeout": timeout, "owner_id": frappe.session.user, }) for dev in gateways: doc.append("device_list", {"device": dev}) doc = doc.insert() frappe.db.commit( ) # Commit to database to make sure batch task has been there before submit() doc.submit() frappe.response.update({"ok": True, "data": doc.name}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def update(name, first_name, last_name, mobile_no, new_password=None, enabled=1): try: valid_auth_code() if 'Company Admin' not in frappe.get_roles(): throw("only_admin_can_update_group") company = frappe.get_value("Cloud Employee", name, "company") if not company: throw("user_is_not_an_employee") if frappe.get_value("Cloud Company", company, "admin") != frappe.session.user: throw("user_is_not_in_your_company") user = frappe.get_doc("User", name) user.update({ "send_welcome_email": 0, "first_name": first_name, "last_name": last_name, "mobile_no": mobile_no, "enabled": enabled }) if new_password is not None: user.update({"new_password": new_password}) user.save(ignore_permissions=True) frappe.response.update({ "ok": True, "message": "company_group_updated" }) except Exception as ex: frappe.response.update({ "ok": False, "error": str(ex) })
def install(gateway, app, version, inst, conf, id=None, from_web=None): try: valid_auth_code() doc = frappe.get_doc('IOT Device', gateway) if not doc.has_permission("write"): throw("has_no_permission") data = {"inst": inst, "name": app, "version": version, "conf": conf} if from_web is not None: data.update({"from_web": 1}) ret = fire_action(id=id, action="install", gateway=gateway, data=data) frappe.get_doc({ "doctype": "IOT Application Statistics", "app": app, "device": gateway, "version": version, "action": 'INSTALL', "owner_company": doc.company, "owner_type": doc.owner_type, "owner_id": doc.owner_id, }).insert() frappe.response.update({"ok": True, "data": ret}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def exists(user): try: valid_auth_code() if 'Company Admin' in frappe.get_roles(): throw("has_no_permission") if cint( frappe.db.get_value("System Settings", "System Settings", "allow_login_using_mobile_number")): user = frappe.db.get_value( "User", filters={"mobile_no": user}, fieldname="name") or user if cint( frappe.db.get_value("System Settings", "System Settings", "allow_login_using_user_name")): user = frappe.db.get_value( "User", filters={"username": user}, fieldname="name") or user data = 1 if not cint(frappe.db.get_value('User', user, 'enabled')): data = 0 frappe.response.update({"ok": True, "data": data}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def upgrade(gateway, inst, app, version, conf=None, id=None, fork=None): try: valid_auth_code() doc = frappe.get_doc('IOT Device', gateway) if not doc.has_permission("write"): throw("has_no_permission") data = { "inst": inst, "name": app, "version": version, } if conf is not None: data.update({"conf": conf}) if fork is not None: data.update({"fork": fork}) ret = fire_action(id=id, action="upgrade", gateway=gateway, data=data) frappe.get_doc({ "doctype": "IOT Application Statistics", "app": app, "device": gateway, "version": version, "action": 'UPGRADE', "owner_company": doc.company, "owner_type": doc.owner_type, "owner_id": doc.owner_id, }).insert() frappe.response.update({"ok": True, "data": ret}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def remove(gateway, inst, id=None): try: valid_auth_code() doc = frappe.get_doc('IOT Device', gateway) if not doc.has_permission("write"): throw("has_no_permission") ret = fire_action(id=id, action="uninstall", gateway=gateway, data={"inst": inst}) # frappe.get_doc({ # "doctype": "IOT Application Statistics", # "app": app, # "device": gateway, # "version": version, # "action": 'UNINSTALL', # "owner_company": doc.company, # "owner_type": doc.owner_type, # "owner_id": doc.owner_id, # }).insert() frappe.response.update({"ok": True, "data": ret}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def add(app, comment=None, priority=0): try: valid_auth_code() if frappe.request.method != "POST": throw("method_must_be_post") if not frappe.get_value("IOT Application Favorites", frappe.session.user, "name"): frappe.get_doc({ "doctype": "IOT Application Favorites", "user": frappe.session.user, "favorites": [{ "app": app, "comment": comment, "priority": priority }] }).insert() else: doc = frappe.get_doc("IOT Application Favorites", frappe.session.user) doc.add_favorites({ "app": app, "comment": comment, "priority": priority }) frappe.response.update({"ok": True, "data": "favorites_added"}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def latest(app, beta=0): try: valid_auth_code() ver = get_latest_version(app=app, beta=beta) frappe.response.update({"ok": True, "data": ver}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def create(): try: valid_auth_code() data = get_post_json_data() if not data.get("comp_name"): throw("company_name_missing") if not data.get("domain"): throw("domain_missing") data.update({ "doctype": "Cloud Company", "admin": frappe.session.user, "enabled": 0, "wechat": 0 }) doc = frappe.get_doc(data).insert() frappe.response.update({ "ok": True, "data": doc.name }) except Exception as ex: frappe.response.update({ "ok": False, "error": str(ex) })
def remove(name): try: valid_auth_code() company = frappe.get_value("IOT Application Conf", name, "company") if not company: throw("application_not_found") if company not in list_admin_companies(frappe.session.user): throw("invalid_permission") if frappe.get_value("IOT Application Conf", name, "public") == 1: throw("public_application_conf_cannot_be_deleted!") doc = frappe.get_doc("IOT Application Conf", name) doc.clean_before_delete() frappe.delete_doc("IOT Application Conf", name) frappe.response.update({ "ok": True, "message": "configuration_removed" }) except Exception as ex: frappe.response.update({ "ok": False, "error": str(ex) })
def remove(): try: valid_auth_code() warns = [] devices = (get_post_json_data()['name']) if isinstance(devices, string_types): devices = [devices] for sn in devices: try: doc = frappe.get_doc("IOT Device", sn) doc.update_owner("", None) except Exception as ex: warns.append(str(ex)) if len(warns) > 0: frappe.response.update({ "ok": True, "warning": warns }) else: frappe.response.update({ "ok": True, }) except Exception as ex: frappe.response.update({ "ok": False, "error": str(ex) })
def data(gateway, name=None): try: valid_auth_code() doc = frappe.get_doc('IOT Device', gateway) if not doc.has_permission("read"): throw("has_no_permission") if not name: name = gateway if name and name != gateway: if name not in gateway_device_list(gateway): throw("no_such_device_in_gateway") cfg = gateway_device_info(gateway, name) if not cfg: throw("device_info_empty") client = redis.Redis.from_url(IOTHDBSettings.get_redis_server() + "/12", decode_responses=True) hs = client.hgetall(name) device_data = [] if "inputs" in cfg: inputs = cfg.get("inputs") for input in inputs: input_name = input.get('name') s = hs.get(input_name + "/value") if not s: device_data.append({ "name": input_name, "pv": None, "tm": '', "q": -1, "vt": input.get('vt'), "desc": input.get("desc"), "unit": input.get('unit'), }) else: val = json.loads(hs.get(input_name + "/value")) ts = datetime.datetime.utcfromtimestamp(int(val[0])) time_str = str( convert_utc_to_user_timezone(ts).replace(tzinfo=None)) device_data.append({ "name": input_name, "pv": val[1], "tm": time_str, "q": val[2], "vt": input.get('vt'), "desc": input.get("desc"), "unit": input.get('unit'), }) frappe.response.update({"ok": True, "data": device_data}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def list(company): try: valid_auth_code() data = list_company_shared_groups(company) frappe.response.update({"ok": True, "data": data}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def list(): try: valid_auth_code() data = list_admin_companies(frappe.session.user) frappe.response.update({"ok": True, "data": data}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def update(): try: valid_auth_code() data = get_post_json_data() update_doc("IOT Device", data) frappe.response.update({"ok": True, "message": "device_updated"}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def remove(name): try: valid_auth_code() update_doc("Cloud Company", {"name": name, "enabled": 0}) frappe.response.update({"ok": True, "message": "company_updated"}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def update(name, tags): try: valid_auth_code() doc = frappe.get_doc('IOT Application', name) update_tags(doc, tags) frappe.response.update({"ok": True, "data": 'done'}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})