1313from asusrouter .modules .client import AsusClient
1414from asusrouter .modules .data import AsusData
1515from asusrouter .modules .homeassistant import (
16+ convert_to_ha_data ,
1617 convert_to_ha_sensors ,
18+ convert_to_ha_sensors_list ,
1719 convert_to_ha_state_bool ,
1820)
1921from asusrouter .modules .identity import AsusDevice
4648 METHOD ,
4749 MODE_SENSORS ,
4850 NETWORK ,
49- NETWORK_STAT ,
5051 PARENTAL_CONTROL ,
5152 PORT_FORWARDING ,
5253 PORTS ,
5859 SENSORS_PARENTAL_CONTROL ,
5960 SENSORS_PORT_FORWARDING ,
6061 SENSORS_RAM ,
61- SENSORS_SYSINFO ,
62- SENSORS_WAN ,
6362 STATE ,
6463 SYSINFO ,
6564 TEMPERATURE ,
66- VPN ,
67- WAN ,
6865 WLAN ,
6966)
7067
@@ -188,25 +185,33 @@ async def async_get_available_sensors(self) -> dict[str, dict[str, Any]]:
188185 sensors = {
189186 BOOTTIME : {SENSORS : SENSORS_BOOTTIME , METHOD : self ._get_data_boottime },
190187 CPU : {
191- SENSORS : await self ._get_sensors_cpu ( ),
188+ SENSORS : await self ._get_sensors_modern ( AsusData . CPU ),
192189 METHOD : self ._get_data_cpu ,
193190 },
194191 FIRMWARE : {
195192 SENSORS : SENSORS_FIRMWARE ,
196193 METHOD : self ._get_data_firmware ,
197194 },
198195 GWLAN : {
199- SENSORS : await self ._get_sensors_gwlan ( ),
196+ SENSORS : await self ._get_sensors_modern ( AsusData . GWLAN ),
200197 METHOD : self ._get_data_gwlan ,
201198 },
202199 LED : {
203200 SENSORS : SENSORS_LED ,
204201 METHOD : self ._get_data_led ,
205202 },
206203 NETWORK : {
207- SENSORS : await self ._get_sensors_network ( ),
204+ SENSORS : await self ._get_sensors_modern ( AsusData . NETWORK ),
208205 METHOD : self ._get_data_network ,
209206 },
207+ "ovpn_client" : {
208+ SENSORS : await self ._get_sensors_modern (AsusData .OPENVPN_CLIENT ),
209+ METHOD : self ._get_data_ovpn_client ,
210+ },
211+ "ovpn_server" : {
212+ SENSORS : await self ._get_sensors_ovpn_server (),
213+ METHOD : self ._get_data_ovpn_server ,
214+ },
210215 PARENTAL_CONTROL : {
211216 SENSORS : SENSORS_PARENTAL_CONTROL ,
212217 METHOD : self ._get_data_parental_control ,
@@ -221,23 +226,27 @@ async def async_get_available_sensors(self) -> dict[str, dict[str, Any]]:
221226 },
222227 RAM : {SENSORS : SENSORS_RAM , METHOD : self ._get_data_ram },
223228 SYSINFO : {
224- SENSORS : await self ._get_sensors_sysinfo ( ),
229+ SENSORS : await self ._get_sensors_modern ( AsusData . SYSINFO ),
225230 METHOD : self ._get_data_sysinfo ,
226231 },
227232 TEMPERATURE : {
228- SENSORS : await self ._get_sensors_temperature ( ),
233+ SENSORS : await self ._get_sensors_modern ( AsusData . TEMPERATURE ),
229234 METHOD : self ._get_data_temperature ,
230235 },
231- VPN : {
232- SENSORS : await self ._get_sensors_vpn (),
233- METHOD : self ._get_data_vpn ,
234- },
235- WAN : {
236- SENSORS : SENSORS_WAN ,
236+ "wan" : {
237+ SENSORS : await self ._get_sensors_modern (AsusData .WAN ),
237238 METHOD : self ._get_data_wan ,
238239 },
240+ "wireguard_client" : {
241+ SENSORS : await self ._get_sensors_modern (AsusData .WIREGUARD_CLIENT ),
242+ METHOD : self ._get_data_wireguard_client ,
243+ },
244+ "wireguard_server" : {
245+ SENSORS : await self ._get_sensors_modern (AsusData .WIREGUARD_SERVER ),
246+ METHOD : self ._get_data_wireguard_server ,
247+ },
239248 WLAN : {
240- SENSORS : await self ._get_sensors_wlan ( ),
249+ SENSORS : await self ._get_sensors_modern ( AsusData . WLAN ),
241250 METHOD : self ._get_data_wlan ,
242251 },
243252 }
@@ -265,6 +274,19 @@ async def _get_data(
265274 except AsusRouterError as ex :
266275 raise UpdateFailed (ex ) from ex
267276
277+ async def _get_data_modern (
278+ self ,
279+ datatype : AsusData ,
280+ force : bool = False ,
281+ ) -> dict [str , Any ]:
282+ """Get data from the device. This is a generic method."""
283+
284+ try :
285+ raw = await self .api .async_get_data (datatype , force = force )
286+ return self ._process_data_modern (raw )
287+ except AsusRouterError as ex :
288+ raise UpdateFailed (ex ) from ex
289+
268290 # AiMesh nodes
269291 async def async_get_aimesh_nodes (self ) -> dict [str , AiMeshDevice ]:
270292 """Get dict of AiMesh nodes."""
@@ -308,6 +330,16 @@ async def _get_data_network(self) -> dict[str, Any]:
308330
309331 return await self ._get_data (AsusData .NETWORK )
310332
333+ async def _get_data_ovpn_client (self ) -> dict [str , Any ]:
334+ """Get OpenVPN client data from the device."""
335+
336+ return await self ._get_data_modern (AsusData .OPENVPN_CLIENT )
337+
338+ async def _get_data_ovpn_server (self ) -> dict [str , Any ]:
339+ """Get OpenVPN server data from the device."""
340+
341+ return await self ._get_data (AsusData .OPENVPN_SERVER )
342+
311343 async def _get_data_parental_control (self ) -> dict [str , dict [str , int ]]:
312344 """Get parental control data from the device."""
313345
@@ -344,15 +376,20 @@ async def _get_data_temperature(self) -> dict[str, Any]:
344376
345377 return await self ._get_data (AsusData .TEMPERATURE )
346378
347- async def _get_data_vpn (self ) -> dict [str , Any ]:
348- """Get VPN data from the device."""
349-
350- return await self ._get_data (AsusData .OPENVPN )
351-
352379 async def _get_data_wan (self ) -> dict [str , Any ]:
353380 """Get WAN data from the device."""
354381
355- return await self ._get_data (AsusData .WAN )
382+ return await self ._get_data_modern (AsusData .WAN )
383+
384+ async def _get_data_wireguard_client (self ) -> dict [str , Any ]:
385+ """Get WireGuard client data from the device."""
386+
387+ return await self ._get_data_modern (AsusData .WIREGUARD_CLIENT )
388+
389+ async def _get_data_wireguard_server (self ) -> dict [str , Any ]:
390+ """Get WireGuard server data from the device."""
391+
392+ return await self ._get_data_modern (AsusData .WIREGUARD_SERVER )
356393
357394 async def _get_data_wlan (self ) -> dict [str , Any ]:
358395 """Get WLAN data from the device."""
@@ -368,6 +405,12 @@ def _process_data(raw: dict[str, Any]) -> dict[str, Any]:
368405
369406 return helpers .as_dict (helpers .flatten_dict (raw ))
370407
408+ @staticmethod
409+ def _process_data_modern (raw : dict [str , Any ]) -> dict [str , Any ]:
410+ """Process `ovpn_client` data."""
411+
412+ return helpers .clean_dict (convert_to_ha_data (raw ))
413+
371414 @staticmethod
372415 def _process_data_parental_control (raw : dict [str , Any ]) -> dict [str , Any ]:
373416 """Process `parental control` data."""
@@ -456,31 +499,35 @@ async def _get_sensors(
456499 )
457500 return sensors
458501
459- async def _get_sensors_cpu (self ) -> list [str ]:
460- """Get the available CPU sensors."""
461-
462- return await self ._get_sensors (
463- AsusData .CPU ,
464- self ._process_sensors_cpu ,
465- sensor_type = CPU ,
466- defaults = True ,
467- )
468-
469- async def _get_sensors_gwlan (self ) -> list [str ]:
470- """Get the available GWLAN sensors."""
502+ async def _get_sensors_modern (self , datatype : AsusData ) -> list [str ]:
503+ """Get the available sensors. This is a generic method."""
471504
472- return await self ._get_sensors (
473- AsusData .GWLAN ,
474- sensor_type = GWLAN ,
475- )
505+ sensors = []
506+ try :
507+ data = await self .api .async_get_data (datatype )
508+ _LOGGER .debug (
509+ "Raw `%s` sensors of type (%s): %s" , datatype , type (data ), data
510+ )
511+ sensors = convert_to_ha_sensors_list (data )
512+ _LOGGER .debug ("Available `%s` sensors: %s" , datatype .value , sensors )
513+ except AsusRouterError as ex :
514+ if datatype .value in DEFAULT_SENSORS :
515+ sensors = DEFAULT_SENSORS [datatype .value ]
516+ _LOGGER .debug (
517+ "Cannot get available `%s` sensors with exception: %s. \
518+ Will use the following list: {sensors}" ,
519+ datatype .value ,
520+ ex ,
521+ )
522+ return sensors
476523
477- async def _get_sensors_network (self ) -> list [str ]:
478- """Get the available network stat sensors."""
524+ async def _get_sensors_ovpn_server (self ) -> list [str ]:
525+ """Get the available OpenVPN server sensors."""
479526
480527 return await self ._get_sensors (
481- AsusData .NETWORK ,
482- self ._process_sensors_network ,
483- sensor_type = NETWORK_STAT ,
528+ AsusData .OPENVPN_SERVER ,
529+ self ._process_sensors_ovpn_server ,
530+ sensor_type = "ovpn_server" ,
484531 )
485532
486533 async def _get_sensors_ports (self ) -> list [str ]:
@@ -492,35 +539,6 @@ async def _get_sensors_ports(self) -> list[str]:
492539 sensor_type = PORTS ,
493540 )
494541
495- async def _get_sensors_sysinfo (self ) -> list [str ]:
496- """Get the available sysinfo sensors."""
497-
498- return await self ._get_sensors (
499- AsusData .SYSINFO ,
500- self ._process_sensors_sysinfo ,
501- sensor_type = SYSINFO ,
502- )
503-
504- async def _get_sensors_temperature (self ) -> list [str ]:
505- """Get the available temperature sensors."""
506-
507- return await self ._get_sensors (AsusData .TEMPERATURE , sensor_type = TEMPERATURE )
508-
509- async def _get_sensors_vpn (self ) -> list [str ]:
510- """Get the available VPN sensors."""
511-
512- return await self ._get_sensors (
513- AsusData .OPENVPN , self ._process_sensors_vpn , sensor_type = VPN
514- )
515-
516- async def _get_sensors_wlan (self ) -> list [str ]:
517- """Get the available WLAN sensors."""
518-
519- return await self ._get_sensors (
520- AsusData .WLAN ,
521- sensor_type = WLAN ,
522- )
523-
524542 # <- GET SENSORS LIST
525543
526544 # PROCESS SENSORS LIST->
@@ -535,18 +553,6 @@ def _process_sensors(raw: dict[str, Any]) -> list[str]:
535553 flat = helpers .as_dict (helpers .flatten_dict (raw ))
536554 return helpers .list_from_dict (flat )
537555
538- @staticmethod
539- def _process_sensors_cpu (raw : dict [str , Any ]) -> list [str ]:
540- """Process CPU sensors."""
541-
542- return convert_to_ha_sensors (raw , AsusData .CPU )
543-
544- @staticmethod
545- def _process_sensors_network (raw : dict [str , Any ]) -> list [str ]:
546- """Process network sensors."""
547-
548- return convert_to_ha_sensors (raw , AsusData .NETWORK )
549-
550556 @staticmethod
551557 def _process_sensors_ports (raw : dict [str , Any ]) -> list [str ]:
552558 """Process ports sensors."""
@@ -560,18 +566,9 @@ def _process_sensors_ports(raw: dict[str, Any]) -> list[str]:
560566 return sensors
561567
562568 @staticmethod
563- def _process_sensors_sysinfo (raw : Optional [dict [str , Any ]]) -> list [str ]:
564- """Process SysInfo sensors."""
565-
566- if raw is None or not isinstance (raw , dict ):
567- return []
568-
569- return SENSORS_SYSINFO
570-
571- @staticmethod
572- def _process_sensors_vpn (raw : dict [str , Any ]) -> list [str ]:
573- """Process VPN sensors."""
569+ def _process_sensors_ovpn_server (raw : dict [str , Any ]) -> list [str ]:
570+ """Process OpenVPN server sensors."""
574571
575- return convert_to_ha_sensors (raw , AsusData .OPENVPN )
572+ return convert_to_ha_sensors (raw , AsusData .OPENVPN_SERVER )
576573
577574 # <- PROCESS SENSORS LIST
0 commit comments