Exemple #1
0
def add_localapp(global_id):
    db = databasehelper.get_database(DB_NAME)
    col = databasehelper.get_collection(db, DB_COLLECTION_LOCALAPPS)

    app_id = ObjectId()
    io_name = str(app_id) + '.io'
    log_name = str(app_id) + '.log'

    localapp = {
        "_id":
        app_id,
        "name":
        "test app int-int",
        "note":
        "",
        "module_name":
        "testapp",
        "readtype":
        'int',
        "writetype":
        'int',
        "node_module_id":
        global_id,
        "configs": [{
            "name": 'iofile',
            "value": io_name,
            "type": 'str'
        }, {
            "name": 'logfile',
            "value": log_name,
            "type": 'str'
        }]
    }
    databasehelper.insert(col, localapp)
    return str(app_id)
Exemple #2
0
def add(info: dict) -> None:
    db = dbhelper.get_database(DB_NAME)
    col = dbhelper.get_collection(db, DB_COLLECTION_DEVICES)
    if "_id" in info:
        info["_id"] = ObjectId(info["_id"])
    result = dbhelper.insert(col, info)
    return result
Exemple #3
0
def update(device_id: str, info: dict) -> None:
    if "_id" in info:
        del info["_id"]
    db = dbhelper.get_database(DB_NAME)
    col = dbhelper.get_collection(db, DB_COLLECTION_DEVICES)
    result = dbhelper.update(col, {"_id": ObjectId(device_id)}, info)
    return result
Exemple #4
0
def find_node_module_info(node_module_id: str) -> dict:
    db = databasehelper.get_database(DB_NAME)
    col = databasehelper.get_collection(db, DB_COLLECTION_NODE_MODULES)
    nodeinfo = list(databasehelper.find(col,
                                        {'_id': ObjectId(node_module_id)}))
    print(nodeinfo)
    return nodeinfo[0]
Exemple #5
0
def delete(node_id: str) -> None:
    db = databasehelper.get_database(DB_NAME)
    col = databasehelper.get_collection(db, DB_COLLECTION_NODES)
    result = databasehelper.delete(col, {'_id': ObjectId(node_id)})
    __unload_node(node_id)
    datastoremanager.remove_datastore(node_id)
    return True
Exemple #6
0
def add_globalapp():
    db = databasehelper.get_database(DB_NAME)
    col = databasehelper.get_collection(db, DB_COLLECTION_GLOBALAPPS)

    app_id = ObjectId()
    globalapp = {
        "_id":
        app_id,
        "name":
        'test app int-int',
        "note":
        '',
        "module_name":
        'testapp',
        "readtype":
        'int',
        "writetype":
        'int',
        "required_configs": [{
            "name": 'iofile',
            "type": 'str'
        }, {
            "name": 'logfile',
            "type": 'str'
        }]
    }
    databasehelper.insert(col, globalapp)
    return str(app_id)
Exemple #7
0
def update_node_info(node_id: str, updated_node: dict) -> None:
    # Add info
    db = databasehelper.get_database(DB_NAME)
    col = databasehelper.get_collection(db, DB_COLLECTION_NODES)
    result = databasehelper.update(col, {'_id': ObjectId(node_id)},
                                   updated_node)
    __load_node(node_id)
Exemple #8
0
def add(node_module_id: str, new_node: dict) -> None:
    # Add info
    db = databasehelper.get_database(DB_NAME)
    col = databasehelper.get_collection(db, DB_COLLECTION_NODES)
    node_module_info = find_node_module_info(node_module_id)
    new_node['module_name'] = node_module_info['module_name']
    new_node['node_module_id'] = node_module_id
    if '_id' in new_node:
        new_node["_id"] = ObjectId(new_node["_id"])
    result = databasehelper.insert(col, new_node)
    __load_node(str(new_node['_id']))
Exemple #9
0
def find_datastore_values(node_id: str, limit: int) -> list:
    colname = DB_COLLECTION_TEMP_DATASTORE + str(node_id)
    db = databasehelper.get_database(DB_NAME)
    col = databasehelper.get_collection(db, colname)
    values = list(
        databasehelper.find(col, {}, {
            'sort': [('time', -1)],
            'limit': limit,
            'projection': {
                '_id': False
            }
        }))
    return values
