context
Модуль context
позволяет получить информацию о правиле и теге, в котором произошло событие.
Текущий контекст можно получить через функцию context.current()
.
1class TagTypeEnum(Enum): 2 3 undefined = 0 4 event = 1 5 state = 2 6 node = 3 7 device = 4 8 agent = 5 9 aggregate = 6 10 11class ValueTypeEnum(Enum): 12 13 integer = 1 14 float = 2 15 boolean = 3 16 string = 4 17 location = 5 18 timestamp = 6 19 20class TagState: 21 22 received_at: int 23 timestamp: int 24 value: Any 25 26class Tag: 27 28 id: int 29 name: str 30 full_name: str 31 type: TagTypeEnum 32 attrs: Dict[str, str] 33 children: List['Tag'] 34 parent: Optional['Tag'] 35 value_type: Optional[ValueTypeEnum] 36 state: Optional[TagState] 37 38 def get_child(name) -> Optional['Tag']: 39 """ 40 Возвращает потомка тега по его имени или None, если такового нет 41 """ 42 43class Rule: 44 45 id: int 46 name: str 47 48class Message: 49 50 type: ValueTypeEnum 51 value: Any 52 timestamp: datetime 53 54class Context: 55 56 rule: Rule 57 msg: Message 58 tag: Tag 59 root_tag: Tag 60 61 62def current() -> Context: 63 pass
Пример получения текущего контекста:
1from coiiot_sdk import context 2ctx = context.current()
Через контекст можно получить доступ к тегу. Важными характеристиками тега являются свойства children
и parent
, с помощью которых можно перемещаться по дереву тегов. Например, можно написать правило для нахождения родителя тега:
1from coiiot_sdk import user_logs, context 2 3logger = user_logs.get_logger() 4ctx = context.current() 5 6parent = ctx.tag.parent 7logger.info(f"{parent.name}")
А таким образом можно найти дочерний тег по его имени:
1from coiiot_sdk import user_logs, context 2 3logger = user_logs.get_logger() 4ctx = context.current() 5 6tag = ctx.tag.get_child("needle") 7 8if tag is not None: 9 logger.info(f"name={tag.name} id={tag.id}")
Также всегда можно получить доступ к корневому тегу через свойство контекста root_tag
.
Следующее правило находит имя корневого тега:
1from coiiot_sdk import context, user_logs 2 3logger = user_logs.get_logger() 4ctx = context.current() 5 6logger.info(ctx.root_tag.name)