ein Fenster mit zwei Flügeln als ein zweiflügliches Fenster darstellen

Begonnen von jw1hal, 25 November 2018, 19:07:03

Vorheriges Thema - Nächstes Thema

jw1hal

Hallo,

ich habe vor, ein zweiflügliches Fenster, an dem 2 Fensterkontakte sind, als ein zweiflügliches Fenster in einer Readingsgroup darzustellen.

Im Schlafzimmer befindet sich eine Heizung mit einem HM-Thermostat.
Über der Heizung ist ein doppelflügliches Fenster.
An jedem Flügel ist jeweils ein optischer HM-Sensor.

Fenster links/rechts auf => Heizung 5°C und erst wenn beide wieder zu sind, Heizung wieder auf letzten Wert, funktioniert alles. Die sind also alle miteinander verpaart.

Nun habe ich eine Heizungs-Readingsgroup mit 5 Wohnräumen (Wohnzimmer, Schlafzimmer, usw.).
In jeden Raum ist jeweils eine Heizung mit je einem Thermostat. Das wird mir alles brav angezeigt.
Desweiteren ist in jedem Raum entweder ein einflügliches oder ein zweiflügliches Fenster. Die möchte ich nun jeweils mit nur einem Symbol darstellen. Also wenn sie zu sind, jeweils nur ein grünes ein- oder zweiflügliches grünes Fenster und wenn sie offen sind, jeweils auch nur ein rotes ein- oder zweiflügliches Fenster, so dass man bei den zweiflüglichen Fenster jeweils das Symbol nimmt, wo das rechte, linke oder beide Fenster offen sind.

Wie kann ich dies nun in einem Dummy und/oder in meiner Heizungs-Readingsgroup realisieren?
Ich habe s schon soweit hin bekommen, dass mir der Heizungskram zu jeden Raum und auch beide Fensterflügel und die dazugehörigen Batterien seperat angezeigt werden. Aber wie kann ich die Anzeige ob Fenster offen oder zu auf nur ein Symbol verringern? das müsste doch gehen. Gesucht habe ich schon, aber bis jetzt leider noch keine für mich in Frage kommenden ähnlichen Beispiele gefunden.

Ich hoffe, man konnte mir folgen ...

Gruß jw1hal
Raspberry Pi 3 Model B Rev 1.2; Linux 4.9.59-v7+; Raspbian GNU/Linux 9 (stretch); CUL433 (VTS 0.29 CSM868); CUL 868 (VTS 0.29 CSM868); 6x BrennenstuhlRCR1000N; 8x ZAP; 3x EmilLux; 10x Sonoff Basic (Tasmota 5.10.0f); 5x HM-CC-RT-DN; 9x HM-SEC-SCo; 8x HM-SEC-SCo, 7x HM-LC-Sw1PBU-FM; Fritz!Box 7362 SL

jw1hal

Zitat von: jw1hal am 25 November 2018, 19:07:03
Hallo,

ich habe vor, ein zweiflügliches Fenster, an dem 2 Fensterkontakte sind, als ein zweiflügliches Fenster in einer Readingsgroup darzustellen.

Im Schlafzimmer befindet sich eine Heizung mit einem HM-Thermostat.
Über der Heizung ist ein doppelflügliches Fenster.
An jedem Flügel ist jeweils ein optischer HM-Sensor.

Fenster links/rechts auf => Heizung 5°C und erst wenn beide wieder zu sind, Heizung wieder auf letzten Wert, funktioniert alles. Die sind also alle miteinander verpaart.

Nun habe ich eine Heizungs-Readingsgroup mit 5 Wohnräumen (Wohnzimmer, Schlafzimmer, usw.).
In jeden Raum ist jeweils eine Heizung mit je einem Thermostat. Das wird mir alles brav angezeigt.
Desweiteren ist in jedem Raum entweder ein einflügliches oder ein zweiflügliches Fenster. Die möchte ich nun jeweils mit nur einem Symbol darstellen. Also wenn sie zu sind, jeweils nur ein grünes ein- oder zweiflügliches grünes Fenster und wenn sie offen sind, jeweils auch nur ein rotes ein- oder zweiflügliches Fenster, so dass man bei den zweiflüglichen Fenster jeweils das Symbol nimmt, wo das rechte, linke oder beide Fenster offen sind.

Wie kann ich dies nun in einem Dummy und/oder in meiner Heizungs-Readingsgroup realisieren?
Ich habe s schon soweit hin bekommen, dass mir der Heizungskram zu jeden Raum und auch beide Fensterflügel und die dazugehörigen Batterien seperat angezeigt werden. Aber wie kann ich die Anzeige ob Fenster offen oder zu auf nur ein Symbol verringern? das müsste doch gehen. Gesucht habe ich schon, aber bis jetzt leider noch keine für mich in Frage kommenden ähnlichen Beispiele gefunden.

Ich hoffe, man konnte mir folgen ...

Nachtrag: Hier noch mein Readingsgoup:Internals:
   CFGFN     
   DEF        <%sani_heating>,<Soll>,<Soll neu>,<Ist>,<Ventil>,<Modus>,<Lock>,<Bat-H>,<Fenster>,<>,<Bat-F>,<>
