Added groups to config generation

This commit is contained in:
Martin Bauer
2019-06-02 14:34:08 +02:00
parent 6d2a193fb4
commit 4f3c9abd0d
7 changed files with 252 additions and 46 deletions

View File

@@ -1,45 +1,48 @@
from util import DeviceInfo
from util import DeviceInfo, add_to_group
from ruamel.yaml import YAML
import knx_conf as knx
def create_config():
yaml = YAML()
def add_knx_devices(devices, groups):
lights = [
# Dimmers
DeviceInfo('Wohnzimmerlampe', 'Wohnzimmer Deckenlampe'),
DeviceInfo('EsszimmerlampeWest', 'Esszimmer Deckenlampe West'),
DeviceInfo('EsszimmerlampeMitte', 'Esszimmer Deckenlampe Mitte'),
DeviceInfo("EsszimmerWandlampe", 'Esszimmer Schrankleuchte'),
DeviceInfo("Küchenlampe", "Küche Deckenlampe"),
DeviceInfo("AussenleuchteUntenSO", "Aussen Terassenlicht"),
DeviceInfo("Gang", "Gang Licht"),
DeviceInfo("Bad", "Bad Licht"),
DeviceInfo("GangWindfang", "Gang Einganglicht"),
DeviceInfo("LichtWaschküche", "Waschküche Licht"),
DeviceInfo('Wohnzimmerlampe', 'Wohnzimmer Deckenlampe', 'living_area'),
DeviceInfo('EsszimmerlampeWest', 'Esszimmer Deckenlampe West', 'living_area'),
DeviceInfo('EsszimmerlampeMitte', 'Esszimmer Deckenlampe Mitte', 'living_area'),
DeviceInfo("EsszimmerWandlampe", 'Esszimmer Schrankleuchte', 'living_area'),
DeviceInfo("Küchenlampe", "Küche Deckenlampe", 'living_area'),
DeviceInfo("AussenleuchteUntenSO", "Aussen Terassenlicht", 'outside'),
DeviceInfo("Gang", "Gang Licht", 'hallway'),
DeviceInfo("Bad", "Bad Licht", 'bathroom'),
DeviceInfo("GangWindfang", "Gang Einganglicht", 'hallway'),
DeviceInfo("LichtWaschküche", "Waschküche Licht", 'hallway'),
# Normal lights
DeviceInfo('AussenleuchteHaustüren', 'Haustür Licht'),
DeviceInfo('AussenleuchteObenNW', 'Haustür Licht NW'),
DeviceInfo('TreppenhausLicht', "Treppenhaus Licht"),
DeviceInfo('WCLicht', "WC Licht"),
DeviceInfo('LampeVorratsraum', "Vorratsraum Licht"),
DeviceInfo('AussenleuchteHaustüren', 'Haustür Licht', 'outside'),
DeviceInfo('AussenleuchteObenNW', 'Haustür Licht NW', 'outside'),
DeviceInfo('TreppenhausLicht', "Treppenhaus Licht", 'first_floor'),
DeviceInfo('WCLicht', "WC Licht", 'other'),
DeviceInfo('LampeVorratsraum', "Vorratsraum Licht", 'other'),
]
shutters = [
DeviceInfo('Wohnzimmer Fenster Rollo', 'Wohnzimmer Fenster Rollo'),
DeviceInfo('Terassentür Rollo', 'Wohnzimmer Terrassentür Rollo'),
DeviceInfo('Küchenfenster Rollo', 'Küche Fenster Rollo'),
DeviceInfo('Esszimmerfenster Rollo', 'Esszimmer Fenster Rollo'),
DeviceInfo('Wohnzimmer Fenster Rollo', 'Wohnzimmer Fenster Rollo', 'living_area'),
DeviceInfo('Terassentür Rollo', 'Wohnzimmer Terrassentür Rollo', 'living_area'),
DeviceInfo('Küchenfenster Rollo', 'Küche Fenster Rollo', 'living_area'),
DeviceInfo('Esszimmerfenster Rollo', 'Esszimmer Fenster Rollo', 'living_area'),
]
switches = [
# Bells
DeviceInfo("KlingelOben", "Klingel Oben"),
DeviceInfo("Klingel Innen", "Klingel Innentür"),
DeviceInfo("Klingel Aussen", "Klingen Außentür"),
DeviceInfo("KlingelOben", "Klingel Oben", 'first_floor'),
DeviceInfo("Klingel Innen", "Klingel Innentür", 'other'),
DeviceInfo("Klingel Aussen", "Klingen Außentür", 'other'),
# Bewegungsmelder LEDs
DeviceInfo("BewegungsmelderMitte LED", "Bewegungsmelder Mitte LED"),
DeviceInfo("BewegungsmelderWest LED", "Bewegungsmelder West LED"),
DeviceInfo("BewegungsmelderOst LED", "Bewegungsmelder Ost LED"),
DeviceInfo("BewegungsmelderMitte LED", "Bewegungsmelder Mitte LED", 'hallway'),
DeviceInfo("BewegungsmelderWest LED", "Bewegungsmelder West LED", 'hallway'),
DeviceInfo("BewegungsmelderOst LED", "Bewegungsmelder Ost LED", 'hallway'),
]
scene_button_names = ['ObenLinks', 'ObenRechts', 'MitteLinks', 'MitteRechts', 'UntenLinks', 'UntenRechts']
scene_button_names = [(i, e) for i, e in enumerate(scene_button_names)]
@@ -51,36 +54,63 @@ def create_config():
power_plugs = [
# Vorratsraum
DeviceInfo("VorratsraumSteckdose1", "Vorratsraum Steckdose"),
DeviceInfo("VorratsraumSteckdose2", "Vorratsraum Steckdose"),
DeviceInfo("VorratsraumSteckdose3", "Gefrierschrank"),
DeviceInfo("VorratsraumSteckdose1", "Vorratsraum Steckdose", 'other'),
DeviceInfo("VorratsraumSteckdose2", "Vorratsraum Steckdose", 'other'),
DeviceInfo("VorratsraumSteckdose3", "Gefrierschrank", 'other'),
# Waschraum
DeviceInfo("Trockner", "Trockner"),
DeviceInfo("Waschmaschine", "Waschmaschine"),
DeviceInfo("Trockner", "Trockner", 'other'),
DeviceInfo("Waschmaschine", "Waschmaschine", 'other'),
# Küche
DeviceInfo("KücheSteckdose1", "Küche Steckdose 1"),
DeviceInfo("KücheSteckdose2", "Küche Steckdose 2"),
DeviceInfo("Spülmaschine", "Spülmaschine"),
DeviceInfo("Backofen", "Backofen"),
DeviceInfo("HerdP1", "Herd Phase 1"),
DeviceInfo("HerdP2", "Herd Phase 2"),
DeviceInfo("HerdP3", "Herd Phase 3"),
DeviceInfo("Spülmaschine", "Spülmaschine", 'living_area'),
DeviceInfo("Backofen", "Backofen", 'living_area'),
DeviceInfo("HerdP1", "Herd Phase 1", 'living_area'),
DeviceInfo("HerdP2", "Herd Phase 2", 'living_area'),
DeviceInfo("HerdP3", "Herd Phase 3", 'living_area'),
# Rest
DeviceInfo("ArbeitszimmerSteckdose", "Arbeitszimmer Steckdose"),
DeviceInfo("WohnzimmerSteckdose1", "Wohnzimmer Steckdose 1"),
DeviceInfo("WohnzimmerSteckdose2", "Wohnzimmer Steckdose 2"),
DeviceInfo("ArbeitszimmerSteckdose", "Arbeitszimmer Steckdose", 'office_martin'),
DeviceInfo("WohnzimmerSteckdose1", "Wohnzimmer Steckdose 1", 'living_area'),
DeviceInfo("WohnzimmerSteckdose2", "Wohnzimmer Steckdose 2", 'living_area'),
]
imported_csv = knx.import_ets5_csv_file('knx_data/export_project1.csv')
imported_csv.update(knx.import_ets5_csv_file('knx_data/export_project2.csv'))
devices = {}
knx.extent(devices, knx.create_lights(lights, imported_csv))
knx.extent(devices, knx.create_shutters(shutters, imported_csv))
knx.extent(devices, knx.create_switches(switches, imported_csv))
knx.extent(devices, knx.create_power_plug(power_plugs, imported_csv))
YAML().dump(devices, open('knx_devices.yaml', 'w'))
for device in lights + shutters + switches + power_plugs:
add_to_group(groups, device.groups, device.display_name)
def add_fhem_devices(devices, groups):
fhem_yaml = yaml.load(open('fhem.yaml'))
for device_type, device_list in fhem_yaml.items():
if device_type not in devices:
devices[device_type] = []
for device in device_list:
device['platform'] = 'fhem'
if 'groups' in device:
add_to_group(groups, device['groups'], device['name'])
del device['groups']
devices[device_type].append(device)
def main():
group_dict = yaml.load(open('groups.yaml'))
all_devices = {}
add_knx_devices(all_devices, group_dict)
add_fhem_devices(all_devices, group_dict)
with open('output/configuration.yaml', 'w') as output:
output.write(open('manual_config.yaml', 'r').read())
yaml.dump(all_devices, output)
yaml.dump(group_dict, open('output/groups.yaml', 'a'))
if __name__ == '__main__':
create_config()
main()