Hauptmenü

Shelly Button1 mit Fhem

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

Vorheriges Thema - Nächstes Thema

Beta-User

Na ja, ich hatte das so verstanden, dass erst der speak-Befehl ausgegeben werden soll, und direkt danach dann das Radio loslegen soll.

Das gäbe dann (ungetestet und mit "vielen" Variablen) sowas:
         my $l = ReadingsVal("$sondev","RadiosList","unknown");
         $l =~ s/\|/,/g;
         my $lvwodot  = Each($sondev, $l);
         my $lv = $lvwodot."/";
         $lvwodot=~ s/./ /g;
         fhem ("set Sonos_Buero speak 40 de $lvwodot");
         return fhem("set $sondev StartRadio /".$lv);
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

Ich habs nicht versucht, es liegt auch nicht am Code den hätt ich selbst hinbekommen, es lag an der Erkentnis das ich aufgehört habe. Überleg doch mal der speak Befehl ruft $lvwodot ab Index wird um eins erhöht, StartRadio ruft $lv ab, Each Index wird wieder erhöht. Sprachausgabe für die Katz weil falscher Sender.

Beta-User

#47
Hmm, irgendwie scheine ich auf dem Schlauch zu stehen...
In meinem Code wird Each() nur ein Mal aufgerufen, das ganze ist ja keine Referenz auf eine Funktion, sondern es sollte ein scalar sein, der dann in $lvwodot steht? Der wird dann als erweiterter scalar auch an $lv übergeben und selbst "sprechbar" verändert. Aber alles rein scalar?

Ist aber reichlich abstrakt, vermutlich sollte jemand mit der passenden Hardware einfach einen Test machen, wie das Ding tickt...
Oder ist schon der eine Aufruf von Each() problematisch? Dann bliebe immer noch, das Index-Internal auszulesen und statt $l an Each zu übergeben, selbst ein @rl zu splitten ;) .
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

Ok, habs jetzt ausprobiert, so wie es aussieht wird der Index nicht zweimal erhöht.

Aber, das hatte ich vorhin schon festgestellt, aber nicht erwähnt, $lvwodot ist immer leer, bekommt man irgendwie nicht in die Variable.

Aus der Befehlszeile:
#{my $l = ReadingsVal("Sonos_Wohnzimmer","RadiosList","unknown");;$l =~ s/\|/,/g;;my $lvwodot  = Each("Sonos_Wohnzimmer", $l);;my $lv = $lvwodot."/";;$lvwodot=~ s/./ /g;;$lvwodot}#

keine Ausgabe in FHEMWEB


aber vorhanden:

#{my $l = ReadingsVal("Sonos_Wohnzimmer","RadiosList","unknown");;$l =~ s/\|/,/g;;my $lvwodot  = Each("Sonos_Wohnzimmer", $l);;}#

Ausgabe: 1LIVE.diggi..Top.40.Pop.

TomLee

Hey Kurt,

nicht verwirren lassen, das Attribut "getListsDirectlyToReadings" auf 1 setzen schauen das das notify funzt und wieder melden, für die Sprachansage wirds auch ne Lösung geben, wenn ich jetzt überlege will ich auch genau die gleiche Funktion haben.

Kurt77

Zitat von: TomLee am 05 August 2020, 18:59:29
Hey Kurt,

nicht verwirren lassen, das Attribut "getListsDirectlyToReadings" auf 1 setzen schauen das das notify funzt und wieder melden, für die Sprachansage wirds auch ne Lösung geben, wenn ich jetzt überlege will ich auch genau die gleiche Funktion haben.
Hallo Thomas,
wenn ich Dich richtig verstanden habe sorgt "getListsDirectlyToReadings" = 1 dazu, dass alle meine Favoriten in dieser Liste abgelegt werden. Das sind ca. 30 und ich will nur 3 davon!

Für mich muttet die Syntax Deines Notify kryptisch an. D.h., dass ich nicht verstehe, wie das funktioniert. Ich würde daher lieer diesen Ansatz verfolgen:
Code:
--------------------------
https://wiki.fhem.de/wiki/DOIF/Mehrfachnutzung_eines_Tasters
--------------------------

Was meinst Du zu dem doif?

Danke und Gruß,
Kurt

TomLee

"Was meinst Du zu dem doif?"

Zu kompliziert, leg dir ein userReadings an welches nur deine drei Favoritennamen beinhaltet (gleiche Syntax wie in RadiosList) und verweise im zweiten Parameter in Each auf dieses Reading.

Meine Meinung.

TomLee

#52
Korrektur

Ohne userreadings ! Schreib die Liste direkt in den zweiten Parameter,  nicht mit gleicher Syntax wie in RadiosList sondern dann die | durch , ersetzen.

Wenn dein notify korrekt ist dann so :

#define n_test notify Shelly1Button1:event:.SSS {fhem("set Sonos_Kueche StartRadio /".Each('Sonos_Kueche','011.FM-NonStop60s,1A.Deutsche.Hits,Antenne.Thüringen.80er..80er.')."/")}#

Denke jetzt ist auch nix mehr kryptisch und wenn du beim schalten mal in den Internals (ganz oben in der Device-Ansicht) das Internal EACH_INDEX beobachtest (welches von Each angelegt wurde) ist auch schnell klar was Each da eigentlich macht.

