Hauptmenü

Shelly Button1 mit Fhem

Begonnen von Kurt77, 28 Juli 2020, 16:46:42

Vorheriges Thema - Nächstes Thema

TomLee

Hab gerade entdeckt das im Reading currentAlbum Sprachdurchsagen steht solange die Sprachansage stattfindet.
Es dauert aber auch einen Moment bis es drin steht,
Wenn die Sprachansage beendet ist steht erstmal nix drin.

Könnte man damit was anfangen, steh gerade auf dem Schlauch ?

Beta-User

Wenn es im Event-Monitor auftaucht und irgendwie unterscheidbar ist, müßte das klappen. Fyi: afaik ist die Anzeige in FHEMWEB auf der Detailansicht immer ziemlich am Schluß der Informationskette. Könnte also sein, dass das gehört schneller geht wie nach "gesehen" anzunehmen...

(OT: Das ist aber jedenfalls unter dem aktuellen Threadtitel alles auch schon reichlich OT ;D ).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

#77
"(OT: Das ist aber jedenfalls unter dem aktuellen Threadtitel alles auch schon reichlich OT ;D )."

Find ich gar nicht. Kurt hat nach einer vorherigen Sprachansage gefragt.
Und hier lesen so viele Leute mit, die das scheinbar interessiert, soll man das jetzt in einem andern Thread klären ?


Sollte nicht eine von den Varianten klappen ?

Das zusätzliche sleep kann ich mir vorstellen das man das braucht weil in dem Reading steht ja nicht sofort Sprachdurchsagen drin.

#return fhem("sleep Sonos_Wohnzimmer currentAlbum: Sprachdurchsagen;set $sondev StartRadio /".$lv);
return fhem("sleep Sonos_Wohnzimmer currentAlbum:.Sprachdurchsagen;set $sondev StartRadio /".$lv);
return fhem("sleep 3;sleep Sonos_Wohnzimmer currentAlbum: Sprachdurchsagen;set $sondev StartRadio /".$lv);
return fhem("sleep 3;sleep Sonos_Wohnzimmer currentAlbum:.Sprachdurchsagen;set $sondev StartRadio /".$lv);#


Beta-User

(der Hinweis war eher in Richtung Thread-Titel zu verstehen, weniger in Richtung der Beiträge *zwinker*.)

Was die sleep-Varianten angeht, sieht mir das nicht nach dem aus, was notify-like eine "gute" regex wäre. Außerdem würde ich für die "notify"-sleep-Variante immer die optionale Benennung einschalten. Das ergäbe (ungetestet) sowas:
#####code####
return fhem("sleep $sondev:currentAlbum:.Sprachdurchsagen startRadio_$sondev;set $sondev StartRadio /$lv");
###end code#####
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

#79
Klappt erstmal nicht, auch mit zusätzlichem sleep:

return fhem("sleep 4;sleep $sondev:currentAlbum:.Sprachdurchsagen;set $sondev StartRadio /$lv");

Morgen ist auch noch ein Tag, ...

TomLee

#80
Andre schrieb:

"um die möglichkeit auch auf ein event zu warten"

nicht wenn es endet  ;)

Weiß nicht ob in currentAlbum direkt was drin stehen kann wenn die Sprachansage beendet ist.
Erstmal ist es leer wenn man Radiosender abspielt.

Wenn man einfach kurz wartet ( auf den Wert Sprachdurchsagen) und dann erst das Event-sleep einfach auf den nächsten Event warten lässt klappts  :)

"Könnte also sein, dass das gehört schneller geht wie nach "gesehen" anzunehmen..."

2 Sekunden müssen minimum sein, bei s2m (MQTT) geht das viel schneller:

#return fhem("sleep 3;sleep $sondev:currentAlbum:.*;set $sondev StartRadio /$lv");#

#return fhem("sleep 3;sleep $sondev:currentAlbum:;set $sondev StartRadio /$lv");#

#return fhem("sleep 3;sleep $sondev:currentAlbum:.*;set $sondev StartRadio /$lv");#

amenomade

ZitatWeiß nicht ob in currentAlbum direkt was drin stehen kann wenn die Sprachansage beendet ist.
Die Frage ist nicht, ob etwas im Reading steht, sondern ob ein Event generiert wird, wenn die Sprachansage zu Ende kommt.
Ein Reading auf leer setzen, kann auch ein Event generieren, worauf man triggern kann.

Heisst: Im Eventmonitor schauen!
Und wenn Du dabei bist, kannst Du aus dem Eventmonitor direkt die richtige Regex holen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

TomLee

Danke.

