Also das mit dem
semantischen Modell sollte man nicht überbewerten, es ist aber trotzdem ein "nettes Gimmick".
Ich nehme an, du hast das in deiner OH2-Installation, auch schon "fast genauso gemacht", nämlich deine Schalter, Geräte, Lampen, etc.(Equipments) in bestimmte Räume (Locations) und auch noch nach bestimmten Eigenschaften (properties), wie Licht, Temperatur, Spannung, etc. gruppiert. Wenn du hier beim Aufbau bestimmten Regeln folgst, baut sich dein semantisches Modell(vergleichbar mit Sitemap/BasicUI) von selbst auf.
Das könnte dann etwa so aussehen(Locations/Equipment/Properties):
semmod.jpg
Der Grundaufbau meiner "castle.items" (Location) sieht dazu in Textform so aus:
Code: Alles auswählen
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Locations +
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gebäudeplan - Building plan
Group gEstate "Anwesen Flurstück" <garden> ["Location"]
// Aussenbereich Outdoor area
Group gAussen "Aussenbereich" <garden> (gEstate) ["Outdoor"]
Group gGarage "Garage" <garage_1> (gAussen) ["Garage", "garage_detached"]
Group gHof "Garageneinfahrt" <garage_1> (gAussen) ["Driveway"]
Group gGhaus "Geräteschuppen" <garage_1> (gAussen) ["Outdoor"]
Group gFront "Vorgarten" <garage_1> (gAussen) ["Garden"]
Group gBack "Garten Südseite" <garage_1> (gAussen) ["Garden"]
// Innenbereich - Indoor
Group gInnen "Innenbereich" <house> (gEstate) ["Indoor"]
Group gHome "Casa Claudia" <house> (gInnen) ["Building"]
// Stockwerke - Floors
Group gEG "Erdgeschoss" <groundfloor> (gHome) ["GroundFloor"]
Group gDG "Dachgeschoss" <firstfloor> (gHome) ["Attic"]
Group gUGElw "Celines Reich" <cellar> (gHome) ["Basement"]
Group gUGKel "Keller" <cellar> (gHome) ["Basement"]
// Zimmer - Rooms
Group gEG_Bad "Badezimmer" <bubble_bath> (gHome, gEG) ["Bathroom" ] { synonyms="Badezimmer" }
Group gEG_Essen "Esszimmer" <dining> (gHome, gEG) ["DiningRoom" ]
Group gEG_Kind1 "Zimmer Claudia" <girl_3> (gHome, gEG) ["Guestroom" ] { synonyms="Speisekammer" }
Group gEG_WC "Toilette" <toilet> (gHome, gEG) ["Bathroom" ] { synonyms="Toilette,WC,Restroom" }
Group gEG_Wohnen "Wohnzimmer" <living> (gHome, gEG) ["LivingRoom" ]
Group gEG_Schlafen "Schlafzimmer" <bed> (gHome, gEG) ["Bedroom" ]
Group gEG_Kueche "Küche" <catfridge> (gHome, gEG) ["Kitchen" ]
Group gEG_Windfang "Windfang-Garderobe" <wardrobe> (gHome, gEG) ["Entry" ]
Group gEG_Vorgarten "Vorgarten" <lawnmower> (gHome, gEG) ["Garden" ]
Group gEG_Terrasse "Terrasse" <terrace> (gHome, gEG) ["Terrace" ]
Group gEG_Kind2 "Zimmer York" <boy_3> (gHome, gEG) ["Room" ] { synonyms="Kinderzimmer" }
Group gEG_Diele "Diele" <corridor> (gHome, gEG) ["Corridor" ]
Group gEG_Flur "Flur" <corridor> (gHome, gEG) ["Corridor" ]
Group gEG_Buero "Arbeitszimmer" <office> (gHome, gEG) ["Office" ] { synonyms="Bureau,Bureaux" }
Group gDG_Speicher "Dachboden" <attic> (gHome, gDG) ["Room" ] { synonyms="Buehne,Tenne" }
Group gUG_Wohnen "Wohn-Esszimmer" <sofa> (gHome, gUGElw) ["LivingRoom" ]
Group gUG_Schlafen "Schlafzimmer" <bed> (gHome, gUGElw) ["Bedroom" ]
Group gUG_Bad "Badezimmer" <bath> (gHome, gUGElw) ["Bathroom" ]
Group gUG_Diele "Flur" <corridor> (gHome, gUGElw) ["Corridor" ]
Group gUG_Waschkueche "Waschküche" <washingmachine> (gHome, gUGKel) ["LaundryRoom" ]
Group gUG_Heizraum "Heizungsraum" <heating> (gHome, gUGKel) ["BoilerRoom" ]
Group gUG_Keller "Keller" <cellar> (gHome, gUGKel) ["Cellar" ]
Group gUG_Holzkeller "Holz-Keller" <cellar> (gHome, gUGKel) ["Cellar" ]
Group gSpecial "Special" (gInnen) ["Indoor"]
Group gMonitor "Monitoring" (gInnen) ["Indoor"]
// aktive Gruppen
Group:Switch:OR(ON,OFF) gLight "Monitoring Licht [MAP(de.map):%s]" <light> (gMonitor) ["Indoor"]
Group:Contact:OR(OPEN,CLOSED) gDoor "Monitoring Türen [MAP(de.map):%s]" <door> (gMonitor) ["Indoor"]
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Locations - End +
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Group:Switch:OR(ON,OFF) gPower "Steckdosen gPower [MAP(de.map):%s]" <poweroutlet> (gSpecial) ["Indoor","PowerOutlet"]
Group:Switch:OR(ON,OFF) gPower1 "Gruppe Dummies gPower1[MAP(de.map):%s]" <poweroutlet> (gSpecial) ["Indoor","WallSwitch" ]
Group:Switch:OR(ON,OFF) gInnentur "Innentüren [MAP(de.map):%s]" <door> (gHome) ["Door"]
Group:Number:AVG gHeating "Heizung [%.1f]" <heating1> (gHome) ["HVAC"]
Group:Switch:OR(ON,OFF) gWart "Wartung [MAP(battery.map):%s]" <siren> (gHome) ["WhiteGood"]
Group:Switch:OR(ON,OFF) gBatt "Batterie Status [MAP(battery.map):%s]" <siren> (gHome) ["Battery"]
// Test-Switches
String Dummy "Versucherle [%s]" (gPower,gPower1) ["WallSwitch", "Point_Control_Switch"] { stateDescription="pattern" [pattern="MAP(de.map):%s"], synonyms="Schalter" } // {channel="exec:command:my_user:output"}
Dimmer Dummy_2 "Testschalter Dummy2 [%.0f]" (gPower,gPower1) ["WallSwitch", "Point_Control_Switch"] { synonyms="Dimmer" }
//Switch Dummy_1 "Testschalter Dummy1 [%s]" (gPower,gPower1) ["WallSwitch", "Point_Control_Switch"] { stateDescription="pattern" [pattern="MAP(de.map):%s"], synonyms="Schalter" }
Switch Dummy_1 "Testschalter Dummy1 [%s]" (gPower,gPower1) ["WallSwitch", "Point_Control_Switch"] { stateDescription="pattern" [ readOnly=false], synonyms="Schalter" }
Switch Dummy_3 "Testschalter Dummy3 [%s]" (gPower,gPower1) ["WallSwitch", "Point_Control_Switch"] { stateDescription="pattern" [pattern="MAP(de.map):%s"], synonyms="Schalter" }
Switch Dummy_4 "Testschalter Dummy4 [%s]" (gPower,gPower1) ["WallSwitch", "Point_Control_Switch"] { stateDescription="pattern" [pattern="MAP(de.map):%s"], synonyms="Schalter" }
Switch Dummy_5 "Testschalter Dummy5 [%s]" (gPower,gPower1) ["WallSwitch", "Point_Control_Switch"] { stateDescription="pattern" [pattern="MAP(de.map):%s"], synonyms="Schalter" }
Switch Dummy_6 "Testschalter Dummy6 [%s]" (gPower,gPower1) ["WallSwitch", "Point_Control_Switch"] { stateDescription="pattern" [pattern="MAP(de.map):%s"], synonyms="Schalter" }
Switch DummySpi "Testschalter für Rule Spielereien mit Syntax [%s]" (gPower,gPower1) ["WallSwitch", "Point_Control_Switch"] { stateDescription="pattern" [pattern="MAP(de.map):%s"], synonyms="Schalter" }
Number Dummy_7 "Test-Item Number [%s]" (gPower,gPower1) ["Point"]
//Rollershutter test1 "test1 [%d]" (gGarage,gGartenShutters,gGaragentor) ["Blinds","OpenState"]
//Rollershutter test2 "test2 [%d]" (gGarage,gGartenShutters,gGaragentor) ["GarageDoor", "OpenState"]
////
//Group:Rollershutter:OR(UP,DOWN) gGartenShutters "alle Rolladen [%d] " <rollershutter> (gHome) ["Blinds"]
//Group:Rollershutter:AVG gGaragentor "Garagentor Ø[%d]" <garagedoor> (gHome) ["GarageDoor"]
Group:Switch:OR(ON,OFF) gT_OnOff "Tasmota Switches [%s]" <sonoff_basic> (gMonitor) // ["Screen"]
Group:Number:AVG gRSSI "Signalstärke Wifi Ø [%s %%]" <qualityofservice> (gMonitor) // ["Status","Frequency"]
Group gVer "Tasmota-FW-Release-Check " <arendst> (gMonitor) // // Shows current Release-Versions of the Tasmotas
Group:Switch:OR(OFF,ON) gLWT "Tasmota Online [%s]" <siren1> (gInnen) ["Indoor"] { stateDescription="pattern" [ readOnly=true] }
Group gTasmo "Tasmota Maintenance" <tasmota> (gMonitor) // ["Screen"]
Group gHard "Hardware Info " <esp8266_2> (gMonitor) // ["Screen"]
Group gIpAd "IP Adress Info " <esp8266_2> (gMonitor) // ["Screen"]
Group gSSId "IP Name Info " <esp8266_2> (gMonitor) // ["Screen"]
Group:Switch:OR(ON,OFF) gMotion "Bewegungsmelder" <siren1> (gMonitor) // ["Status", "Alarm","MotionDetector"]
String EndTime "EndZeit [%s Std/Min/Sek]" <dishwasher>
String RemainingTime "Restlaufzeit [%s Std/Min/Sek]" <dishwasher>
Also eine "logische Gruppierung" (Group) erweitert um die "Tags"(in eckigen Klammern)
aus dem semantischen Model.
Du kannst das alles mehr oder weniger automatisiert über die UI anlegen oder wenn du schon in OH2 mit Textfiles und Text-Editoren (evtl. VSC) gearbeitet hast auch in dieser Form arbeiten und ggf. auch solche Textdateien (*.items, *.things,*.map, etc) 1:1 nach OH3 übernehmen.
Die "castle.items" habe ich, ergänzt um die Metadaten(Tags) so aus OH2 übernommen bzw. die Tags schon in meiner OH2-Datei ergänzt und dann einfach nach OH3 kopiert.
Das mit den Pages kommt dann ganz von allein - ich meine die Neugier, nicht dass das auch automatisch geht :lol. Hier ein paar Beispiele:
pages.jpg