Zeigt her eure Füße, zeigt her eure Schuh

Begonnen von Wzut, 06 März 2020, 19:27:57

Vorheriges Thema - Nächstes Thema

hyper2910

Ok danke

Ab wann sind die neuen Module im Svn?

Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

Wzut

Gute Frage, das hängt stark davon ab was ich noch an Bugberichten von den Beta Testern bekomme (es dürften mehr sein ....)
Aber versuch morgen ab 8:00 Uhr mal ein FHEM Update , ich denke ich kann heute Abend noch eine light Version einchecken die dann zumindest das set attrTemplate unterstützt.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

hyper2910

Super ist da.  Vielen Dank.


Beim Auswählen bekomme ich folgende Meldung:

Wohnzimmer: unknown attribute debug. Type 'attr Wohnzimmer ?' for a detailed list.
Wohnzimmer: unknown attribute actCycle. Type 'attr Wohnzimmer ?' for a detailed list.
Wohnzimmer: unknown attribute autosaveConfig. Type 'attr Wohnzimmer ?' for a detailed list.
Unknown template_entry_name speech_recognition_type_thermostate

Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

Wzut

#18
ja ist klar , diese Attribute gibt es bis jetzt nur in der Beta, stört aber den Rest nicht
Bei dem type_thermostate ist ein e zuviel im template, habe es gefixt
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

hyper2910

Wie habt ihr denn eure MAX Shutter angezeigt.

Hier mal meins:


Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

jonien

Wie könnte ich meine "persönlichen" templates vor einem überschreiben durch ein Update sichern/anlegen?

MEIN "max.template" (Dieses template habe noch nicht bereinigt und dient zum ausprobieren. Aktuell nutze ich davon 2 templates)

######################################################################
# $Id: max.template 21455 2020-03-19 16:39:47Z Wzut $
#
# Comments start with #. Empty lines are ignored.
# Syntax of one entry:
#   name: line,
#   one optional filter: line
#   zero or more par: lines
#   FHEM-Commands
# filter:INTERNAL=VALUE (optional)
# par: name of the parameter; comment; perl_code (optional)
# perl_code returns a value for the parameter, or undef.
# If undef, the user has to specify them (the comment is shown to the user)
######################################################################

######################################################################
name:MAX_HeatingThermostat_dark
filter:TYPE=MAX:FILTER=devtype=(1|2)
desc:To configure a HeatingThermostat
order:M1
par:ICON;ICON as set, defaults to MAX;{ AttrVal("DEVICE","icon","max_heizungsthermostat") }
par:COMMENT;COMMENT as set, defaults to MAX;{ AttrVal("DEVICE","comment","Configured using template MAX_HeatingThermostat_1") }
par:DEBUG;DEBUG as set, defaults to MAX;{ AttrVal("DEVICE","debug","1") }
par:ACT;ACT as set, defaults to MAX;{ AttrVal("DEVICE","actCycle","1:0") }
par:CONFIG;CONFIG as set, defaults to MAX;{ AttrVal("DEVICE","autosaveConfig","1") }
par:EOCR;EOCR as set, defaults to MAX;{ AttrVal("DEVICE","event-on-change-reading",".*") }
attr DEVICE icon ICON
attr DEVICE comment COMMENT
attr DEVICE devStateIcon auto:sani_heating_automatic@lightgray manual:sani_heating_manual@yellow ok:measure_battery_100@green low:measure_battery_0@red (0|alive):10px-kreis-gruen (1|dead):10px-kreis-rot timeout:10px-kreis-gelb
attr DEVICE stateFormat mode\
battery\
rferror\
Activity
attr DEVICE webCmd temperature:desiredTemperature:valveposition
attr DEVICE webCmdLabel LABEL
attr DEVICE widgetOverride valveposition:slider,0,1,100 temperature:selectnumbers,15,0.1,29,1,lin
attr DEVICE debug DEBUG
attr DEVICE actCycle ACT
attr DEVICE autosaveConfig CONFIG
attr DEVICE event-on-change-reading EOCR
set DEVICE attrTemplate speech_recognition_type_thermostat
######################################################################

######################################################################
name:MAX_HeatingThermostat_dark_jonien
filter:TYPE=MAX:FILTER=devtype=(1|2)
desc:To configure a HeatingThermostat
order:M1
par:ICON;ICON as set, defaults to MAX;{ AttrVal("DEVICE","icon","max_heizungsthermostat") }
par:COMMENT;COMMENT as set, defaults to MAX;{ AttrVal("DEVICE","comment","Configured using template MAX_HeatingThermostat_1") }
par:DEBUG;DEBUG as set, defaults to MAX;{ AttrVal("DEVICE","debug","1") }
par:ACT;ACT as set, defaults to MAX;{ AttrVal("DEVICE","actCycle","1:0") }
par:CONFIG;CONFIG as set, defaults to MAX;{ AttrVal("DEVICE","autosaveConfig","1") }
par:EOCR;EOCR as set, defaults to MAX;{ AttrVal("DEVICE","event-on-change-reading",".*") }
attr DEVICE icon ICON
attr DEVICE comment COMMENT
attr DEVICE devStateIcon temporary:time_timer@lightblue auto:sani_heating_automatic@green manual:sani_heating_manual@grey ok:measure_battery_100@green low:measure_battery_0@red (0|alive):10px-kreis-gruen (1|dead):10px-kreis-rot timeout:10px-kreis-gelb
attr DEVICE stateFormat mode\
battery\
rferror\
Activity
attr DEVICE webCmd temperature:desiredTemperature:valveposition
attr DEVICE webCmdLabel LABEL
attr DEVICE widgetOverride valveposition:selectnumbers,0,1,100,0,lin temperature:selectnumbers,15,0.1,29,1,lin
attr DEVICE webCmdLabel Ist °C:Soll °C:Valve
attr DEVICE debug DEBUG
attr DEVICE actCycle ACT
attr DEVICE autosaveConfig CONFIG
attr DEVICE event-on-change-reading EOCR
attr DEVICE room 0_Virtuelle-Geräte->Fenster,CUL_HM,Fenster,Hzg_MAX,Hzg_MAX_Übersicht,Hzg_Verbrauch_Steuerung,Hzg_Verbrauch_Übersicht

set DEVICE attrTemplate speech_recognition_type_thermostat
######################################################################



######################################################################
name:MAX_WallMountedThermostat_dark
filter:TYPE=MAX:FILTER=devtype=(3|7)
desc:To configure a WallMountedThermostat
order:M2
par:ICON;ICON as set, defaults to MAX;{ AttrVal("DEVICE","icon","max_wandthermostat") }
par:COMMENT;COMMENT as set, defaults to MAX;{ AttrVal("DEVICE","comment","Configured using template MAX_WallMountedThermostat_1") }
par:DEBUG;DEBUG as set, defaults to MAX;{ AttrVal("DEVICE","debug","1") }
par:ACT;ACT as set, defaults to MAX;{ AttrVal("DEVICE","actCycle","0:15") }
par:CONFIG;CONFIG as set, defaults to MAX;{ AttrVal("DEVICE","autosaveConfig","1") }
par:EOCR;EOCR as set, defaults to MAX;{ AttrVal("DEVICE","event-on-change-reading",".*") }
par:LABEL;;{ (AttrVal('global','language','DE') eq 'DE') ? return 'Ist<br>:Soll<br>:Ventil<br>' : return 'Actual<br>Desired<br>:Valveposition<br>' }
attr DEVICE icon ICON
attr DEVICE comment COMMENT
attr DEVICE debug DEBUG
attr DEVICE actCycle ACT
attr DEVICE devStateIcon auto:sani_heating_automatic@lightgray manual:sani_heating_manual@yellow ok:measure_battery_100@green low:measure_battery_0@red (0|alive):10px-kreis-gruen (1|dead):10px-kreis-rot timeout:10px-kreis-gelb
attr DEVICE stateFormat mode\
battery\
rferror\
Activity
attr DEVICE webCmd temperature:desiredTemperature
attr DEVICE webCmdLabel LABEL
attr DEVICE widgetOverride temperature:selectnumbers,15,0.1,29,1,lin
attr DEVICE autosaveConfig CONFIG
attr DEVICE event-on-change-reading EOCR
set DEVICE attrTemplate speech_recognition_type_thermostat
######################################################################

######################################################################
name:MAX_ShutterContact_darkorg
filter:TYPE=MAX:filter:devtype=(4|6)
desc:To configure a ShutterContact
order:M3
par:ICON;ICON as set, defaults to MAX;{ AttrVal("DEVICE","icon","hm-sec-win") }
par:DEBUG;DEBUG as set, defaults to MAX;{ AttrVal("DEVICE","debug","1") }
par:COMMENT;COMMENT as set, defaults to MAX;{ AttrVal("DEVICE","comment","Configured using template MAX_ShutterContact_1") }
par:EOCR;EOCR as set, defaults to MAX;{ AttrVal("DEVICE","event-on-change-reading",".*") }
par:LABEL;;{ (AttrVal('global','language','DE') eq 'DE') ? return 'Ist<br>:Soll<br>' : return 'Actual<br>Desired<br>' }
attr DEVICE icon ICON
attr DEVICE comment COMMENT
attr DEVICE debug DEBUG
attr DEVICE event-on-change-reading EOCR
attr DEVICE devStateIcon closed:fts_window_1w opened:fts_window_1w_open
######################################################################

######################################################################
name:MAX_ShutterContact_dark4
filter:TYPE=MAX:filter:devtype=(4|1)
desc:To configure a ShutterContact
order:M3
par:ICON;ICON as set, defaults to MAX;{ AttrVal("DEVICE","icon","hm-sec-win") }
par:DEBUG;DEBUG as set, defaults to MAX;{ AttrVal("DEVICE","debug","1") }
par:COMMENT;COMMENT as set, defaults to MAX;{ AttrVal("DEVICE","comment","Configured using template MAX_ShutterContact_1") }
par:EOCR;EOCR as set, defaults to MAX;{ AttrVal("DEVICE","event-on-change-reading",".*") }
par:LABEL;;{ (AttrVal('global','language','DE') eq 'DE') ? return 'Ist<br>:Soll<br>' : return 'Actual<br>Desired<br>' }
attr DEVICE icon ICON
attr DEVICE comment COMMENT
attr DEVICE debug DEBUG
attr DEVICE event-on-change-reading EOCR
attr DEVICE devStateIcon closed:fts_window_1w opened:fts_window_1w_open
######################################################################
######################################################################
name:MAX_ShutterContact_darkall_old
filter:TYPE=MAX
desc:To configure a ShutterContact
order:M3
par:ICON;ICON as set, defaults to MAX;{ AttrVal("DEVICE","icon","hm-sec-win") }
par:DEBUG;DEBUG as set, defaults to MAX;{ AttrVal("DEVICE","debug","1") }
par:COMMENT;COMMENT as set, defaults to MAX;{ AttrVal("DEVICE","comment","Configured using template MAX_ShutterContact_1") }
par:USERREADINGS;USERREADINGS as set, defaults to MAX;{ AttrVal("DEVICE","userReadings","Timestamp {ReadingsTimestamp('Fenster_Bad','IKON2',0)}, Uhrzeit {(split(' ',ReadingsTimestamp("Fenster_Bad","state",0)))[1]},Datum {(split(' ',ReadingsTimestamp("Fenster_Bad","state",0)))[0]}, Datum2 {join("." => reverse split('-', (split(' ',ReadingsTimestamp("Fenster_Bad","state",0)))[0]))}, IKON { my $state=ReadingsVal('Fenster_Bad','state','0'); return '<div><img src="/fhem/images/default/off.png">' if($state eq "closed"); return '<div><img src="/fhem/images/default/on.png">'; }, IKON2 { my $state=ReadingsVal('Fenster_Bad','state','0'); return '<div><img src="/fhem/images/default/fts_window_2w_green.png">' if($state eq "closed"); return '<div><img src="/fhem/images/default/fts_window_2w_open_lr_red.png">'; }, IKON3 {'<div><img src="/fhem/images/default/fts_window_2w_open_lr.png">';}") }
par:EOCR;EOCR as set, defaults to MAX;{ AttrVal("DEVICE","event-on-change-reading",".*") }
par:LABEL;;{ (AttrVal('global','language','DE') eq 'DE') ? return 'Ist<br>:Soll<br>' : return 'Actual<br>Desired<br>' }
attr DEVICE icon ICON
attr DEVICE comment COMMENT
attr DEVICE userReadings USERREADINGS
attr DEVICE debug DEBUG
attr DEVICE event-on-change-reading EOCR
attr DEVICE devStateIcon opened.*.:fts_window_2w_open_lr@red tilted:fts_window_2w_2l_tilt@red closed.*.:fts_window_2w@green
#attr DEVICE devStateIcon closed*.*:fts_window_2w_green.png opened*.*:fts_window_2w_open_lr_red.png
######################################################################
######################################################################
name:MAX_ShutterContact_darkall_MAX1
filter:TYPE=MAX
desc:To configure a ShutterContact
order:M3
par:ICON;ICON as set, defaults to MAX;{ AttrVal("DEVICE","icon","hm-sec-win") }
par:DEBUG;DEBUG as set, defaults to MAX;{ AttrVal("DEVICE","debug","1") }
par:COMMENT;COMMENT as set, defaults to MAX;{ AttrVal("DEVICE","comment","Configured using template MAX_ShutterContact_MAX1") }
par:USERREADINGS;USERREADINGS as set, defaults to MAX;{ AttrVal("DEVICE","userReadings","Timestamp {ReadingsTimestamp($NAME,'IKON2',0)}, Uhrzeit {(split(' ',ReadingsTimestamp($NAME,"state",0)))[1]},Datum {(split(' ',ReadingsTimestamp($NAME,"state",0)))[0]}, Datum2 {join("." => reverse split('-', (split(' ',ReadingsTimestamp($NAME,"state",0)))[0]))}, IKON { my $state=ReadingsVal($NAME,'state','0'); return '<div><img src="/fhem/images/default/off.png">' if($state eq "closed"); return '<div><img src="/fhem/images/default/on.png">'; }, IKON2 { my $state=ReadingsVal($NAME,'state','0'); return '<div><img src="/fhem/images/default/fts_window_2w_green.png">' if($state eq "closed"); return '<div><img src="/fhem/images/default/fts_window_2w_open_lr_red.png">'; }, IKON3 {'<div><img src="/fhem/images/default/fts_window_2w_open_lr.png">';}") }
par:EOCR;EOCR as set, defaults to MAX;{ AttrVal("DEVICE","event-on-change-reading",".*") }
par:DEVSTATICON;DEVSTATICON as set, defaults to MAX;{  AttrVal("DEVICE","devStateIcon","opened.*.:fts_window_2w_open_lr@red tilted:fts_window_2w_2l_tilt@red closed.*.:fts_window_2w@green") }
par:STATEFORMAT;STATEFORMAT as set, defaults to MAX;{  AttrVal("DEVICE","stateFormat","{ReadingsVal('NAME','state','').", ".ReadingsTimestamp('NAME','state','')} ") }"   
par:LABEL;;{ (AttrVal('global','language','DE') eq 'DE') ? return 'Ist<br>:Soll<br>' : return 'Actual<br>Desired<br>' }
attr DEVICE icon ICON
attr DEVICE comment COMMENT
attr DEVICE userReadings USERREADINGS
attr DEVICE debug DEBUG
attr DEVICE event-on-change-reading EOCR
attr DEVICE devStateIcon DEVSTATICON
atrr DEVICE stateFormat STATEFORMAT
#  Variante: attr DEVICE devStateIcon closed*.*:fts_window_2w_green.png opened*.*:fts_window_2w_open_lr_red.png
######################################################################
######################################################################
name:MAX_ShutterContact_darkall_MAX2
filter:TYPE=MAX
desc:To configure a ShutterContact
order:M3
par:ICON;ICON as set, defaults to MAX;{ AttrVal("DEVICE","icon","hm-sec-win") }
par:DEBUG;DEBUG as set, defaults to MAX;{ AttrVal("DEVICE","debug","1") }
par:COMMENT;COMMENT as set, defaults to MAX;{ AttrVal("DEVICE","comment","Configured using template MAX_ShutterContact_MAX1") }
par:USERREADINGS;USERREADINGS as set, defaults to MAX;{ AttrVal("DEVICE","userReadings","Timestamp {ReadingsTimestamp($NAME,'IKON2',0)}, Uhrzeit {(split(' ',ReadingsTimestamp($NAME,"state",0)))[1]},Datum {(split(' ',ReadingsTimestamp($NAME,"state",0)))[0]}, Datum2 {join("." => reverse split('-', (split(' ',ReadingsTimestamp($NAME,"state",0)))[0]))}, IKON { my $state=ReadingsVal($NAME,'state','0'); return '<div><img src="/fhem/images/default/off.png">' if($state eq "closed"); return '<div><img src="/fhem/images/default/on.png">'; }, IKON2 { my $state=ReadingsVal($NAME,'state','0'); return '<div><img src="/fhem/images/default/fts_window_2w_green.png">' if($state eq "closed"); return '<div><img src="/fhem/images/default/fts_window_2w_open_lr_red.png">'; }, IKON3 {'<div><img src="/fhem/images/default/fts_window_2w_open_lr.png">';}") }
par:EOCR;EOCR as set, defaults to MAX;{ AttrVal("DEVICE","event-on-change-reading",".*") }
par:DEVSTATICON;DEVSTATICON as set, defaults to MAX;{  AttrVal("DEVICE","devStateIcon","opened.*.:fts_window_2w_open_lr@red tilted:fts_window_2w_2l_tilt@red closed.*.:fts_window_2w@green") }
par:STATEFORMAT;STATEFORMAT as set, defaults to MAX;{  AttrVal("DEVICE","stateFormat","{ReadingsVal('NAME','state','').", ".ReadingsTimestamp('NAME','state','')} ") }"             
par:LABEL;;{ (AttrVal('global','language','DE') eq 'DE') ? return 'Ist<br>:Soll<br>' : return 'Actual<br>Desired<br>' }
attr DEVICE icon ICON
attr DEVICE comment COMMENT
attr DEVICE userReadings USERREADINGS
attr DEVICE debug DEBUG
attr DEVICE event-on-change-reading EOCR
attr DEVICE devStateIcon DEVSTATICON
atrr DEVICE stateFormat STATEFORMAT
#  Variante: attr DEVICE devStateIcon closed*.*:fts_window_2w_green.png opened*.*:fts_window_2w_open_lr_red.png
######################################################################

Wzut

also ich würde eigene Designs nicht in max.template ablegen , Thema update :)
Leg dir eine neue Template Datei an z.b. mymax.template oder jonien.template,
dort trägst du ein was du möchtest. Es dürfen da nicht nur MAX Geräte rein , wenn die Schlüsselworte passen kann das alles mögliche sein.
Da FHEM alle Template Dateien beim Neustart einliest hast du später bei der Auswahl (?) ein Mix aus allem zur Verfügung.
D.h. du siehest gar nicht das "meine" Layouts und "deine" aus verschiedenen Quellen kommen. Wichtig ist halt nur das du zum einen eindeutige Namen vergibst
und das die Filter schön zum jeweiligen Device Typ passen. ( OK, wenn sie nicht "schön" passen wird dir halt ne lange Liste angezeigt :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

jonien

Mit dem "eigenem" template hatte ich es schon einmal ausprobiert, konnte aber nicht erkennen, das aus meiner "eigenen template Quelle" geladen wurde. Deshalb war ich bei der Original max.temlate verblieben. Nach Deinem Hinweis habe ich es jetzt geändert und alles ist gut 8)

Bei den shutter-contact habe ich folgende Filter verwendet, die aber nicht funktionieren:
filter:TYPE=MAX:FILTER:devtype=(4|1)
filter:TYPE=MAX:FILTER:devtype=(1|4)
Mit diesem Filter werden die shutter-contact angezeigt:
filter:TYPE=MAX
devicetyp=4 ist doch korrekt für den shutter-contact (?). Den 2. Parameter kann ich nicht ergründen :-\

Wzut

wenn du den Filter devtype=xx benuzt muß die Zahl xx auch zum jeweiliegn Typ passen (Internal devtype)
die MAX Typen sind :

1 = HeatingThermostat
2 = HeatingThermostatPlus
3 = WallMountedThermostat
4 = ShutterContact
5 = PushButton
6 = virtualShutterContact
7 = virtualThermostat
8 = PlugAdapter

D.h. soll dein Block für Fenstercontakte sein :  devtype=4. alle anderen Typen bekommen ihn erst gar nicht angezeigt.
Soll dein Block auch für virtuelle FKs möglich sein : devtype=(4|6) , d.h. entweder Typ 4 oder Typ 6
Daher findest du in meinen Templates sowas wie devtype=(1|2) -> alle Sorten von HTs
oder devtype=(3|7) -> alle Abarten von WTs
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

hyper2910

hi,

ich habe mal eine Frage zu den templates,  Bei Heizreglern oder Wandthermostaten funktoniert alles und ich habe ein set AttrTemplate.


Warum nicht bei Shuttern?

Eine eigene mytemplate habe ich angelegt.   Jedoch bekomme ich die Auswahl in der Dropbox nicht,.


Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

Wzut

D.h auch kein Fragezeichen um sich die Liste anzeigen zu lassen ? oder tauchen nur deine dort nicht auf ?
Nach der Änderng FHEM neu gestartet ? Poste doch mal dein Template
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