Wenn man die ganze Zeile markiert (und nicht das letzte Zeichen (Leerzeichen) auslässt) bekommt man auch den richtigen Regex (war wohl zu spät heute Morgen).

Dann braucht man auch wirklich keine Pause mehr zuvor !

Kurt, so könnte der Ausführungsteil deines notify dann aussehen, einfach so in der DEF alles was bisher in {} stand ersetzen, getestet:

#{my $sondev = "Sonos_Kueche";
my $l = "NDR.Info,BAYERN.3,Radio.Okerwelle";
my $lvwodot  = Each($sondev, $l);
my $lv = $lvwodot."/";
$lvwodot =~ s/[.]/ /g;
fhem ("set $sondev speak 15 de es wird $lvwodot abgespielt");
return fhem("sleep $sondev:currentAlbum:.;set $sondev StartRadio /".$lv);}#

Kurt77

Hallo Thomas,
ich bekomme leider einen Syntaxfehler.

Code:
--------------------
Missing right curly or square bracket at (eval 66692) line 1, at end of line
--------------------

Danke und Gruß,
Kurt

TomLee

Kann den Code problemlos in der DEF eines Notify eintragen bekomme keinen Fehler.

Hast du die letzte } mit dabei ?

Kurt77

Hallo Thomas,
das habe ich in die Kommandozeile kopiert.

Code:
--------------------------------
define n_test notify Shelly1Button1:event:.SSS {my $sondev = "Sonos_Kueche"; my $l = "NDR.Info,BAYERN.3,Radio.Okerwelle"; my $lvwodot  = Each($sondev, $l); my $lv = $lvwodot."/"; $lvwodot =~ s/[.]/ /g; fhem ("set $sondev speak 15 de es wird $lvwodot abgespielt"); return fhem("sleep $sondev:currentAlbum:.;set $sondev StartRadio /".$lv);}

Danke und Gruß,
Kurt

TomLee

"das habe ich in die Kommandozeile kopiert."

Das ist der Grund, wenn du das über die Kommandozeile eingeben möchtest mußt du alle Semikola verdoppeln.

Der Code war dazu gedacht über die DEF einzugeben darum schrieb ich

"einfach so in der DEF alles was bisher in {} stand ersetzen"

Kurt77

Danke Thomas,
das war's natürlich!
Ich habe den Anspruch, irgendwann diesen Code zu verstehen. Was würdest Du mir dazu als Lektüre empfehlen?

Danke und Gruß,
Kurt

TomLee

#88
Das sind nur Perl-Grundlagen, dazu kann man sich im Netz überall einlesen.

Each ist eine FHEM Funktion, welche bei jedem Aufruf den nächsten Wert aus der Liste zurückliefert, nach dem letzten Element wird wieder von vorne an. Der erste Parameter ist irgendein Device, hier wird mit EACH_INDEX der letzte Index in den Internals gespeichert. Als optionalen letzten Parameter kann man den Trenner angeben. Mehr Doku gibts meines Wissen dazu nicht.

my $sondev = "Sonos_Kueche"; # schreibe den Playername in eine Variable
my $l = "NDR.Info,BAYERN.3,Radio.Okerwelle"; # schreibe die Liste in eine Variable
my $lvwodot  = Each($sondev, $l); # schreibe die Funktion in eine Variable
my $lv = $lvwodot."/"; # schreibe den Inhalt der Variable $lvwodot in eine Variable und hänge ein / an
$lvwodot =~ s/[.]/ /g; # ersetze alle Punkte (genauer: das Zeichen Punkt) in der Variablen $lvwodot durch Leerzeichen
fhem ("set $sondev speak 15 de es wird $lvwodot abgespielt"); #benötigt keine Erklärung denk ich
return fhem("sleep $sondev:currentAlbum:.;set $sondev StartRadio /".$lv); # sleep Event-basiert, mache erst was bei dem Event currentAlbum leer, die Schreibweise mit den Punkten aus RadiosList ist die Regulärer-Ausdruck-Schreibweise die benötigt das  / zuvor und danach

Mir fällt jetzt beim schreiben auf, du musst ja nicht die Regulärer-Ausdruck-Schreibweise nutzen wenn du die Liste direkt in Each schreibst, das ist ein Denkfehler von mir (ich möchte die Liste aus RadiosList verwenden).

Man kann die Radiosender mit StartRadio auch URL-encoded starten, da braucht man die / nicht. Dann klappt auch NDR 2 zu starten (habs ausprobiert).
Versuch mal umzubauen, das solltest mit den gegeben Informationen eigentlich hinbekommen.

amenomade

Zitat von: TomLee am 08 August 2020, 20:46:15
Das sind nur Perl-Grundlagen, dazu kann man sich im Netz überall einlesen.

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