I drawed them manually with a mind mapping tool (xmind), but if you write a script that visualises groups i am very interested
Ok Thanks.
I will start and keep you updated.
Ok I got some time today and came up with this short python script. group_graph.pdf (4.5 KB)
(It is really a python script but I had to rename it :-()
You of course need python (i tested with version 2) and maybe this additional package
- pip install graphviz
then just put it into the items folder and let it run.
It will create a pdf file with the dependencies.
There are some config options in the script itseld
- the engine that is used (default is dot)
- some colors you can set to your groups.
It does not look as nice as your mindmap, but it gives me a good overview about my group dependencies.
Great. I will give it a try when i am back from my business trip
I really liked your post. That way I could easily rearrange all my groups. I actually put them into a seperate .items file:
Group gLocation
Group gGroundFloor "Erdgeschoss" (gLocation)
Group gGF_gTemperatures "Temperaturen Erdgeschoss" <temperature> (gGroundFloor)
Group gGF_gHumidity "Luftfeuchtigkeit" <humidity> (gGroundFloor)
Group gGF_gLivingroom "Wohnzimmer" (gGroundFloor)
Group gGF_gLivingroom_gDoubleSwitch "Doppelschalter Wohnzimmer" (gGF_gLivingroom)
Group gGF_gLivingroom_gWindowSensor "Sensor Terassentür" (gGF_gLivingroom)
Group gGF_gLivingroom_gWallplug "Steckdose Verstärker" (gGF_gLivingroom)
Group gGF_gLivingroom_gVolumio "Volumio" (gGF_gLivingroom)
Group gGF_gLivingroom_gTV "Fernseher" (gGF_gLivingroom)
Group gGF_gLivingroom_gReceiver "Yamaha Receiver" <yamaha> (gGF_gLivingroom)
Group gGF_gLivingroom_Natascha "Natascha Sauger" <vacuum> (gGF_gLivingroom)
Group gGF_gLivingroom_NataschaStatus "Status Details" <status> (gGF_gLivingroom_Natascha)
Group gGF_gLivingroom_NataschaCons "Verschleißteile" <line-increase> (gGF_gLivingroom_Natascha)
Group gGF_gLivingroom_NataschaDND "Nicht stören" <moon> (gGF_gLivingroom_Natascha)
Group gGF_gLivingroom_NataschaHistory "Cleaning History" <calendar> (gGF_gLivingroom_Natascha)
Group gGF_gLivingroom_NataschaNetwork "Netzwerk" <network> (gGF_gLivingroom_Natascha)
Group gGF_gKitchen "Küche" (gGroundFloor)
Group gGF_gKitchen_gSwitch "Doppelschalter Küche" (gGF_gKitchen)
Group gGF_gKitchen_gSinkLight "Licht Spüle" <light> (gGF_gKitchen)
Group gGF_gKitchen_gDownLight "Downlights Küche" <light> (gGF_gKitchen)
Group gGF_gKitchen_gRadio "Medion Küchenradio" (gGF_gKitchen)
Group gGF_gUtilityRoom "Hauswirtschaftsraum" (gGroundFloor)
Group gGF_gUtilityRoom_gWindowSensor "Fenster Hauswirtschaftsraum" <window> (gGF_gUtilityRoom)
Group gFirstFloor "Obergeschoss" (gLocation)
Group gFF_gTemperatures "Temperaturen Obergeschoss" <temperatures> (gFirstFloor)
Group gFF_gBathroom "Bad" (gFirstFloor)
Group gFF_gBathroom_gLight "Bad Licht" (gFF_gBathroom)
Group gFF_gBathroom_gThermostat "Bad Heizung" (gFF_gBathroom)
Group gFF_gBathroom_gThermostat_gTemperature (gFF_gBathroom_gThermostat)
Group gFF_gBathroom_gWindowSensor "Bad Fenster" <window> (gFF_gBathroom)
Group gFF_gBedroom "Schlafzimmer" (gFirstFloor)
Group gFF_gBedroom_gLight "Licht Schlafzimmer" (gFF_gBedroom)
Group gFF_gBedroom_gThermostat "Heizung Schlafzimmer" (gFF_gBedroom)
Group gFF_gBedroom_gThermostat_gTemperature (gFF_gBedroom_gThermostat)
Group gFF_gBedroom_gWindowSensor "Schlafzimmer Fenster" <window> (gFF_gBedroom)
Group gFF_gNora "Noras Zimmer" (gFirstFloor)
Group gFF_gNora_gThermostat "Heizung Nora" (gFF_gNora)
Group gFF_gNora_gThermostat_gTemperature (gFF_gNora_gThermostat)
Group gFF_gNora_gLightStrip (gFF_gNora)
Group gFF_gGuestRoom "Gästezimmer" (gFirstFloor)
Group gFF_gGuestRoom_gThermostat "Heizung Gästezimmer" (gFF_gGuestRoom)
Group gFF_gGuestRoom_gThermostat_gTemperature (gFF_gGuestRoom_gThermostat)
Group gFF_gDressRoom "Ankleidezimmer" (gFirstFloor)
Group gFF_gDressRoom_gThermostat "Heizung Ankleidezimmer" (gFF_gDressRoom)
Group gFF_gDressRoom_gThermostat_gTemperature (gFF_gDressRoom_gThermostat)
Group gGarden "Garten" <garden>
Group gG_gUlf "Ulf Mähroboter" <lawnmower>
Group gG_gIrrigation "Beregnung"
Group gG_gIrrigation_gTimer "Beregnung Zeitschaltuhr"
Group gG_gTemperature <temperature>
Group gG_gHumidity <humidity>
Group fg_gHeating "Heizung" <heating>
Group fg_gHeating_fgSum "Summary" (fg_gHeating)
Group fg_gHeating_gTemperatures (fg_gHeating)
Group fg_gHeating_gPresetNormal "Preset Normal" (fg_gHeating)
Group fg_gLighting "Beleuchtung"
Group fg_gLighting_gKitchen "Beleuchtung Küche" <light>
Group fg_gPlugs "Steckdosen"
Group fg_gPlugs_gRF433 "Funksteckdosen"
Group fg_gPlugs_gOsram "Osram Schalter"
Group fg_gSwitches "Schalter"
Group fg_gSwitches_gSonoff "Sonoff Schalter"
Group fg_gSwitches_gScene "Szenenschalter"
Group fg_gSwitches_gHue "Schalter Hue"
Group fg_gStatus "Status"
Group fg_gStatus_gBattery "Batteriestatus" <battery>
Group fg_gStatus_gSensor "Sensoren"
Group fg_gStatus_gTemperature "Temperaturen"
Group fg_gStatus_gSensor_gWindow "Fenstersensoren" <window>
Group fg_gStatus_gSensor_gMovement "Bewegungssensor"
Group fg_gStatus_gTanken "Benzinpreise" (fg_gStatus)
Group fg_gAqara "Aqara Temperatursensoren"
That way I have a really ncie overview. Now here comes my question:
How do structure your group switches, AVG,SUM and all those. I am trying to get some Temperature averages now and I realized that I have to pretty much start over to group my items.
I i see it right you have a mixture between location and function. Could you describe waht exactly you like to achive?
If you like to have the avaerage temperature from your firstfloor. There is a temperature gourp that cloud be modified with an AVG. The basic function to group things togehter is not changed.
If you like to have the same function across all rooms thats a different story.
Below you will find my current appraoch
// Items File: sys_groups.items
//
// Starting from the root gRoot, the main subgroups gLocation for location-related structuring and gContext for
// context-related structuring are created. The context-related groups can represent functional, logical,
// environmental or other contexts.
//
// Group structure based on gRoot
Group gRoot "Gruppenwurzel" <edit_settings>
// Location based groups
Group gLocation "Ortsbezogene Gruppen" <edit_settings> (gRoot)
Group gFirstFloor "Obergeschoß" <edit_settings> (gLocation) // Code: FF
Group gFF_Bathroom "Badezimmer" <edit_settings> (gFirstFloor) // Code: BA
Group gFF_WalktroughRoom "Durchgangszimmer" <edit_settings> (gFirstFloor) // Code: WR
Group gFF_Corridor "Flur" <edit_settings> (gFirstFloor) // Code: CR
Group gFF_NeeleRoom "Neeles Zimmer" <edit_settings> (gFirstFloor) // Code: NR
Group gFF_GuestRoom "Gästezimmer" <edit_settings> (gFirstFloor) // Code: GR
Group gFF_AimieRoom "Aimies Zimmer" <edit_settings> (gFirstFloor) // Code: AR
Group gFF_Kitchen "Küche" <edit_settings> (gFirstFloor) // Code: KI
Group gGroundFloor "Erdgeschoß" <edit_settings> (gLocation) // Code: GF
Group gGF_Hallway "Diele" <edit_settings> (gGroundFloor) // Code: HW
Group gGF_GuestToilet "Gäste WC" <edit_settings> (gGroundFloor) // Code: GT
Group gGF_Office "Büro" <edit_settings> (gGroundFloor) // Code: OF
Group gGF_Kitchen "Küche" <edit_settings> (gGroundFloor) // Code: KI
Group gGF_Livingroom "Wohnzimmer" <edit_settings> (gGroundFloor) // Code: LR
Group gGF_Diningroom "Esszimmer" <edit_settings> (gGroundFloor) // Code: DR
Group gGF_Bedroom "Schlafzimmer" <edit_settings> (gGroundFloor) // Code: BR
Group gGF_Bathroom "Badezimmer" <edit_settings> (gGroundFloor) // Code: BA
Group gBasement "Keller" <edit_settings> (gLocation) // Code: BM
Group gBM_EntryCellar "Eingangskeller" <edit_settings> (gBasement) // Code: EC
Group gBM_LaundryCellar "Waschküche" <edit_settings> (gBasement) // Code: LC
Group gBM_Boilerroom "Heizungskeller" <edit_settings> (gBasement) // Code: BR
Group gBM_SupplyCellar "Voratskeller" <edit_settings> (gBasement) // Code: SC
Group gOutside "Draußen" <edit_settings> (gLocation) // Code: OS
Group gOS_House "Haus" <edit_settings> (gOutside) // Code: HO
Group gOS_Pool "Pool" <edit_settings> (gOutside) // Code: PL
Group gNoLocation "Ohne Ort" <edit_settings> (gLocation) // Code: NL
Group gNL_Internet "Internet Services" <edit_settings> (gNoLocation) // Code: IN
Group gNL_ICT "IT-Infrastruktur" <edit_settings> (gNoLocation) // Code: IF
Group gNL_openHAB "openHAB Items" <edit_settings> (gNoLocation) // Code: OH
Group gNL_PlantSensors "Pflanzensensoren" <edit_settings> (gNoLocation) // Code: PS
Group gNL_SocketSwitch "Steckdosenschalter" <edit_settings> (gNoLocation) // Code: SS
Group gNL_Other "Sonstiges" <edit_settings> (gNoLocation) // Code: OT
Group gNL_Cloud "Cloud" <edit_settings> (gNoLocation) // Code: CL
// Context based groups
Group gContext "Contextbezogene Gruppen" <edit_settings> (gRoot)
// Groups to represent battery-related relations
Group gBatteries "Batteriebezogene Gruppen" <measure_battery_75> (gContext)
Group gBatteryOperated "Battriebetriebene Geräte" <measure_battery_50> (gBatteries)
Group gBatteryStatus "Batteriezustand" <measure_battery_75> (gBatteries)
// Group for representing different persistence scenarios
Group gPersistence "Persistenz" <edit_settings> (gContext)
Group gStandardTimeline "Zeitreihe (Every Update)" <edit_settings> (gPersistence)
Group gMinuteTimeline "Zeitreihe (Every Minute)" <edit_settings> (gPersistence)
// Group to represent trigger groups
Group gTriggering "Triggergruppen" <edit_settings> (gContext)
Group gPIRMotionTrigger "Bewegungsmelder" <edit_settings> (gTriggering, gStandardTimeline)
Group gContactTrigger "Tür- und Fensterkontakte" <edit_settings> (gTriggering)
Group gClimateCombineTrigger "Temperatur/Luftfeuchte" <edit_settings> (gTriggering)
// Group to represent contacts
Group gContacts "Kontaktgruppen" <edit_settings> (gContext)
Group:Contact:OR(OPEN, CLOSED) gWindowContacts "Fensterkontakte" <edit_settings> (gContacts, gStandardTimeline)
Group:Contact:OR(OPEN, CLOSED) gDoorContacts "Türkontakte" <edit_settings> (gContacts, gStandardTimeline)
// Group to represent all irrigation related items
Group gIrrigation "Bewässerung" <sani_irrigation> (gContext)
// Groups to represent plant sensors
Group gPlants "Pflanzen" <sani_irrigation> (gContext)
Group gPlantNames "Namen" <scene_plant> (gPlants)
Group gPlantLocations "Orte" <building_plant> (gPlants)
Group gPlantStatus "Status" <scene_plant> (gPlants)
Group gPlantMoisture "Feuchte" <scene_plant> (gPlants)
Group gPlantMinMoisture "Feuchte minimal" <scene_plant> (gPlants)
Group gPlantMaxMoisture "Feuchte maximal" <scene_plant> (gPlants)
Group gPlantFertility "Dünung" <scene_plant> (gPlants)
Group gPlantMinFertility "Dünung minimal" <scene_plant> (gPlants)
Group gPlantMaxFertility "Dünung maximal" <scene_plant> (gPlants)
Group gPlantEnabled "Freigabe" <scene_plant> (gPlants)
Group:Switch:OR(ON, OFF) gPlantConnectionCtl "Verbindungskontrolle [%d]" <scene_plant> (gPlants)
// Groups to represent petrol stations
Group gPetrolStations "Tankstellen" <scene_gas_station> (gContext)
Group:Number:MIN gPetrolStation_Prices "Preise" <scene_gas_station> (gPetrolStations)
Group gPetrolStation_Open "Geöffnet" <scene_gas_station> (gPetrolStations)
Group gPetrolStation_Display "Anzeige" <scene_gas_station> (gPetrolStations)
As you can see the location approach is very strict and the context approach not so much. Each of my thingy has its own group that is assigned one or mor other groups