use of groups 2.0
This commit is contained in:
@@ -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"]
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user