From 31d0dcba083382972b07856c29f063c5c41613e1 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Nov 2019 14:14:44 +0300 Subject: [PATCH] use of groups 2.0 --- appdaemon/settings/apps/groups/groups.py | 76 +++++ appdaemon/settings/apps/groups/groups.yaml | 175 +++++++++++ hass/settings/mysensors1.pickle | Bin 485 -> 0 bytes hass/settings/ui-lovelace.yaml | 332 ++++++++------------- 4 files changed, 378 insertions(+), 205 deletions(-) create mode 100644 appdaemon/settings/apps/groups/groups.py create mode 100644 appdaemon/settings/apps/groups/groups.yaml delete mode 100644 hass/settings/mysensors1.pickle 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 48fc4f65799195ad18d28483c39182285358086a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 485 zcmbu5yH3ME5Jls>z?dWs6f{T#XrQqY9$x^RB?|Ze%a4)9!m-2dIw(aXD3PXP_&L6Y z@q>nzZFcAG%-(zUt^f6Hb?UX{3%^6|a-$*Fh04W3d0{Xib7*RZGsHekX0FMgix6XLQ_@lN)@J%mx5nA8eDnT-h#`> zx3Je>;84yxH8on~+*K5RNxKbVOXZT2fR0tVs`4>)B-A?0O3;GfA5r)AhIMUm+*+K7 z#mt}JDW2iE^o+=wS1l#l{uK9Ua-Yf<