01_WZ_Heizung_Clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,R-btnLock@01_WZ_Heizung,batteryLevel@01_WZ_Heizung,state@01_WZ_Fenster_links,state@01_WZ_Balkontuer_rechts,battery@01_WZ_Fenster_links,battery@01_WZ_Balkontuer_rechts
02_KZ_Heizung_Clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,R-btnLock@02_KZ_Heizung,batteryLevel@02_KZ_Heizung,state@02_KZ_Fenster,battery@02_KZ_Fenster
03_SZ_Heizung_Clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,R-btnLock@03_SZ_Heizung,batteryLevel@03_SZ_Heizung,state@03_SZ_Fenster_links,state@03_SZ_Fenster_rechts,battery@03_SZ_Fenster_links,battery@03_SZ_Fenster_rechts
04_KU_Heizung_Clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,R-btnLock@04_KU_Heizung,batteryLevel@04_KU_Heizung,state@04_KU_Fenster_links,state@04_KU_Fenster_rechts,battery@04_KU_Fenster_links,battery@04_KU_Fenster_rechts
05_BW_Heizung_Clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,R-btnLock@05_BW_Heizung,batteryLevel@05_BW_Heizung,state@05_BW_Fenster,battery@05_BW_Fenster

   NAME       Heizung_RG
   NR         12564
   NTFY_ORDER 50-TemperatursensorenHeizung
   STATE      Initialized
   TYPE       readingsGroup
   mayBeVisible 1
   CONTENT:
     01_WZ_Heizung_Clima 1
     02_KZ_Heizung_Clima 1
     03_SZ_Heizung_Clima 1
     04_KU_Heizung_Clima 1
     05_BW_Heizung_Clima 1
   CONTENT2:
     01_WZ_Balkontuer_rechts 1
     01_WZ_Fenster_links 1
     01_WZ_Heizung 1
     02_KZ_Fenster 1
     02_KZ_Heizung 1
     03_SZ_Fenster_links 1
     03_SZ_Fenster_rechts 1
     03_SZ_Heizung 1
     04_KU_Fenster_links 1
     04_KU_Fenster_rechts 1
     04_KU_Heizung 1
     05_BW_Fenster 1
     05_BW_Heizung 1
   DEVICES:
     ARRAY(0x2e86b88)
     ARRAY(0x5bde390)
     ARRAY(0x21dbf28)
     ARRAY(0x5c03458)
     ARRAY(0x56ea068)
     ARRAY(0x56e5d68)
   DEVICES2:
     ARRAY(0x2e86b88)
     ARRAY(0x5bde390)
     ARRAY(0x21dbf28)
     ARRAY(0x5c03458)
     ARRAY(0x56ea068)
     ARRAY(0x56e5d68)
     ARRAY(0x4bc21b0)
     ARRAY(0x5bb28f0)
     ARRAY(0x20f0f98)
     ARRAY(0x4aaccd8)
     ARRAY(0x5b606c8)
     ARRAY(0x503eac0)
     ARRAY(0x4aa78c8)
     ARRAY(0x5bfe410)
     ARRAY(0x4ad13b8)
     ARRAY(0x4ba4228)
     ARRAY(0x4cdabd0)
     ARRAY(0x5eb0840)
     ARRAY(0x5eb0708)
     ARRAY(0x56f75d8)
     ARRAY(0x5ddcd50)
     ARRAY(0x4cc8e18)
     ARRAY(0x5ee74c8)
     ARRAY(0x5b5dbe8)
     ARRAY(0x5701f78)
     ARRAY(0x55cd3d8)
     ARRAY(0x588a428)
     ARRAY(0x5bfb8b0)
     ARRAY(0x5710460)
     ARRAY(0x5eef578)
     ARRAY(0x5f4e710)
     ARRAY(0x5eb5420)
   fhem:
     lastDefChange 516
     last_update 1543169453.29366
   helper:
     DEF       
     valueFormat {
if($READING eq "ValvePosition" && $VALUE ne "0"){$VALUE = int($VALUE/10)*10}
elsif($READING eq "batteryLevel"){
if($VALUE>3){$VALUE=100}
elsif($VALUE eq "ok"){$VALUE=100}
elsif($VALUE>2.5){$VALUE=75}
elsif($VALUE>2.3){$VALUE=50}
elsif($VALUE>2.1){$VALUE=25}
elsif($VALUE eq "low"){$VALUE=0}
else{$VALUE=0}}
elsif($READING eq "battery"){
if($VALUE>3){$VALUE=100}
elsif($VALUE eq "ok"){$VALUE=100}
elsif($VALUE>2.5){$VALUE=75}
elsif($VALUE>2.3){$VALUE=50}
elsif($VALUE>2.1){$VALUE=25}
elsif($VALUE eq "low"){$VALUE=0}
else{$VALUE=0}}}

     valueStyle {if($READING eq "measured-temp")
{my $t=$VALUE;;my $d=ReadingsVal($DEVICE,'desired-temp',0);;
if($t-$d>=1){'style="color:rgb(251,63,11);;"'}
elsif($t-$d<=-1){'style="color:rgb(79,58,251);;"'}
else{'style="color:rgb(12,251,12);;"'}}}
     valueSuffix {
"desired-temp"=>" °C", "measured-temp"=>" °C",
"ValvePosition"=>" (".ReadingsVal($DEVICE,$READING,0)." %)",
"batteryLevel"=>" (".ReadingsVal($DEVICE,$READING,0)." V)"
}
     cellStyle:
       r:1        style="font-weight:bold;;font-size:16px"
     commands:
       Heizung_RG.sollsetz desired-temp:on,off,5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0,9.5,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0,30.5
       R-btnLock.off set %DEVICE regSet btnLock on
       R-btnLock.on set %DEVICE regSet btnLock off
       controlMode.auto set %DEVICE controlMode manual
       controlMode.manual set %DEVICE controlMode auto
     mapping:
       01_WZ_Heizung_Clima Wohnzimmer
       02_KZ_Heizung_Clima Kinderzimmer
       03_SZ_Heizung_Clima Schlafzimmer
       04_KU_Heizung_Clima Küche
       05_BW_Heizung_Clima Bad
     positions:
       01_WZ_Balkontuer_rechts.battery 2:11
       01_WZ_Balkontuer_rechts.state 2:9
       01_WZ_Fenster_links.battery 2:10
       01_WZ_Fenster_links.state 2:8
       01_WZ_Heizung.R-btnLock 2:6
       01_WZ_Heizung.batteryLevel 2:7
       01_WZ_Heizung_Clima.ValvePosition 2:4
       01_WZ_Heizung_Clima.controlMode 2:5
       01_WZ_Heizung_Clima.desired-temp 2:1
       01_WZ_Heizung_Clima.measured-temp 2:3
       02_KZ_Fenster.battery 3:10
       02_KZ_Fenster.state 3:8
       02_KZ_Heizung.R-btnLock 3:6
       02_KZ_Heizung.batteryLevel 3:7
       02_KZ_Heizung_Clima.ValvePosition 3:4
       02_KZ_Heizung_Clima.controlMode 3:5
       02_KZ_Heizung_Clima.desired-temp 3:1
       02_KZ_Heizung_Clima.measured-temp 3:3
       03_SZ_Fenster_links.battery 4:10
       03_SZ_Fenster_links.state 4:8
       03_SZ_Fenster_rechts.battery 4:11
       03_SZ_Fenster_rechts.state 4:9
       03_SZ_Heizung.R-btnLock 4:6
       03_SZ_Heizung.batteryLevel 4:7
       03_SZ_Heizung_Clima.ValvePosition 4:4
       03_SZ_Heizung_Clima.controlMode 4:5
       03_SZ_Heizung_Clima.desired-temp 4:1
       03_SZ_Heizung_Clima.measured-temp 4:3
       04_KU_Fenster_links.battery 5:10
       04_KU_Fenster_links.state 5:8
       04_KU_Fenster_rechts.battery 5:11
       04_KU_Fenster_rechts.state 5:9
       04_KU_Heizung.R-btnLock 5:6
       04_KU_Heizung.batteryLevel 5:7
       04_KU_Heizung_Clima.ValvePosition 5:4
       04_KU_Heizung_Clima.controlMode 5:5
       04_KU_Heizung_Clima.desired-temp 5:1
       04_KU_Heizung_Clima.measured-temp 5:3
       05_BW_Fenster.battery 6:10
       05_BW_Fenster.state 6:8
       05_BW_Heizung.R-btnLock 6:6
       05_BW_Heizung.batteryLevel 6:7
       05_BW_Heizung_Clima.ValvePosition 6:4
       05_BW_Heizung_Clima.controlMode 6:5
       05_BW_Heizung_Clima.desired-temp 6:1
       05_BW_Heizung_Clima.measured-temp 6:3
     valueColumn:
       R-btnLock  6
       ValvePosition 4
       battery    10
       batteryLevel 7
       controlMode 5
       desired-temp 1
       measured-temp 3
       sollsetz   2
       state      8
     valueIcon:
       R-btnLock.off secur_open@0CFB0C
       R-btnLock.on secur_locked@F7301D
       R-btnLock.set_off hourglass
       R-btnLock.set_on hourglass
       ValvePosition.0 sani_heating_level_0@002AE0
       ValvePosition.10 sani_heating_level_10@F8D53D
       ValvePosition.100 sani_heating_level_100@E50005
       ValvePosition.20 sani_heating_level_20@FF9341
       ValvePosition.30 sani_heating_level_30@F17F3F
       ValvePosition.40 sani_heating_level_40@E46C3C
       ValvePosition.50 sani_heating_level_50@DE3B3A
       ValvePosition.60 sani_heating_level_60@A30D2D
       ValvePosition.70 sani_heating_level_70@B40A23
       ValvePosition.80 sani_heating_level_80@C40619
       ValvePosition.90 sani_heating_level_90@D4030F
       battery.0  measure_battery_0@E50005
       battery.100 measure_battery_100@0CFB0C
       battery.25 measure_battery_25@FB5909
       battery.50 measure_battery_50@F5FF10
       battery.75 measure_battery_75@42BC0A
       batteryLevel.0 measure_battery_0@E50005
       batteryLevel.100 measure_battery_100@0CFB0C
       batteryLevel.25 measure_battery_25@FB5909
       batteryLevel.50 measure_battery_50@F5FF10
       batteryLevel.75 measure_battery_75@42BC0A
       controlMode.auto sani_heating_automatic@FFC13A
       controlMode.boost sani_heating_boost@FB0C02
       controlMode.manual sani_heating_manual@795CFF
       controlMode.set_auto hourglass
       controlMode.set_boost hourglass
       controlMode.set_manual hourglass
       state.closed fts_window_1w@green
       state.open fts_window_1w_open@red
     values:
       formated:
         undef
         ARRAY(0x55f0f68)
         undef
         ARRAY(0x5d90cf0)
         ARRAY(0x5eebea8)
         ARRAY(0x5ddb910)
         ARRAY(0x4fae4e8)
         ARRAY(0x550c048)
         ARRAY(0x56e4360)
         ARRAY(0x56e8ae0)
         ARRAY(0x4aaa938)
         ARRAY(0x5eb5b88)
       orig:
         undef
         ARRAY(0x550c450)
         undef
         ARRAY(0x5bfba30)
         ARRAY(0x56fdaf0)
         ARRAY(0x5c48128)
         ARRAY(0x5d99908)
         ARRAY(0x5c3b3d0)
         ARRAY(0x5c68968)
         ARRAY(0x5c62b38)
         ARRAY(0x5b5d498)
         ARRAY(0x3e12670)
       prefixsuffix:
         undef
         ARRAY(0x5c05758)
         undef
         ARRAY(0x5ef4850)
         ARRAY(0x5d99710)
         ARRAY(0x588d728)
         ARRAY(0x4ea6828)
         ARRAY(0x5898af0)
         ARRAY(0x4b1d7a0)
         ARRAY(0x55cdcd8)
         ARRAY(0x4e421e0)
         ARRAY(0x58a0b80)
Attributes:
   cellStyle  {
"r:1"=>'style="font-weight:bold;;font-size:16px"'
}
   commands   {
'Heizung_RG.sollsetz'=>'desired-temp:on,off,5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0,9.5,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0,30.5',
"controlMode.manual"=>"set %DEVICE controlMode auto",
"controlMode.auto"=>"set %DEVICE controlMode manual",
"R-btnLock.on"=>"set %DEVICE regSet btnLock off",
"R-btnLock.off"=>"set %DEVICE regSet btnLock on"
}
   group      20_Sensoren_RG
   mapping    {
'01_WZ_Heizung_Clima'=>"Wohnzimmer",
'02_KZ_Heizung_Clima'=>"Kinderzimmer",
'03_SZ_Heizung_Clima'=>"Schlafzimmer",
'04_KU_Heizung_Clima'=>"Küche",
'05_BW_Heizung_Clima'=>"Bad"
}
   room       00_Diabeck,70_Heizung
   valueColumn {
'desired-temp'=>1,
'sollsetz'=>2,
'measured-temp'=>3,
'ValvePosition'=>4,
'controlMode'=>5,
'R-btnLock'=>6,
'batteryLevel'=>7,
'state'=>8,

'battery'=>10

}
   valueFormat {
if($READING eq "ValvePosition" && $VALUE ne "0"){$VALUE = int($VALUE/10)*10}
elsif($READING eq "batteryLevel"){
if($VALUE>3){$VALUE=100}
elsif($VALUE eq "ok"){$VALUE=100}
elsif($VALUE>2.5){$VALUE=75}
elsif($VALUE>2.3){$VALUE=50}
elsif($VALUE>2.1){$VALUE=25}
elsif($VALUE eq "low"){$VALUE=0}
else{$VALUE=0}}
elsif($READING eq "battery"){
if($VALUE>3){$VALUE=100}
elsif($VALUE eq "ok"){$VALUE=100}
elsif($VALUE>2.5){$VALUE=75}
elsif($VALUE>2.3){$VALUE=50}
elsif($VALUE>2.1){$VALUE=25}
elsif($VALUE eq "low"){$VALUE=0}
else{$VALUE=0}}}

   valueIcon  {
'controlMode.manual' => 'sani_heating_manual@795CFF',
'controlMode.auto' => 'sani_heating_automatic@FFC13A',
'controlMode.boost' => 'sani_heating_boost@FB0C02',
'R-btnLock.on'=>'secur_locked@F7301D',
'R-btnLock.off'=>'secur_open@0CFB0C',
'ValvePosition.0' => 'sani_heating_level_0@002AE0',
'ValvePosition.10' => 'sani_heating_level_10@F8D53D',
'ValvePosition.20' => 'sani_heating_level_20@FF9341',
'ValvePosition.30' => 'sani_heating_level_30@F17F3F',
'ValvePosition.40' => 'sani_heating_level_40@E46C3C',
'ValvePosition.50' => 'sani_heating_level_50@DE3B3A',
'ValvePosition.60' => 'sani_heating_level_60@A30D2D',
'ValvePosition.70' => 'sani_heating_level_70@B40A23',
'ValvePosition.80' => 'sani_heating_level_80@C40619',
'ValvePosition.90' => 'sani_heating_level_90@D4030F',
'ValvePosition.100' => 'sani_heating_level_100@E50005',
'batteryLevel.100'=>'measure_battery_100@0CFB0C',
'batteryLevel.75'=>'measure_battery_75@42BC0A',
'batteryLevel.50'=>'measure_battery_50@F5FF10',
'batteryLevel.25'=>'measure_battery_25@FB5909',
'batteryLevel.0'=>'measure_battery_0@E50005',
'battery.100'=>'measure_battery_100@0CFB0C',
'battery.75'=>'measure_battery_75@42BC0A',
'battery.50'=>'measure_battery_50@F5FF10',
'battery.25'=>'measure_battery_25@FB5909',
'battery.0'=>'measure_battery_0@E50005',
'controlMode.set_boost' => 'hourglass',
'controlMode.set_auto' => 'hourglass',
'controlMode.set_manual' => 'hourglass',
'R-btnLock.set_on' => 'hourglass',
'R-btnLock.set_off' => 'hourglass',
'state.closed'=>'fts_window_1w@green',
'state.open'=>'fts_window_1w_open@red'


}
   valueStyle {if($READING eq "measured-temp")
{my $t=$VALUE;;my $d=ReadingsVal($DEVICE,'desired-temp',0);;
if($t-$d>=1){'style="color:rgb(251,63,11);;"'}
elsif($t-$d<=-1){'style="color:rgb(79,58,251);;"'}
else{'style="color:rgb(12,251,12);;"'}}}
   valueSuffix {
"desired-temp"=>" °C", "measured-temp"=>" °C",
"ValvePosition"=>" (".ReadingsVal($DEVICE,$READING,0)." %)",
"batteryLevel"=>" (".ReadingsVal($DEVICE,$READING,0)." V)"
}


Gruß jw1hal
Raspberry Pi 3 Model B Rev 1.2; Linux 4.9.59-v7+; Raspbian GNU/Linux 9 (stretch); CUL433 (VTS 0.29 CSM868); CUL 868 (VTS 0.29 CSM868); 6x BrennenstuhlRCR1000N; 8x ZAP; 3x EmilLux; 10x Sonoff Basic (Tasmota 5.10.0f); 5x HM-CC-RT-DN; 9x HM-SEC-SCo; 8x HM-SEC-SCo, 7x HM-LC-Sw1PBU-FM; Fritz!Box 7362 SL

RomanticBoy83

Wenn denn alles funktioniert? Warum dann nicht den Window-Kanal vom  Aktor dafür nehmen?

jw1hal

OK, ist ne Idee. Ich probiere mal ... melde mich nochmal ...

Edit:
Ich glaube das geht nicht, weil da ja last bei state steht, also was zuletzt geöffnet oder geschlossen wurde. Da weiß man ja nicht, was der andere Flügel für einen Zustand hat. Ich gucke mir das aber nochmal genauer an, denn schließlich muss der Thermostat ja auch wissen, ob beide Flügel oder nur einer offen ist.
Raspberry Pi 3 Model B Rev 1.2; Linux 4.9.59-v7+; Raspbian GNU/Linux 9 (stretch); CUL433 (VTS 0.29 CSM868); CUL 868 (VTS 0.29 CSM868); 6x BrennenstuhlRCR1000N; 8x ZAP; 3x EmilLux; 10x Sonoff Basic (Tasmota 5.10.0f); 5x HM-CC-RT-DN; 9x HM-SEC-SCo; 8x HM-SEC-SCo, 7x HM-LC-Sw1PBU-FM; Fritz!Box 7362 SL

RomanticBoy83

stimmt! Ich hab gerade mal bei mir eine ähnliche Stelle gesucht. Ich habe das über eine zusätzliche Funktion gemacht, welche im attr stateFormat werkelt und somit mehr als nur an und aus zurück gibt. In der Funktion prüfe ich dann auch andere Sensoren und habe somit mehr Möglichkeiten im attr stateIcon.

Wuppi68

mach die Doppelfester jeweils in einer Structure das klappt wunderbar
FHEM unter Proxmox als VM

jw1hal

@RomanticBoy83
Hast du da mal ein Beispiel für mich, was ich verwenden und auf meine Bedürfnisse abändern kann?

@Wuppi68
Danke. Ich habe zwar kein Plan davon, aber werde mich jetzt mal mit beschäftigen. Mal schauen, ob mir da ein Licht aufgeht.
Raspberry Pi 3 Model B Rev 1.2; Linux 4.9.59-v7+; Raspbian GNU/Linux 9 (stretch); CUL433 (VTS 0.29 CSM868); CUL 868 (VTS 0.29 CSM868); 6x BrennenstuhlRCR1000N; 8x ZAP; 3x EmilLux; 10x Sonoff Basic (Tasmota 5.10.0f); 5x HM-CC-RT-DN; 9x HM-SEC-SCo; 8x HM-SEC-SCo, 7x HM-LC-Sw1PBU-FM; Fritz!Box 7362 SL

jw1hal

Entweder hab ich´s noch nicht gefunden oder es ist nicht das, was ich suche. Mit Structure kann ich Geräte zusammenfassen, gemeinsam schalten oder gemeinsame Ergebnisse erhalten. Also ALLES an oder aus, ALLES offen oder geschlossen. Das ist aber nicht das, was ich suche.
Raspberry Pi 3 Model B Rev 1.2; Linux 4.9.59-v7+; Raspbian GNU/Linux 9 (stretch); CUL433 (VTS 0.29 CSM868); CUL 868 (VTS 0.29 CSM868); 6x BrennenstuhlRCR1000N; 8x ZAP; 3x EmilLux; 10x Sonoff Basic (Tasmota 5.10.0f); 5x HM-CC-RT-DN; 9x HM-SEC-SCo; 8x HM-SEC-SCo, 7x HM-LC-Sw1PBU-FM; Fritz!Box 7362 SL

Wuppi68

Zitat von: jw1hal am 25 November 2018, 22:22:42
Entweder hab ich´s noch nicht gefunden oder es ist nicht das, was ich suche. Mit Structure kann ich Geräte zusammenfassen, gemeinsam schalten oder gemeinsame Ergebnisse erhalten. Also ALLES an oder aus, ALLES offen oder geschlossen. Das ist aber nicht das, was ich suche.

dann kannst Du es auch direkt in der ReadingsGroup machen ;-)

im Attribut valueFormat steht bei mir folgende Formel drinnen ...

{
if($READING eq 'ValvePosition' && $VALUE ne '0')
{$VALUE = int($VALUE/10)*10}
elsif($READING eq 'batteryLevel')
{
if($VALUE>=3)
{$VALUE=100}
elsif($VALUE>=2.8)
{$VALUE=75}
elsif($VALUE>=2.6)
{$VALUE=50}
elsif($VALUE>=2.4)
{$VALUE=25}
else
{$VALUE=0}
}
elsif($READING eq 'co2')
{
if($VALUE<800)
{$VALUE=1}
elsif($VALUE<1500)
{$VALUE=2}
else
{$VALUE=3}
}
elsif($READING eq 'desired-temp' and $VALUE eq 'on')
{
$VALUE=99
}
}


und im Attribut valueIcon

{
"controlMode.manual"      => 'sani_heating_manual@795CFF',
"controlMode.auto"        => 'sani_heating_automatic@FFC13A',
"controlMode.boost"       => 'sani_heating_boost@FB0C02',
'humidity'                => 'humidity@6FD9FB',
'R-modusBtnLock.on'       => 'secur_locked@F7301D',
'R-modusBtnLock.off'      => 'secur_open@0CFB0C',
'R-modusBtnLock.set_on'   => 'hourglass',
'R-modusBtnLock.set_of'   => 'hourglass',
'R-btnLock.on'            => 'secur_locked@F7301D',
'R-btnLock.off'           => 'secur_open@0CFB0C',
'R-btnLock.set_on'        => 'hourglass',
'R-btnLock.set_off'       => 'hourglass',
'R-globalBtnLock.on'      => 'secur_locked@F7301D',
'R-globalBtnLock.off'     => 'secur_open@0CFB0C',
'R-globalBtnLock.set_on'  => 'hourglass',
'R-globalBtnLock.set_off' => 'hourglass',
'ValvePosition.0'         => 'sani_heating_level_0@002AE0',
'ValvePosition.10'        => 'sani_heating_level_10@F8D53D',
'ValvePosition.20'        => 'sani_heating_level_20@FF9341',
'ValvePosition.30'        => 'sani_heating_level_30@F17F3F',
'ValvePosition.40'        => 'sani_heating_level_40@E46C3C',
'ValvePosition.50'        => 'sani_heating_level_50@DE3B3A',
'ValvePosition.60'        => 'sani_heating_level_60@A30D2D',
'ValvePosition.70'        => 'sani_heating_level_70@B40A23',
'ValvePosition.80'        => 'sani_heating_level_80@C40619',
'ValvePosition.90'        => 'sani_heating_level_90@D4030F',
'ValvePosition.100'       => 'sani_heating_level_100@E50005',
'battery.ok'              => 'measure_battery_100@42BC0A',
'battery.low'             => 'measure_battery_0@E50005',
'batteryLevel.100'        => 'measure_battery_100@0CFB0C',
'batteryLevel.75'         => 'measure_battery_75@42BC0A',
'batteryLevel.50'         => 'measure_battery_50@F5FF10',
'batteryLevel.25'         => 'measure_battery_25@FB5909',
'batteryLevel.0'          => 'measure_battery_0@E50005',
'controlMode.set_boost'   => 'hourglass',
'controlMode.set_auto'    => 'hourglass',
'controlMode.set_manual'  => 'hourglass',
'controlMode.set_on'      => 'hourglass',
'R-globalBtnLock.set_on'  => 'hourglass',
'R-globalBtnLock.set_off' => 'hourglass',
'R-modusBtnLock.set_on'   => 'hourglass',
'R-modusBtnLock.set_off'  => 'hourglass',
'state.closed'            => 'fts_window_1w@green',
'state.open'              => 'fts_window_1w_open@red',
'co2.1'                   => 'system_fhem@green',
'co2.2'                   => 'system_fhem@orange',
'co2.3'                   => 'system_fhem@red'
}


dann solltest Du am besten nur im valueFormat Deine Doppelfenster entsprechend aggreieren (state.left|right|both) und die passenden Icons bei valueIcon anwählen ;-)
FHEM unter Proxmox als VM

jw1hal

Da steige ich leider nicht ganz durch und ein Beispiel kann ich leider auch nicht erkennen, was ich an meine Gegebenheiten anpassen könnte.
Raspberry Pi 3 Model B Rev 1.2; Linux 4.9.59-v7+; Raspbian GNU/Linux 9 (stretch); CUL433 (VTS 0.29 CSM868); CUL 868 (VTS 0.29 CSM868); 6x BrennenstuhlRCR1000N; 8x ZAP; 3x EmilLux; 10x Sonoff Basic (Tasmota 5.10.0f); 5x HM-CC-RT-DN; 9x HM-SEC-SCo; 8x HM-SEC-SCo, 7x HM-LC-Sw1PBU-FM; Fritz!Box 7362 SL

jw1hal

Raspberry Pi 3 Model B Rev 1.2; Linux 4.9.59-v7+; Raspbian GNU/Linux 9 (stretch); CUL433 (VTS 0.29 CSM868); CUL 868 (VTS 0.29 CSM868); 6x BrennenstuhlRCR1000N; 8x ZAP; 3x EmilLux; 10x Sonoff Basic (Tasmota 5.10.0f); 5x HM-CC-RT-DN; 9x HM-SEC-SCo; 8x HM-SEC-SCo, 7x HM-LC-Sw1PBU-FM; Fritz!Box 7362 SL

Hollo

Zitat von: jw1hal am 25 November 2018, 22:22:42
Entweder hab ich´s noch nicht gefunden oder es ist nicht das, was ich suche. Mit Structure kann ich Geräte zusammenfassen, gemeinsam schalten oder gemeinsame Ergebnisse erhalten. Also ALLES an oder aus, ALLES offen oder geschlossen. Das ist aber nicht das, was ich suche.
Nur der Vollständigkeit halber...
structure heisst nicht ALLES oder NICHTS.
In Deinem Fall könntest Du auf einen Blick sehen, ob Dein Fenster komplett geschlossen, oder mindestens ein Flügel offen ist.
In den Details der structure hättest Du den genauen Status von jedem einzelnen Flügel.

