Fernbedienung Eingabe bestätigen mit anderem Knopf

Begonnen von laberlaib, 17 November 2015, 08:52:55

Vorheriges Thema - Nächstes Thema

laberlaib

Hallo,

ich hab das Add-On Board von locutus auf meinem RPI inkl. IR-Empfänger.
Da unser Kind oft auf der Fernbedienung rumspielt bzw. ich nicht mit einem Klick aus Versehen den Server runterfahren möchte, möchte ich die Befehle vor dem Ausführen mit dem Klick innerhalb von 5 Sekunden auf einen anderen Knopf bestätigen.
Während der 5 Sekunden soll der Befehl auf dem Display angezeigt werden.

Bisher ruft ein Tastendruck die Funktion "BefehlFreischalten" mit dem gewünschten Befehl als Argument auf:

sub IRP1(){
BefehlFreischalten("set dg_sc_Decke toggle");
}


BefehlFreischalten speichert nun den Befehl temporär als Comment in einem Dummy, woher das Display weiß, was es anzeigen soll.
Weiterhin legt es ein Notify mit dem Befehl an, welches ich dann durch den Bestätigungsknopf Triggern kann, und ein AT, welches das Notify nach 5 Sekunden löscht.

sub BefehlFreischalten($){
my ($befehl) = @_[0];

fhem("delete bfNotify");

fhem("attr IRBefehl comment $befehl");
fhem("define bfNotify notify IRBefehl:on $befehl");

fhem("trigger LCD_Backlight on");
fhem("set Display layoutFilename IRBefehl.layout 5");

fhem("define bfToggleAT at +00:00:05 delete bfNotify;;set LCD_Backlight ". ReadingsVal ("LCD_Backlight","state","off")); #Freigabe löschen und LCD-Bild auf alten Zustand

}


Das ganze funktioniert, aber durch das Anlegen und Löschen gibt es immer Änderungen und das kleine Rote Fragezeichen leuchtet auf.

Für mich klingt das wie eine Aufgabe für "SEQUENCE". Aber aus dem Wiki Trick der Woche Feb 2014 und der Commandref werde ich nicht ganz schlau: Wenn ich auf meiner Fernbedienung etwas drücke, dann wird dadurch kein Event ausgelöst sondern ich gebe ja als Attribut für den Knopf an, was passieren soll. Kann ich damit trotzdem so etwas auslösen:

define lampseq sequence Btn1:on 0.5 Btn2:off 0.5 Btn1:on

http://fhem.de/commandref.html#sequence

Oder ist das mit einem DOIF lösbar? Aber das wait geht da ja nur auf die auszuführenden Befehle. Für die Bedinung gilt doch nur die Wiederholung des selben Knopfes (was eine 1 1/2 Jährige bereits beherrscht).

Mir schwebt als Ideallösung vor, dass ich das ganze Freischaltenprozedere möglichst allgemeingültig halte, und nur den auszuführenden Befehl an diese Funktion übergebe. Aber dafür muss ich ja den ganzen Wartekram sowie das Angabenzwischenspeichern in Perl realisieren, wenn ich das Rote Fragezeichen nicht haben will. Hätte mir dafür auch jmd 2-3 Stichworte?

Danke im Voraus.
laberlaib
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

fiedel

Du musst das Notify nicht löschen, sondern kannst es per "attr mynotify disabled 1" deaktivieren.
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

laberlaib

Ist auf jeden Fall besser, dann kann man leichter dran rumdoktoren, aber dann hab ich auch das rote Fragezeichen weil es sich um eine Attributänderung handelt.
Klar, könnte ich dann immer gleich die neue Konfiguration speichern, aber wenn dann theoretisch jmd auf der Fernbedienung rumdrückt während was anderes gemacht wird, wo man evtl nicht speichern will, dann wäre das nicht gut. Praktisch wahrscheinlich kein Problem, aber eine Lösung ohne Strukturänderung fänd ich schöner.
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)