Hallo ihr,
ich möchte hinbekommen, dass wenn ein Fenster geöffnet wird, abhängig davon, ob die Klimaanlage an ist, dass diese ausgeschaltet wird. Habe bereits einen event-on-change beim Fenster-STATE. Dieser funktioniert auch, da ich beim Öffnen des Fensters eine Nachricht per Pushover bekomme.
Mein DOIF-Versuch hat einen Fehler, den ich nicht finde:
define di_fensterSZ_klima DOIF (MQTT2_msh_schlafzimmer_fenster_:STATE:.open AND sz_d_klima:state = 1) (set sz_d_klima state 0)
Hier die beiden Geräte:
defmod MQTT2_msh_schlafzimmer_fenster_ MQTT2_DEVICE msh_schlafzimmer_fenster_
attr MQTT2_msh_schlafzimmer_fenster_ IODev m2server
attr MQTT2_msh_schlafzimmer_fenster_ alias Schlafzimmer Fenster
attr MQTT2_msh_schlafzimmer_fenster_ devStateIcon close.*:fts_window_1w open.*:fts_window_1w_tilt unknown.*:fts_window_1w
attr MQTT2_msh_schlafzimmer_fenster_ event-on-change-reading STATE
attr MQTT2_msh_schlafzimmer_fenster_ icon fts_window_1w
attr MQTT2_msh_schlafzimmer_fenster_ jsonMap d_schlafzimmer_fenster__details:STATE
attr MQTT2_msh_schlafzimmer_fenster_ readingList msh/d_schlafzimmer_fenster_:.* { json2nameValue($EVENT, 'd_schlafzimmer_fenster__', $JSONMAP) }
attr MQTT2_msh_schlafzimmer_fenster_ room 20_Schlafzimmer,Medion
attr MQTT2_msh_schlafzimmer_fenster_ stateFormat STATE
defmod sz_d_klima dummy
attr sz_d_klima alias Schlafzimmer Klimaanlage Steuerung
attr sz_d_klima group Klimaanlage
attr sz_d_klima icon icoKLIMA
attr sz_d_klima readingList state desired-temp nanoe operationmode ecomode
attr sz_d_klima room 20_Schlafzimmer
attr sz_d_klima setList state:1,0 desired-temp nanoe:2,1 operationmode:0,1,2,3,4 ecomode:0,1,2
attr sz_d_klima stateFormat {\
if (ReadingsVal("sz_d_klima","state","") eq "1" ) {\
my $state_info = "Eingeschaltet";;\
\
my $temperature = ReadingsVal("sz_d_klima","desired-temp","");;\
$temperature .= "°C";;\
\
\
my $ecomode;;\
if (ReadingsVal("sz_d_klima","ecomode","") eq "0" ){\
$ecomode = "EcoMode Auto";;\
}\
elsif (ReadingsVal("sz_d_klima","ecomode","") eq "1" ){\
$ecomode = "EcoMode Powerful";;\
}\
elsif (ReadingsVal("sz_d_klima","ecomode","") eq "2" ){\
$ecomode = "EcoMode Quiet";; \
}\
\
\
my $operationmode;;\
if (ReadingsVal("sz_d_klima","operationmode","") eq "0" ){\
$operationmode = "Modus Auto";;\
}\
elsif (ReadingsVal("sz_d_klima","operationmode","") eq "1" ){\
$operationmode = "Modus Dry";;\
}\
elsif (ReadingsVal("sz_d_klima","operationmode","") eq "2" ){\
$operationmode = "Modus Cool";; \
}\
elsif (ReadingsVal("sz_d_klima","operationmode","") eq "3" ){\
$operationmode = "Modus Heat";;\
}\
elsif (ReadingsVal("sz_d_klima","operationmode","") eq "4" ){\
$operationmode = "Modus NANOE";;\
}\
\
my $nanoe;;\
if (ReadingsVal("sz_d_klima","nanoe","") eq "1" ){\
$nanoe = "Nanoe Aus";;\
}\
elsif (ReadingsVal("sz_d_klima","nanoe","") eq "2" ){\
$nanoe = "Nanoe An";;\
}\
else {\
$nanoe = "Nanoe Aus";;\
}\
\
$state_info = join(" / ", $state_info, $temperature, $nanoe, $operationmode, $ecomode);;\
\
}\
else {\
return "Ausgeschaltet";; \
}\
}
attr sz_d_klima userReadings params {sz_klima_control()}
attr sz_d_klima webCmd state:operationmode
attr sz_d_klima webCmdLabel an(1)/aus(0):Modus (0=Auto / 1=Trocken / 2=Kühlen / 3=Heizen / 4=Nanoe)
attr sz_d_klima widgetOverride desired-temp:slider,16.0,0.5,30.0,1
Den Dummy zur Steuerung der Klimaanlage habe ich von hier: https://forum.fhem.de/index.php/topic,101791.msg952670.html#msg952670
Könnte bitte einmal ein "Kenner" drüberschauen?
Vielen Dank und viele Grüße
Marco
Hallo Marco,
Du erinnerst Dich? https://forum.fhem.de/index.php/topic,119100.msg1135408.html#msg1135408
Der geht so nicht:
define di_fensterSZ_klima DOIF (MQTT2_msh_schlafzimmer_fenster_:STATE:.open AND sz_d_klima:state = 1) (set sz_d_klima state 0)
Das wäre der Syntax zur Abfrage (siehe Doku (https://fhem.de/commandref_modular_DE.html#DOIF_Lesbarkeit_der_Definitionen)):
[sz_d_klima:state] = 1
Der hier könnte ein Eventrigger sein?
MQTT2_msh_schlafzimmer_fenster_:STATE:.open oder wolltest Du auch was abfragen?
Und der hier set sz_d_klima state 0 - Heinrich mir graust vor Dir!
Tu mir einen Gefallen: vergiss BITTE, dass Du state und STATE selbst manipulieren kannst - überlass diese den Geräten - und arbeite mit anderen Readings!
Gruß Otto
Zitat von: Otto123 am 05 März 2021, 16:13:37
Das wäre der Syntax zur Abfrage (siehe Doku (https://fhem.de/commandref_modular_DE.html#DOIF_Lesbarkeit_der_Definitionen)):
[sz_d_klima:state] = 1
Bitte doppelte
== bei einem Vergleich und gerne noch
:i spendieren um numerischen Kontext zu erzwingen.
Allgemein scheint mir der Perl-Code im stateFormat auch ziemlich Kraut und Rüben zu sein.
Habe mir beim Fenster ein anderes Reading genommen:
([MQTT2_msh_schlafzimmer_fenster_:d_schlafzimmer_fenster__details] eq "open" AND [sz_d_klima:state] == 1) (set sz_d_klima state 0)
Es erscheint aber folgender Fehler:
condition c01: syntax error, line 1, near ""open" AND "
Den Dummy zur Steuerung der Klimaanlage kann ich leider nur über state steuern...
Zitat von: marboj am 05 März 2021, 18:24:12
Habe mir beim Fenster ein anderes Reading genommen:
([MQTT2_msh_schlafzimmer_fenster_:d_schlafzimmer_fenster__details] eq "open" AND [sz_d_klima:state] == 1) (set sz_d_klima state 0)
Es erscheint aber folgender Fehler:
condition c01: syntax error, line 1, near ""open" AND "
Den Dummy zur Steuerung der Klimaanlage kann ich leider nur über state steuern...
and wäre richtig gewesen
Vielen Dank. Mit dem kleinen and kommt zumindest kein Syntaxfehler mehr. Testen kann ich erst, wenn die Mitbewohner mal nicht da sind ;-).
Es klappt, Danke !!!