...hier noch ein Praxis-Beispiel von einem "Noob".
Zuerst mal hab ich mir einen "Rahmen" gebastelt, wie ich das auch schon unter OH2 gemacht habe, also die "Location".
castle.items:
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"] { widgetOrder="1" }
Group gFront "Vorgarten" <garage_1> (gAussen) ["Garden"] { widgetOrder="1" }
Group gHof "Garageneinfahrt" <garage_1> (gAussen) ["Driveway"] { widgetOrder="2" }
Group gGarage "Garage" <garage_1> (gAussen) ["Garage", "garage_detached"] { widgetOrder="3" }
Group gBack "Garten Südseite" <garage_1> (gAussen) ["Garden"]
Group gGhaus "Gartenhütte" <garage_1> (gAussen) ["Outdoor"]
// Innenbereich - Indoor
Group gInnen "Innenbereich" <house> (gEstate) ["Indoor"] { widgetOrder="2" }
Group gHome "Casa Claudia" <house> (gInnen) ["Building"]
// Stockwerke - Floors
Group gEG "Erdgeschoss" <groundfloor> (gHome) ["GroundFloor"] { widgetOrder="2" }
Group gDG "Dachgeschoss" <firstfloor> (gHome) ["Attic"] { widgetOrder="3"}
Group gUGElw "Celines Reich" <cellar> (gHome) ["Basement"] { widgetOrder="1"}
Group gUGKel "Keller" <cellar> (gHome) ["Basement"] { widgetOrder="0"}
// 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" ]
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" ]
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" <lowbattery1> (gHome) ["Battery"] { stateDescription="pattern" [pattern="MAP(battery.map):%s", readOnly=true] }
// 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"]
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 gGrTop "Group Topic [] " <esp8266_2> (gMonitor)
Group:Switch:OR(ON,OFF) gMotion "Bewegungsmelder" <siren1> (gMonitor) // ["Status", "Alarm","MotionDetector"]
und dann mein "Equipment" mit mit den "Eigenschaften". Als Beispiel ein paar Sonoff-Devices.
sonoff.items:
Code: Alles auswählen
//**********************************************************************************************************************************************************************************************************************
//Basic Switches
//**********************************************************************************************************************************************************************************************************************
//192.168.178.31 basic-03
Group gbas_03 "Schreibtischlampe" <tablelamp> (gEG_Buero) ["WallSwitch"] { widgetOrder="1" }
Switch Sonoff_Basic_03 "Schreibtischlampe Büro [MAP(de.map):%s]" <tablelamp> (gbas_03,gT_OnOff,gLight) ["Switch","Light"] { channel="mqtt:topic:claudi:basic03:power" }
Number Sonoff_Basic_03_RSSI "Schreibtischlampe Büro RSSI [%s]" <qualityofservice> (gbas_03,gRSSI) ["Point"] { channel="mqtt:topic:claudi:basic03:rssi" }
String Sonoff_Basic_03_Version "Schreibtischlampe Version [%s]" <sonoff_basic> (gbas_03,gVer) ["Point"] { channel="mqtt:topic:claudi:basic03:version" }
Switch Sonoff_Basic_03_Unreach "Schreibtischlampe Ereichbarkeit [%s]" <siren1> (gbas_03,gLWT) ["Point"] { channel="mqtt:topic:claudi:basic03:reachable" }
String Sonoff_Basic_03_Hardware "Schreibtischlampe ChipSet [%s]" <sonoff_basic> (gbas_03,gHard) ["Point"] { channel="mqtt:topic:claudi:basic03:hardware" }
String Sonoff_Basic_03_IPAddress "Schreibtischlampe IP-Address [%s]" <sonoff_basic> (gbas_03,gIpAd) ["Point"] { channel="mqtt:topic:claudi:basic03:ipaddress" }
String Sonoff_Basic_03_GroupTopic "Schreibtischlampe GroupTopic [%s]" <sonoff_basic> (gbas_03,gGrTop) ["Point"] { channel="mqtt:topic:claudi:basic03:grouptop" }
/* Test mit zwei Verschiedenen REGEX-Funktionen - Version 1 filtert - Version 2 klappt nicht - In einer Rule funktionierts auch -> var firmware = transform("REGEX", ".*([0-9].[0-9].[0-9])", Sonoff_Current_FW_Available.state.toString)
// http://192.168.178.78:8080/icon/sonoff_basic.svg
String Sonoff_Basic_03_Version1 "Schreibtischlampe Version1 [REGEX(.*([0-9].[0-9].[0-9]).*):%s]" <sonoff_basic> (gTasmo,gVer) { channel="mqtt:topic:claudi:basic03:version" }
String Sonoff_Basic_03_Version2 "Schreibtischlampe Version2 [%s]" <sonoff_basic> (gTasmo,gVer) { channel="mqtt:topic:claudi:basic03:version" [profile="transform:REGEX", function="(.*([0-9].[0-9].[0-9]).*)"] }
*/
// 192.168.178.27 basic-04 Kugellampe
Group gbas_04 "Basic 04" <tablelamp> (gEG_Kind2) ["WallSwitch"]
Switch Sonoff_Basic_04 "Kugellampe [MAP(de.map):%s]" <tablelamp> (gbas_04,gT_OnOff,gLight) ["Switch","Light"] { channel="mqtt:topic:claudi:basic04:power"}
Number Sonoff_Basic_04_RSSI "Kugellampe RSSI [%s]" <qualityofservice> (gbas_04,gRSSI) ["Point"] { channel="mqtt:topic:claudi:basic04:rssi" }
String Sonoff_Basic_04_Version "Kugellampe Version [%s]" <sonoff_basic> (gbas_04,gVer) ["Point"] { channel="mqtt:topic:claudi:basic04:version" }
Switch Sonoff_Basic_04_Unreach "Kugellampe Ereichbarkeit [%s]" <siren1> (gbas_04,gLWT) ["Point"] { channel="mqtt:topic:claudi:basic04:reachable" }
String Sonoff_Basic_04_Hardware "Kugellampe ChipSet [%s]" <sonoff_basic> (gbas_04,gHard) ["Point"] { channel="mqtt:topic:claudi:basic04:hardware" }
String Sonoff_Basic_04_IPAddress "Kugellampe IP-Address [%s]" <sonoff_basic> (gbas_04,gIpAd) ["Point"] { channel="mqtt:topic:claudi:basic04:ipaddress" }
String Sonoff_Basic_04_GroupTopic "Kugellampe GroupTopic [%s]" <sonoff_basic> (gbas_04,gGrTop) ["Point"] { channel="mqtt:topic:claudi:basic04:grouptop" }
//**********************************************************************************************************************************************************************************************************************
//Touch Wall Switches
//**********************************************************************************************************************************************************************************************************************
//192.168.178.56 DeckenlampeYork - T1_01
Group gT1_01 "Lichtschalter Sonoff T1" <lamp_globe_light> (gEG_Kind2) ["WallSwitch"]
Switch Sonoff_T1_01 "Deckenlampe York [MAP(de.map):%s]" <lamp_globe_light> (gT1_01,gT_OnOff,gLight) ["Switch","Light"] { channel="mqtt:topic:claudi:T101:power"}
Number Sonoff_T1_01_RSSI "Deckenlampe York RSSI [%s]" <qualityofservice> (gT1_01,gRSSI) ["Point"] { channel="mqtt:topic:claudi:T101:rssi" }
String Sonoff_T1_01_Version "Deckenlampe York Version [%s]" <sonoff_switch> (gT1_01,gVer) ["Point"] { channel="mqtt:topic:claudi:T101:version" }
Switch Sonoff_T1_01_Unreach "Deckenlampe York Ereichbarkeit [%s]" <siren1> (gT1_01,gLWT) ["Point"] { channel="mqtt:topic:claudi:T101:reachable" }
String Sonoff_T1_01_Hardware "Deckenlampe York Hardware [%s]" <sonoff_switch> (gT1_01,gHard) ["Point"] { channel="mqtt:topic:claudi:T101:hardware" }
String Sonoff_T1_01_IPAddress "Deckenlampe York IP-Address [%s]" <sonoff_switch> (gT1_01,gIpAd) ["Point"] { channel="mqtt:topic:claudi:T101:ipaddress" }
String Sonoff_T1_01_GroupTopic "Deckenlampe York GroupTopic [%s]" <sonoff_switch> (gT1_01,gGrTop) ["Point"] { channel="mqtt:topic:claudi:T101:grouptop" }
//192.168.178.39 LampeClaudia - touch_01
Group gTouch_01 "Lichtschalter Sonoff Touch" <lamp_globe_light> (gEG_Kind1,gT_OnOff) ["WallSwitch"]
Switch Sonoff_touch_01 "Deckenlampe Claudia [MAP(de.map):%s]" <lamp_globe_light> (gTouch_01,gT_OnOff,gLight) ["Switch","Light"] { channel="mqtt:topic:claudi:touch01:power"}
Number Sonoff_touch_01_RSSI "Deckenlampe Claudia RSSI [%s]" <qualityofservice> (gTouch_01,gRSSI) ["Point"] { channel="mqtt:topic:claudi:touch01:rssi" }
String Sonoff_touch_01_Version "Deckenlampe Claudia Version [%s]" <sonoff_switch> (gTouch_01,gVer) ["Point"] { channel="mqtt:topic:claudi:touch01:version" }
Switch Sonoff_touch_01_Unreach "Deckenlampe Claudia Ereichbarkeit [%s]" <siren1> (gTouch_01,gLWT) ["Point"] { channel="mqtt:topic:claudi:touch01:reachable" }
String Sonoff_touch_01_Hardware "Deckenlampe Claudia Hardware [%s]" <sonoff_switch> (gTouch_01,gHard) ["Point"] { channel="mqtt:topic:claudi:touch01:hardware" }
String Sonoff_touch_01_IPAddress "Deckenlampe Claudia IP-Address [%s]" <sonoff_switch> (gTouch_01,gIpAd) ["Point"] { channel="mqtt:topic:claudi:touch01:ipaddress" }
String Sonoff_touch_01_GroupTopic "Deckenlampe Claudia GroupTopic [%s]" <sonoff_switch> (gTouch_01,gGrTop) ["Point"] { channel="mqtt:topic:claudi:touch01:grouptop" }
//**********************************************************************************************************************************************************************************************************************
//POW Sensoren
//**********************************************************************************************************************************************************************************************************************
//192.168.178.46 Stehlampe pow_02
Group gPow_02 "Stehlampe Sonoff Pow 02" <sonoff_pow> (gEG_Wohnen) ["WallSwitch"]
Switch Sonoff_Pow_02 "Stehlampe [MAP(de.map):%s]" <standard_lamp> (gPow_02,gT_OnOff,gLight) ["Switch","Light"] { channel="mqtt:topic:claudi:pow02:power"}
Number Sonoff_Pow_02_RSSI "Stehlampe RSSI [%s]" <qualityofservice> (gPow_02,gRSSI) ["Point"] { channel="mqtt:topic:claudi:pow02:rssi" }
String Sonoff_Pow_02_Version "Stehlampe Version [%s]" <sonoff_pow> (gPow_02,gVer) ["Point"] { channel="mqtt:topic:claudi:pow02:version" }
Switch Sonoff_Pow_02_Unreach "Stehlampe Ereichbarkeit [%s]" <siren1> (gPow_02,gLWT) ["Point"] { channel="mqtt:topic:claudi:pow02:reachable" }
String Sonoff_Pow_02_Hardware "Stehlampe Hardware [%s]" <sonoff_pow> (gPow_02,gHard) ["Point"] { channel="mqtt:topic:claudi:pow02:hardware" }
String Sonoff_Pow_02_IPAddress "Stehlampe IP-Address [%s]" <sonoff_pow> (gPow_02,gIpAd) ["Point"] { channel="mqtt:topic:claudi:pow02:ipaddress" }
Number Sonoff_Pow_02_Verbrauch "Stehlampe Verbrauch Total[%.2f kWh]" <standard_lamp> (gPow_02) ["Power"] { channel="mqtt:topic:claudi:pow02:total" }
Number Sonoff_Pow_02_VerbrauchHeute "Stehlampe Verbrauch Heute[%.2f kWh]" <standard_lamp> (gPow_02) ["Power"] { channel="mqtt:topic:claudi:pow02:totalday" }
Number Sonoff_Pow_02_VerbrauchGestern "Stehlampe Verbrauch Gestern[%.2f kWh]" <standard_lamp> (gPow_02) ["Power"] { channel="mqtt:topic:claudi:pow02:totalyest" }
Number Sonoff_Pow_02_Strom "Stehlampe Stromaufnahme [%.2f A]" <standard_lamp> (gPow_02) ["Current"] { channel="mqtt:topic:claudi:pow02:current" }
Number Sonoff_Pow_02_Spannung "Stehlampe Spannung[%.1f V]" <standard_lamp> (gPow_02) ["Voltage"] { channel="mqtt:topic:claudi:pow02:voltage" }
Number Sonoff_Pow_02_Leisung "Stehlampe Leistung[%.2f W]" <standard_lamp> (gPow_02) ["Power"] { channel="mqtt:topic:claudi:pow02:powerload" }
String Sonoff_Pow_02_SSID "Stehlampe Wlan [%s]" <standard_lamp> (gPow_02,gSSId) ["Status"] { channel="mqtt:topic:claudi:pow02:ssid" }
DateTime Sonoff_Pow_02_Date "Stehlampe Refresh [%1$tH:%1$tM]" <standard_lamp> (gPow_02) ["Status"] { channel="mqtt:topic:claudi:pow02:time" }
Number Sonoff_Pow_02_PowerDelta "Stehlampe Power-Delta [%.2f W]" <standard_lamp> (gPow_02) ["Power"] { channel="mqtt:topic:claudi:pow02:powerdelta" }
String Sonoff_Pow_02_GroupTopic "Stehlampe GroupTopic [%s]" <sonoff_pow> (gPow_02,gGrTop) ["Point"] { channel="mqtt:topic:claudi:pow02:grouptop" }
Das in den eckigen Klammern sind die Semantic Tags und bilden zusammen mit den Gruppen ind runden Klammern, das semantische Modell ab.
Wie schon weiter oben beschrieben, bedeutet das "Schloss", dass eine Änderung nicht über die Main-UI gemacht werden kann, sondern nur über den Editor (am besten VSC).
Ich muss ehrlich sagen, dass ich mich mit dem Anlegen von Items und Co. mit der Main-Ui nicht sonderlich anfreunden kann, da bin ich einfach zu blöd dazu. Da vergeht mir einfach die Lust am suchen

.
Wenn ich ein paar Items mal nicht haben will, dann benenn ich die Datei einfach um und schon gibt's die Items nicht mehr.
Oder was mach ich, wenn ich mal die "Schreibweise" meiner Item-Namen ändern will, wenn Udo mir einen Tipp bzw. ein Rule gebastelt hat, die Item-Namen braucht, die einer bestimmten Struktur gleichen müssen!!! Was dann??? Mit dem VSC-Editor ist das gleich erledigt und deine Items sind wieder schön im Semantic-Model. Mach das mal über die Web-Ui

. Erst mal alle Items löschen

und dann wieder neu anlegen

. Nee, nee.
Sollte aber irgendwann mal einer auf die Idee kommen und die Textkonfiguration abschaffen wollen, kann ich sie mir immer noch über den Massenimport anlegen.
Euer Noob
Peter