diff --git a/homeassistant/components/mikrotik/const.py b/homeassistant/components/mikrotik/const.py index 399271d8179e28..93ffbe14a2ec4c 100644 --- a/homeassistant/components/mikrotik/const.py +++ b/homeassistant/components/mikrotik/const.py @@ -9,7 +9,7 @@ ATTR_MANUFACTURER: Final = "Mikrotik" ATTR_SERIAL_NUMBER: Final = "serial-number" -ATTR_FIRMWARE: Final = "current-firmware" +ATTR_SYSTEM_FIRMWARE: Final = "installed-version" CONF_ARP_PING: Final = "arp_ping" CONF_FORCE_DHCP: Final = "force_dhcp" @@ -22,14 +22,14 @@ DHCP: Final = "dhcp" HEALTH: Final = "health" IDENTITY: Final = "identity" -INFO: Final = "info" IS_CAPSMAN: Final = "is_capsman" IS_WIFI: Final = "is_wifi" IS_WIFIWAVE2: Final = "is_wifiwave2" IS_WIRELESS: Final = "is_wireless" REBOOT: Final = "reboot" +RESOURCE: Final = "resource" +ROUTERBOARD: Final = "routerboard" SHUTDOWN: Final = "shutdown" -SYSTEM: Final = "system" WIFI: Final = "wifi" WIFIWAVE2: Final = "wifiwave2" WIRELESS: Final = "wireless" @@ -41,14 +41,14 @@ DHCP: "/ip/dhcp-server/lease/getall", HEALTH: "/system/health/print", IDENTITY: "/system/identity/getall", - INFO: "/system/routerboard/getall", IS_CAPSMAN: "/caps-man/interface/print", IS_WIFI: "/interface/wifi/print", IS_WIFIWAVE2: "/interface/wifiwave2/print", IS_WIRELESS: "/interface/wireless/print", REBOOT: "/system/reboot", + RESOURCE: "/system/resource/print", + ROUTERBOARD: "/system/routerboard/getall", SHUTDOWN: "/system/shutdown", - SYSTEM: "/system/resource/print", WIFI: "/interface/wifi/registration-table/print", WIFIWAVE2: "/interface/wifiwave2/registration-table/print", WIRELESS: "/interface/wireless/registration-table/getall", diff --git a/homeassistant/components/mikrotik/coordinator.py b/homeassistant/components/mikrotik/coordinator.py index 8b41b852e3be6f..56505dd77059ec 100644 --- a/homeassistant/components/mikrotik/coordinator.py +++ b/homeassistant/components/mikrotik/coordinator.py @@ -21,8 +21,8 @@ from .const import ( ARP, - ATTR_FIRMWARE, ATTR_SERIAL_NUMBER, + ATTR_SYSTEM_FIRMWARE, CAPSMAN, CONF_ARP_PING, CONF_DETECTION_TIME, @@ -32,14 +32,14 @@ DOMAIN, HEALTH, IDENTITY, - INFO, IS_CAPSMAN, IS_WIFI, IS_WIFIWAVE2, IS_WIRELESS, MIKROTIK_SERVICES, NAME, - SYSTEM, + RESOURCE, + ROUTERBOARD, WIFI, WIFIWAVE2, WIRELESS, @@ -75,6 +75,14 @@ def __init__( self.firmware: str = "" self.serial_number: str = "" self.sensors: dict[str, Any] = {} + self.system: dict[str, Any] = {} + + def _get_system_details(self) -> None: + """Retrieve system and routerboard details from Mikrotik API.""" + self.system[IDENTITY] = (self.command(MIKROTIK_SERVICES[IDENTITY]) or [{}])[0] + self.system[ROUTERBOARD] = ( + self.command(MIKROTIK_SERVICES[ROUTERBOARD], suppress_errors=True) or [{}] + )[0] @staticmethod def load_mac(devices: list[dict[str, Any]]) -> dict[str, dict[str, Any]]: @@ -96,19 +104,13 @@ def force_dhcp(self) -> bool: """Return force_dhcp option setting.""" return self.config_entry.options.get(CONF_FORCE_DHCP, False) # type: ignore[no-any-return] - def get_info(self, param: str) -> str: - """Return device model name.""" - cmd = IDENTITY if param == NAME else INFO - if data := self.command(MIKROTIK_SERVICES[cmd], suppress_errors=(cmd == INFO)): - return str(data[0].get(param)) - return "" - def get_hub_details(self) -> None: """Get Hub info.""" - self.hostname = self.get_info(NAME) - self.model = self.get_info(ATTR_MODEL) - self.firmware = self.get_info(ATTR_FIRMWARE) - self.serial_number = self.get_info(ATTR_SERIAL_NUMBER) + self._get_system_details() + self.hostname = self.system[IDENTITY].get(NAME) + self.model = self.system[ROUTERBOARD].get(ATTR_MODEL) + self.firmware = self.system[ROUTERBOARD].get(ATTR_SYSTEM_FIRMWARE) + self.serial_number = self.system[ROUTERBOARD].get(ATTR_SERIAL_NUMBER) self.support_capsman = bool( self.command(MIKROTIK_SERVICES[IS_CAPSMAN], suppress_errors=True) ) @@ -164,14 +166,14 @@ def update_devices(self) -> None: _LOGGER.debug("Using arp-ping to check devices") arp_devices = self.get_list_from_interface(ARP) - # get new hub firmware version if updated - self.firmware = self.get_info(ATTR_FIRMWARE) + # get hub details and system info + self._get_system_details() self.sensors[HEALTH] = ( self.command(MIKROTIK_SERVICES[HEALTH], suppress_errors=True) or [] ) - self.sensors[SYSTEM] = ( - self.command(MIKROTIK_SERVICES[SYSTEM], suppress_errors=True) or [] + self.sensors[RESOURCE] = ( + self.command(MIKROTIK_SERVICES[RESOURCE], suppress_errors=True) or [] ) if not device_list: diff --git a/homeassistant/components/mikrotik/sensor.py b/homeassistant/components/mikrotik/sensor.py index fc3c1e48d1bf34..4712befbde30d5 100644 --- a/homeassistant/components/mikrotik/sensor.py +++ b/homeassistant/components/mikrotik/sensor.py @@ -22,7 +22,7 @@ from homeassistant.helpers.typing import StateType from homeassistant.util.dt import utcnow -from .const import HEALTH, SYSTEM +from .const import HEALTH, RESOURCE from .coordinator import _LOGGER, MikrotikConfigEntry from .entity import MikrotikEntity @@ -100,7 +100,7 @@ def _calculate_uptime(data: dict[str, Any]) -> datetime | None: native_unit_of_measurement=UnitOfRatio.PERCENTAGE, suggested_display_precision=2, value=lambda _data: _data["cpu-load"], - type=SYSTEM, + type=RESOURCE, index=0, ), MikrotikSensorEntityDescription( @@ -115,7 +115,7 @@ def _calculate_uptime(data: dict[str, Any]) -> datetime | None: if (total := _data.get("total-memory", 0)) == 0 else (total - _data.get("free-memory", 0)) / total * 100 ), - type=SYSTEM, + type=RESOURCE, index=0, ), MikrotikSensorEntityDescription( @@ -130,14 +130,14 @@ def _calculate_uptime(data: dict[str, Any]) -> datetime | None: if (total := _data.get("total-hdd-space", 0)) == 0 else (total - _data.get("free-hdd-space", 0)) / total * 100 ), - type=SYSTEM, + type=RESOURCE, index=0, ), MikrotikSensorEntityDescription( key="uptime", device_class=SensorDeviceClass.UPTIME, value=_calculate_uptime, - type=SYSTEM, + type=RESOURCE, index=0, ), ) diff --git a/homeassistant/components/tesla_fleet/manifest.json b/homeassistant/components/tesla_fleet/manifest.json index 300c29ad0b3a03..37aaf456b5ad55 100644 --- a/homeassistant/components/tesla_fleet/manifest.json +++ b/homeassistant/components/tesla_fleet/manifest.json @@ -8,5 +8,5 @@ "integration_type": "hub", "iot_class": "cloud_polling", "loggers": ["tesla-fleet-api"], - "requirements": ["tesla-fleet-api==1.7.2"] + "requirements": ["tesla-fleet-api==1.7.6"] } diff --git a/homeassistant/components/teslemetry/manifest.json b/homeassistant/components/teslemetry/manifest.json index a446a43e20bf22..35cf1f80092e49 100644 --- a/homeassistant/components/teslemetry/manifest.json +++ b/homeassistant/components/teslemetry/manifest.json @@ -9,5 +9,5 @@ "iot_class": "cloud_polling", "loggers": ["tesla_fleet_api", "teslemetry_stream"], "quality_scale": "platinum", - "requirements": ["tesla-fleet-api==1.7.2", "teslemetry-stream==0.9.1"] + "requirements": ["tesla-fleet-api==1.7.6", "teslemetry-stream==0.9.1"] } diff --git a/homeassistant/components/teslemetry/services.py b/homeassistant/components/teslemetry/services.py index 6d73b909833c1d..c1b1c793c72742 100644 --- a/homeassistant/components/teslemetry/services.py +++ b/homeassistant/components/teslemetry/services.py @@ -139,7 +139,7 @@ async def navigate_gps_request(call: ServiceCall) -> None: vehicle.api.navigation_gps_request( lat=call.data[ATTR_GPS][CONF_LATITUDE], lon=call.data[ATTR_GPS][CONF_LONGITUDE], - order=call.data.get(ATTR_ORDER), + order=call.data.get(ATTR_ORDER, 0), ) ) diff --git a/homeassistant/components/tessie/manifest.json b/homeassistant/components/tessie/manifest.json index f47f3a18f8dc3f..02f8c9a28edc68 100644 --- a/homeassistant/components/tessie/manifest.json +++ b/homeassistant/components/tessie/manifest.json @@ -8,5 +8,5 @@ "iot_class": "cloud_polling", "loggers": ["tessie", "tesla-fleet-api"], "quality_scale": "silver", - "requirements": ["tessie-api==0.1.3", "tesla-fleet-api==1.7.2"] + "requirements": ["tessie-api==0.1.3", "tesla-fleet-api==1.7.6"] } diff --git a/requirements_all.txt b/requirements_all.txt index 8d38f6f6b86220..b365294baee74f 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -3175,7 +3175,7 @@ temperusb==1.6.1 # homeassistant.components.tesla_fleet # homeassistant.components.teslemetry # homeassistant.components.tessie -tesla-fleet-api==1.7.2 +tesla-fleet-api==1.7.6 # homeassistant.components.powerwall tesla-powerwall==0.5.3 diff --git a/tests/components/mikrotik/__init__.py b/tests/components/mikrotik/__init__.py index a0bd199ce510a8..d8c77191845489 100644 --- a/tests/components/mikrotik/__init__.py +++ b/tests/components/mikrotik/__init__.py @@ -38,10 +38,10 @@ def _build_command_responses( mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.IDENTITY]: [ {"name": "Mikrotik"} ], - mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.INFO]: [ + mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.ROUTERBOARD]: [ { "model": TEST_MODEL, - "current-firmware": TEST_FIRMWARE, + "installed-version": TEST_FIRMWARE, "serial-number": TEST_SERIAL_NUMBER, } ], @@ -56,7 +56,7 @@ def _build_command_responses( mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.WIFIWAVE2]: wifiwave2_data, mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.ARP]: ARP_DATA, mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.HEALTH]: health_data, - mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.SYSTEM]: system_data, + mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.RESOURCE]: system_data, }