mirror of
				https://github.com/FreeOpcUa/opcua-asyncio
				synced 2025-10-29 17:07:18 +08:00 
			
		
		
		
	Fix historizing events with specified SourceNode from einarmo
This commit is contained in:
		| @@ -25,6 +25,10 @@ class Event: | ||||
|         self.event_fields = None | ||||
|         self.data_types = {} | ||||
|         self.emitting_node = emitting_node | ||||
|         if isinstance(emitting_node, ua.NodeId): | ||||
|             self.emitting_node = emitting_node | ||||
|         else: | ||||
|             self.emitting_node = ua.NodeId(emitting_node) | ||||
|         # save current attributes | ||||
|         self.internal_properties = list(self.__dict__.keys())[:] + ["internal_properties"] | ||||
|  | ||||
|   | ||||
| @@ -144,9 +144,9 @@ class HistoryDict(HistoryStorageInterface): | ||||
|         self._events_periods[source_id] = period, count | ||||
|  | ||||
|     async def save_event(self, event): | ||||
|         evts = self._events[event.SourceNode] | ||||
|         evts = self._events[event.emitting_node] | ||||
|         evts.append(event) | ||||
|         period, count = self._events_periods[event.SourceNode] | ||||
|         period, count = self._events_periods[event.emitting_node] | ||||
|         now = datetime.utcnow() | ||||
|         if period: | ||||
|             while len(evts) and now - evts[0].SourceTimestamp > period: | ||||
|   | ||||
| @@ -133,7 +133,7 @@ class HistorySQLite(HistoryStorageInterface): | ||||
|             self.logger.info("Historizing SQL Table Creation Error for events from %s: %s", source_id, e) | ||||
|  | ||||
|     async def save_event(self, event): | ||||
|         table = self._get_table_name(event.SourceNode) | ||||
|         table = self._get_table_name(event.emitting_node) | ||||
|         columns, placeholders, evtup = self._format_event(event) | ||||
|         event_type = event.EventType  # useful for troubleshooting database | ||||
|         # insert the event into the database | ||||
| @@ -145,9 +145,9 @@ class HistorySQLite(HistoryStorageInterface): | ||||
|             ) | ||||
|             await self._db.commit() | ||||
|         except aiosqlite.Error as e: | ||||
|             self.logger.error("Historizing SQL Insert Error for events from %s: %s", event.SourceNode, e) | ||||
|             self.logger.error("Historizing SQL Insert Error for events from %s: %s", event.emitting_node, e) | ||||
|         # get this node's period from the period dict and calculate the limit | ||||
|         period = self._datachanges_period[event.SourceNode] | ||||
|         period = self._datachanges_period[event.emitting_node] | ||||
|         if period: | ||||
|             # after the insert, if a period was specified delete all records older than period | ||||
|             date_limit = datetime.utcnow() - period | ||||
| @@ -155,7 +155,7 @@ class HistorySQLite(HistoryStorageInterface): | ||||
|                 await self._db.execute(f'DELETE FROM "{table}" WHERE Time < ?', (date_limit.isoformat(' '),)) | ||||
|                 await self._db.commit() | ||||
|             except aiosqlite.Error as e: | ||||
|                 self.logger.error("Historizing SQL Delete Old Data Error for events from %s: %s", event.SourceNode, e) | ||||
|                 self.logger.error("Historizing SQL Delete Old Data Error for events from %s: %s", event.emitting_node, e) | ||||
|  | ||||
|     async def read_event_history(self, source_id, start, end, nb_values, evfilter): | ||||
|         table = self._get_table_name(source_id) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 oroulet
					oroulet