stateformat - gemeldetes reading per perl verändern

Begonnen von MogRuith, 30 April 2022, 13:27:09

Vorheriges Thema - Nächstes Thema

MogRuith

Ich bitte hiermit perl-Kundige um ihre Hilfe. Ich bin zwar kein fhem-Anfänger mehr, aber perl lässt mich verzweifeln...

Meine Rauchmelder geben als readings alarm_Smoke: detected - Unknown Location, notificationIsOn und
alarm_Smoke: Event cleared: detected - Unknown Location, arg 102, notificationIsOn aus.
Wie kann ich daraus das "detected" und das "cleared" quasi "ausschneiden" und als "on"  bzw "off" per stateformat definieren?

Dank vorab und besten Gruß

MadMax-FHEM

#1
Ich habe zu dem Zweck ein userReadings...

Kann ich später mal posten...
EDIT: hier mein userReadings

smoke_detection:alarm.* {ReadingsVal($name,"alarm","n.a.") eq "Smoke: detected - Unknown Location" ? return "smokeDetected" : return "noSmoke"}

Bei dir dann wohl besser so:

smoke_detection:alarm_Smoke.* {ReadingsVal($name,'alarm_Smoke','') =~ 'detected'?'on':'off'}

Damit gibt es ein Reading welches Smoke detected anzeigt, worauf man dann (einfacher) reagieren kann und mit stateFormat auch anzeigen lassen kann (so mache ich das).

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

hi,

ob man im stateFormat das Reading noch anders in den Perlausdruck bekommt weiß nicht. Aber so sollte es gehen:
{ReadingsVal($name,'alarm_Smoke','') =~ 'detected'?'on':'off'}

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

MogRuith

Hallo Otto und besten Dank für deine Lösung! Die habe ich jetzt per attr stateformat gesetzt, jetzt wird eine orangene Lampe angezeigt als "on", obwohl der Rauchmelder keinen Alarm schlägt.
Ich denke, das Problem ist, dass in beiden Zuständen "detected" steht...einmal allein...einmal als "Event cleared: detected"... Wer programmiert nur solche readings...? Könnte es funktionieren, wenn ich nach "cleared" suchen lasse...?

Lieben Gruß & besten Dank!!!

MogRuith

Super...habe jetzt
stateFormat: {ReadingsVal($name,'alarm_Smoke','') =~ 'cleared'?'off':'on'}
devStateIcon: on*:secur_smoke_detector@red off:secur_smoke_detector@lime

Wird korrekt angezeigt. Reagiert DoIf eigentlich jetzt auf state oder STATE...?

Besten Dank euch beiden!!!

Otto123

#5
Zitat von: MogRuith am 30 April 2022, 15:25:36
Reagiert DoIf eigentlich jetzt auf state oder STATE...?
ja :)
state ist ein Reading, STATE ist ein Internal
Es reagiert ganz wie Du willst:
[Device] steht für STATE [Device:state] steht für das Reading state, [Device:&Internal] steht für das Internal Internal.
https://fhem.de/commandref_modular_DE.html#DOIF_Ereignissteuerung
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

MogRuith