hyper2910

Hi,

habe als set nur folgendes bei einem Shutter zur Auswahl, bei Heizreglern funktioniert alles.


Ich habe die Templates hier aus dem Eintrag einfach mal als dirks.template abgespeichert um damit zu testen.


Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

jonien

In der max.template hat sich ein "kleiner" Fehler eingeschlichen. Beim Filter steht dort ein":" statt einem "=". Nach einer Anpassung funktioniert es wieder.

filter:TYPE=MAX:filter:devtype=(4|6)
filter:TYPE=MAX:FILTER=devtype=(4|6)

hyper2910

Hi,

das habe ich geändert, jedoch gibt es den Punkt bei den Shuttern nicht.

siehe Bild vom letzten Post.

Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

jonien

Ich vermute, das Du die "aktuellen" Module installiert hast, da sonst die Heizungs-Regler auch keine Auswahlmöglichkeit anzeigen würden.
https://forum.fhem.de/index.php/topic,106258.0.html
Ich verwende unterschiedliche Shutter. Bisher habe ich nur die von "MAX" integriert.
Hier ein Beispiel, welches bei mir funktioniert:
######################################################################
name:MAX_ShutterContact_jonien_4
filter:TYPE=MAX:FILTER=devtype=(4|6)
desc:To configure a ShutterContact
order:M3
par:ICON;ICON as set, defaults to MAX;{ AttrVal("DEVICE","icon","hm-sec-win") }
par:DEBUG;DEBUG as set, defaults to MAX;{ AttrVal("DEVICE","debug","1") }
par:COMMENT;COMMENT as set, defaults to MAX;{ AttrVal("DEVICE","comment","Configured using template MAX_ShutterContact_jonien-4") }
par:USERREADINGS;USERREADINGS as set, defaults to MAX;{ AttrVal("DEVICE","userReadings","Timestamp {ReadingsTimestamp($NAME,'IKON2',0)}, Uhrzeit {(split(' ',ReadingsTimestamp($NAME,"state",0)))[1]},Datum {(split(' ',ReadingsTimestamp($NAME,"state",0)))[0]}, Datum2 {join("." => reverse split('-', (split(' ',ReadingsTimestamp($NAME,"state",0)))[0]))}, IKON { my $state=ReadingsVal($NAME,'state','0'); return '<div><img src="/fhem/images/default/off.png">' if($state eq "closed"); return '<div><img src="/fhem/images/default/on.png">'; }, IKON2 { my $state=ReadingsVal($NAME,'state','0'); return '<div><img src="/fhem/images/default/fts_window_2w_green.png">' if($state eq "closed"); return '<div><img src="/fhem/images/default/fts_window_2w_open_lr_red.png">'; }, IKON3 {'<div><img src="/fhem/images/default/fts_window_2w_open_lr.png">';}") }
par:EOCR;EOCR as set, defaults to MAX;{ AttrVal("DEVICE","event-on-change-reading",".*") }
par:DEVSTATICON;DEVSTATICON as set, defaults to MAX;{  AttrVal("DEVICE","devStateIcon","opened.*.:fts_window_2w_open_lr@red tilted:fts_window_2w_2l_tilt@red closed.*.:fts_window_2w@green") }
par:STATEFORMAT;STATEFORMAT as set, defaults to MAX;{  AttrVal("DEVICE","stateFormat","{ReadingsVal('NAME','state','').", ".ReadingsTimestamp('NAME','state','')} ") }"             
par:LABEL;;{ (AttrVal('global','language','DE') eq 'DE') ? return 'Ist<br>:Soll<br>' : return 'Actual<br>Desired<br>' }
attr DEVICE icon ICON
attr DEVICE comment COMMENT
attr DEVICE userReadings USERREADINGS
attr DEVICE debug DEBUG
attr DEVICE event-on-change-reading EOCR
attr DEVICE devStateIcon DEVSTATICON
atrr DEVICE stateFormat STATEFORMAT
#  Variante: attr DEVICE devStateIcon closed*.*:fts_window_2w_green.png opened*.*:fts_window_2w_open_lr_red.png
######################################################################