So sehe ich bei mir auf einen Blick, ob alle Wohnungsfenster geschlossen sind, oder ob (und wenn ja welche(s) noch was offen/gekippt ist.

FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

jw1hal

Ich wüsste aber nicht, wie ich das dann im readingsgroup nutzen könnte. Da brauche ich jeweils ein Device mit mehreren Status'en. Und so mit diesen closeclose, openopen, closeopen und openclose konnte ich dann was anfangen, das hatte ich gesucht.

Nun werde ich aber alles ändern. Ich hatte überlegt, ob ich zu diesen Fensterkontakten, bei denen ich ja nur auf und zu erkennen kann, nochmal so viele dazu hole und dann gleich noch die Türen damit ausstatte, damit ich auch gekippte Fenster und offene Türen sehen kann.

Und gibt es ja auch die Möglichkeit mit diesen Fenstergriffsensoren. Es könnte ja sein, dass ein Fenster am Griff offen ist, aber der Flügel geschlossen bzw. angelehnt. So könnte man das mit den Fenstergriffsensoren besser machen. Da dies aber dann nochmal über 500 kosten würde, mache ich es anders. Da kaufe ich nur die Griffsensoren, sind dann nochmal um die 300 und die Optischen kann ich dann an die Türen machen.

Von daher muss ich dann eh alles umstricken. Da kommen bestimmt wieder neue Probleme.

Auf jeden Fall hatte ich mich nun gefreut, dass ich bei Doppelflüglern beide Flügel in einem Symbol sehe.

Nun brauche ich nur noch ein Symbol mit Tür und Fenster (Balkon) in Kombination. Zur Not muss ich mir das irgendwie selbst basteln.
Raspberry Pi 3 Model B Rev 1.2; Linux 4.9.59-v7+; Raspbian GNU/Linux 9 (stretch); CUL433 (VTS 0.29 CSM868); CUL 868 (VTS 0.29 CSM868); 6x BrennenstuhlRCR1000N; 8x ZAP; 3x EmilLux; 10x Sonoff Basic (Tasmota 5.10.0f); 5x HM-CC-RT-DN; 9x HM-SEC-SCo; 8x HM-SEC-SCo, 7x HM-LC-Sw1PBU-FM; Fritz!Box 7362 SL

jw1hal

Um das abzuschließen, möchte ich hier noch meine derzeitige endgültige Lösung aufzeigen.
Ich habe nun eine Readingsgroup, in der mir von 5 Räumen die Temperaturen zu den Heizungen, der Status von Fenster und Türen, alle Batterien davon angezeigt werden. Desweiteren kann ich die Temperatur udn den Modus ändern und auf Burst stellen. Verbunden damit habe ich die Sache noch unterschiedliche Einstellungen zu Fenster/Tür/auf/gekippt/geschlossen erstellt, was aber nichts mit dem Thema hier zu tun hat und man hier nachlesen kann.

Hier nun nochmal die List´s zu dieser Thematik hier:
Readingsgroup:Internals:
   DEF        <Heizung>,<|>,<Soll>,<Soll neu>,<Ist>,<Ventil>,<Modus/Boost>,<Sperre>,<Batterie>,<|>,<Fenster>,<Batterie >,<|>,<Türen>,<Batterie>
01_WZ_Heizung_Clima:<|>,desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,controlModeboost,R-globalBtnLock@01_WZ_Heizung,R-btnLock@01_WZ_Heizung,batteryLevel@01_WZ_Heizung,<|>,state@01_WZ_Fenster,battery@01_WZ_Fenster_links,battery@01_WZ_Balkontuer_rechts,<|>,state@01_WZ_Tuer,battery@01_WZ_Tuer
02_KZ_Heizung_Clima:<|>,desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,controlModeboost,R-globalBtnLock@02_KZ_Heizung,R-btnLock@02_KZ_Heizung,batteryLevel@02_KZ_Heizung,<|>,state@02_KZ_Fenster,battery@02_KZ_Fenster,<>,<|>,state@02_KZ_Tuer,battery@02_KZ_Tuer
03_SZ_Heizung_Clima:<|>,desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,controlModeboost,R-globalBtnLock@03_SZ_Heizung,R-btnLock@03_SZ_Heizung,batteryLevel@03_SZ_Heizung,<|>,state@03_SZ_Fenster,battery@03_SZ_Fenster_links,battery@03_SZ_Fenster_rechts,<|>,state@03_SZ_Tuer,battery@03_SZ_Tuer
04_KU_Heizung_Clima:<|>,desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,controlModeboost,R-globalBtnLock@04_KU_Heizung,R-btnLock@04_KU_Heizung,batteryLevel@04_KU_Heizung,<|>,state@04_KU_Fenster,battery@04_KU_Fenster_links,battery@04_KU_Fenster_rechts,<|>,state@04_KU_Tuer,battery@04_KU_Tuer
05_BW_Heizung_Clima:<|>,desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,controlModeboost,R-globalBtnLock@05_BW_Heizung,R-btnLock@05_BW_Heizung,batteryLevel@05_BW_Heizung,<|>,state@05_BW_Fenster,battery@05_BW_Fenster,<>,<|>,state@05_BW_Tuer,battery@05_BW_Tuer

   NAME       Heizung_RG
   NR         340
   NTFY_ORDER 50-Heizung_RG
   STATE      Initialized
   TYPE       readingsGroup
   mayBeVisible 1
   CONTENT:
     01_WZ_Heizung_Clima 1
     02_KZ_Heizung_Clima 1
     03_SZ_Heizung_Clima 1
     04_KU_Heizung_Clima 1
     05_BW_Heizung_Clima 1
   CONTENT2:
     01_WZ_Balkontuer_rechts 1
     01_WZ_Fenster 1
     01_WZ_Fenster_links 1
     01_WZ_Heizung 1
     01_WZ_Tuer 1
     02_KZ_Fenster 1
     02_KZ_Heizung 1
     02_KZ_Tuer 1
     03_SZ_Fenster 1
     03_SZ_Fenster_links 1
     03_SZ_Fenster_rechts 1
     03_SZ_Heizung 1
     03_SZ_Tuer 1
     04_KU_Fenster 1
     04_KU_Fenster_links 1
     04_KU_Fenster_rechts 1
     04_KU_Heizung 1
     04_KU_Tuer 1
     05_BW_Fenster 1
     05_BW_Heizung 1
     05_BW_Tuer 1
   DEVICES:
     ARRAY(0x487c5f8)
     ARRAY(0x45e7168)
     ARRAY(0x4e7b208)
     ARRAY(0x3af9428)
     ARRAY(0x48ca900)
     ARRAY(0x4eb0260)
   DEVICES2:
     ARRAY(0x487c5f8)
     ARRAY(0x45e7168)
     ARRAY(0x4e7b208)
     ARRAY(0x3af9428)
     ARRAY(0x48ca900)
     ARRAY(0x4eb0260)
     ARRAY(0x4addcb8)
     ARRAY(0x4eb92b0)
     ARRAY(0x50d2668)
     ARRAY(0x4eb9478)
     ARRAY(0x5104688)
     ARRAY(0x4e4a0f8)
     ARRAY(0x48b2718)
     ARRAY(0x50eba00)
     ARRAY(0x4e937b8)
     ARRAY(0x50ec878)
     ARRAY(0x50e3c58)
     ARRAY(0x49f7b28)
     ARRAY(0x48b98c0)
     ARRAY(0x48b1ba8)
     ARRAY(0x4e02a78)
     ARRAY(0x4f0e240)
     ARRAY(0x4e24628)
     ARRAY(0x4af0d78)
     ARRAY(0x50e53b0)
     ARRAY(0x48aae60)
     ARRAY(0x50f8aa8)
     ARRAY(0x28f5da0)
     ARRAY(0x45eada8)
     ARRAY(0x50fcc20)
     ARRAY(0x4ed6380)
     ARRAY(0x50faea8)
     ARRAY(0x4e08168)
     ARRAY(0x4ea8860)
     ARRAY(0x4a87d40)
     ARRAY(0x48bf440)
     ARRAY(0x4af64e8)
     ARRAY(0x51074e8)
     ARRAY(0x4e0b870)
     ARRAY(0x4bb7ec0)
     ARRAY(0x49cc550)
     ARRAY(0x4e4a5a8)
     ARRAY(0x50ece18)
     ARRAY(0x4f1a3c8)
   fhem:
     lastDefChange 35
     last_update 1543762375.79242
   helper:
     DEF       
     valueFormat {
if($READING eq "ValvePosition" && $VALUE ne "0"){$VALUE = int($VALUE/10)*10}
elsif($READING eq "batteryLevel"){
if($VALUE>3){$VALUE=100}
elsif($VALUE eq "ok"){$VALUE=100}
elsif($VALUE>2.5){$VALUE=75}
elsif($VALUE>2.3){$VALUE=50}
elsif($VALUE>2.1){$VALUE=25}
elsif($VALUE eq "low"){$VALUE=0}
else{$VALUE=0}}
elsif($READING eq "battery"){
if($VALUE>3){$VALUE=100}
elsif($VALUE eq "ok"){$VALUE=100}
elsif($VALUE>2.5){$VALUE=75}
elsif($VALUE>2.3){$VALUE=50}
elsif($VALUE>2.1){$VALUE=25}
elsif($VALUE eq "low"){$VALUE=0}
else{$VALUE=0}}



}

     valueStyle {if($READING eq "measured-temp"){my $t=$VALUE;;my $d=ReadingsVal($DEVICE,'desired-temp',0);;
if($t-$d>=1){'style="color:rgb(251,63,11);;"'}
elsif($t-$d<=-1){'style="color:rgb(79,58,251);;"'}
else{'style="color:rgb(12,251,12);;"'}
}
}

     valueSuffix {
"desired-temp"=>" °C", "measured-temp"=>" °C",
"ValvePosition"=>" (".ReadingsVal($DEVICE,$READING,0)." %)",
"batteryLevel"=>" (".ReadingsVal($DEVICE,$READING,0)." V)"
}
     cellStyle:
       r:1        style="font-weight:bold;;font-size:18px;;color:RoyalBlue;;text-align:center"
     commands:
       Heizung_RG.sollsetz desired-temp:boost,on,off,5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0,9.5,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0,30.5
       R-btnLock.off set %DEVICE regSet btnLock on
       R-btnLock.on set %DEVICE regSet btnLock off
       R-globalBtnLock.off set %DEVICE regSet globalBtnLock on
       R-globalBtnLock.on set %DEVICE regSet globalBtnLock off
       controlMode.auto set %DEVICE controlMode manual
       controlMode.boost set %DEVICE controlMode auto
       controlMode.manual set %DEVICE controlMode auto
       controlModeboost.auto set %DEVICE controlMode boost
       controlModeboost.boost set %DEVICE controlMode boost
     positions:
       01_WZ_Balkontuer_rechts.battery 2:14
       01_WZ_Fenster.state 2:12
       01_WZ_Fenster_links.battery 2:13
       01_WZ_Heizung.R-btnLock 2:9
       01_WZ_Heizung.R-globalBtnLock 2:8
       01_WZ_Heizung.batteryLevel 2:10
       01_WZ_Heizung_Clima.ValvePosition 2:5
       01_WZ_Heizung_Clima.controlMode 2:6
       01_WZ_Heizung_Clima.controlModeboost 2:7
       01_WZ_Heizung_Clima.desired-temp 2:2
       01_WZ_Heizung_Clima.measured-temp 2:4
       01_WZ_Tuer.battery 2:17
       01_WZ_Tuer.state 2:16
       02_KZ_Fenster.battery 3:13
       02_KZ_Fenster.state 3:12
       02_KZ_Heizung.R-btnLock 3:9
       02_KZ_Heizung.R-globalBtnLock 3:8
       02_KZ_Heizung.batteryLevel 3:10
       02_KZ_Heizung_Clima.ValvePosition 3:5
       02_KZ_Heizung_Clima.controlMode 3:6
       02_KZ_Heizung_Clima.controlModeboost 3:7
       02_KZ_Heizung_Clima.desired-temp 3:2
       02_KZ_Heizung_Clima.measured-temp 3:4
       02_KZ_Tuer.battery 3:17
       02_KZ_Tuer.state 3:16
       03_SZ_Fenster.state 4:12
       03_SZ_Fenster_links.battery 4:13
       03_SZ_Fenster_rechts.battery 4:14
       03_SZ_Heizung.R-btnLock 4:9
       03_SZ_Heizung.R-globalBtnLock 4:8
       03_SZ_Heizung.batteryLevel 4:10
       03_SZ_Heizung_Clima.ValvePosition 4:5
       03_SZ_Heizung_Clima.controlMode 4:6
       03_SZ_Heizung_Clima.controlModeboost 4:7
       03_SZ_Heizung_Clima.desired-temp 4:2
       03_SZ_Heizung_Clima.measured-temp 4:4
       03_SZ_Tuer.battery 4:17
       03_SZ_Tuer.state 4:16
       04_KU_Fenster.state 5:12
       04_KU_Fenster_links.battery 5:13
       04_KU_Fenster_rechts.battery 5:14
       04_KU_Heizung.R-btnLock 5:9
       04_KU_Heizung.R-globalBtnLock 5:8
       04_KU_Heizung.batteryLevel 5:10
       04_KU_Heizung_Clima.ValvePosition 5:5
       04_KU_Heizung_Clima.controlMode 5:6
       04_KU_Heizung_Clima.controlModeboost 5:7
       04_KU_Heizung_Clima.desired-temp 5:2
       04_KU_Heizung_Clima.measured-temp 5:4
       04_KU_Tuer.battery 5:17
       04_KU_Tuer.state 5:16
       05_BW_Fenster.battery 6:13
       05_BW_Fenster.state 6:12
       05_BW_Heizung.R-btnLock 6:9
       05_BW_Heizung.R-globalBtnLock 6:8
       05_BW_Heizung.batteryLevel 6:10
       05_BW_Heizung_Clima.ValvePosition 6:5
       05_BW_Heizung_Clima.controlMode 6:6
       05_BW_Heizung_Clima.controlModeboost 6:7
       05_BW_Heizung_Clima.desired-temp 6:2
       05_BW_Heizung_Clima.measured-temp 6:4
       05_BW_Tuer.battery 6:17
       05_BW_Tuer.state 6:16
     recalc:
       undef
       undef
       ARRAY(0x4ec7568)
       undef
       ARRAY(0x50e3448)
     valueColumn:
       R-btnLock  7
       ValvePosition 4
       battery    10
       batteryLevel 8
       controlMode 5
       controlModeboost 6
       desired-temp 1
       measured-temp 3
       sollsetz   2
       state      9
     valueColumns:
       Batterie   colspan="1"
       Batterie   colspan="2"
       Fenster    colspan="1"
       Heizung    colspan="1"
       Ist        colspan="1"
       Modus      colspan="1"
       Modus/Boost colspan="2"
       Soll       colspan="1"
       Soll neu   colspan="1"
       Sperre     colspan="2"
       Ventil     colspan="1"
     valueIcon:
       R-btnLock.off secur_open@0CFB0C
       R-btnLock.on secur_locked@F7301D
       R-btnLock.set_off hourglass
       R-btnLock.set_on hourglass
       R-globalBtnLock.off secur_open@0CFB0C
       R-globalBtnLock.on secur_locked@F7301D
       R-globalBtnLock.set_off hourglass
       R-globalBtnLock.set_on hourglass
       ValvePosition.0 sani_heating_level_0@002AE0
       ValvePosition.10 sani_heating_level_10@F8D53D
       ValvePosition.100 sani_heating_level_100@E50005
       ValvePosition.20 sani_heating_level_20@FF9341
       ValvePosition.30 sani_heating_level_30@F17F3F
       ValvePosition.40 sani_heating_level_40@E46C3C
       ValvePosition.50 sani_heating_level_50@DE3B3A
       ValvePosition.60 sani_heating_level_60@A30D2D
       ValvePosition.70 sani_heating_level_70@B40A23
       ValvePosition.80 sani_heating_level_80@C40619
       ValvePosition.90 sani_heating_level_90@D4030F
       battery.0  measure_battery_0@E50005
       battery.100 measure_battery_100@0CFB0C
       battery.25 measure_battery_25@FB5909
       battery.50 measure_battery_50@F5FF10
       battery.75 measure_battery_75@42BC0A
       batteryLevel.0 measure_battery_0@E50005
       batteryLevel.100 measure_battery_100@0CFB0C
       batteryLevel.25 measure_battery_25@FB5909
       batteryLevel.50 measure_battery_50@F5FF10
       batteryLevel.75 measure_battery_75@42BC0A
       controlMode.auto sani_heating_automatic@FFC13A
       controlMode.boost sani_heating_boost@FB0C02
       controlMode.day sun
       controlMode.manual sani_heating_manual@795CFF
       controlMode.night moon
       controlMode.set_auto hourglass
       controlMode.set_boost hourglass
       controlMode.set_day hourglass
       controlMode.set_manual hourglass
       controlMode.set_night hourglass
       controlModeboost.auto sani_heating_boost@FB0C02
       controlModeboost.boost sani_heating_boost@FB0C02
       controlModeboost.manual sani_heating_boost@FB0C02
       controlModeboost.set_auto sani_heating_boost@FB0C02
       controlModeboost.set_boost hourglass
       controlModeboost.set_day sani_heating_boost@FB0C02
       controlModeboost.set_manual sani_heating_boost@FB0C02
       controlModeboost.set_night sani_heating_boost@FB0C02
       state.closed %devStateIcon
       state.closedclosed %devStateIcon
       state.closedopen %devStateIcon
       state.closedtilted %devStateIcon
       state.open %devStateIcon
       state.openclosed %devStateIcon
       state.openopen %devStateIcon
       state.opentilted %devStateIcon
       state.tilted %devStateIcon
       state.tiltedclosed %devStateIcon
       state.tiltedopen %devStateIcon
       state.tiltedtilted %devStateIcon
     values:
       formated:
         undef
         undef
         ARRAY(0x4e7a560)
         undef
         ARRAY(0x4b2d910)
         ARRAY(0x5203c88)
         ARRAY(0x49b1310)
         ARRAY(0x518eba0)
         ARRAY(0x4f19388)
         ARRAY(0x4f1c190)
         ARRAY(0x4e08e78)
         undef
         ARRAY(0x481ab50)
         ARRAY(0x4d853a8)
         ARRAY(0x4b7fcf8)
         undef
         ARRAY(0x4e09f30)
         ARRAY(0x4f21308)
       orig:
         undef
         undef
         ARRAY(0x4e832e0)
         undef
         ARRAY(0x50edeb8)
         ARRAY(0x50fec80)
         ARRAY(0x4e038c0)
         ARRAY(0x4ec9c68)
         ARRAY(0x50da8a0)
         ARRAY(0x1c6c358)
         ARRAY(0x50fecb0)
         undef
         ARRAY(0x49c75a0)
         ARRAY(0x4e97b70)
         ARRAY(0x4f18bd8)
         undef
         ARRAY(0x50cf520)
         ARRAY(0x4b7bc48)
       prefixsuffix:
         undef
         undef
         ARRAY(0x4ea4128)
         undef
         ARRAY(0x4b254c0)
         ARRAY(0x4e8fc60)
         ARRAY(0x4e37118)
         ARRAY(0x487bff8)
         ARRAY(0x50fcda0)
         ARRAY(0x48810e8)
         ARRAY(0x4e18318)
         undef
         ARRAY(0x4e773b0)
         ARRAY(0x48bd150)
         ARRAY(0x4f0e8b8)
         undef
         ARRAY(0x4ed1760)
         ARRAY(0x50c8908)
Attributes:
   cellStyle  {
"r:1"=>'style="font-weight:bold;;font-size:18px;;color:RoyalBlue;;text-align:center"'
}
   commands   {
'Heizung_RG.sollsetz'=>'desired-temp:boost,on,off,5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0,9.5,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0,30.5',
"controlMode.manual"=>"set %DEVICE controlMode auto",
"controlMode.boost"=>"set %DEVICE controlMode auto",
"controlMode.auto"=>"set %DEVICE controlMode manual",

"controlModeboost.boost"=>"set %DEVICE controlMode boost",
"controlModeboost.auto"=>"set %DEVICE controlMode boost",

"R-btnLock.on"=>"set %DEVICE regSet btnLock off",
"R-btnLock.off"=>"set %DEVICE regSet btnLock on",
"R-globalBtnLock.on"=>"set %DEVICE regSet globalBtnLock off",
"R-globalBtnLock.off"=>"set %DEVICE regSet globalBtnLock on"
}
   group      20_Sensoren_RG
   room       00_Diabeck,70_Heizung
   valueColumn {
'desired-temp'=>1,
'sollsetz'=>2,
'measured-temp'=>3,
'ValvePosition'=>4,
'controlMode'=>5,
'controlModeboost'=>6,
'R-btnLock'=>7,
'batteryLevel'=>8,
'state'=>9,
'battery'=>10
}
   valueColumns {
'Heizung'=>'colspan="1"',
'Soll'=>'colspan="1"',
'Soll neu'=>'colspan="1"',
'Ist'=>'colspan="1"',
'Ventil'=>'colspan="1"',
'Modus'=>'colspan="1"',
'Modus/Boost'=>'colspan="2"',
'Sperre'=>'colspan="2"',
'Batterie'=>'colspan="1"',
'Batterie '=>'colspan="2"',
'Fenster'=>'colspan="1"'
}
   valueFormat {
if($READING eq "ValvePosition" && $VALUE ne "0"){$VALUE = int($VALUE/10)*10}
elsif($READING eq "batteryLevel"){
if($VALUE>3){$VALUE=100}
elsif($VALUE eq "ok"){$VALUE=100}
elsif($VALUE>2.5){$VALUE=75}
elsif($VALUE>2.3){$VALUE=50}
elsif($VALUE>2.1){$VALUE=25}
elsif($VALUE eq "low"){$VALUE=0}
else{$VALUE=0}}
elsif($READING eq "battery"){
if($VALUE>3){$VALUE=100}
elsif($VALUE eq "ok"){$VALUE=100}
elsif($VALUE>2.5){$VALUE=75}
elsif($VALUE>2.3){$VALUE=50}
elsif($VALUE>2.1){$VALUE=25}
elsif($VALUE eq "low"){$VALUE=0}
else{$VALUE=0}}



}

   valueIcon  {
'controlMode.auto'=>'sani_heating_automatic@FFC13A',
'controlMode.manual'=>'sani_heating_manual@795CFF',
'controlMode.boost'=>'sani_heating_boost@FB0C02',
'controlMode.night'=>'moon',
'controlMode.day'=>'sun',

'controlMode.set_auto'=>'hourglass',
'controlMode.set_manual'=>'hourglass',
'controlMode.set_boost'=>'hourglass',
'controlMode.set_night'=>'hourglass',
'controlMode.set_day'=>'hourglass',

'controlModeboost.auto'=>'sani_heating_boost@FB0C02',
'controlModeboost.manual'=>'sani_heating_boost@FB0C02',
'controlModeboost.boost'=>'sani_heating_boost@FB0C02',

'controlModeboost.set_auto'=>'sani_heating_boost@FB0C02',
'controlModeboost.set_manual'=>'sani_heating_boost@FB0C02',
'controlModeboost.set_night'=>'sani_heating_boost@FB0C02',
'controlModeboost.set_day'=>'sani_heating_boost@FB0C02',

'controlModeboost.set_boost'=>'hourglass',

'R-btnLock.on'=>'secur_locked@F7301D',
'R-btnLock.off'=>'secur_open@0CFB0C',
'R-globalBtnLock.on'=>'secur_locked@F7301D',
'R-globalBtnLock.off'=>'secur_open@0CFB0C',
'R-btnLock.set_on'=>'hourglass',
'R-btnLock.set_off'=>'hourglass',
'R-globalBtnLock.set_on'=>'hourglass',
'R-globalBtnLock.set_off'=>'hourglass',

'ValvePosition.0'=>'sani_heating_level_0@002AE0',
'ValvePosition.10'=>'sani_heating_level_10@F8D53D',
'ValvePosition.20'=>'sani_heating_level_20@FF9341',
'ValvePosition.30'=>'sani_heating_level_30@F17F3F',
'ValvePosition.40'=>'sani_heating_level_40@E46C3C',
'ValvePosition.50'=>'sani_heating_level_50@DE3B3A',
'ValvePosition.60'=>'sani_heating_level_60@A30D2D',
'ValvePosition.70'=>'sani_heating_level_70@B40A23',
'ValvePosition.80'=>'sani_heating_level_80@C40619',
'ValvePosition.90'=>'sani_heating_level_90@D4030F',
'ValvePosition.100'=>'sani_heating_level_100@E50005',

'batteryLevel.100'=>'measure_battery_100@0CFB0C',
'batteryLevel.75'=>'measure_battery_75@42BC0A',
'batteryLevel.50'=>'measure_battery_50@F5FF10',
'batteryLevel.25'=>'measure_battery_25@FB5909',
'batteryLevel.0'=>'measure_battery_0@E50005',

'battery.100'=>'measure_battery_100@0CFB0C',
'battery.75'=>'measure_battery_75@42BC0A',
'battery.50'=>'measure_battery_50@F5FF10',
'battery.25'=>'measure_battery_25@FB5909',
'battery.0'=>'measure_battery_0@E50005',

'state.closed'=>'%devStateIcon',
'state.open'=>'%devStateIcon',
'state.tilted'=>'%devStateIcon',

'state.closedclosed'=>'%devStateIcon',
'state.openopen'=>'%devStateIcon',
'state.tiltedtilted'=>'%devStateIcon',

'state.closedtilted'=>'%devStateIcon',
'state.tiltedclosed'=>'%devStateIcon',
'state.opentilted'=>'%devStateIcon',

'state.tiltedopen'=>'%devStateIcon',
'state.closedopen'=>'%devStateIcon',
'state.openclosed'=>'%devStateIcon'
}
   valueStyle {if($READING eq "measured-temp"){my $t=$VALUE;;my $d=ReadingsVal($DEVICE,'desired-temp',0);;
if($t-$d>=1){'style="color:rgb(251,63,11);;"'}
elsif($t-$d<=-1){'style="color:rgb(79,58,251);;"'}
else{'style="color:rgb(12,251,12);;"'}
}
}

   valueSuffix {
"desired-temp"=>" °C", "measured-temp"=>" °C",
"ValvePosition"=>" (".ReadingsVal($DEVICE,$READING,0)." %)",
"batteryLevel"=>" (".ReadingsVal($DEVICE,$READING,0)." V)"
}


Hier nur ein Beispiel, das Wohnzimmer, ein Raum mit einem Thermostat, ein Fenster, eine Balkontür und eine Raumtür, also ein Thermostat, zwei Fenstergriffsensoren und einen optischen Sensor.
Balkontür:Internals:
   CUL_868_MSGCNT 27
   CUL_868_RAWMSG A0C58A2415D368BFA26BE012F00::-64.5:CUL_868:
   CUL_868_RSSI -64.5
   CUL_868_TIME 2018-12-02 19:31:09
   DEF        5D368B
   IODev      CUL_868
   LASTInputDev CUL_868
   MSGCNT     27
   NAME       01_WZ_Balkontuer_rechts
   NOTIFYDEV  global
   NR         407
   NTFY_ORDER 50-01_WZ_Balkontuer_rechts
   STATE      closed
   TYPE       CUL_HM
   lastMsg    No:58 - t:41 s:5D368B d:FA26BE 012F00
   peerList   01_WZ_Heizung_WindowRec,
   protLastRcv 2018-12-02 19:31:09
   protRcv    24 last_at:2018-12-02 19:31:09
   protRcvB   12 last_at:2018-12-02 19:31:08
   protSnd    15 last_at:2018-12-02 19:31:09
   protState  CMDs_done
   rssi_at_CUL_868 cnt:27 min:-77.5 max:-64 avg:-66.79 lst:-64.5
   .attraggr:
   .attreocr:
     .*
   .attrminint:
   READINGS:
     2018-11-30 17:22:46   .D-devInfo      910101
     2018-11-30 17:22:46   .D-stc          80
     2018-11-30 17:22:40   .R-ledOnTime    0.5 s
     2018-11-30 17:22:40   .R-msgRhsPosA   closed
     2018-11-30 17:22:40   .R-msgRhsPosB   open
     2018-11-30 17:22:40   .R-msgRhsPosC   tilted
     2018-11-30 17:22:39   .R-transmDevTryMax 6
     2018-11-30 17:22:40   .R-transmitTryMax 6
     2018-11-30 17:22:47   .peerListRDate  2018-11-30 17:22:47
     2018-12-02 19:31:09   .protLastRcv    2018-12-02 19:31:09
     2018-12-02 05:31:28   Activity        alive
     2018-11-30 17:22:39   CommandAccepted yes
     2018-11-30 17:22:46   D-firmware      2.4
     2018-11-30 17:22:46   D-serialNr      OEQ0964543
     2018-11-30 17:22:46   PairedTo        0xFA26BE
     2018-11-30 17:22:40   R-01_WZ_Heizung_WindowRec-expectAES off
     2018-11-30 17:22:40   R-01_WZ_Heizung_WindowRec-peerNeedsBurst on
     2018-11-30 17:22:39   R-cyclicInfoMsg off
     2018-11-30 17:22:40   R-eventDlyTime  0 s
     2018-11-30 17:22:39   R-pairCentral   0xFA26BE
     2018-11-30 17:22:40   R-sign          off
     2018-11-30 17:22:46   RegL_00.        02:01 09:00 0A:FA 0B:26 0C:BE 10:01 14:06 00:00
     2018-11-30 17:22:46   RegL_01.        08:00 20:6C 21:00 22:64 30:06 00:00
     2018-11-30 17:22:47   RegL_04.01_WZ_Heizung_WindowRec 01:01 00:00
     2018-11-30 17:26:03   alive           yes
     2018-12-02 19:31:09   battery         ok
     2018-12-02 19:31:09   contact         closed (to VCCU)
     2018-12-02 05:31:28   peerList        01_WZ_Heizung_WindowRec,
     2018-11-30 17:26:03   powerOn         2018-11-30 17:26:02
     2018-11-30 17:26:02   recentStateType info
     2018-11-30 17:26:03   sabotageError   off
     2018-12-02 19:31:09   state           closed
     2018-12-02 19:31:09   trigger_cnt     47
   helper:
     HM_CMDNR   88
     mId        0030
     regLst     ,0,1,4p
     rxType     20
     supp_Pair_Rep 0
     ack:
     expert:
       def        1
       det        0
       raw        1
       tpl        0
     io:
       lstRecType 41
       newChn     +5D368B,00,03,00
       nextSend   1543775469.58929
       nxtSndMcnt 58
       rxt        2
       tgtDly     88
       vccu       VCCU
       lRcTm:
         CUL_868    50414180
         tnms       808468501
       p:
         5D368B
         00
         03
         00
       prefIO:
         CUL_868
     mRssi:
       mNo        58
       io:
         CUL_868:
           -54.5
           -54.5
     prt:
       bErr       0
       sProc      0
       rspWait:
     q:
       qReqConf   
       qReqStat   
     role:
       chn        1
       dev        1
     rpt:
       IO         CUL_868
       flg        A
       ts         1543775469.60389
       ack:
         HASH(0x456ccb8)
         588002FA26BE5D368B00
     rssi:
       at_CUL_868:
         avg        -66.7962962962963
         cnt        27
         lst        -64.5
         max        -64
         min        -77.5
     tmpl:
Attributes:
   IODev      CUL_868
   IOgrp      VCCU:CUL_868
   actCycle   028:00
   actStatus  alive
   alias      Balkontür
   autoReadReg 4_reqStatus
   devStateIcon closed:fts_door@green open:fts_door_open@red tilted:fts_door_tilt@red
   event-on-change-reading .*
   expert     2_raw
   firmware   2.4
   group      22_FGSensoren
   icon       fts_door
   model      HM-SEC-RHS
   peerIDs    00000000,63944703,
   room       22_FG_Sensoren,00_Diabeck,01_Wohnzimmer,09_Balkon,70_Heizung,CUL_HM
   serialNr   OEQ0964543
   subType    threeStateSensor

Fenster:Internals:
   DEF        5D3362
   IODev      CUL_868
   NAME       01_WZ_Fenster_links
   NOTIFYDEV  global
   NR         405
   NTFY_ORDER 50-01_WZ_Fenster_links
   STATE      closed
   TYPE       CUL_HM
   peerList   01_WZ_Heizung_WindowRec,
   .attraggr:
   .attreocr:
     .*
   .attrminint:
   READINGS:
     2018-11-30 17:22:11   .D-devInfo      910101
     2018-11-30 17:22:11   .D-stc          80
     2018-11-30 17:22:02   .R-ledOnTime    0.5 s
     2018-11-30 17:22:02   .R-msgRhsPosA   closed
     2018-11-30 17:22:02   .R-msgRhsPosB   open
     2018-11-30 17:22:02   .R-msgRhsPosC   tilted
     2018-11-30 17:22:02   .R-transmDevTryMax 6
     2018-11-30 17:22:02   .R-transmitTryMax 6
     2018-11-30 17:22:12   .peerListRDate  2018-11-30 17:22:12
     2018-12-01 04:42:36   .protLastRcv    2018-12-01 04:42:36
     2018-12-02 08:51:29   Activity        unknown
     2018-11-30 17:22:01   CommandAccepted yes
     2018-11-30 17:22:11   D-firmware      2.4
     2018-11-30 17:22:11   D-serialNr      OEQ0965426
     2018-11-30 17:22:11   PairedTo        0xFA26BE
     2018-11-30 17:22:03   R-01_WZ_Heizung_WindowRec-expectAES off
     2018-11-30 17:22:03   R-01_WZ_Heizung_WindowRec-peerNeedsBurst on
     2018-11-30 17:22:02   R-cyclicInfoMsg off
     2018-11-30 17:22:02   R-eventDlyTime  0 s
     2018-11-30 17:22:02   R-pairCentral   0xFA26BE
     2018-11-30 17:22:02   R-sign          off
     2018-11-30 17:22:11   RegL_00.        02:01 09:00 0A:FA 0B:26 0C:BE 10:01 14:06 00:00
     2018-11-30 17:22:12   RegL_01.        08:00 20:6C 21:00 22:64 30:06 00:00
     2018-11-30 17:22:13   RegL_04.01_WZ_Heizung_WindowRec 01:01 00:00
     2018-11-30 17:26:08   alive           yes
     2018-12-01 04:42:36   battery         ok
     2018-12-01 04:42:36   contact         closed (to VCCU)
     2018-12-02 05:31:28   peerList        01_WZ_Heizung_WindowRec,
     2018-11-30 17:26:08   recentStateType info
     2018-11-30 17:26:08   sabotageError   off
     2018-12-01 04:42:36   state           closed
     2018-12-01 04:42:36   trigger_cnt     34
   helper:
     HM_CMDNR   227
     mId        0030
     regLst     ,0,1,4p
     rxType     20
     expert:
       def        1
       det        0
       raw        1
       tpl        0
     io:
       newChn     +5D3362,00,03,00
       restoredIO CUL_868
       rxt        2
       vccu       VCCU
       p:
         5D3362
         00
         03
         00
       prefIO:
         CUL_868
     mRssi:
       mNo       
       io:
         CUL_868:
           100
           100
     prt:
       bErr       0
       sProc      0
     q:
       qReqConf   
       qReqStat   
     role:
       chn        1
       dev        1
     tmpl:
Attributes:
   IODev      CUL_868
   IOgrp      VCCU:CUL_868
   actCycle   028:00
   actStatus  unknown
   alias      Wonzimmerfenster links
   autoReadReg 4_reqStatus
   devStateIcon closed:fts_window_1w@green open:fts_window_1w_open@red tilted:fts_window_1w_tilt@red
   event-on-change-reading .*
   expert     2_raw
   firmware   2.4
   group      22_FGSensoren
   icon       fts_window_1w
   model      HM-SEC-RHS
   peerIDs    00000000,63944703,
   room       00_Diabeck,01_Wohnzimmer,22_FG_Sensoren,70_Heizung,CUL_HM
   serialNr   OEQ0965426
   subType    threeStateSensor


Balkontür und Fenster als Doppelfenster in einem DOIF zusammengefasst:Internals:
   DEF        ([01_WZ_Fenster_links:state] eq "closed" and [01_WZ_Balkontuer_rechts:state] eq "closed") (set 01_WZ_Fenster_dummy closedclosed,set plot01_WZ_Fenster_dummy window 0)DOELSEIF ([01_WZ_Fenster_links:state] eq "open" and [01_WZ_Balkontuer_rechts:state] eq "open") (set 01_WZ_Fenster_dummy openopen)DOELSEIF ([01_WZ_Fenster_links:state] eq "tilted" and [01_WZ_Balkontuer_rechts:state] eq "tilted") (set 01_WZ_Fenster_dummy tiltedtilted)DOELSEIF ([01_WZ_Fenster_links:state] eq "closed" and [01_WZ_Balkontuer_rechts:state] eq "tilted") (set 01_WZ_Fenster_dummy closedtilted)DOELSEIF ([01_WZ_Fenster_links:state] eq "tilted" and [01_WZ_Balkontuer_rechts:state] eq "closed") (set 01_WZ_Fenster_dummy tiltedclosed)DOELSEIF ([01_WZ_Fenster_links:state] eq "open" and [01_WZ_Balkontuer_rechts:state] eq "tilted") (set 01_WZ_Fenster_dummy opentilted)DOELSEIF ([01_WZ_Fenster_links:state] eq "tilted" and [01_WZ_Balkontuer_rechts:state] eq "open") (set 01_WZ_Fenster_dummy tiltedopen)DOELSEIF ([01_WZ_Fenster_links:state] eq "closed" and [01_WZ_Balkontuer_rechts:state] eq "open") (set 01_WZ_Fenster_dummy closedopen)DOELSEIF ([01_WZ_Fenster_links:state] eq "open" and [01_WZ_Balkontuer_rechts:state] eq "closed") (set 01_WZ_Fenster_dummy openclosed)
   MODEL      FHEM
   NAME       01_WZ_Fenster
   NR         349
   NTFY_ORDER 50-01_WZ_Fenster
   STATE      closedclosed
   TYPE       DOIF
   .attraggr:
   .attrminint:
   READINGS:
     2018-12-02 19:31:09   Device          01_WZ_Balkontuer_rechts
     2018-12-02 19:31:08   cmd             1
     2018-12-02 19:31:08   cmd_event       01_WZ_Balkontuer_rechts
     2018-12-02 19:31:08   cmd_nr          1
     2018-12-02 19:31:08   e_01_WZ_Balkontuer_rechts_state closed
     2018-12-01 04:42:36   e_01_WZ_Fenster_links_state closed
     2018-12-02 19:31:08   error           set plot01_WZ_Fenster_dummy window 0: Please define plot01_WZ_Fenster_dummy first
     2018-11-27 06:12:48   mode            enabled
     2018-12-02 19:31:08   state           closedclosed
   Regex:
   attr:
     cmdState:
       0:
         closedclosed
       1:
         openopen
       2:
         tiltedtilted
       3:
         closedtilted
       4:
         tiltedclosed
       5:
         opentilted
       6:
         tiltedopen
       7:
         closedopen
       8:
         openclosed
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'01_WZ_Fenster_links','state') eq "closed" and ::ReadingValDoIf($hash,'01_WZ_Balkontuer_rechts','state') eq "closed"
     1          ::ReadingValDoIf($hash,'01_WZ_Fenster_links','state') eq "open" and ::ReadingValDoIf($hash,'01_WZ_Balkontuer_rechts','state') eq "open"
     2          ::ReadingValDoIf($hash,'01_WZ_Fenster_links','state') eq "tilted" and ::ReadingValDoIf($hash,'01_WZ_Balkontuer_rechts','state') eq "tilted"
     3          ::ReadingValDoIf($hash,'01_WZ_Fenster_links','state') eq "closed" and ::ReadingValDoIf($hash,'01_WZ_Balkontuer_rechts','state') eq "tilted"
     4          ::ReadingValDoIf($hash,'01_WZ_Fenster_links','state') eq "tilted" and ::ReadingValDoIf($hash,'01_WZ_Balkontuer_rechts','state') eq "closed"
     5          ::ReadingValDoIf($hash,'01_WZ_Fenster_links','state') eq "open" and ::ReadingValDoIf($hash,'01_WZ_Balkontuer_rechts','state') eq "tilted"
     6          ::ReadingValDoIf($hash,'01_WZ_Fenster_links','state') eq "tilted" and ::ReadingValDoIf($hash,'01_WZ_Balkontuer_rechts','state') eq "open"
     7          ::ReadingValDoIf($hash,'01_WZ_Fenster_links','state') eq "closed" and ::ReadingValDoIf($hash,'01_WZ_Balkontuer_rechts','state') eq "open"
     8          ::ReadingValDoIf($hash,'01_WZ_Fenster_links','state') eq "open" and ::ReadingValDoIf($hash,'01_WZ_Balkontuer_rechts','state') eq "closed"
   devices:
     0           01_WZ_Fenster_links 01_WZ_Balkontuer_rechts
     1           01_WZ_Fenster_links 01_WZ_Balkontuer_rechts
     2           01_WZ_Fenster_links 01_WZ_Balkontuer_rechts
     3           01_WZ_Fenster_links 01_WZ_Balkontuer_rechts
     4           01_WZ_Fenster_links 01_WZ_Balkontuer_rechts
     5           01_WZ_Fenster_links 01_WZ_Balkontuer_rechts
     6           01_WZ_Fenster_links 01_WZ_Balkontuer_rechts
     7           01_WZ_Fenster_links 01_WZ_Balkontuer_rechts
     8           01_WZ_Fenster_links 01_WZ_Balkontuer_rechts
     all         01_WZ_Fenster_links 01_WZ_Balkontuer_rechts
   do:
     0:
       0          set 01_WZ_Fenster_dummy closedclosed,set plot01_WZ_Fenster_dummy window 0
     1:
       0          set 01_WZ_Fenster_dummy openopen
     2:
       0          set 01_WZ_Fenster_dummy tiltedtilted
     3:
       0          set 01_WZ_Fenster_dummy closedtilted
     4:
       0          set 01_WZ_Fenster_dummy tiltedclosed
     5:
       0          set 01_WZ_Fenster_dummy opentilted
     6:
       0          set 01_WZ_Fenster_dummy tiltedopen
     7:
       0          set 01_WZ_Fenster_dummy closedopen
     8:
       0          set 01_WZ_Fenster_dummy openclosed
     9:
   helper:
     event      contact: closed (to VCCU)
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   01_WZ_Balkontuer_rechts
     timerevent contact: closed (to 01_WZ_Heizung),closed,trigger_cnt: 47
     triggerDev 01_WZ_Balkontuer_rechts
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: 01_WZ_Balkontuer_rechts
       error: set plot01_WZ_Fenster_dummy window 0: Please define plot01_WZ_Fenster_dummy first
       state: closedclosed
     timerevents:
       contact: closed (to 01_WZ_Heizung)
       closed
       trigger_cnt: 47
     timereventsState:
       contact: closed (to 01_WZ_Heizung)
       state: closed
       trigger_cnt: 47
     triggerEvents:
       contact: closed (to VCCU)
     triggerEventsState:
       contact: closed (to VCCU)
   internals:
   itimer:
   perlblock:
   readings:
     0           01_WZ_Fenster_links:state 01_WZ_Balkontuer_rechts:state
     1           01_WZ_Fenster_links:state 01_WZ_Balkontuer_rechts:state
     2           01_WZ_Fenster_links:state 01_WZ_Balkontuer_rechts:state
     3           01_WZ_Fenster_links:state 01_WZ_Balkontuer_rechts:state
     4           01_WZ_Fenster_links:state 01_WZ_Balkontuer_rechts:state
     5           01_WZ_Fenster_links:state 01_WZ_Balkontuer_rechts:state
     6           01_WZ_Fenster_links:state 01_WZ_Balkontuer_rechts:state
     7           01_WZ_Fenster_links:state 01_WZ_Balkontuer_rechts:state
     8           01_WZ_Fenster_links:state 01_WZ_Balkontuer_rechts:state
     all         01_WZ_Fenster_links:state 01_WZ_Balkontuer_rechts:state
   trigger:
   uiState:
   uiTable:
Attributes:
   cmdState   closedclosed|openopen|tiltedtilted|closedtilted|tiltedclosed|opentilted|tiltedopen|closedopen|openclosed
   devStateIcon closedclosed:fts_window_2w@green openclosed:fts_window_2w_open_l@red closedopen:fts_window_2w_open_r@red openopen:fts_window_2w_open_lr@red tiltedtilted:fts_window_2w_tilt_lr@red closedtilted:fts_window_2w_tilt@red tiltedclosed:fts_window_2w_tilt_l@red opentilted:fts_window_2w_open_l_tilt_r@red tiltedopen:fts_window_2w_tilt_l_open_r@red
   do         always
   group      22_FGSensoren,99_Doppelfenster_Icon
   icon       helper_doif
   room       99_DOIF

Wohnzimmertür:Internals:
   CHANGED   
   CUL_868_MSGCNT 28
   CUL_868_RAWMSG A0DBEA610600AA5FA26BE0601C800::-65:CUL_868:
   CUL_868_RSSI -65
   CUL_868_TIME 2018-12-02 19:04:09
   DEF        600AA5
   IODev      CUL_868
   LASTInputDev CUL_868
   MSGCNT     28
   NAME       01_WZ_Tuer
   NOTIFYDEV  global
   NR         205
   NTFY_ORDER 50-01_WZ_Tuer
   STATE      open
   TYPE       CUL_HM
   lastMsg    No:BE - t:10 s:600AA5 d:FA26BE 0601C800
   peerList   01_WZ_Heizung_WindowRec,
   protLastRcv 2018-12-02 19:04:09
   protRcv    28 last_at:2018-12-02 19:04:09
   protRcvB   6 last_at:2018-12-02 15:18:57
   protSnd    22 last_at:2018-12-02 19:04:09
   protState  CMDs_done
   rssi_at_CUL_868 cnt:28 min:-70 max:-65 avg:-68.16 lst:-65
   .attraggr:
   .attreocr:
     .*
   .attrminint:
   READINGS:
     2018-11-14 21:35:54   .D-devInfo      810101
     2018-11-14 21:35:54   .D-stc          80
     2018-11-14 21:35:55   .R-msgScPosA    open
     2018-11-14 21:35:55   .R-msgScPosB    closed
     2018-11-14 21:35:55   .R-transmDevTryMax 6
     2018-11-14 21:35:55   .R-transmitTryMax 6
     2018-11-14 21:35:55   .peerListRDate  2018-11-14 21:35:55
     2018-12-02 19:04:09   .protLastRcv    2018-12-02 19:04:09
     2018-12-02 05:31:28   Activity        alive
     2018-11-14 21:35:54   D-firmware      1.0
     2018-11-14 21:35:54   D-serialNr      OEQ1426753
     2018-11-14 21:35:55   PairedTo        0xFA26BE
     2018-11-14 21:35:56   R-01_WZ_Heizung_WindowRec-expectAES off
     2018-11-14 21:35:56   R-01_WZ_Heizung_WindowRec-peerNeedsBurst on
     2018-11-14 21:35:55   R-cyclicInfoMsg on
     2018-11-14 21:35:55   R-eventDlyTime  0 s
     2018-11-14 21:35:55   R-pairCentral   0xFA26BE
     2018-11-14 21:35:55   R-sabotageMsg   on
     2018-11-14 21:35:55   R-sign          on
     2018-12-02 19:04:09   alive           yes
     2018-12-02 19:04:09   battery         ok
     2018-12-02 19:04:09   contact         open (to VCCU)
     2018-12-02 05:31:28   peerList        01_WZ_Heizung_WindowRec,
     2018-11-30 19:17:47   powerOn         2018-11-30 19:17:47
     2018-12-02 19:04:09   recentStateType info
     2018-12-02 19:04:09   sabotageError   off
     2018-12-02 19:04:09   state           open
     2018-12-02 15:18:57   trigger_cnt     67
   helper:
     HM_CMDNR   190
     mId        00C7
     regLst     ,0,1,4p
     rxType     28
     supp_Pair_Rep 0
     ack:
     expert:
       def        1
       det        0
       raw        1
       tpl        0
     io:
       lstRecType 10
       newChn     +600AA5,00,03,00
       nextSend   1543773849.91825
       nxtSndMcnt BE
       rxt        2
       tgtDly     88
       vccu       VCCU
       lRcTm:
         CUL_868    48794008
         tnms       806848752
       p:
         600AA5
         00
         03
         00
       prefIO:
         CUL_868
     mRssi:
       mNo        BE
       io:
         CUL_868:
           -55
           -55
     prt:
       bErr       0
       sProc      0
       sleeping   1
       rspWait:
     q:
       qReqConf   00
       qReqStat   
     role:
       chn        1
       dev        1
     rpt:
       IO         CUL_868
       flg        A
       ts         1543773849.85486
       ack:
         HASH(0x3d82a70)
         BE8002FA26BE600AA500
     rssi:
       at_CUL_868:
         avg        -68.1607142857143
         cnt        28
         lst        -65
         max        -65
         min        -70
     tmpl:
Attributes:
   IODev      CUL_868
   IOgrp      VCCU:CUL_868
   actCycle   002:50
   actStatus  alive
   alias      Wohnzimmertür
   autoReadReg 4_reqStatus
   devStateIcon closed:fts_door@green open:fts_door_open@red
   event-on-change-reading .*
   expert     2_raw
   firmware   1.0
   group      21_OptSensoren
   icon       fts_door
   model      HM-SEC-SCo
   peerIDs    00000000,63944703,
   room       00_Diabeck,21_OptSensoren,70_Heizung,CUL_HM
   serialNr   OEQ1426753
   subType    threeStateSensor



Schlafzimmer und Küche haben auch zwei Fenster. Da ist es vom Prinzip genau so, nur mit Fenster_links und statt Balkontür_rechts eben Fenster_rechts. Kinderzimmer und Bad haben nur ein Fenster, so dass ich da direkt vom Fenster selbst das open, tilted und close verwende.

Und hier noch ein Bild dazu:
Raspberry Pi 3 Model B Rev 1.2; Linux 4.9.59-v7+; Raspbian GNU/Linux 9 (stretch); CUL433 (VTS 0.29 CSM868); CUL 868 (VTS 0.29 CSM868); 6x BrennenstuhlRCR1000N; 8x ZAP; 3x EmilLux; 10x Sonoff Basic (Tasmota 5.10.0f); 5x HM-CC-RT-DN; 9x HM-SEC-SCo; 8x HM-SEC-SCo, 7x HM-LC-Sw1PBU-FM; Fritz!Box 7362 SL