"Sender- /Inputliste" Radio weiterschalten? Doif / notify / sub?

Begonnen von aherby, 19 Juli 2020, 21:24:20

Vorheriges Thema - Nächstes Thema

amenomade

#15
Zitat von: aherby am 20 Juli 2020, 03:01:54
Der Event-Monitor mit

... {if ([KuTaster1:2.PRESS_SHORT ep "pressed"]) ...

gibt folgendes aus

2020-07-20 02:57:42 HMCCUDEV KuTaster1 2.PRESS_SHORT: pressed


Ändere ich den Code in

{if ([KuTaster1:2.PRESS_SHORT:"pressed"])

kommt diese Meldung:


schrittSchalter DOIF: no round brackets in regular expression: init {@{$hash->{var}{a}}=qw/internetradio spotify mediaplayer dab ukw aux-modus dmr/;$hash->{var}{counter}=0}
{if ([KuTaster1:2.PRESS_SHORT:"pressed"]) {set_State($hash->{var}{a}[$hash->{var}{counter}]);fhem_set("DualIR6S input $hash->{var}{a}[$hash->{var}{counter}++]");; $hash->{var}{counter}=($hash->{var}{counter}==@{$hash->{var}{a}} ? 0:$hash->{var}{counter})}}


Und wie wäre es mit meinem Vorschlag, statt wiederum mit dem gleichen Unsinn? Du hast das Event identifiziert (es kommt übrigens nicht von deinem DOIF sondern von der Bedienung des Tasters selbst)
2020-07-20 02:57:42 HMCCUDEV KuTaster1 2.PRESS_SHORT: pressed
Das heisst: Device = KuTaster1, Event = "2.PRESS_SHORT: pressed"
Wenn Du die ganze Zeile markierst, wie schon gesagt, und dann auf "Create/modify device" klickst und DOIF auswählst bin ich 100% sicher, dass er kein
([KuTaster1:2.PRESS_SHORT:"pressed"]) vorschlägt, sondern eher.... etwas wie meine Vermutung hieroben:[KuTaster1:"^2.PRESS_SHORT:.pressed$"]

@Beta-User: ja, Each ist eine alternative Lösung. Aber es wird auch nicht helfen, so lange er nicht in der Lage ist, das richtige Trigger zu bauen (bzw. einfach vom Eventmonitor generieren zu lassen)

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

aherby

Hallo,
war wohl gestern / heute morgen schon zu spät  :-[

Also mit folgenden Code

define schrittSchalter DOIF init {@{$_a}=qw/internetradio spotify mediaplayer dab ukw aux-modus dmr/;;$_counter=0} \
{if ([KuTaster1:"^2.PRESS_SHORT:.pressed$"]) {set_State($_a[$_counter]);;fhem_set("DualIR6S input $_a[$_counter++]");;;; $_counter=($_counter==@{$_a} ? 0:$_counter)}}
attr schrittSchalter room TEST


fuktioniert es. Siehe EventMonitor

2020-07-20 13:14:43 DOIF schrittSchalter internetradio
2020-07-20 13:14:43 SIRD DualIR6S input internetradio
2020-07-20 13:14:43 HMCCUDEV KuTaster1 2.PRESS_SHORT: pressed
2020-07-20 13:14:44 HMCCUDEV KuTaster1 2.INSTALL_TEST: 1
2020-07-20 13:14:44 SIRD DualIR6S input: internetradio

2020-07-20 13:14:50 DOIF schrittSchalter spotify
2020-07-20 13:14:50 SIRD DualIR6S input spotify
2020-07-20 13:14:50 HMCCUDEV KuTaster1 2.INSTALL_TEST: 1
2020-07-20 13:14:50 HMCCUDEV KuTaster1 2.PRESS_SHORT: pressed
2020-07-20 13:14:50 SIRD DualIR6S input: spotify

2020-07-20 13:14:58 DOIF schrittSchalter mediaplayer
2020-07-20 13:14:58 SIRD DualIR6S input mediaplayer
2020-07-20 13:14:58 HMCCUDEV KuTaster1 2.PRESS_SHORT: pressed
2020-07-20 13:14:59 HMCCUDEV KuTaster1 2.INSTALL_TEST: 1
020-07-20 13:14:59 SIRD DualIR6S input: mediaplayer

2020-07-20 13:15:03 DOIF schrittSchalter dab
2020-07-20 13:15:03 SIRD DualIR6S input dab
2020-07-20 13:15:03 HMCCUDEV KuTaster1 2.PRESS_SHORT: pressed
2020-07-20 13:15:03 HMCCUDEV KuTaster1 2.INSTALL_TEST: 1
2020-07-20 13:15:03 SIRD DualIR6S on
2020-07-20 13:15:03 SIRD DualIR6S input: dab

2020-07-20 13:15:07 DOIF schrittSchalter ukw
2020-07-20 13:15:07 SIRD DualIR6S input ukw
2020-07-20 13:15:07 HMCCUDEV KuTaster1 2.PRESS_SHORT: pressed
2020-07-20 13:15:07 HMCCUDEV KuTaster1 2.INSTALL_TEST: 1
2020-07-20 13:15:07 SIRD DualIR6S on
2020-07-20 13:15:07 SIRD DualIR6S input: ukw

2020-07-20 13:15:11 DOIF schrittSchalter aux-modus
2020-07-20 13:15:11 SIRD DualIR6S input aux-modus
2020-07-20 13:15:11 HMCCUDEV KuTaster1 2.PRESS_SHORT: pressed
2020-07-20 13:15:11 HMCCUDEV KuTaster1 2.INSTALL_TEST: 1
2020-07-20 13:15:11 SIRD DualIR6S input: aux-modus
2020-07-20 13:15:11 SIRD DualIR6S power: on
2020-07-20 13:15:14 DOIF schrittSchalter dmr
2020-07-20 13:15:15 SIRD DualIR6S input dmr
2020-07-20 13:15:15 HMCCUDEV KuTaster1 2.PRESS_SHORT: pressed
2020-07-20 13:15:15 SIRD DualIR6S input: dmr
2020-07-20 13:15:15 SIRD DualIR6S power: on

2020-07-20 13:15:20 DOIF schrittSchalter internetradio
2020-07-20 13:15:20 SIRD DualIR6S input internetradio
2020-07-20 13:15:20 HMCCUDEV KuTaster1 2.PRESS_SHORT: pressed
2020-07-20 13:15:20 SIRD DualIR6S input: internetradio


Darf ich zum Verständnis noch fragen was die einzelnen "Bausteine" bedeuten?


init {@{$_a}=qw/internetradio spotify mediaplayer dab ukw aux-modus dmr/;;$_counter=0}

Doif wird initialisiert und bekommt irgendwie eine "Werteliste?


[KuTaster1:"^2.PRESS_SHORT:.pressed$"]

KuTaster1 ist das Device. ":" trennt? das Device vom Reading und "^2.PRESS_SHORT:.pressed$" ist der String der im Reading gesucht wird?
Was bewirkt das "^" und "$"?


fhem_set("DualIR6S input $_a[$_counter++]");;;; $_counter=($_counter==@{$_a} ? 0:$_counter)

Fhem wird mit dem Befehl "set" und dem Inhalt vom String "DualIR6S input ..." ausgeführt.
Was genau macht
$_a[$_counter++]");;;; $_counter=($_counter==@{$_a} ? 0:$_counter?

Alternative 2
ohne jetzt auf Short und Long zu achten scheint es so auch auf den ersten Blick zu funktionieren mit:

define NO_DUALINPUT notify KuTaster1:4.:.* { fhem "set DualIR6S input ".Each("DualIR6S input", "internetradio,spotify,mediaplayer,dab,ukw,aux-modus,dmr") }
attr NO_DUALINPUT room TEST


Das notify hört / reagiert auf alles was im Reading /Event mit

KuTaster1:4.:.*
passiert und ist das hier richtig vom Code oder kann was verbessert werden?


{ fhem "set DualIR6S input ".Each ...

ist ein Perl-Befehl, der fhem folgenden "Befehl/String" übergibt

set DualIR6S input ...


was macht genau

.Each("DualIR6S input", "internetradio,spotify,mediaplayer,dab,ukw,aux-modus,dmr")
?


Danke
FHEM 6.0 auf Raspberry Pi 4b 4GB, RaspberryMatic auf Raspi3b mit Charly-Funkmodul, ZigeeBridge mt deCONZ... . Homematic mittels HMCCU, Sonos 3xS1, 1xS6 (Play5 in der 2te Generation), 1xS9 (Soundbar), 1x SonosSub
1-Wire® to I2C host interface with ESD mit DS18B/S20.

Beta-User

Zitat von: amenomade am 20 Juli 2020, 11:45:08
@Beta-User: ja, Each ist eine alternative Lösung. Aber es wird auch nicht helfen, so lange er nicht in der Lage ist, das richtige Trigger zu bauen (bzw. einfach vom Eventmonitor generieren zu lassen)
Agreed...

Allerdings scheint das - an der Stelle - etwas transparenter zu sein, denn diese Rückfrage geht schon mal in die richtige Richtung:
Zitat von: aherby am 20 Juli 2020, 14:00:12
Das notify hört / reagiert auf alles was im Reading /Event mit

KuTaster1:4.:.*
passiert und ist das hier richtig vom Code oder kann was verbessert werden?
Ja, es kann, denn uU. hast du auch Long- und Long-release-Events. Dazu bitte einfach den Taster hernehmen, den Event-Monitor öffnen und etwas "rumspielen", damit zu ein Gefühl dafür bekommst, was da so alles an Event kommen kann (das scheint HMCCU.* zu sein, kenne ich nicht; ich würde aber empfehlen, auch mal einen Taster auszutesten, der mit einem anderen HM-Gerät gepeert ist). Für das "Erweitern" oder wieder-einengen dann bitte Tools wie z.B. regex101.com nutzen.

Ansonsten sollte das erste Argument in fhem.pl-Each ein Device-Name sein, sonst hat das keinen Bezugspunkt, an dem der Index (Zahl, als Internal) verwaltet werden kann (das kann auch das notify selbst sein, daher das $name in Rudis Post). Eigentlich wäre ich davon ausgegangen, dass das in deiner Schreibweise nicht klappt, aber evtl. liege ich da auch falsch.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

amenomade

#18
Zitat von: aherby am 20 Juli 2020, 14:00:12

Darf ich zum Verständnis noch fragen was die einzelnen "Bausteine" bedeuten?


Die Erklärung Schritt für Schritt hatte ich im schon verlinkten Post ein Paar genau 3 Posts weiter damals geschrieben (in blau).

^ und $ sind in deinem Fall wahrscheinlich optional. Die bedeuten das nur exakt dieses String mit nix davorne (^) und nix dahinten ($) matcht. Ohne die Zeichen, würde z.B. "12.PRESS_SHORT: pressed" wenn kein "^" und "2.PRESS_SHORT: pressed 5" wenn kein "$" auch matchen.

EDIT: wenn Du immer noch im gleichen Thread ein bisschen weiter liest, hat Damian auf einem anderen Thread verlinkt: https://forum.fhem.de/index.php/topic,105634.msg995666.html#msg995666
Dort ist auch alles erklärt. Und dort findest Du auch den Post von Rudi, der nach https://forum.fhem.de/index.php/topic,40022.msg323002.html#msg323002 verlinkt. Dort ist Each erklärt

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

aherby

Zitat von: Beta-User am 20 Juli 2020, 14:16:35
Agreed...

Naja nach ein paar Urlaubsstart-Bierchen versteht man als Nichtprogrammierer um die Uhrzeit eben nicht mehr alles.
Erschwerend hinzukommt, dass mein "C" auf der Tastatur defekt ist und ich das immer über eine "Software-Tastatur" einfügen muss.
So Spaß beiseite. 8)

@Beta-User:
hatte hat gesagt um es erstmal zu test ...
Jetzt würde die weiterführende Frage kommen:
Wie baut mein ein Each forwärts und rückwärts?
Also kurzer Tastendruck forwärts und langer Tastendruck rückwärts z.B. vom Wert "dab" (unabhängig von der Taster-Event-Syntax)?
Inhalt der Wertelist "... mediaplayer dab ukw ..."
Wenn man dies über zwei notify bauen will muss man ja der Each-Index übergeben oder bat man das in ein notify?
Glaube das DOIF ist einfacher in der Umsetzung.


@amenomade:
Die Erklärung mit (^) und ($) fehlte mir. Macht natürlich jetzt sinn und vieles einfacher.
Dankeschön.


@{$_a}=qw/10 35 50 70 100 => definiert ein Array mit Werten 10 35 50 ... und Name <DOIFname>a

$_a ist ja eine Variable / Werteliste oder wie auch immer die genaue Bezeichnung dafür ist.
Diese kann ich aber nur in diesen DOIF nutzen?

Übergreifend musste ich eine Sub in
99_myUtils.pm

einbauen oder?

Für die forwärts und rückwärts Input-Auswahl habe ich jetzt folgenden Code:

init {@{$_a}=qw/internetradio spotify mediaplayer dab ukw aux-modus dmr/;$_counter=0}
{if ([KuTaster1:"^2.PRESS_SHORT:.pressed$"]) {set_State($_a[$_counter]);fhem_set("DualIR6S input $_a[$_counter++]");; $_counter=($_counter==@{$_a} ? 0:$_counter)}}
{if ([KuTaster1:"^2.PRESS_LONG:.pressed$"]) {set_State($_a[$_counter]);fhem_set("DualIR6S input $_a[$_counter--]");; $_counter=($_counter==@{$_a} ? 0:$_counter)}}


baut man den Code so auf oder nutzt man dann Schleifen oder andere Programmierelemente?
FHEM 6.0 auf Raspberry Pi 4b 4GB, RaspberryMatic auf Raspi3b mit Charly-Funkmodul, ZigeeBridge mt deCONZ... . Homematic mittels HMCCU, Sonos 3xS1, 1xS6 (Play5 in der 2te Generation), 1xS9 (Soundbar), 1x SonosSub
1-Wire® to I2C host interface with ESD mit DS18B/S20.

amenomade

Zitat von: aherby am 20 Juli 2020, 17:57:46
$_a ist ja eine Variable / Werteliste oder wie auch immer die genaue Bezeichnung dafür ist.
Diese kann ich aber nur in diesen DOIF nutzen?
Ja, das lexical scope dieser Variablen ist nur der DOIF selbst.

Ich weiss nicht, was Du in myUtils "übergreifend" machen willst.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

aherby

Ok danke
dann habe ich das ja verstanden auch wenn ich nicht immer die richtigen Begriffe kenne.
Ich wollte es eher nur verstehen!

Hatte dann kurz gedacht, was ist wenn ich genau diesen Counter oder einen anderen Counter vom anderen DOIF,
noch wo benötigen würde. Aber dann liest man ja besser den "State" vom DOIF oder Device aus.

Beispiel das Dual-Radio hat für die Inputs einzelne Senderlisten (z.B. Internetradio,UKW,DAB)
Die Inhalte will ich mit einem anderen Taster "durchschalten", wie die Inputs.
Da dachte ich der Counter könnte vielleicht Anwendung finden.

Aber ich baue mir sicherheitshalber ein DOIF mit passenden Bedingungen ... UKW die Liste 1, Internetradio die Liste 2 ... .

Das Hauptproblem ist ja gelöst. Der Rest ist entsprechende Anpassung.

Dankeschön
FHEM 6.0 auf Raspberry Pi 4b 4GB, RaspberryMatic auf Raspi3b mit Charly-Funkmodul, ZigeeBridge mt deCONZ... . Homematic mittels HMCCU, Sonos 3xS1, 1xS6 (Play5 in der 2te Generation), 1xS9 (Soundbar), 1x SonosSub
1-Wire® to I2C host interface with ESD mit DS18B/S20.

amenomade

#22
Zitat von: aherby am 20 Juli 2020, 17:57:46


init {@{$_a}=qw/internetradio spotify mediaplayer dab ukw aux-modus dmr/;$_counter=0}
{if ([KuTaster1:"^2.PRESS_SHORT:.pressed$"]) {set_State($_a[$_counter]);fhem_set("DualIR6S input $_a[$_counter++]");; $_counter=($_counter==@{$_a} ? 0:$_counter)}}
{if ([KuTaster1:"^2.PRESS_LONG:.pressed$"]) {set_State($_a[$_counter]);fhem_set("DualIR6S input $_a[$_counter--]");; $_counter=($_counter==@{$_a} ? 0:$_counter)}}


baut man den Code so auf oder nutzt man dann Schleifen oder andere Programmierelemente?
Achtung bei Reset vom Zähler im rückwärts Zählen: man muss den Zähler wider auf den höchsten Wert setzen, wenn er unter 0 kommt. Also... umgekehrt im Vergleich mit vorwärts:
$_counter=($_counter== -1 ? @{$_a}-1:$_counter)

Du kannst theoretisch die andere Durchschaltung im gleichen DOIF einbauen. Du musst nur:
- aufpassen, dass deine Variablen andere Namen bekommen ($_a => $_b, $_counter => $_counter1
- beim set_State dich entscheiden: welchen Status muss der DOIF haben? Den von der $_a Durchschaltung, den von $_b oder beide nebeneinander, z.B.:
set_State("Eingang: ".$_a[$_counter]." Sender: ".$_b[$_counter1]) in allen Blöcke


Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

aherby

Ja kommt ja mit den "verschachtelten" DOIF in der Form jetzt nicht mehr vor.
Andere Taster und neue Bedingungen vom Geräte_State oder wie auch immer.

Deine Anmerkung bedeutet, dass der Code so umgebaut werden muss / sollte?


{if ([KuTaster1:"^2.PRESS_LONG:.pressed$"]) {set_State($_a[$_counter]);fhem_set("DualIR6S input $_a[$_counter--]");;$_counter=($_counter== -1 ? @{$_a}-1:$_counter)


FHEM 6.0 auf Raspberry Pi 4b 4GB, RaspberryMatic auf Raspi3b mit Charly-Funkmodul, ZigeeBridge mt deCONZ... . Homematic mittels HMCCU, Sonos 3xS1, 1xS6 (Play5 in der 2te Generation), 1xS9 (Soundbar), 1x SonosSub
1-Wire® to I2C host interface with ESD mit DS18B/S20.

amenomade

#24
Zitat von: aherby am 21 Juli 2020, 01:16:52
Ja kommt ja mit den "verschachtelten" DOIF in der Form jetzt nicht mehr vor.
Andere Taster und neue Bedingungen vom Geräte_State oder wie auch immer.

Deine Anmerkung bedeutet, dass der Code so umgebaut werden muss / sollte?


{if ([KuTaster1:"^2.PRESS_LONG:.pressed$"]) {set_State($_a[$_counter]);fhem_set("DualIR6S input $_a[$_counter--]");;$_counter=($_counter== -1 ? @{$_a}-1:$_counter)

Ja, sonst wird dein counter weiter unter 0 zählen: -1 -2 -3 -4 -5. Das wird Perl noch bis "minus Anzahl von Werten im Array" schaffen, weil $array[-1] = letzes Element vom Array, $array[-2] = vorletztes, usw. Aber danach nicht mehr
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

Als nächstes wird euch ein Problem auffallen, wenn man auf hoch drückt und danach auf runter.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

aherby

Servus Damian,

habe ich noch nicht probiert. bzw noch nicht mit dem geänderen Code.

In der Elektrotechnik baut man ja fürs "gleichzeitige" drücken
Hardwareverriegelungen ein. Aber hast ja nacheinander beschrieben.

Hast du eine Lösung für das Problem?
FHEM 6.0 auf Raspberry Pi 4b 4GB, RaspberryMatic auf Raspi3b mit Charly-Funkmodul, ZigeeBridge mt deCONZ... . Homematic mittels HMCCU, Sonos 3xS1, 1xS6 (Play5 in der 2te Generation), 1xS9 (Soundbar), 1x SonosSub
1-Wire® to I2C host interface with ESD mit DS18B/S20.

amenomade

Zitat von: Damian am 21 Juli 2020, 09:22:40
Als nächstes wird euch ein Problem auffallen, wenn man auf hoch drückt und danach auf runter.
Welches?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus