Exemple #1
0
def addBACnetProperty(name, object_id, instance_id, property_id, type, value):
    #
    # プロパティオブジェクトの定義
    #
    propertyObjects = dict()
    propertyObjects[85] = EyedPresentValue

    #
    # BACnet コマンド操作用インスタンス取得
    #
    app = SingleBACnetd.getApplication()

    #
    # BACnet クライアント の 取得
    #
    bacnet = BACnetClient(app)

    #
    # プロパティオブジェクト の インスタンス化
    #
    if not property_id in propertyObjects:
        return False
    prop = propertyObjects[property_id](object_id, instance_id)
    print prop, type, value
    #prop.setType(type, value)

    #
    # プロパティ の 登録
    #
    if bacnet.addProperty(name, prop) == False:
        return False
    return True
Exemple #2
0
    def exposed_doWhoIsRequest(self, timeout=10):
        #
        # BACnet コマンド操作用インスタンス取得
        #
        app = SingleBACnetd.getApplication()
        if app == None: return

        bacnet = BACnetClient(app)

        #
        # WhoIsRequest の 送信
        #
        bacnet.WhoIsRequest()

        #
        # WhoIsRequest を 投げてから最初の IAmRequestを受け取るまで待つ
        #
        try:
            device_id = app.responseQueue.get(timeout=timeout)
            return {'device_id': device_id}
        except Exception:
            #
            # タイムアウトを通知
            #
            return None
Exemple #3
0
    def exposed_addObject(self, name, object_id, instance_id):
        #
        # BACnet コマンド操作用インスタンス取得
        #
        app = SingleBACnetd.getApplication()
        if app == None:
            raise Exception('BAcnetd is not woring...')

        #
        # DB への 接続
        #
        with SessionFactory() as session:
            #
            # オブジェクト名が既に利用されていないかを確認
            #
            obj = session.query(BACnetSimulationObject).filter_by(
                name=name).first()
            if not obj == None: return False

            #
            # オブジェクトの登録
            #
            if addBACnetObject(name, object_id, instance_id) == False:
                return False

            #
            # オブジェクトの登録(DB)
            #
            session.add(BACnetSimulationObject(name, object_id, instance_id))
            session.commit()
            return True
Exemple #4
0
    def exposed_setPropertyType(self, name, property_id, type, value):
        #
        # BACnet コマンド操作用インスタンス取得
        #
        app = SingleBACnetd.getApplication()
        if app == None:
            raise Exception('BAcnetd is not woring...')
        bacnet = BACnetClient(app)

        #
        # DB への 接続
        #
        with SessionFactory() as session:
            #
            # オブジェクト名が登録されているかを確認
            #
            obj = session.query(BACnetSimulationObject).filter_by(
                name=name).first()
            if obj == None: return False

            #
            # プロパティ名が登録されているかを確認
            #
            prop = obj.properties.filter_by(property_id=property_id).first()
            if prop == None: return False

            #
            # BACnet オブジェクトの検索
            #
            property = definition.findPropertyByID(property_id)
            if property == None:
                return None
            property = bacnet.getProperty(name, property['name'])
            if property == None:
                return None

            #
            # プロパティ種別の設定
            #
            if property.setType(type, value) == False:
                return False

            #
            # プロパティ(DB)の更新
            #
            prop.type = type
            prop.value = value

            #
            # 変更処理のコミット
            #
            session.commit()
            return True

        #
        # 例外の確認
        #
        assert sys.exc_info()[0] == None, sys.exc_info()
        return False
Exemple #5
0
        def job_function(name):
            #
            # DB への 接続
            #
            with SessionFactory() as session:
                #
                # オブジェクト一覧の取得
                #
                taskGroup = session.query(TaskGroup).filter_by(
                    name=name).first()
                if taskGroup == None: return

                #
                # BACnet コマンド操作用インスタンス取得
                #
                app = SingleBACnetd.getApplication()
                if app == None: return
                bacnet = BACnetClient(app)

                #
                # Data Store の 取得
                #
                datastore = SingleBACnetd().getDatastore()

                #
                # タスクの取得
                #
                for task in taskGroup.bacnetTasks:
                    #
                    # リクエストの実行
                    #
                    value = bacnet.ReadPropertyRequest(task.device_id,
                                                       task.object_id,
                                                       task.instance_id,
                                                       task.property_id)

                    #
                    # 計測値のセットアップ
                    #
                    datastore.setBACnetValue(DatastoreType.MEASUREMENT,
                                             task.object_id, task.instance_id,
                                             task.property_id, value)

                    #
                    # 値の保存
                    #
                    task.measuredValues.append(BACnetMeasuredValue(value))
                    session.commit()

            #
            # 例外の検知
            #
            assert sys.exc_info()[0] == None, sys.exc_info()
            return False
Exemple #6
0
    def exposed_getObjectByName(self, name):
        #
        # BACnet コマンド操作用インスタンス取得
        #
        app = SingleBACnetd.getApplication()
        if app == None:
            raise Exception('BAcnetd is not woring...')
        bacnet = BACnetClient(app)

        #
        # BACnet オブジェクトの検索
        #
        return bacnet.getObjectByName(name)
Exemple #7
0
    def exposed_getProperty(self, name, property_id):
        #
        # BACnet コマンド操作用インスタンス取得
        #
        app = SingleBACnetd.getApplication()
        if app == None:
            raise Exception('BAcnetd is not woring...')
        bacnet = BACnetClient(app)

        #
        # BACnet オブジェクトの検索
        #
        property = definition.findPropertyByID(property_id)
        if property == None:
            return None
        return bacnet.getProperty(name, property['name'])
Exemple #8
0
def addBACnetObject(name, object_id, instance_id):
    #
    # BACnet コマンド操作用インスタンス取得
    #
    app = SingleBACnetd.getApplication()

    #
    # BACnet クライアント の 取得
    #
    bacnet = BACnetClient(app)

    #
    # オブジェクトの登録
    #
    if bacnet.addObject(name, object_id, instance_id) == False:
        return False
    return True
Exemple #9
0
    def exposed_addProperty(self,
                            name,
                            property_id,
                            value,
                            type=DatastoreType.STATIC):
        #
        # BACnet コマンド操作用インスタンス取得
        #
        app = SingleBACnetd.getApplication()
        if app == None:
            raise Exception('BAcnetd is not woring...')

        #
        # DB への 接続
        #
        with SessionFactory() as session:
            #
            # オブジェクト名が登録されているかを確認
            #
            obj = session.query(BACnetSimulationObject).filter_by(
                name=name).first()
            if obj == None: return False

            #
            # プロパティ名が既に存在していないかを確認
            #
            prop = obj.properties.filter_by(property_id=property_id).first()
            if not prop == None: return False

            #
            # プロパティの登録
            #
            if addBACnetProperty(obj.name, obj.object_id, obj.instance_id,
                                 property_id, type, value) == False:
                return False

            #
            # プロパティの登録(DB)
            #
            obj.properties.append(
                BACnetSimulationProperty(type, property_id, value))
            session.commit()
            return True
        assert sys.exc_info()[0] == None, sys.exc_info()
        return False
Exemple #10
0
    def exposed_addBACnetTask(self, name, device_id, object_id, instance_id,
                              property_id):
        #
        # DB への 接続
        #
        with SessionFactory() as session:
            #
            # グループ名が存在するかの確認
            #
            taskGroup = session.query(TaskGroup).filter_by(name=name).first()
            if taskGroup == None: return False

            #
            # タスクが登録済みであるかを確認
            #
            task = taskGroup.bacnetTasks.filter_by(
                device_id=device_id,
                object_id=object_id,
                instance_id=instance_id,
                property_id=property_id).first()
            if not task == None: return False

            #
            # BACnet コマンド操作用インスタンス取得
            #
            app = SingleBACnetd.getApplication()
            if app == None: return False
            bacnet = BACnetClient(app)

            #
            # 値が取得できるかを確認
            #
            value = bacnet.ReadPropertyRequest(device_id, object_id,
                                               instance_id, property_id)
            if value == None: return False

            #
            # タスクの登録
            #
            new_task = BACnetTask(device_id, object_id, instance_id,
                                  property_id)
            taskGroup.bacnetTasks.append(new_task)
            session.commit()
            return True
Exemple #11
0
    def exposed_doReadPropertyRequest(self, device_id, object_id, instance_id,
                                      property_id):
        #
        # BACnet コマンド操作用インスタンス取得
        #
        app = SingleBACnetd.getApplication()
        if app == None:
            raise Exception('BAcnetd is not woring...')
        bacnet = BACnetClient(app)

        #
        # リクエストの実行
        #
        value = bacnet.ReadPropertyRequest(device_id, object_id, instance_id,
                                           property_id)

        #
        # リクエスト結果をJSONで返す
        #
        return {'value': value}
Exemple #12
0
    def exposed_getDevices(self):
        #
        # BACnet コマンド操作用インスタンス取得
        #
        app = SingleBACnetd.getApplication()
        if app == None:
            raise Exception('BAcnetd is not running...')
        bacnet = BACnetClient(app)

        #
        # デバイスリストの作成
        #
        devices = []
        for key, value in app.device_map.items():
            devices.append({'device_id': key, 'ip': str(value)})

        #
        # デバイスリストを返却
        #
        return devices
Exemple #13
0
        def job_function(name):
            #
            # DB への 接続
            #
            with SessionFactory() as session:
                #
                # オブジェクト一覧の取得
                #
                taskGroup = session.query(TaskGroup).filter_by(
                    name=name).first()
                print taskGroup
                if taskGroup == None: return

                #
                # BACnet コマンド操作用インスタンス取得
                #
                app = SingleBACnetd.getApplication()
                if app == None: return
                bacnet = BACnetClient(app)

                #
                # タスクの取得
                #
                for task in taskGroup.bacnetTasks:
                    print task

                    #
                    # リクエストの実行
                    #
                    value = bacnet.ReadPropertyRequest(task.device_id,
                                                       task.object_id,
                                                       task.instance_id,
                                                       task.property_id)

                    #
                    # 値の保存
                    #
                    print name, value