diff --git a/appdaemon/settings/apps/groups/groups.py b/appdaemon/settings/apps/groups/groups.py new file mode 100644 index 0000000..7798964 --- /dev/null +++ b/appdaemon/settings/apps/groups/groups.py @@ -0,0 +1,76 @@ +import appdaemon.plugins.hass.hassapi as hass +import re +# +# This app will create groups in runtime by user defined params +# Based on Rene Tode groups plugin ( hass@reot.org ) +# +# Args: +# device_type: sensor # or any devicetype +# entity_part: "any_part" +# entities: # list of entities +# - sensor.any_entity +# hidden: False # or True +# view: True # or False +# assumed_state: False # or True +# friendly_name: Your Friendly Name +# nested_view: True # or False +# +# Release Notes +# +# Version 1.0: +# Initial Version + +class Groups(hass.Hass): + def initialize(self): + entitylist = [] + + expand_group = self.args.get("expand_group", False) + device_type = self.args.get("device_type", None) + all_entities = self.get_state(device_type) + + if "entities" in self.args: + for entity in self.args["entities"]: + found = False + for real_entity in all_entities: + if real_entity.lower() == entity.lower(): + self.append_entity(entitylist, entity, expand_group) + found = True + if not found: + for real_entity in all_entities: + if re.match(entity.lower(), real_entity.lower()): + self.append_entity(entitylist, real_entity, expand_group) + + if 'entity_part' in self.args: + for entity in all_entities: + if self.args["entity_part"] in entity and entity.lower() not in entitylist: + self.append_entity(entitylist, entity, expand_group) + + hidden = self.args.get("hidden", False) + view = self.args.get("view", False) + assumed_state = self.args.get("assumed_state",False) + friendly_name = self.args.get("friendly_name","") + name = "group." + self.name + + if self.args.get('orderby', None) == 'friendly_name': + entitylist.sort(key=self.sortByFriendlyName) + + self.log("Creating group {} with entities: {}".format(name, entitylist)) + self.set_state(name,state="on",attributes={"view": view,"hidden": hidden,"assumed_state": assumed_state,"friendly_name": friendly_name,"entity_id": entitylist}) + + def sortByFriendlyName(self, entity): + return self.get_state(entity, 'friendly_name') + + def append_entity(self, entitylist, entity, expand_group): + entity = entity.lower() + if (('group.' not in entity and expand_group) or not expand_group) and entity not in entitylist: + entitylist.append(entity) + return + if expand_group and 'group.' in entity: + group_entities = self.get_group_entities(entity) + for group_entity in group_entities: + if group_entity not in entitylist: + entitylist.append(group_entity) + + def get_group_entities(self, group): + group = self.get_state(group, attribute = "all") + return group["attributes"]["entity_id"] \ No newline at end of file diff --git a/appdaemon/settings/apps/groups/groups.yaml b/appdaemon/settings/apps/groups/groups.yaml new file mode 100644 index 0000000..6063251 --- /dev/null +++ b/appdaemon/settings/apps/groups/groups.yaml @@ -0,0 +1,175 @@ +uptime: + module: groups + class: Groups + friendly_name: Аптайм + device_type: sensor + entity_part: "uptime_" + +control_tags: + module: groups + class: Groups + device_type: input_boolean + entity_part: "tag_" + +sensor_tags: + module: groups + class: Groups + device_type: sensor + entity_part: "tag_" + +light_control: + module: groups + class: Groups + device_type: input_boolean + entity_part: "_light_control" + +report_control: + module: groups + class: Groups + device_type: input_boolean + entity_part: "_report" + +automation_control: + module: groups + class: Groups + device_type: input_boolean + entities: + - input_boolean.presence_control + - input_boolean.water_control + - input_boolean.water_leak_control + - input_boolean.mainroom_climate_control + - switch.domofon_mode + +door_sensors: + module: groups + class: Groups + device_type: binary_sensor + entity_part: "door_window_sensor_" + orderby: friendly_name + +smoke_sensors: + module: groups + class: Groups + device_type: binary_sensor + entity_part: "smoke_sensor_" + +water_leak_sensors: + module: groups + class: Groups + device_type: binary_sensor + entity_part: "water_leak_sensor_" + orderby: friendly_name + +motion_sensors: + module: groups + class: Groups + device_type: binary_sensor + entity_part: "motion_sensor_" + orderby: friendly_name + +presence_sensors: + module: groups + class: Groups + device_type: sensor + entities: + - sensor.presence_ + - sensor.toilet_presence + +epd_water_counters: + module: groups + class: Groups + device_type: sensor + entities: + - sensor.epd_balance + - sensor.counter_hot + - sensor.counter_cold + - sensor.counter_mosru_hot + - sensor.counter_mosru_cold + +power_sensors: + module: groups + class: Groups + device_type: sensor + entities: + - sensor.power_mosenergosbyt_balance + - sensor.power_main_total + - sensor.power_mosenergosbyt_total + - sensor.power_total + - sensor.power_voltage + - sensor.power_current + - sensor.power_frequency + - sensor.power_active_power + - sensor.power_reactive_power + - sensor.power_power_factor + +home_entities: + module: groups + class: Groups + entities: + - alarm_control_panel.ha_alarm + - switch.water_valve + - vacuum.xiaomi_vacuum_cleaner + - switch.domofon_open + - switch.wifi_socket + +room_livingroom_entities: + module: groups + class: Groups + expand_group: True + entities: + - sensor.temperature_158d0001149b3c + - sensor.humidity_158d0001149b3c + - sensor.xiaomi_airpurifier_air_quality_pm25 + - group.mainroom_light + - light.salt_lamp + - cover.curtain_158d0002b0c46a + - switch.plug_158d0001104a0c + - switch.plug_158d00010dd98d + - fan.xiaomi_miio_device + - climate.living_room + +room_kitchen_entities: + module: groups + class: Groups + expand_group: True + entities: + - group.kitchen_light + - switch.plug_158d0001a68b18 + - switch.plug_158d0001a68c64 + - switch.plug_158d0001a4cfb4 + - switch.plug_158d00020f3a29 + - switch.plug_158d0002924779 + - switch.xiaomi_miio_switch + +room_bath_entities: + module: groups + class: Groups + entities: + - sensor.temperature_158d00012d9ad7 + - sensor.humidity_158d00012d9ad7 + - light.bath + - light.philips_led + - sensor.airfresher_remain + +room_hall_entities: + module: groups + class: Groups + entities: + - light.hall + +room_balcony_entities: + module: groups + class: Groups + expand_group: True + entities: + - group.balcony_light + - sensor.temperature_158d000117d37a + - sensor.humidity_158d000117d37a + - switch.plug_158d00026ea017 + +room_outside_entities: + module: groups + class: Groups + entities: + - sensor.temperature_158d000149c128 + - sensor.humidity_158d000149c128 diff --git a/hass/settings/mysensors1.pickle b/hass/settings/mysensors1.pickle deleted file mode 100644 index 48fc4f6..0000000 Binary files a/hass/settings/mysensors1.pickle and /dev/null differ diff --git a/hass/settings/ui-lovelace.yaml b/hass/settings/ui-lovelace.yaml index 01407a9..2e5c5f5 100644 --- a/hass/settings/ui-lovelace.yaml +++ b/hass/settings/ui-lovelace.yaml @@ -1,164 +1,107 @@ -# This file was automatically generated by lovelace_migrate.py -# https://github.com/dale3h/python-lovelace +#custom cards +resources: + - url: /community_plugin/group-card/group-card.js + type: module title: Home views: - title: "Статус" icon: mdi:home cards: - - type: entities - title: "Дом" - show_header_toggle: false - entities: - - alarm_control_panel.ha_alarm - - switch.water_valve - - vacuum.xiaomi_vacuum_cleaner - - switch.domofon_open - - switch.wifi_socket - - type: entities - title: "Гостиная" - show_header_toggle: false - entities: - - sensor.temperature_158d0001149b3c - - sensor.humidity_158d0001149b3c - - sensor.xiaomi_airpurifier_air_quality_pm25 - - light.yeelight_color1_34ce008fe328 - - light.yeelight_color1_286c071065c7 - - light.yeelight_mono1_34ce0087ff33 - - light.yeelight_mono1_f0b4290e5444 - - light.yeelight_mono1_f0b429a8f6df - - light.salt_lamp - - cover.curtain_158d0002b0c46a - - switch.plug_158d0001104a0c - - switch.plug_158d00010dd98d - - fan.xiaomi_miio_device - - climate.living_room - - type: entities - title: "Кухня" - show_header_toggle: false - entities: - - light.kitchen - - light.kitchen_mini_light - - switch.plug_158d0001a68b18 - - switch.plug_158d0001a68c64 - - switch.plug_158d0001a4cfb4 - - switch.plug_158d00020f3a29 - - switch.plug_158d0002924779 - - switch.xiaomi_miio_switch - - type: entities - title: "Ванная" - show_header_toggle: false - entities: - - sensor.temperature_158d00012d9ad7 - - sensor.humidity_158d00012d9ad7 - - light.bath - - light.philips_led - - sensor.airfresher_remain - - type: entities - title: "Прихожая" - show_header_toggle: false - entities: - - light.hall - - type: entities - title: "Балкон" - show_header_toggle: false - entities: - - light.yeelight_mono1_286c07f12bed - - light.yeelight_mono1_f0b429a8d936 - - sensor.temperature_158d000117d37a - - sensor.humidity_158d000117d37a - - switch.plug_158d00026ea017 - - type: entities - title: "Улица" - show_header_toggle: false - entities: - - sensor.temperature_158d000149c128 - - sensor.humidity_158d000149c128 + - type: custom:group-card + group: group.home_entities + card: + type: entities + title: "Дом" + show_header_toggle: false + - type: custom:group-card + group: group.room_livingroom_entities + card: + type: entities + title: "Гостиная" + show_header_toggle: false + - type: custom:group-card + group: group.room_kitchen_entities + card: + type: entities + title: "Кухня" + show_header_toggle: false + - type: custom:group-card + group: group.room_bath_entities + card: + type: entities + title: "Ванная" + show_header_toggle: false + - type: custom:group-card + group: group.room_hall_entities + card: + type: entities + title: "Прихожая" + show_header_toggle: false + - type: custom:group-card + group: group.room_balcony_entities + card: + type: entities + title: "Балкон" + show_header_toggle: false + - type: custom:group-card + group: group.room_outside_entities + card: + type: entities + title: "Улица" + show_header_toggle: false - title: "Датчики" icon: mdi:nfc cards: - - type: entities - title: "Движение" - show_header_toggle: false - entities: - - binary_sensor.motion_sensor_158d0000e7c7ad - - binary_sensor.motion_sensor_158d0002044548 - - binary_sensor.motion_sensor_158d0000fbc664 - - binary_sensor.motion_sensor_158d0001535c97 - - binary_sensor.motion_sensor_158d0000f9546b - - binary_sensor.motion_sensor_158d000165fed5 - - binary_sensor.motion_sensor_158d0001537e21 - - binary_sensor.motion_sensor_158d0000f6b2fa - - binary_sensor.motion_sensor_158d0001e50ce4 - - binary_sensor.motion_sensor_158d0001e80f0d - - type: entities - title: "Протечка" - show_header_toggle: false - entities: - - binary_sensor.water_leak_sensor_158d0001d594fa - - binary_sensor.water_leak_sensor_158d0001c34960 - - binary_sensor.water_leak_sensor_158d0002150c07 - - binary_sensor.water_leak_sensor_158d0002112b98 - - binary_sensor.water_leak_sensor_158d0002113158 - - binary_sensor.water_leak_sensor_158d00023a48f0 - - type: entities - title: "Датчики дыма" - show_header_toggle: false - entities: - - binary_sensor.smoke_sensor_158d00023115ad - - type: entities - title: "Двери" - show_header_toggle: false - entities: - - binary_sensor.door_window_sensor_158d0001130141 - - binary_sensor.door_window_sensor_158d000111a469 - - binary_sensor.door_window_sensor_158d00010f7e19 - - binary_sensor.door_window_sensor_158d0002254373 - - binary_sensor.door_window_sensor_158d0001b77b1b - - binary_sensor.door_window_sensor_158d0001c0e46d - - binary_sensor.door_window_sensor_158d0001e74660 - - binary_sensor.door_window_sensor_158d0001b711ec - - type: entities - title: "Счетчики воды" - show_header_toggle: false - entities: - - sensor.epd_balance - - sensor.counter_cold - - sensor.counter_hot - - sensor.counter_mosru_cold - - sensor.counter_mosru_hot - - type: entities - title: "Метки" - show_header_toggle: false - entities: - - sensor.tag_mamik_band - - sensor.tag_monster_nut - - sensor.tag_nut_blue - - sensor.tag_nut_white - - sensor.tag_nut_guest - - type: entities - title: "Пристутствие" - show_header_toggle: false - entities: - - sensor.presence_hall - - sensor.presence_kitchen - - sensor.presence_balcony - - sensor.toilet_presence - - type: entities - title: "Электропитание" - show_header_toggle: false - entities: - - sensor.power_mosenergosbyt_balance - - sensor.power_main_total - - sensor.power_mosenergosbyt_total - - sensor.power_total - - sensor.power_voltage - - sensor.power_current - - sensor.power_frequency - - sensor.power_active_power - - sensor.power_reactive_power - - sensor.power_power_factor + - type: custom:group-card + group: group.motion_sensors + card: + type: entities + title: "Движение" + show_header_toggle: false + - type: custom:group-card + group: group.water_leak_sensors + card: + type: entities + title: "Протечка" + show_header_toggle: false + - type: custom:group-card + group: group.smoke_sensors + card: + type: entities + title: "Датчики дыма" + show_header_toggle: false + - type: custom:group-card + group: group.door_sensors + card: + type: entities + title: "Двери" + show_header_toggle: false + - type: custom:group-card + group: group.epd_water_counters + card: + type: entities + title: "Счетчики воды" + show_header_toggle: false + - type: custom:group-card + group: group.sensor_tags + card: + type: entities + title: "Метки" + show_header_toggle: false + - type: custom:group-card + group: group.presence_sensors + card: + type: entities + title: "Пристутствие" + show_header_toggle: false + - type: custom:group-card + group: group.power_sensors + card: + type: entities + title: "Электропитание" + show_header_toggle: false - title: "Камеры" icon: mdi:cctv cards: @@ -172,15 +115,13 @@ views: icon: mdi:alarm cards: - type: entities - title: "Будильник (бу\ - дни)" + title: "Будильник (будни)" show_header_toggle: false entities: - input_boolean.alarmclock_weekdays - input_datetime.alarmclock_weekdays - type: entities - title: "Будильник (вы\ - ходные)" + title: "Будильник (выходные)" show_header_toggle: false entities: - input_boolean.alarmclock_weekend @@ -318,56 +259,37 @@ views: - title: "Настройки" icon: mdi:settings cards: - - type: entities - title: "Контроль све\ - та" - show_header_toggle: true - entities: - - input_boolean.mainroom_light_control - - input_boolean.hall_light_control - - input_boolean.bath_light_control - - input_boolean.kitchen_light_control - - input_boolean.balcony_light_control - - type: entities - title: "Настройки ав\ - томатики" - show_header_toggle: true - entities: - - input_boolean.presence_control - - input_boolean.water_control - - input_boolean.water_leak_control - - input_boolean.mainroom_climate_control - - switch.domofon_mode - - type: entities - title: "Настройки отчетов" - show_header_toggle: true - entities: - - input_boolean.security_sensors_report - - input_boolean.battery_report - - input_boolean.water_counters_report - - input_boolean.work_presence_report - - input_boolean.lock_report - - input_boolean.watchdog_report - - type: entities - title: "Метки" - show_header_toggle: true - entities: - - input_boolean.tag_mamik_band - - input_boolean.tag_monster_nut - - input_boolean.tag_nut_blue - - input_boolean.tag_nut_white - - input_boolean.tag_nut_guest - - type: entities - title: "Аптайм" - show_header_toggle: false - entities: - - sensor.uptime_airfresher - - sensor.uptime_bath - - sensor.uptime_domofon - - sensor.uptime_kitchen_led - - sensor.uptime_nest - - sensor.uptime_bathlight - - sensor.uptime_kitchen + - type: custom:group-card + group: group.light_control + card: + type: entities + title: "Контроль света" + show_header_toggle: false + - type: custom:group-card + group: group.automation_control + card: + type: entities + title: "Настройки автоматики" + show_header_toggle: true + - type: custom:group-card + group: group.report_control + card: + type: entities + title: "Настройки отчетов" + show_header_toggle: true + - type: custom:group-card + group: group.control_tags + card: + type: entities + title: "Метки" + show_header_toggle: true + - type: custom:group-card + group: group.uptime + card: + type: entities + title: "Аптайм" + show_header_toggle: false + - title: "Информация" icon: mdi:monitor-multiple cards: