Ich habe das jetzt mal anhand der Tipps (so wie ich sie verstanden habe) umgebaut - und um besser simulieren zu können mit einer Lampenschaltung getestet.
Die Lampe kann in state zwei Zustände annehmen - on/off
Da ja die Idee war OldReadingsVal zu verwenden habe ich also folgendes "Konstrukt" gebaut.
SzHi_ZWave_SWITCH_Deckenlampe:(on|off)
{if ($EVENT eq"on") {fhem ('set Sonos_Wohnzimmer PlayURITemp [$NAME:Lampe-an]')}
elsif ($EVENT eq"off" and OldReadingsVal("$NAME","state","0") =~ /[^off]/) {fhem ('set Sonos_Wohnzimmer PlayURITemp [$NAME:Lampe-aus]')}
}
Die eine Message wird ausgegeben, wenn die Lampe angeschaltet wird, das Reading state also den Status on hat - funktioniert.
Die andere Message wird nur dann ausgegeben, wenn das Reading state den Status off hat und der alte Wert des Readings state mit OldReadingsVal abgefragt das Wort "off" nicht enthält - funktioniert auch.
Die "Umkehrprüfung" - also wenn ich die zweite Kondition ändere auf elsif ($EVENT eq"off" and OldReadingsVal("$NAME","state","0") =~ /[^on]/) {fhem ('set Sonos_Wohnzimmer PlayURITemp [$NAME:Lampe-aus]')}
}
führt auch zum gewünschten Ergebnis, nämlich dass die Message nicht ausgegeben wird.
So weit so gut.
Da in meinem Rasenmäheranwendungsfall state aber eine längere Zeichenkette enthalten kann als nur "parked" (siehe erste Nachricht in diesem Thread) wollte ich nun testen was passiert, wenn ich nur mit "Teilzeichenketten" arbeite.
Versuch =~ /[^n]/)
funktioniert. Es wird keine Message ausgegeben.
Gleicher Versuch mit =~ /[^o]/)
funktioniert aber nicht wie gewünscht und erwartet.
Die Message wird trotzdem ausgegeben, obwohl OldReadingsVal mit "on" doch das Zeichen "o" enthält.
Hat jemand eine Erklärung wo mein Denkfehler liegt?