edit:

nach dem schalten musst du in der Detailansicht des Sonos-Player den Browser aktualisieren das Internal EACH_INDEX aktualisiert sich nicht selbst.

Kurt77

Zitat von: TomLee am 05 August 2020, 14:02:17
Sry, schon wieder nicht mehr dran gedacht obwohl das erst 1 1/2 Wochen her ist  :P https://forum.fhem.de/index.php/topic,10033.msg1073968.html#msg1073968

Du setzt das Attribut "getListsDirectlyToReadings" auf 1 am zentralen Sonos-Device, damit werden nach einem get Sonos_Kueche Radios die Readings "RadiosList" und "RadiosListAlias" gesetzt.

Bei mir hat das bisher nur beim ersten mal geklappt, ein weiteres get Sonos_Kueche Radios aktualisiert die Readings bisher nicht obwohl neue Radiosender in der App hinzugekommen sind.
Ich würde die Radiosender also vor dem ersten get Sonos_Kueche Radios in der App hinzufügen.
edit: das mit dem get Sonos_Kueche Radios klappt doch, die Readings werden nur stark zeitverzögert aktualisiert. Kann aber aktuell auch an meinem Netz liegen, mein Switch macht derzeit Probleme, gibt glaub ich dern Geist auf.


Es gibt auch noch das Attribut "getRadiosListAtNewVersion" das sollte die Readings "RadiosList" und "RadiosListAlias" automatisch aktualisieren, kommt aber erst mit der nächsten Version. https://forum.fhem.de/index.php/topic,10033.msg1074157.html#msg1074157


"Ich hätte gerne vor jedem Senderstart noch eine sprachdurchsage des Sendernamens."

Die ganzen current.*-Readings haben erst einen Inhalt wenn der Sender anfängt zu spielen, man könnte nach dem starten den Sender ansagen lassen.
Schau mal erst das die  Readings "RadiosList" und "RadiosListAlias" bekommst und das notify klappt.
Hallo Thomas,
die Readings "RadiosList" und "RadiosListAlias" gibt es bei mir nicht.
Ich verwende die Revision 22400, und Du?

Danke und Gruß,
Kurt

Kurt77

Kommando zurück: Nach einem shudown Restart sind die readings nun doch da.

Kurt77

Zitat von: TomLee am 05 August 2020, 23:06:00
Korrektur

Ohne userreadings ! Schreib die Liste direkt in den zweiten Parameter,  nicht mit gleicher Syntax wie in RadiosList sondern dann die | durch , ersetzen.

Wenn dein notify korrekt ist dann so :

#define n_test notify Shelly1Button1:event:.SSS {fhem("set Sonos_Kueche StartRadio /".Each('Sonos_Kueche','011.FM-NonStop60s,1A.Deutsche.Hits,Antenne.Thüringen.80er..80er.')."/")}#

Denke jetzt ist auch nix mehr kryptisch und wenn du beim schalten mal in den Internals (ganz oben in der Device-Ansicht) das Internal EACH_INDEX beobachtest (welches von Each angelegt wurde) ist auch schnell klar was Each da eigentlich macht.

edit:

nach dem schalten musst du in der Detailansicht des Sonos-Player den Browser aktualisieren das Internal EACH_INDEX aktualisiert sich nicht selbst.
Hallo Thomas,
kein schlechter Versuch!
Ich habe 3 Sender hinterlegt. Beim ersten Auslösen wird S1 korrekt abgespielt. Beim 2. Auslösen kommt aber nicht S2, sondern Stille. Das dritte Auslösen bringt dann korrekt S3 und das vieerte Drücken wieder S1.
S2 wird also nie abgespielt. An Deinem Notify habe ich, außer den hinterlegten Sendern, nichts geändert.
Hast Du eine Idee?

Danke und Gruß,
Kurt

TomLee

"S2 wird also nie abgespielt"

Bist dir sicher das den Sender genauso in der Liste eingetragen hast wie er in RadiosList steht ?

Kurt77

ja, bin mir sicher. Habe Sendeplatz 2 auch mal mit einem anderen Sender belegt.  S2 wird nicht gespielt.

Danke und Gruß,
Kurt
P.s.: Morgen versuche ich es mal mit 4 Sendern. Mal sehen, was dann passiert.

TomLee

Aber der EACH_INDEX erhöht sich immer nur um eins oder was macht er wenn S2 dran wäre ?

Zeig doch sicherheitshalber mal ein "list <notifyname>"

Kurt77

Hallo Thomas,
hier das list:

Code:
----------------------------
Internals:
   CFGFN     
   DEF        Shelly1Button1:event:.SSS {fhem("set Sonos_Kueche StartRadio /".Each('Sonos_Kueche','NDR.Info,NDR.2,Radio.Okerwelle')."/")}
   FUUID      5f2c5286-f33f-7695-647a-272c48578d223976
   NAME       n_test
   NOTIFYDEV  Shelly1Button1
   NR         854
   NTFY_ORDER 50-n_test
   REGEXP     Shelly1Button1:event:.SSS
   STATE      2020-08-07 07:43:24
   TRIGGERTIME 1596779004.96639
   TYPE       notify
   READINGS:
     2020-08-06 20:57:10   state           active
Attributes:
----------------------------

Danke und Gruß,
Kurt