Exemple #10
0
 def __store(self) -> None:
     db = databasehelper.get_database(DB_NAME)
     colname = DB_COLLECTION_TEMP_DATASTORE + str(self.__id)
     if not databasehelper.isExistCollection(db, colname):
         col = databasehelper.create_collection(db, colname)
     else:
         col = databasehelper.get_collection(db, colname)
     while self.__isrunning:
         try:
             readVal = self.__node.read()
             doc = {'time': time.time(), 'value': readVal}
             databasehelper.insert(col, doc)
             time.sleep(self.interval)
         except:
             logmanager.error(TAG, sys.exc_info())
Exemple #11
0
def add_rule(event_node, action_node):
    db = databasehelper.get_database(DB_NAME)
    col = databasehelper.get_collection(db, DB_COLLECTION_RULES)

    rule = {
        "name": "rule",
        "on": True,
        "event": {
            "nodeid": event_node,
            "operator": "==",
            "value": 1,
            "type": "int"
        },
        "action": {
            "nodeid": action_node,
            "value": 1,
            "type": "int"
        }
    }
    databasehelper.insert(col, rule)
Exemple #12
0
def find_device_info(device_id: str) -> dict:
    db = dbhelper.get_database(DB_NAME)
    col = dbhelper.get_collection(db, DB_COLLECTION_DEVICES)
    listdevices = list(dbhelper.find(col, {'_id': ObjectId(device_id)}))
    return listdevices[0]
Exemple #13
0
def find_parent_node_info(node_id: str) -> dict:
    db = databasehelper.get_database(DB_NAME)
    col = databasehelper.get_collection(db, DB_COLLECTION_PARENT_NODES)
    nodeinfo = list(databasehelper.find(col, {'_id': ObjectId(node_id)}))
    return nodeinfo[0]
Exemple #14
0
def list_node_modules() -> list:
    db = databasehelper.get_database(DB_NAME)
    col = databasehelper.get_collection(db, DB_COLLECTION_NODE_MODULES)
    listnodes = list(databasehelper.find(col, {}))
    return listnodes
Exemple #15
0
    def __connectnodes(self) -> None:
        db = dbhelper.get_database(DB_NAME)
        times = {}
        while self.__isrunning:
            connectionscol = dbhelper.get_collection(db, DB_COLLECTION_RULES)
            connections = list(dbhelper.find(connectionscol, {}))

            for connection in connections:
                if connection['on'] == False:
                    continue

                event = connection['event']
                if 'type' not in event:
                    continue

                eventnodecol = dbhelper.get_collection(
                    db, DB_COLLECTION_TEMP_DATASTORE + str(event['nodeid']))
                eventnodeid = str(event['nodeid'])
                eventnodevalues = {}
                if str(connection['_id']) in times:
                    eventnodevalues = list(
                        dbhelper.find(
                            eventnodecol,
                            {'time': {
                                "$gt": times[str(connection['_id'])]
                            }}, dict(sort=[('time', pymongo.ASCENDING)])))
                else:
                    times[str(connection['_id'])] = time.time()
                    continue

                firstvalue = ''
                secondvalue = ''
                firsttime = 0.0
                secondtime = 0.0
                for eventnodevalue in eventnodevalues:
                    tempvalue = secondvalue
                    temptime = secondtime
                    secondvalue = str(eventnodevalue['value'])
                    secondtime = float(eventnodevalue['time'])
                    firstvalue = tempvalue
                    firsttime = temptime
                    if firstvalue == '' or firsttime == 0.0:
                        continue
                    eventoperator = str(event['operator'])
                    eventvalue = str(event['value'])
                    eventtype = str(event['type'])

                    #logmanager.log(TAG, "Event first time: " + eventnodeid + '  ' + str(eventnodevalue['time']))
                    times[str(connection['_id'])] = firsttime

                    firstrule = eventtype + "('" + firstvalue + "') " + eventoperator + " " + eventtype + "('" + eventvalue + "')"
                    secondrule = eventtype + "('" + secondvalue + "') " + eventoperator + " " + eventtype + "('" + eventvalue + "')"

                    # Rule check
                    if eval(secondrule) and not eval(firstrule):
                        logmanager.log(TAG, "Detected: " + str(connection))
                        action = connection['action']

                        if 'type' not in action:
                            break

                        node_id = action['nodeid']
                        nodemanager.write_node_value(
                            str(node_id),
                            eval(action['type'] + "('" + str(action['value']) +
                                 "')"))
                        break

            time.sleep(self.interval)
Exemple #16
0
def delete(connector_id: str) -> None:
    db = dbhelper.get_database(DB_NAME)
    col = dbhelper.get_collection(db, DB_COLLECTION_RULES)
    dbhelper.delete(col, {'_id': ObjectId(connector_id)})
Exemple #17
0
def drop_rules():
    db = databasehelper.get_database(DB_NAME)
    col = databasehelper.get_collection(db, DB_COLLECTION_RULES)
    databasehelper.drop(col)
Exemple #18
0
def remove_datastore(node_id: str) -> None:
    colname = DB_COLLECTION_TEMP_DATASTORE + str(node_id)
    db = databasehelper.get_database(DB_NAME)
    col = databasehelper.get_collection(db, colname)
    databasehelper.drop(col)
Exemple #19
0
def list_rules() -> list:
    db = dbhelper.get_database(DB_NAME)
    col = dbhelper.get_collection(db, DB_COLLECTION_RULES)
    listrules = list(dbhelper.find(col, {}))
    return listrules
Exemple #20
0
def find_rule(connector_id: str) -> dict:
    db = dbhelper.get_database(DB_NAME)
    col = dbhelper.get_collection(db, DB_COLLECTION_RULES)
    rule = dbhelper.find(col, {'_id': ObjectId(connector_id)})
    return rule[0]
Exemple #21
0
def delete(device_id: str) -> None:
    db = dbhelper.get_database(DB_NAME)
    col = dbhelper.get_collection(db, DB_COLLECTION_DEVICES)
    result = dbhelper.delete(col, {"_id": ObjectId(device_id)})
    return result
Exemple #22
0
def drop_devices():
    db = databasehelper.get_database(DB_NAME)
    col = databasehelper.get_collection(db, DB_COLLECTION_DEVICES)
    databasehelper.drop(col)
Exemple #23
0
def drop_db():
    db = databasehelper.get_database(DB_NAME)
    db.client.drop_database(db)
Exemple #24
0
def find_parent_node_module_info_list_w_name(parent_module_name: str) -> list:
    db = databasehelper.get_database(DB_NAME)
    col = databasehelper.get_collection(db, DB_COLLECTION_PARENT_NODE_MODULES)
    nodeinfo = list(
        databasehelper.find(col, {'module_name': parent_module_name}))
    return nodeinfo
Exemple #25
0
def add(new_rule: dict) -> None:
    db = dbhelper.get_database(DB_NAME)
    col = dbhelper.get_collection(db, DB_COLLECTION_RULES)
    if "_id" in new_rule:
        new_rule["_id"] = ObjectId(new_rule["_id"])
    dbhelper.insert(col, new_rule)
Exemple #26
0
def list_devices() -> list:
    db = dbhelper.get_database(DB_NAME)
    col = dbhelper.get_collection(db, DB_COLLECTION_DEVICES)
    listdevices = list(dbhelper.find(col, {}))
    return listdevices
Exemple #27
0
def update(connector_id: str, updated_rule: dict) -> None:
    db = dbhelper.get_database(DB_NAME)
    col = dbhelper.get_collection(db, DB_COLLECTION_RULES)
    dbhelper.update(col, {'_id': ObjectId(connector_id)}, updated_rule)
Exemple #28
0
def drop_localapps():
    db = databasehelper.get_database(DB_NAME)
    col = databasehelper.get_collection(db, DB_COLLECTION_LOCALAPPS)
    databasehelper.drop(col)
Exemple #29
0
def add_device(localapps):
    db = databasehelper.get_database(DB_NAME)
    col = databasehelper.get_collection(db, DB_COLLECTION_DEVICES)

    device = {"name": "test", "note": "", "apps": localapps}
    databasehelper.insert(col, device)