diff --git a/custom_components/mikrotik_router/binary_sensor.py b/custom_components/mikrotik_router/binary_sensor.py index 5937a0d..18562b3 100644 --- a/custom_components/mikrotik_router/binary_sensor.py +++ b/custom_components/mikrotik_router/binary_sensor.py @@ -37,14 +37,14 @@ SENSOR_TYPES = { # --------------------------- async def async_setup_entry(hass, config_entry, async_add_entities): """Set up device tracker for Mikrotik Router component.""" - name = config_entry.data[CONF_NAME] + inst = config_entry.data[CONF_NAME] mikrotik_controller = hass.data[DOMAIN][DATA_CLIENT][config_entry.entry_id] sensors = {} @callback def update_controller(): """Update the values of the controller.""" - update_items(name, mikrotik_controller, async_add_entities, sensors) + update_items(inst, mikrotik_controller, async_add_entities, sensors) mikrotik_controller.listeners.append( async_dispatcher_connect(hass, mikrotik_controller.signal_update, update_controller) @@ -58,18 +58,18 @@ async def async_setup_entry(hass, config_entry, async_add_entities): # update_items # --------------------------- @callback -def update_items(name, mikrotik_controller, async_add_entities, sensors): +def update_items(inst, mikrotik_controller, async_add_entities, sensors): """Update sensor state from the controller.""" new_sensors = [] for sensor in SENSOR_TYPES: - item_id = name + "-" + sensor + item_id = "{}-{}".format(inst, sensor) if item_id in sensors: if sensors[item_id].enabled: sensors[item_id].async_schedule_update_ha_state() continue - sensors[item_id] = MikrotikControllerBinarySensor(mikrotik_controller=mikrotik_controller, name=name, kind=sensor) + sensors[item_id] = MikrotikControllerBinarySensor(mikrotik_controller=mikrotik_controller, inst=inst, sensor=sensor) new_sensors.append(sensors[item_id]) if new_sensors: @@ -81,12 +81,14 @@ def update_items(name, mikrotik_controller, async_add_entities, sensors): class MikrotikControllerBinarySensor(BinarySensorDevice): """Define an Mikrotik Controller Binary Sensor.""" - def __init__(self, mikrotik_controller, name, kind, uid=''): + def __init__(self, mikrotik_controller, inst, sensor): """Initialize.""" - self.mikrotik_controller = mikrotik_controller - self._name = name - self.kind = kind - self.uid = uid + self._inst = inst + self._sensor = sensor + self._ctrl = mikrotik_controller + self._data = mikrotik_controller.data[SENSOR_TYPES[sensor][ATTR_PATH]] + self._type = SENSOR_TYPES[sensor] + self._attr = SENSOR_TYPES[sensor][ATTR_ATTR] self._device_class = None self._state = None @@ -97,9 +99,7 @@ class MikrotikControllerBinarySensor(BinarySensorDevice): @property def name(self): """Return the name.""" - if self.uid: - return f"{self._name} {self.uid} {SENSOR_TYPES[self.kind][ATTR_LABEL]}" - return f"{self._name} {SENSOR_TYPES[self.kind][ATTR_LABEL]}" + return "{} {}".format(self._inst, self._type[ATTR_LABEL]) @property def device_state_attributes(self): @@ -109,41 +109,38 @@ class MikrotikControllerBinarySensor(BinarySensorDevice): @property def unique_id(self): """Return a unique_id for this entity.""" - if self.uid: - return f"{self._name.lower()}-{self.kind.lower()}-{self.uid.lower()}" - return f"{self._name.lower()}-{self.kind.lower()}" + return "{}-{}".format(self._inst.lower(), self._sensor.lower()) @property def available(self): """Return True if entity is available.""" - return bool(self.mikrotik_controller.data) + return bool(self._ctrl.data) @property def device_info(self): """Return a port description for device registry.""" info = { - "identifiers": {(DOMAIN, "serial-number", self.mikrotik_controller.data['routerboard']['serial-number'], "switch", "PORT")}, - "manufacturer": self.mikrotik_controller.data['resource']['platform'], - "model": self.mikrotik_controller.data['resource']['board-name'], - "name": SENSOR_TYPES[self.kind][ATTR_GROUP], + "identifiers": {(DOMAIN, "serial-number", self._ctrl.data['routerboard']['serial-number'], "switch", "PORT")}, + "manufacturer": self._ctrl.data['resource']['platform'], + "model": self._ctrl.data['resource']['board-name'], + "name": self._type[ATTR_GROUP], } return info async def async_update(self): """Synchronize state with controller.""" - # await self.mikrotik_controller.async_update() return async def async_added_to_hass(self): """Port entity created.""" - _LOGGER.debug("New sensor %s (%s)", self._name, self.kind) + _LOGGER.debug("New sensor %s (%s)", self._inst, self._sensor) return @property def is_on(self): """Return true if sensor is on.""" val = False - if SENSOR_TYPES[self.kind][ATTR_PATH] in self.mikrotik_controller.data and SENSOR_TYPES[self.kind][ATTR_ATTR] in self.mikrotik_controller.data[SENSOR_TYPES[self.kind][ATTR_PATH]]: - val = self.mikrotik_controller.data[SENSOR_TYPES[self.kind][ATTR_PATH]][SENSOR_TYPES[self.kind][ATTR_ATTR]] + if self._attr in self._data: + val = self._data[self._attr] return val diff --git a/custom_components/mikrotik_router/device_tracker.py b/custom_components/mikrotik_router/device_tracker.py index cbaa61f..7bc7ddb 100644 --- a/custom_components/mikrotik_router/device_tracker.py +++ b/custom_components/mikrotik_router/device_tracker.py @@ -40,14 +40,14 @@ DEVICE_ATTRIBUTES = [ # --------------------------- async def async_setup_entry(hass, config_entry, async_add_entities): """Set up device tracker for Mikrotik Router component.""" - name = config_entry.data[CONF_NAME] + inst = config_entry.data[CONF_NAME] mikrotik_controller = hass.data[DOMAIN][DATA_CLIENT][config_entry.entry_id] tracked = {} @callback def update_controller(): """Update the values of the controller.""" - update_items(name, mikrotik_controller, async_add_entities, tracked) + update_items(inst, mikrotik_controller, async_add_entities, tracked) mikrotik_controller.listeners.append( async_dispatcher_connect(hass, mikrotik_controller.signal_update, update_controller) @@ -61,19 +61,19 @@ async def async_setup_entry(hass, config_entry, async_add_entities): # update_items # --------------------------- @callback -def update_items(name, mikrotik_controller, async_add_entities, tracked): +def update_items(inst, mikrotik_controller, async_add_entities, tracked): """Update tracked device state from the controller.""" new_tracked = [] for uid in mikrotik_controller.data['interface']: if mikrotik_controller.data['interface'][uid]['type'] == "ether": - item_id = name + "-" + mikrotik_controller.data['interface'][uid]['default-name'] + item_id = "{}-{}".format(inst, mikrotik_controller.data['interface'][uid]['default-name']) if item_id in tracked: if tracked[item_id].enabled: tracked[item_id].async_schedule_update_ha_state() continue - tracked[item_id] = MikrotikControllerPortDeviceTracker(name, uid, mikrotik_controller) + tracked[item_id] = MikrotikControllerPortDeviceTracker(inst, uid, mikrotik_controller) new_tracked.append(tracked[item_id]) if new_tracked: @@ -88,11 +88,11 @@ def update_items(name, mikrotik_controller, async_add_entities, tracked): class MikrotikControllerPortDeviceTracker(ScannerEntity): """Representation of a network port.""" - def __init__(self, name, uid, mikrotik_controller): + def __init__(self, inst, uid, mikrotik_controller): """Set up tracked port.""" - self._name = name - self._uid = uid - self.mikrotik_controller = mikrotik_controller + self._inst = inst + self._ctrl = mikrotik_controller + self._data = mikrotik_controller.data['interface'][uid] self._attrs = { ATTR_ATTRIBUTION: ATTRIBUTION, @@ -105,18 +105,17 @@ class MikrotikControllerPortDeviceTracker(ScannerEntity): async def async_added_to_hass(self): """Port entity created.""" - _LOGGER.debug("New port tracker %s (%s)", self._name, self.mikrotik_controller.data['interface'][self._uid]['port-mac-address']) + _LOGGER.debug("New port tracker %s (%s)", self._inst, self._data['port-mac-address']) return async def async_update(self): """Synchronize state with controller.""" - # await self.mikrotik_controller.async_update() return @property def is_connected(self): """Return true if the port is connected to the network.""" - return self.mikrotik_controller.data['interface'][self._uid]['running'] + return self._data['running'] @property def source_type(self): @@ -124,29 +123,29 @@ class MikrotikControllerPortDeviceTracker(ScannerEntity): return SOURCE_TYPE_ROUTER @property - def name(self) -> str: + def name(self): """Return the name of the port.""" - return f"{self._name} {self.mikrotik_controller.data['interface'][self._uid]['default-name']}" + return "{} {}".format(self._inst, self._data['default-name']) @property - def unique_id(self) -> str: + def unique_id(self): """Return a unique identifier for this port.""" - return f"{self._name.lower()}-{self.mikrotik_controller.data['interface'][self._uid]['port-mac-address']}" + return "{}-{}".format(self._inst.lower(), self._data['port-mac-address']) @property - def available(self) -> bool: + def available(self): """Return if controller is available.""" - return self.mikrotik_controller.connected() + return self._ctrl.connected() @property def icon(self): """Return the icon.""" - if self.mikrotik_controller.data['interface'][self._uid]['running']: + if self._data['running']: icon = 'mdi:lan-connect' else: icon = 'mdi:lan-pending' - if not self.mikrotik_controller.data['interface'][self._uid]['enabled']: + if not self._data['enabled']: icon = 'mdi:lan-disconnect' return icon @@ -155,10 +154,10 @@ class MikrotikControllerPortDeviceTracker(ScannerEntity): def device_info(self): """Return a port description for device registry.""" info = { - "connections": {(CONNECTION_NETWORK_MAC, self.mikrotik_controller.data['interface'][self._uid]['port-mac-address'])}, - "manufacturer": self.mikrotik_controller.data['resource']['platform'], - "model": self.mikrotik_controller.data['resource']['board-name'], - "name": self.mikrotik_controller.data['interface'][self._uid]['default-name'], + "connections": {(CONNECTION_NETWORK_MAC, self._data['port-mac-address'])}, + "manufacturer": self._ctrl.data['resource']['platform'], + "model": self._ctrl.data['resource']['board-name'], + "name": self._data['default-name'], } return info @@ -168,7 +167,7 @@ class MikrotikControllerPortDeviceTracker(ScannerEntity): attributes = self._attrs for variable in DEVICE_ATTRIBUTES: - if variable in self.mikrotik_controller.data['interface'][self._uid]: - attributes[variable] = self.mikrotik_controller.data['interface'][self._uid][variable] + if variable in self._data: + attributes[variable] = self._data[variable] return attributes diff --git a/custom_components/mikrotik_router/mikrotik_controller.py b/custom_components/mikrotik_router/mikrotik_controller.py index b26449b..75cdea7 100644 --- a/custom_components/mikrotik_router/mikrotik_controller.py +++ b/custom_components/mikrotik_router/mikrotik_controller.py @@ -4,7 +4,6 @@ from datetime import timedelta import logging from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.helpers.event import async_track_time_interval -# from homeassistant.util import Throttle from .const import ( DOMAIN, @@ -17,7 +16,6 @@ from .const import ( from .mikrotikapi import MikrotikAPI _LOGGER = logging.getLogger(__name__) -# DEFAULT_SCAN_INTERVAL = timedelta(seconds=DEFAULT_SCAN_INTERVAL) # --------------------------- @@ -61,14 +59,14 @@ class MikrotikControllerData(): self.hass = hass self.config_entry = config_entry - self.data = {} - self.data['routerboard'] = {} - self.data['resource'] = {} - self.data['interface'] = {} - self.data['arp'] = {} - self.data['nat'] = {} - self.data['fw-update'] = {} - self.data['script'] = {} + self.data = {'routerboard': {}, + 'resource': {}, + 'interface': {}, + 'arp': {}, + 'nat': {}, + 'fw-update': {}, + 'script': {} + } self.listeners = [] @@ -118,7 +116,7 @@ class MikrotikControllerData(): @property def signal_update(self): """Event to signal new data.""" - return f"{DOMAIN}-update-{self.name}" + return "{}-update-{}".format(DOMAIN, self.name) # --------------------------- # connected @@ -150,7 +148,6 @@ class MikrotikControllerData(): # --------------------------- # async_update # --------------------------- - # @Throttle(DEFAULT_SCAN_INTERVAL) async def async_update(self): """Update Mikrotik data""" diff --git a/custom_components/mikrotik_router/sensor.py b/custom_components/mikrotik_router/sensor.py index 70ca08a..fd69dcb 100644 --- a/custom_components/mikrotik_router/sensor.py +++ b/custom_components/mikrotik_router/sensor.py @@ -61,14 +61,14 @@ SENSOR_TYPES = { # --------------------------- async def async_setup_entry(hass, config_entry, async_add_entities): """Set up device tracker for Mikrotik Router component.""" - name = config_entry.data[CONF_NAME] + inst = config_entry.data[CONF_NAME] mikrotik_controller = hass.data[DOMAIN][DATA_CLIENT][config_entry.entry_id] sensors = {} @callback def update_controller(): """Update the values of the controller.""" - update_items(name, mikrotik_controller, async_add_entities, sensors) + update_items(inst, mikrotik_controller, async_add_entities, sensors) mikrotik_controller.listeners.append( async_dispatcher_connect(hass, mikrotik_controller.signal_update, update_controller) @@ -82,18 +82,18 @@ async def async_setup_entry(hass, config_entry, async_add_entities): # update_items # --------------------------- @callback -def update_items(name, mikrotik_controller, async_add_entities, sensors): +def update_items(inst, mikrotik_controller, async_add_entities, sensors): """Update sensor state from the controller.""" new_sensors = [] for sensor in SENSOR_TYPES: - item_id = name + "-" + sensor + item_id = "{}-{}".format(inst, sensor) if item_id in sensors: if sensors[item_id].enabled: sensors[item_id].async_schedule_update_ha_state() continue - sensors[item_id] = MikrotikControllerSensor(mikrotik_controller=mikrotik_controller, name=name, kind=sensor) + sensors[item_id] = MikrotikControllerSensor(mikrotik_controller=mikrotik_controller, inst=inst, sensor=sensor) new_sensors.append(sensors[item_id]) if new_sensors: @@ -108,12 +108,14 @@ def update_items(name, mikrotik_controller, async_add_entities, sensors): class MikrotikControllerSensor(Entity): """Define an Mikrotik Controller sensor.""" - def __init__(self, mikrotik_controller, name, kind, uid=''): + def __init__(self, mikrotik_controller, inst, sensor): """Initialize.""" - self.mikrotik_controller = mikrotik_controller - self._name = name - self.kind = kind - self.uid = uid + self._inst = inst + self._sensor = sensor + self._ctrl = mikrotik_controller + self._data = mikrotik_controller.data[SENSOR_TYPES[sensor][ATTR_PATH]] + self._type = SENSOR_TYPES[sensor] + self._attr = SENSOR_TYPES[sensor][ATTR_ATTR] self._device_class = None self._state = None @@ -124,16 +126,14 @@ class MikrotikControllerSensor(Entity): @property def name(self): """Return the name.""" - if self.uid: - return f"{self._name} {self.uid} {SENSOR_TYPES[self.kind][ATTR_LABEL]}" - return f"{self._name} {SENSOR_TYPES[self.kind][ATTR_LABEL]}" + return "{} {}".format(self._inst, self._type[ATTR_LABEL]) @property def state(self): """Return the state.""" val = "unknown" - if SENSOR_TYPES[self.kind][ATTR_PATH] in self.mikrotik_controller.data and SENSOR_TYPES[self.kind][ATTR_ATTR] in self.mikrotik_controller.data[SENSOR_TYPES[self.kind][ATTR_PATH]]: - val = self.mikrotik_controller.data[SENSOR_TYPES[self.kind][ATTR_PATH]][SENSOR_TYPES[self.kind][ATTR_ATTR]] + if self._attr in self._data: + val = self._data[self._attr] return val @@ -145,48 +145,45 @@ class MikrotikControllerSensor(Entity): @property def icon(self): """Return the icon.""" - self._icon = SENSOR_TYPES[self.kind][ATTR_ICON] + self._icon = self._type[ATTR_ICON] return self._icon @property def device_class(self): """Return the device_class.""" - return SENSOR_TYPES[self.kind][ATTR_DEVICE_CLASS] + return self._type[ATTR_DEVICE_CLASS] @property def unique_id(self): """Return a unique_id for this entity.""" - if self.uid: - return f"{self._name.lower()}-{self.kind.lower()}-{self.uid.lower()}" - return f"{self._name.lower()}-{self.kind.lower()}" + return "{}-{}".format(self._inst.lower(), self._sensor.lower()) @property def unit_of_measurement(self): """Return the unit the value is expressed in.""" - return SENSOR_TYPES[self.kind][ATTR_UNIT] + return self._type[ATTR_UNIT] @property def available(self): """Return True if entity is available.""" - return bool(self.mikrotik_controller.data) + return bool(self._ctrl.data) @property def device_info(self): """Return a port description for device registry.""" info = { - "identifiers": {(DOMAIN, "serial-number", self.mikrotik_controller.data['routerboard']['serial-number'], "switch", "PORT")}, - "manufacturer": self.mikrotik_controller.data['resource']['platform'], - "model": self.mikrotik_controller.data['resource']['board-name'], - "name": SENSOR_TYPES[self.kind][ATTR_GROUP], + "identifiers": {(DOMAIN, "serial-number", self._ctrl.data['routerboard']['serial-number'], "switch", "PORT")}, + "manufacturer": self._ctrl.data['resource']['platform'], + "model": self._ctrl.data['resource']['board-name'], + "name": self._type[ATTR_GROUP], } return info async def async_update(self): """Synchronize state with controller.""" - # await self.mikrotik_controller.async_update() return async def async_added_to_hass(self): """Port entity created.""" - _LOGGER.debug("New sensor %s (%s)", self._name, self.kind) + _LOGGER.debug("New sensor %s (%s)", self._inst, self._sensor) return diff --git a/custom_components/mikrotik_router/switch.py b/custom_components/mikrotik_router/switch.py index 39a0f86..20b7fc3 100644 --- a/custom_components/mikrotik_router/switch.py +++ b/custom_components/mikrotik_router/switch.py @@ -61,14 +61,14 @@ DEVICE_ATTRIBUTES_SCRIPT = [ # --------------------------- async def async_setup_entry(hass, config_entry, async_add_entities): """Set up switches for Mikrotik Router component.""" - name = config_entry.data[CONF_NAME] + inst = config_entry.data[CONF_NAME] mikrotik_controller = hass.data[DOMAIN][DATA_CLIENT][config_entry.entry_id] switches = {} @callback def update_controller(): """Update the values of the controller.""" - update_items(name, mikrotik_controller, async_add_entities, switches) + update_items(inst, mikrotik_controller, async_add_entities, switches) mikrotik_controller.listeners.append( async_dispatcher_connect(hass, mikrotik_controller.signal_update, update_controller) @@ -82,27 +82,27 @@ async def async_setup_entry(hass, config_entry, async_add_entities): # update_items # --------------------------- @callback -def update_items(name, mikrotik_controller, async_add_entities, switches): +def update_items(inst, mikrotik_controller, async_add_entities, switches): """Update device switch state from the controller.""" new_switches = [] # Add switches for sid in SWITCH_LIST: for uid in mikrotik_controller.data[sid]: - item_id = name + "-" + sid + "-" + mikrotik_controller.data[sid][uid]['name'] + item_id = "{}-{}-{}".format(inst, sid, mikrotik_controller.data[sid][uid]['name']) if item_id in switches: if switches[item_id].enabled: switches[item_id].async_schedule_update_ha_state() continue if sid == 'interface': - switches[item_id] = MikrotikControllerPortSwitch(name, uid, mikrotik_controller) + switches[item_id] = MikrotikControllerPortSwitch(inst, uid, mikrotik_controller) if sid == 'nat': - switches[item_id] = MikrotikControllerNATSwitch(name, uid, mikrotik_controller) + switches[item_id] = MikrotikControllerNATSwitch(inst, uid, mikrotik_controller) if sid == 'script': - switches[item_id] = MikrotikControllerScriptSwitch(name, uid, mikrotik_controller) + switches[item_id] = MikrotikControllerScriptSwitch(inst, uid, mikrotik_controller) new_switches.append(switches[item_id]) @@ -116,28 +116,27 @@ def update_items(name, mikrotik_controller, async_add_entities, switches): # MikrotikControllerSwitch # --------------------------- class MikrotikControllerSwitch(SwitchDevice, RestoreEntity): - """Representation of a network port switch.""" + """Representation of a switch.""" - def __init__(self, name, uid, mikrotik_controller): + def __init__(self, inst, uid, mikrotik_controller): """Set up switch.""" - self._name = name + self._inst = inst self._uid = uid - self.mikrotik_controller = mikrotik_controller + self._ctrl = mikrotik_controller async def async_added_to_hass(self): """Switch entity created.""" - _LOGGER.debug("New switch %s (%s)", self._name, self._uid) + _LOGGER.debug("New switch %s (%s)", self._inst, self._uid) return async def async_update(self): """Synchronize state with controller.""" - # await self.mikrotik_controller.async_update() return @property def available(self) -> bool: """Return if controller is available.""" - return self.mikrotik_controller.connected() + return self._ctrl.connected() # --------------------------- @@ -146,38 +145,39 @@ class MikrotikControllerSwitch(SwitchDevice, RestoreEntity): class MikrotikControllerPortSwitch(MikrotikControllerSwitch): """Representation of a network port switch.""" - def __init__(self, name, uid, mikrotik_controller): + def __init__(self, inst, uid, mikrotik_controller): """Set up tracked port.""" - super().__init__(name, uid, mikrotik_controller) + super().__init__(inst, uid, mikrotik_controller) + self._data = mikrotik_controller.data['interface'][self._uid] self._attrs = { ATTR_ATTRIBUTION: ATTRIBUTION, } async def async_added_to_hass(self): """Port entity created.""" - _LOGGER.debug("New port switch %s (%s)", self._name, self.mikrotik_controller.data['interface'][self._uid]['port-mac-address']) + _LOGGER.debug("New port switch %s (%s)", self._inst, self._data['port-mac-address']) return @property def name(self) -> str: """Return the name of the port.""" - return f"{self._name} port {self.mikrotik_controller.data['interface'][self._uid]['default-name']}" + return "{} port {}".format(self._inst, self._data['default-name']) @property def unique_id(self) -> str: """Return a unique identifier for this port.""" - return f"{self._name.lower()}-enable_switch-{self.mikrotik_controller.data['interface'][self._uid]['port-mac-address']}" + return "{}-enable_switch-{}".format(self._inst.lower(), self._data['port-mac-address']) @property def icon(self): """Return the icon.""" - if self.mikrotik_controller.data['interface'][self._uid]['running']: + if self._data['running']: icon = 'mdi:lan-connect' else: icon = 'mdi:lan-pending' - if not self.mikrotik_controller.data['interface'][self._uid]['enabled']: + if not self._data['enabled']: icon = 'mdi:lan-disconnect' return icon @@ -186,10 +186,10 @@ class MikrotikControllerPortSwitch(MikrotikControllerSwitch): def device_info(self): """Return a port description for device registry.""" info = { - "connections": {(CONNECTION_NETWORK_MAC, self.mikrotik_controller.data['interface'][self._uid]['port-mac-address'])}, - "manufacturer": self.mikrotik_controller.data['resource']['platform'], - "model": self.mikrotik_controller.data['resource']['board-name'], - "name": self.mikrotik_controller.data['interface'][self._uid]['default-name'], + "connections": {(CONNECTION_NETWORK_MAC, self._data['port-mac-address'])}, + "manufacturer": self._ctrl.data['resource']['platform'], + "model": self._ctrl.data['resource']['board-name'], + "name": self._data['default-name'], } return info @@ -199,8 +199,8 @@ class MikrotikControllerPortSwitch(MikrotikControllerSwitch): attributes = self._attrs for variable in DEVICE_ATTRIBUTES_IFACE: - if variable in self.mikrotik_controller.data['interface'][self._uid]: - attributes[variable] = self.mikrotik_controller.data['interface'][self._uid][variable] + if variable in self._data: + attributes[variable] = self._data[variable] return attributes @@ -208,28 +208,28 @@ class MikrotikControllerPortSwitch(MikrotikControllerSwitch): """Turn on the switch.""" path = '/interface' param = 'default-name' - value = self.mikrotik_controller.data['interface'][self._uid][param] + value = self._data[param] mod_param = 'disabled' mod_value = False - self.mikrotik_controller.set_value(path, param, value, mod_param, mod_value) - await self.mikrotik_controller.force_update() + self._ctrl.set_value(path, param, value, mod_param, mod_value) + await self._ctrl.force_update() return async def async_turn_off(self): """Turn on the switch.""" path = '/interface' param = 'default-name' - value = self.mikrotik_controller.data['interface'][self._uid][param] + value = self._data[param] mod_param = 'disabled' mod_value = True - self.mikrotik_controller.set_value(path, param, value, mod_param, mod_value) - await self.mikrotik_controller.async_update() + self._ctrl.set_value(path, param, value, mod_param, mod_value) + await self._ctrl.async_update() return @property def is_on(self): """Return true if device is on.""" - return self.mikrotik_controller.data['interface'][self._uid]['enabled'] + return self._data['enabled'] # --------------------------- @@ -238,33 +238,34 @@ class MikrotikControllerPortSwitch(MikrotikControllerSwitch): class MikrotikControllerNATSwitch(MikrotikControllerSwitch): """Representation of a NAT switch.""" - def __init__(self, name, uid, mikrotik_controller): + def __init__(self, inst, uid, mikrotik_controller): """Set up NAT switch.""" - super().__init__(name, uid, mikrotik_controller) + super().__init__(inst, uid, mikrotik_controller) + self._data = mikrotik_controller.data['nat'][self._uid] self._attrs = { ATTR_ATTRIBUTION: ATTRIBUTION, } async def async_added_to_hass(self): """NAT switch entity created.""" - _LOGGER.debug("New port switch %s (%s)", self._name, self.mikrotik_controller.data['nat'][self._uid]['name']) + _LOGGER.debug("New port switch %s (%s)", self._inst, self._data['name']) return @property def name(self) -> str: """Return the name of the NAT switch.""" - return f"{self._name} NAT {self.mikrotik_controller.data['nat'][self._uid]['name']}" + return "{} NAT {}".format(self._inst, self._data['name']) @property def unique_id(self) -> str: """Return a unique identifier for this NAT switch.""" - return f"{self._name.lower()}-nat_switch-{self.mikrotik_controller.data['nat'][self._uid]['name']}" + return "{}-nat_switch-{}".format(self._inst.lower(), self._data['name']) @property def icon(self): """Return the icon.""" - if not self.mikrotik_controller.data['nat'][self._uid]['enabled']: + if not self._data['enabled']: icon = 'mdi:network-off-outline' else: icon = 'mdi:network-outline' @@ -275,9 +276,9 @@ class MikrotikControllerNATSwitch(MikrotikControllerSwitch): def device_info(self): """Return a NAT switch description for device registry.""" info = { - "identifiers": {(DOMAIN, "serial-number", self.mikrotik_controller.data['routerboard']['serial-number'], "switch", "NAT")}, - "manufacturer": self.mikrotik_controller.data['resource']['platform'], - "model": self.mikrotik_controller.data['resource']['board-name'], + "identifiers": {(DOMAIN, "serial-number", self._ctrl.data['routerboard']['serial-number'], "switch", "NAT")}, + "manufacturer": self._ctrl.data['resource']['platform'], + "model": self._ctrl.data['resource']['board-name'], "name": "NAT", } return info @@ -288,8 +289,8 @@ class MikrotikControllerNATSwitch(MikrotikControllerSwitch): attributes = self._attrs for variable in DEVICE_ATTRIBUTES_NAT: - if variable in self.mikrotik_controller.data['nat'][self._uid]: - attributes[variable] = self.mikrotik_controller.data['nat'][self._uid][variable] + if variable in self._data: + attributes[variable] = self._data[variable] return attributes @@ -300,8 +301,8 @@ class MikrotikControllerNATSwitch(MikrotikControllerSwitch): value = self._uid mod_param = 'disabled' mod_value = False - self.mikrotik_controller.set_value(path, param, value, mod_param, mod_value) - await self.mikrotik_controller.force_update() + self._ctrl.set_value(path, param, value, mod_param, mod_value) + await self._ctrl.force_update() return async def async_turn_off(self): @@ -311,14 +312,14 @@ class MikrotikControllerNATSwitch(MikrotikControllerSwitch): value = self._uid mod_param = 'disabled' mod_value = True - self.mikrotik_controller.set_value(path, param, value, mod_param, mod_value) - await self.mikrotik_controller.async_update() + self._ctrl.set_value(path, param, value, mod_param, mod_value) + await self._ctrl.async_update() return @property def is_on(self): """Return true if device is on.""" - return self.mikrotik_controller.data['nat'][self._uid]['enabled'] + return self._data['enabled'] # --------------------------- @@ -327,28 +328,29 @@ class MikrotikControllerNATSwitch(MikrotikControllerSwitch): class MikrotikControllerScriptSwitch(MikrotikControllerSwitch): """Representation of a script switch.""" - def __init__(self, name, uid, mikrotik_controller): + def __init__(self, inst, uid, mikrotik_controller): """Set up script switch.""" - super().__init__(name, uid, mikrotik_controller) + super().__init__(inst, uid, mikrotik_controller) + self._data = mikrotik_controller.data['script'][self._uid] self._attrs = { ATTR_ATTRIBUTION: ATTRIBUTION, } async def async_added_to_hass(self): """Script switch entity created.""" - _LOGGER.debug("New script switch %s (%s)", self._name, self.mikrotik_controller.data['script'][self._uid]['name']) + _LOGGER.debug("New script switch %s (%s)", self._inst, self._data['name']) return @property def name(self) -> str: """Return the name of the script switch.""" - return f"{self._name} script {self.mikrotik_controller.data['script'][self._uid]['name']}" + return "{} script {}".format(self._inst, self._data['name']) @property def unique_id(self) -> str: """Return a unique identifier for this script switch.""" - return f"{self._name.lower()}-script_switch-{self.mikrotik_controller.data['script'][self._uid]['name']}" + return "{}-script_switch-{}".format(self._inst.lower(), self._data['name']) @property def icon(self): @@ -359,9 +361,9 @@ class MikrotikControllerScriptSwitch(MikrotikControllerSwitch): def device_info(self): """Return a script switch description for device registry.""" info = { - "identifiers": {(DOMAIN, "serial-number", self.mikrotik_controller.data['routerboard']['serial-number'], "switch", "Scripts")}, - "manufacturer": self.mikrotik_controller.data['resource']['platform'], - "model": self.mikrotik_controller.data['resource']['board-name'], + "identifiers": {(DOMAIN, "serial-number", self._ctrl.data['routerboard']['serial-number'], "switch", "Scripts")}, + "manufacturer": self._ctrl.data['resource']['platform'], + "model": self._ctrl.data['resource']['board-name'], "name": "Scripts", } return info @@ -372,15 +374,15 @@ class MikrotikControllerScriptSwitch(MikrotikControllerSwitch): attributes = self._attrs for variable in DEVICE_ATTRIBUTES_SCRIPT: - if variable in self.mikrotik_controller.data['script'][self._uid]: - attributes[variable] = self.mikrotik_controller.data['script'][self._uid][variable] + if variable in self._data: + attributes[variable] = self._data[variable] return attributes async def async_turn_on(self): """Turn on the switch.""" - self.mikrotik_controller.run_script(self.mikrotik_controller.data['script'][self._uid]['name']) - await self.mikrotik_controller.force_update() + self._ctrl.run_script(self._data['name']) + await self._ctrl.force_update() return async def async_turn_off(self):