Wie toggle ich im notify ?

Begonnen von TomLee, 17 September 2022, 18:47:02

Vorheriges Thema - Nächstes Thema

TomLee

Hi,

wenn ich nur on off angebe gibts nur einen Readingname mit dem Wert (wie greift man den darauf zu, da hab ich irgendwie einen Hänger) darum hab ich das unten erstmal mit "status" umgesetzt.
useSetExtensions wird nicht angeboten, ich würd aber gerne toggeln (über einen statt zwei (für on und off) Kurzbefehl(e) am Iphone )

Ich hab die notify-Definition bis jetzt::

defmod not_BM_Garage notify MQTT2_zigbee_0x00158d000411b050:occupancy:.true|MQTT2_zigbee_0x00158d00032c6d54:occupancy:.true {\
my $hm = sprintf("%02d:%02d",$hour,$min);;\
my $stat= ReadingsVal($SELF,'status','off');;\
return if $stat eq 'off';;\
my $ft = InternalVal('MQTT2_WLED_G1_till','TIMESPEC','00:30');;\
return fhem('set tb_TelegramBot msg Bewegung im Hof;;set MQTT2_WLED_G1 effectname Lightning;;set MQTT2_WLED_G1 brightness 255;;set MQTT2_WLED_G1 on-for-timer 80') if $hm gt "$ft" && $hm lt "05:00";; # Versuch ins Beet kackende Viecher zu vertreiben\
fhem('set tb_TelegramBot msg Bewegung im Hof;;set MQTT2_WLED_G1 motion');; #Nachbar lugt über die Mauer\
}
attr not_BM_Garage disabledForIntervals 08:00-18:00
attr not_BM_Garage room Deko
attr not_BM_Garage setList status:on,off on:noArg off:noArg

setstate not_BM_Garage active
setstate not_BM_Garage 2022-09-17 17:56:53 on
setstate not_BM_Garage 2022-09-17 18:20:33 state active
setstate not_BM_Garage 2022-09-17 18:01:47 status on
setstate not_BM_Garage 2022-09-17 17:05:38 triggeredByDev MQTT2_zigbee_0x00158d000411b050
setstate not_BM_Garage 2022-09-17 17:05:38 triggeredByEvent occupancy: true


Gruß

Thomas

TomLee

Ah, man kann Perl in setList verwenden und damit kann ich "status" auswerten !

TomLee

#2
Doch nicht so einfach.

So:

toggle:{ReadingsVal($SELF,'status','off') eq 'on' ? fhem("set $SELF status off") : fhem("set $SELF status on") }

werden mir die setter nicht mehr angeboten in d3m if.

Liegt es an der Angabe der fhem-Funktion in dem if ?

TomLee

Übersehen habe ich schonmal das nix zurückgegeben wird, die setter werden mir weiterhin nich angeboten.

toggle:{ReadingsVal($SELF,'status','off') eq 'on' ? fhem("set $SELF status off") : fhem("set $SELF status on");return 'done';}

DetlefR

Hallo,
ich denke so direkt wird das nichts werden. Wie wäre es mit einem ReadingsProxy.
1: setlist anpassen
attr not_BM_Garage setList status:on,off
"on:noarg" und "off:noarg" setzt "state"
2.Readingsproxy

defmod rp_BM_Garage readingsProxy not_BM_Garage :status
attr rp_BM_Garage setFn {($CMD eq "on")?"status on":"status off";;}
attr rp_BM_Garage setList on off


Sollte funktionieren.

TomLee

Ich weiß die Mühe zu schätzen, ein zusätzliches Device kommt aber nicht in Frage, probier ich erst gar nicht aus.

Es bleibt bei mir  das ? bei der fhem-Funktion die in dem if zurückgegeben wird, ob das überhaupt so klappt, hab mich zu wenig bis jetzt beschäftigt damit (und noch nix im Bauch), muss es hier vieleicht wieder diese anonyme sub sein deren Referenz man zurückgibt ?
Wie gesagt zu wenig mit beschäftigt bis jetzt und einfach mal drauf losgelegt ... und zu wenig, anscheinend, bisher begriffen"

TomLee

Der Grund sind die Leerzeichen, Lösung hab ich aber noch nicht.

TomLee

Auslagern des Code hilft auch net.
toggle:{irgendwie($SELF)}

Dann steht in dem setter toggle "{irgendwie($SELF)}" zur Auswahl. >:(

TomLee

Habs jetzt so umgesetzt das ich auf einen toggle-setter verzichten kann (zumindest einmal Abends und einmal Morgens), reicht mir vollkommen aus.

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Jamo

Man kann alternativ auch einen cmdalias verwenden, um ein toggle zu realisieren.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

TomLee

Beide zuletzt genannten Varianten erfordern wieder ein zusätzliches Device, wie schon der Vorschlag von DetlefR und das will ich vermeiden, steht doch oben, trotzdem Danke.

Ich kann mit der Variante die ich mir jetzt überlegt hab gut leben, denk ich (die kam mir erst vor ner Stunde), muss sich zeigen in der Praxis.