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
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
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
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
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
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)
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'])
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
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
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
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}
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
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