repeatcmd mit verschieden vielen Wiederholungen und Zeitabständen

Begonnen von cocojambo, 20 Juni 2021, 12:41:04

Vorheriges Thema - Nächstes Thema

cocojambo

Ich habe ein Tv Gerät, das ich über die Harmony und Hub unter Hinzunahme vom Modul fake-Ruko ansteuerte, da das Gerät kein Lan oder Wlan hat. Dazu muß ich mich mit mehreren Befehlen durch das Menü steuern. Hier mal der Übersicht wegen meine gekürzte Version aus der config.cfg:

define Harmony_fakeRoku_DOIF DOIF ([Harmony_fakeRoku:"^keypress: Home$"]) (set Akttion1 ein)
DOELSEIF ([Harmony_fakeRoku:"^keypress: Info$"])(set Akttion2 aus)
DOELSEIF ([Harmony_fakeRoku:"^keypress: InstantReplay$"]) (set Aktion3 toggle) DOELSEIF ([Harmony_fakeRoku:"^keypress: Back$"]) (set Aktion4 toggle)
DOELSEIF ([Harmony_fakeRoku:"^keypress: Search$"]) (set Aktion5 Ein)
DOELSEIF ([Harmony_fakeRoku:"^keypress: Fwd$"]) (set Aktion6 Aus)
DOELSEIF ([Harmony_fakeRoku:"^keypress: Play$"]) (set HarmonyHub command Samsung-Fernseher Menu) (set HarmonyHub command Samsung-Fernseher Menu)
(set HarmonyHub command Samsung-Fernseher DirectionDown) (set HarmonyHub command Samsung-Fernseher Select) (set HarmonyHub command Samsung-Fernseher DirectionLeft) (set HarmonyHub command Samsung-Fernseher Select)DOELSE


Dabei muß ich einige Kommandos mit dem Cursor mehrfach betätigen z.B. Cursor up,down,left,right. Um nicht die Befehle mehrfach aufzulisten möchte ich an bestimmten Stellen die Mehrfach wiederholung mit repeatcmd erledigen.

attr Harmony_fakeRoku_DOIF repeatcmd 0:0:0:0:0:0:0,3,0,10,0

Also, cmd 7.1 keine Wiederholung, cmd 7.2 dreimal wiederholen, cmd 7.3 keine Wiederholung, cmd 7.4 zehn Wiederholungen und cmd 7.5 ohne Wiederholung.
Funktioniert aber nicht mit Komma, Strichpunkt oder Punkt.

Damit der Fernseher noch "mitkommt", das ganze dann mit wait verzögern:
attr Harmony_fakeRoku_DOIF wait 1:1:1:1:1:1:1,1,1,1,1

Das funktioniert bei nur einmal Ausführung, aber wahrscheinlich nicht bei repeat. Dazu habe ich nix in der commandref und auch nix hier im Board gefunden.
Wie bekomme ich das hin, die Befehle gezielt an der richtigen Position zu wiederholen und die zeitabstände innerhalb cmd 7.2 und cmd 7.4 Wiederholungen auch noch zu bestimmen?

Gruß aus Köln
Nobbi
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

Damian

repeatcmd lässt sich nicht auf einzelne Sequenzen eines Zweiges anwenden, sondern nur auf den ganzen Zweig.

Im DOIF-Perlmodus kannst du dein Vorhaben mit set_Exec realisieren.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cocojambo

#2
ich habe mir heute nachmittag mal diese Seite dazu angelesen

https://fhem.de/commandref_DE.html#DOIF_set_Exec

Irgendwie blicke da nicht durch. Mir ist nicht klar wie ich in mein Konstrukt alleine nur ein Wiederholung in diesen Teil meines DOIF einbauen kann.
Da sind nur timer Beispiele, aber keine für ein einfaches DOIF set_Exec.

(set HarmonyHub command Samsung-Fernseher DirectionDown)

Wo und wie soll ich da zB. eine 3 fache wiederholung einfügen und ich weiß nicht wie ich set_Exec mit dem HarmonyHub command verknüpfen soll.
Ich muß dabei zugeben, das ich vom Umgang mit Perl wenig bis keine Ahnung habe.
Probiert habe ich:
(set_Exec ("HarmonyHub command Samsung-Fernseher DirectionDown","$count 3"))

gibt aber Error

Vielleicht kann man mir trotzdem weiterhelfen........

Gruß
Nobbi
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

Damian

Zeitlicher Abstand und Anzahl von Wiederholung sind doch hier erklärt:

ZitatWenn Taster auslöst, Lampe auf on schalten und noch zwei mal im Abstand von einer Sekunde wiederholt auf on schalten.

defmod di_lamp_on DOIF {["button:on"];;fhem_set"lamp on";;set_Exec("timer",1,'fhem_set("lamp on")','$count < 2')}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cocojambo

das habe ich auch umgesetzt:

statt:
(set HarmonyHub command Samsung-Fernseher DirectionDown)

das:
{["Harmony_fakeRoku:"^keypress: Play$"];;fhem_set"HarmonyHub command Samsung-Fernseher DirectionDown";;set_Exec("timer",1,'fhem_set("HarmonyHub command Samsung-Fernseher DirectionDown")','$count < 3')}

Da kommt aber:
{[::EventDoIf('Harmony_fakeRoku',$hash,'"^keypress: Play$',0)];;fhem_set"HarmonyHub command Samsung-Fernseher DirectionDown";;set_Exec("timer",1,'fhem_set("HarmonyHub command Samsung-Fernseher DirectionDown")','$count < 3')}: Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at (eval 15801) line 1.
syntax error at (eval 15801) line 1, near "fhem_set"HarmonyHub command Samsung-Fernseher DirectionDown""

FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

Damian

Du musst im DOIF-Perl-Modus sein. Im DOIF-FHEM-Modus funktioniert das nicht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cocojambo

Muß ich denn dazu das komplette DOIF/DOIFELSE umstellen, also auch die einfachen vorhergehenden Aktionen 1-6 ?
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

Damian

Zitat von: cocojambo am 20 Juni 2021, 19:36:12
Muß ich denn dazu das komplette DOIF/DOIFELSE umstellen, also auch die einfachen vorhergehenden Aktionen 1-6 ?

ja, ansonsten musst du im FHEM-Modus die Billig-Variante nehmen:

sleep 3;set bla on;sleep 3;set bla on;....
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF