Exemple #1
0
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)})
Exemple #2
0
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)})
Exemple #3
0
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)})
Exemple #5
0
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)
		})
Exemple #6
0
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)})
Exemple #7
0
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)
		})
Exemple #9
0
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)})
Exemple #11
0
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)
		})
Exemple #12
0
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)})
Exemple #13
0
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)
		})
Exemple #14
0
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)})
Exemple #15
0
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)
		})
Exemple #16
0
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)})
Exemple #17
0
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)})
Exemple #18
0
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)})
Exemple #19
0
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)})
Exemple #20
0
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)})
Exemple #21
0
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)})
Exemple #22
0
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)
		})
Exemple #24
0
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)
		})
Exemple #25
0
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)})
Exemple #27
0
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)})
Exemple #28
0
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)})
Exemple #29
0
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)})
Exemple #30
0
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)})