Hallo,
ich führe mit diesem neuen Schalter den Befehl
#
http://192.168.178.33:8083/fhem?XHR=1&cmd=set%20Sonos_Esszimmer%20Pause
aus. Das funktioniert auch, allerdings nur ca. 20 Stunden.
Eine erneute Ausführung des Befehls kann ich nur dadurch erreichen, dass ich einen "shutdown Restart" durchführe. Danach habe ich wieder für 20 Stunden Ruhe.
Hat da jemand eine Erklärung für mich?
Danke und Gruß,
Kurt
Nicht, wenn das Kommando tatsächlich GENAUSO aussieht...
UND: ich würde Abstand nehmen csrfToken auf "none" zu setzen!!!
(wenn jetzt kommt: aber ich doch nur lokal etc. -> NICHT verstanden was das tut!!)
EDIT: weil wenn der Aufruf genauso aussieht und funktioniert, dann musst du csrfToken auf "none" haben... Sonst dürfte es nicht 1x klappen...
Ansonsten: was steht denn im fhem Log, wenn es nicht mehr geht!?
Gruß, Joachim
Ich habe einen festen token gesetzt, den ich abgeschnitten habe. Im log steht leider nix.
Danke und Gruß,
Kurt
Auch nicht, wenn du die FHEMWEB-Instanz auf verbose 5 stellst?
Was passiert, wenn du (wenn es mit dem Shelly nicht mehr geht) den Aufruf in einen Browser "wirfst"!?
EDIT: fixer Token ok. Aber ich würde für "solche Dinge" eine 2te FHEMWEB-Instanz anlegen und diese dann noch mittels allowed "verriegeln", sodass nur bestimmte Dinge erlaubt sind (z.B. nur Zugriff auf bestimmte Objekte) und evtl. auch den Zugriff auf den Shelly (IP-Adresse) einschränken...
EDIT: aber erst, wenn es geht... Bzw. evtl. zu Testzwecken mal eine 2te FHEMWEB-Instanz ohne alles, also auch ohne csrfToken (also auf "none")... Wenn das dann geht -> dann ist irgendwas mit dem Token / wenn es dann auch Probleme gibt -> weiter suchen...
Gruß, Joachim
Hallo Joachim,
warum bin ich nicht selbst darauf gekommen, bei Misserfolg einen Browser zu probieren? Melde mich wieder.
Danke und Gruß,
Kurt
Hallo Kurt,
ich habe es ev. nicht ganz verstanden: Du hinterlegst im Taster einen HTTP Link um FHEM zu steuern? :-[
Warum bindest Du den Shelly nicht per MQTT2 ein und machst den Rest "ordentlich" direkt in FHEM? Geht das nicht?
Sieht doch eigentlich so aus? https://shelly-api-docs.shelly.cloud/#shelly-button1-mqtt
Gruß Otto
Hallo Otto,
danke für Deine Antwort.
Ich habe "befürchtet", dass jemand das Thema mqtt bringt 👏. Ich bin Anfänger,
kenne mich mit mqtt nicht aus und habe wenig Zeit.
Gruß Kurt
Ich behaupte mal: das ist vielleicht einfacher als das was Du da gerade machst ;)
Also wenn Dein FHEM halbwegs aktuell ist ...
und Du willst ...
Machst Du:
define mqtt2s MQTT2_SERVER 1883 global
attr mqtt2s room MQTT_IO
Trägst in Deiner Shelly Oberfläche unter Internet/Security - Developer Settings
den Haken enable und
Den Server in der Art IPDeinesFHEM:1883 ein
Und drückst unten auf save ;)
Dann sollte beim nächsten Button drücken ein MQTT2_Device entstehen. Dann meldest Du Dich mit einem list zurück ;)
Keine Bange, das lässt sich zur Not alles Rückstandslos entfernen.
Gruß Otto
Hallo Otto,
alles genau so durchgeführt wie von Dir oben beschrieben.
Hier das List:
Internals:
CFGFN
DEF 1883 global
FD 34
FUUID 5f23e05f-f33f-7695-a43d-02ade74e9ba9d6ad
NAME mqtt2s
NR 917
PORT 1883
STATE Initialized
TYPE MQTT2_SERVER
READINGS:
2020-07-31 11:11:59 nrclients 0
2020-07-31 11:11:59 state Initialized
clients:
retain:
Attributes:
room MQTT_IO
Wie geht's jetzt bitte weiter?
Danke und Gruß,
Kurt
Zitat von: Otto123 am 28 Juli 2020, 20:28:48
Trägst in Deiner Shelly Oberfläche unter Internet/Security - Developer Settings
den Haken enable und
Den Server in der Art IPDeinesFHEM:1883 ein
Und drückst unten auf save ;)
Dann sollte beim nächsten Button drücken ein MQTT2_Device entstehen.
Der Server sieht gut aus.
Ein MQTT2_DEVICE ist nicht entstanden? Die weiteren Schritte (Zitat) hast Du gemacht?
Gruß Otto
Sorry Otto,
Du wolltest natürlich ein List vom neuen Device haben:
Internals:
CFGFN
CID shellybutton1_A4CF12F44F70
DEF shellybutton1_A4CF12F44F70
DEVICETOPIC MQTT2_shellybutton1_A4CF12F44F70
FUUID 5f23f183-f33f-7695-72f7-f697ee862ebf5109
IODev mqtt2s
LASTInputDev mqtt2s
MSGCNT 4
NAME MQTT2_shellybutton1_A4CF12F44F70
NR 1091
STATE ???
TYPE MQTT2_DEVICE
mqtt2s_MSGCNT 4
mqtt2s_TIME 2020-07-31 12:27:18
READINGS:
2020-07-31 12:27:18 battery 78
2020-07-31 12:27:18 event S
2020-07-31 12:27:18 event_cnt 4
2020-07-31 12:25:07 fw_ver 20200625-102446/v1.7.3@2aa0993a
2020-07-31 12:25:07 id shellybutton1-A4CF12F44F70
2020-07-31 12:25:07 ip 192.168.178.64
2020-07-31 12:25:07 mac A4CF12F44F70
2020-07-31 12:25:07 new_fw false
2020-07-31 12:25:07 online true
Attributes:
IODev mqtt2s
readingList shellybutton1_A4CF12F44F70:shellies/shellybutton1-A4CF12F44F70/online:.* online
shellybutton1_A4CF12F44F70:shellies/announce:.* { json2nameValue($EVENT) }
shellybutton1_A4CF12F44F70:shellies/shellybutton1-A4CF12F44F70/announce:.* { json2nameValue($EVENT) }
shellybutton1_A4CF12F44F70:shellies/shellybutton1-A4CF12F44F70/sensor/battery:.* battery
shellybutton1_A4CF12F44F70:shellies/shellybutton1-A4CF12F44F70/input_event/0:.* { json2nameValue($EVENT) }
room MQTT2_DEVICE
Danke und Gruß,
Kurt
Hallo Kurt,
das sieht doch gut aus. Kann man sicher erstmal so verwenden und später noch schön machen.
Du siehst den Batteriestatus - 78% ?
Du siehst event S - sicher kommt also S für short?
Dann kannst Du entweder den Eventmonitor aufmachen MQTT2_shellybutton1_A4CF12F44F70.* als Filter eingeben und Dir ein notify erzeugen lassen (https://wiki.fhem.de/wiki/Event_monitor#Vorgehensweise_beim_Anlegen_eines_Ger.C3.A4tes). Das müsste dann in etwa so aussehen:
define n_MQTT2_shellybutton1_A4CF12F44F70 notify MQTT2_shellybutton1_A4CF12F44F70:event:.S {}
bzw: was Du eigentlich wolltest:
define n_MQTT2_shellybutton1_A4CF12F44F70 notify MQTT2_shellybutton1_A4CF12F44F70:event:.S set Sonos_Esszimmer Pause
Wenn mein Code nicht funktioniert, musst Du im Eventmonitor schauen und eventuell mal die Events posten :)
Bitte nimm dazu die Codetags (hier beschrieben) (https://forum.fhem.de/index.php/topic,71806.0.html)
gruß Otto
@Otto123:
"Vorsicht", dieser "gesprächige" Shelly-Vertreter war/ist Anlass zu der Diskussion ab hier (https://forum.fhem.de/index.php/topic,94060.msg1075294.html#msg1075294).
(diese Geschwätzigkeit ist ein echter Dauerbrenner, grummel...)
Ok wenn er also ständig die 3 Nachrichten battery event und event_cnt bringt müsste man vielleicht so vorgehen:
attr MQTT2_shellybutton1_A4CF12F44F70 event-on-change-reading .*
modify n_MQTT2_shellybutton1_A4CF12F44F70 MQTT2_shellybutton1_A4CF12F44F70:event_cnt:.*
Im notify anstatt mit MQTT2_shellybutton1_A4CF12F44F70:event:.S zu triggern mit MQTT2_shellybutton1_A4CF12F44F70:event_cnt:.* triggern.
Und wenn man L und S unterscheiden will entweder im Code event abfragen oder ein userReadings bauen und dann damit das notify triggern?
So als Idee (ungetestet)
attr MQTT2_shellybutton1_A4CF12F44F70 userReadings press:event_cnt.* {ReadingsVal($name,'event','')}
attr MQTT2_shellybutton1_A4CF12F44F70 event-on-update-reading press
modify n_MQTT2_shellybutton1_A4CF12F44F70 MQTT2_shellybutton1_A4CF12F44F70:press:.S
Gruß Otto
Zitat von: Beta-User am 31 Juli 2020, 13:02:43
@Otto123:
"Vorsicht", dieser "gesprächige" Shelly-Vertreter war/ist Anlass zu der Diskussion ab hier (https://forum.fhem.de/index.php/topic,94060.msg1075294.html#msg1075294).
(diese Geschwätzigkeit ist ein echter Dauerbrenner, grummel...)
Ich weiß nich Recht, was mir dieser Text sagen soll, aber ich bin Kurt77 und nicht KurtK!
Gruß
Kurt77
Sorry, das bezog sich überhaupt nicht auf dich (oder irgendeinen anderen "speziellen" Kurt).
Ich wollte nur @Otto123 hier eigentlich nicht beim helfen stören (er kann dir hier sicher gut helfen, keine Frage!), sondern nur mitteilen, dass dieser Shelly-Button1 etwas "speziell" zu sein scheint, weil er eben vermutlich (völlig unnötigerweise und soweit ersichtlich wie andere Shelly-Devices auch) ständig Events erzeugt (was @Otto123 konkret bezogen auf dieses Device bzw. die aktuelle Firmware vermutlich noch nicht wußte; wir (Otto und ich) hatten aber schon ein paar Mal das Vergnügen, die "richtige" Variante der Konfiguration mancher Devices miteinander auszufeilen). In dem anderen Thread ist btw. auch ein "fix" zu finden, und wenn du dem Link gefolgt wärst, müßte es eigentlich auch klar gewesen sein, dass es da um ein sachliches Thema ging ::) . (Die Diskussion da ist aber zugegebenermaßen dann auf einem Niveau, das man als Einsteiger nicht zwangsläufig verstehen muß, sonst hätte ich dich selbst dann direkt dahin "geschickt").
Zitat von: Otto123 am 31 Juli 2020, 12:56:40
Hallo Kurt,
das sieht doch gut aus. Kann man sicher erstmal so verwenden und später noch schön machen.
Du siehst den Batteriestatus - 78% ?
Du siehst event S - sicher kommt also S für short?
Dann kannst Du entweder den Eventmonitor aufmachen MQTT2_shellybutton1_A4CF12F44F70.* als Filter eingeben und Dir ein notify erzeugen lassen (https://wiki.fhem.de/wiki/Event_monitor#Vorgehensweise_beim_Anlegen_eines_Ger.C3.A4tes). Das müsste dann in etwa so aussehen:
define n_MQTT2_shellybutton1_A4CF12F44F70 notify MQTT2_shellybutton1_A4CF12F44F70:event:.S {}
bzw: was Du eigentlich wolltest:
define n_MQTT2_shellybutton1_A4CF12F44F70 notify MQTT2_shellybutton1_A4CF12F44F70:event:.S set Sonos_Esszimmer Pause
Wenn mein Code nicht funktioniert, musst Du im Eventmonitor schauen und eventuell mal die Events posten :)
Bitte nimm dazu die Codetags (hier beschrieben) (https://forum.fhem.de/index.php/topic,71806.0.html)
gruß Otto
Hallo Otto,
der Code funktioniert leider nicht und obwohl ich verbose auf 5 gesetzt habe, sehe ich im event-Monitor leider nichts.
Danke und Gruß,
Kurt
Es geht nicht um Dich - es geht um die shelly Firmware ;)
Edit geantwortet ohne die weiter Seite zu lesen ::)
verbose 5 brauchst Du nicht.
Du hast den Eventmonitor offen und der Filter lautet? MQTT2_shellybutton1_A4CF12F44F70.*
Oder siehst Du auch mit Filter .* nichts? Dann wäre was im Eventmonitor "kaputt" ???
Hallo Otto,
Handlingfehler mit dem Event-Monitor, sorry!
2020-07-31 15:16:26 MQTT2_DEVICE Shelly1Button1 battery: 78
2020-07-31 15:16:26 MQTT2_DEVICE Shelly1Button1 event: S
2020-07-31 15:16:26 MQTT2_DEVICE Shelly1Button1 event_cnt: 12
Ich habe das Gerät umbenannt.
Danke und Gruß,
Kurt
Otto, guck Dir das bitte mal an.
Ich habe mal alle Möglichkeiten ausprobiert:
2020-07-31 15:16:26 MQTT2_DEVICE Shelly1Button1 battery: 78
2020-07-31 15:16:26 MQTT2_DEVICE Shelly1Button1 event: S
2020-07-31 15:16:26 MQTT2_DEVICE Shelly1Button1 event_cnt: 12
2020-07-31 15:38:06 MQTT2_DEVICE Shelly1Button1 battery: 78
2020-07-31 15:38:06 MQTT2_DEVICE Shelly1Button1 event: L
2020-07-31 15:38:06 MQTT2_DEVICE Shelly1Button1 event_cnt: 13
2020-07-31 15:39:57 MQTT2_DEVICE Shelly1Button1 battery: 78
2020-07-31 15:39:57 MQTT2_DEVICE Shelly1Button1 event_cnt: 14
2020-07-31 15:39:57 MQTT2_DEVICE Shelly1Button1 event: SS
2020-07-31 15:40:58 MQTT2_DEVICE Shelly1Button1 battery: 78
2020-07-31 15:40:58 MQTT2_DEVICE Shelly1Button1 event_cnt: 15
2020-07-31 15:40:58 MQTT2_DEVICE Shelly1Button1 event: SSS
Danke und Gruß,
Kurt
Ich sehe den Use Case für MQTT hier nicht - das nudelt den Akku viel zu schnell leer.
LG
pah
Zitat von: Prof. Dr. Peter Henning am 31 Juli 2020, 15:45:59
Ich sehe den Use Case für MQTT hier nicht - das nudelt den Akku viel zu schnell leer.
Na ja, Akku und ESP8266 war eh' so ein Thema.
Dass hier vermutlich tatsächlich der Akku ziemlich schnell aufgibt, ist aber eigentlich kein MQTT-Problem, sondern eine mMn. "fehlerhafte" (=nicht "light weight") Implementierung des Protokolls in der firmware; Details dazu im verlinkten Thread. (Vielleicht findest du ja irgendwann Zeit, den guten Draht zu nutzen und die Jungs da zu einer "besseren" MQTT-Implementierung zu verhelfen).
Das mittelfristige Problem wird so oder so sein, dass es eben zwei Welten gibt, und wer sowieso MQTT nutzt, wird vermutlich nicht auf den Gedanken kommen, dass es bei dieser Type ein Problem ist (?)...
Hallo Kurt,
Du musst mit den Codetags besser zielen :)
[code ]Hier dazwischen muss Dein Code nicht dahinter[ /code]
Damit die sichtbar bleiben hab ich die Tags modifiziert. ;)
Also Code kopieren und dann markieren und die # Taste drücken, oder die # Taste drücken, Cursor stehen lassen und dann einfügen. :)
Verstehe ich Dich richtig, dass pro Drücken eine 3 Serie von Events kommt und sonst nicht? Dann mach Dein notify wie schon am Anfang vorgeschlagen:
define n_Shelly1Button1 notify Shelly1Button1:event:.S set Sonos_Esszimmer Pause
Gruß Otto
Hallo Otto,
aber genau dieses notify funktioniert nicht!
Zum Thema Code einfügen: Da muss ich wohl noch ein bisschen rumprobieren, bin blind.
Danke und Gruß,
Kurt
Wenn Du im Eventmonitor diese Zeile siehst, markierst und Dir ein notify erzeugen lässt. Wie sieht das aus?
2020-07-31 15:16:26 MQTT2_DEVICE Shelly1Button1 event: S
Siehst Du jedesmal diesen Event wenn Du den Buttton kurz drückst?
Wie sieht aktuell ein list Shelly1Button1 aus?
Hallo Otto,
inzwischen hat das nach langem Rumspielen funktionert. Aber es funtioniert zuverlässig nur nach einem "shutdown Restart" von fhem für einen begrenzten Zeitraum. Das war, wi Du Dich vielleicht erinnerst, auch mein anfängliches Problem. Der Event-Manger zeigt in jedem Fall ein Event.
ad1 Hier ist das notify:
[Code
Change wizard
Change the condition:
Shelly1Button1_notify_1 addRegexpPart
513158f5322078b3bde891685cf16de8 CF7C30A8FD64469D82D458583BE5C02B FHEMWEB HM4_oben_links MeineAnwesenheit NdrInfoEin SVG_d_dect200kaffeemaschine SVG_d_dect200sonosbad SVG_d_dect200sonoswohnzi Shelly1Button1 Shelly1Button1_notify_1 Sonos Sonos_Bad Sonos_BadRC_Notify Sonos_Buero Sonos_BueroRC_Notify Sonos_Buero_2 Sonos_Buero_3 Sonos_Esszimmer Sonos_Fernsehzimmer Sonos_Kueche Sonos_KuecheRC_Notify Sonos_Schlafzimmer Sonos_SchlafzimmerRC_Notify Sonos_Terrasse Sonos_TerrasseRC_Notify Sonos_Unnamed_Room Sonos_Unnamed_Room_X Sonos_Wohnzimmer Sonos_WohnzimmerRC_Notify WEB atsonosReconnect d_callmonitor d_ccu1 d_dash1 d_dash2 d_dect200kaffeemaschine d_dect200sonosbad d_dect200sonoswohnzi d_fb7490 d_fritzbox d_kaffeemaschine_temp d_sonosbad_temp d_unwetterzentrale do_rebootsonosbad dow du_inforadio hm_Bewegungsmelder hm_Funkstecker2 mqtt2s n_Kueche_ndr2 n_Kueche_ndrinfo n_NdrInfoEin_on n_Shelly1Button1 n_Shelly1Button1SS n_anrufer_sonos n_dash1 n_dash2 n_einbruch n_einbruch2 n_fritzbox_anrufende n_fritzbox_anrufstartcall n_fritzbox_anrufstartring n_inforadioein n_kaffeemaschine n_sonos_temp n_sonosbad n_unwetterwarnung n_wetter plex pushover test .*state:.*volume:.*
Change the executed command:
Shelly1Button1_notify_1 Shelly1Button1:battery:.872020-08-01.10:57:38.MQTT2_DEVICE.Shelly1Button1.event:.S set
513158f5322078b3bde891685cf16de8 CF7C30A8FD64469D82D458583BE5C02B FileLog_Shelly1Button1 FileLog_d_dect200kaffeemaschine FileLog_d_dect200sonosbad FileLog_d_dect200sonoswohnzi Logfile MeineAnwesenheit NdrInfoEin SVG_d_dect200kaffeemaschine SVG_d_dect200sonosbad SVG_d_dect200sonoswohnzi Shelly1Button1 Sonos Sonos_Bad Sonos_BadRC Sonos_BadRC_Notify Sonos_BadRG Sonos_BadRG_Favourites Sonos_BadRG_Playlists Sonos_BadRG_Radios Sonos_Buero Sonos_BueroRC Sonos_BueroRC_Notify Sonos_BueroRG Sonos_BueroRG_Favourites Sonos_BueroRG_Playlists Sonos_BueroRG_Radios Sonos_Buero_2 Sonos_Buero_2RG_Favourites Sonos_Buero_2RG_Playlists Sonos_Buero_2RG_Queue Sonos_Buero_2RG_Radios Sonos_Buero_3 Sonos_Buero_3RG_Favourites Sonos_Buero_3RG_Playlists Sonos_Buero_3RG_Queue Sonos_Buero_3RG_Radios Sonos_Esszimmer Sonos_EsszimmerRG_Favourites Sonos_EsszimmerRG_Playlists Sonos_EsszimmerRG_Queue Sonos_EsszimmerRG_Radios Sonos_Fernsehzimmer Sonos_FernsehzimmerRG_Favourites Sonos_FernsehzimmerRG_Playlists Sonos_FernsehzimmerRG_Queue Sonos_FernsehzimmerRG_Radios Sonos_Kueche Sonos_KuecheRC Sonos_KuecheRC_Notify Sonos_KuecheRG Sonos_KuecheRG_Favourites Sonos_KuecheRG_Playlists Sonos_KuecheRG_Radios Sonos_Schlafzimmer Sonos_SchlafzimmerRC Sonos_SchlafzimmerRC_Notify Sonos_SchlafzimmerRG Sonos_SchlafzimmerRG_Favourites Sonos_SchlafzimmerRG_Playlists Sonos_SchlafzimmerRG_Radios Sonos_Terrasse Sonos_TerrasseRC Sonos_TerrasseRC_Notify Sonos_TerrasseRG Sonos_TerrasseRG_Favourites Sonos_TerrasseRG_Playlists Sonos_TerrasseRG_Radios Sonos_Unnamed_Room Sonos_Unnamed_RoomRG_Favourites Sonos_Unnamed_RoomRG_Playlists Sonos_Unnamed_RoomRG_Queue Sonos_Unnamed_RoomRG_Radios Sonos_Wohnzimmer Sonos_WohnzimmerRC Sonos_WohnzimmerRC_Notify Sonos_WohnzimmerRG Sonos_WohnzimmerRG_Favourites Sonos_WohnzimmerRG_Playlists Sonos_WohnzimmerRG_Radios WEB WEBphone WEBtablet atsonosReconnect d_callmonitor d_ccu1 d_dect200kaffeemaschine d_dect200sonosbad d_dect200sonoswohnzi d_fb7490 d_fritzbox d_kaffeemaschine_temp d_sonosbad_temp d_unwetterzentrale do_rebootsonosbad dow du_inforadio eventTypes initialUsbCheck mqtt2s n_Kueche_ndr2 n_Kueche_ndrinfo n_NdrInfoEin_on n_Shelly1Button1 n_Shelly1Button1SS n_anrufer_sonos n_dash1 n_dash2 n_einbruch n_einbruch2 n_fritzbox_anrufende n_fritzbox_anrufstartcall n_fritzbox_anrufstartring n_inforadioein n_kaffeemaschine n_sonos_temp n_sonosbad n_unwetterwarnung n_wetter plex pushover temp test autocreateplayMediaresumemirrorhomemusicunwatchedwatched
Shelly1Button1_notify_1
active addRegexpPart inactive removeRegexpPart
Internals
CFGFN
DEF
Shelly1Button1:battery:.872020-08-01.10:57:38.MQTT2_DEVICE.Shelly1Button1.event:.S {}
FUUID
5f252eb8-f33f-7695-bb8e-4523916a3714e75c
NAME
Shelly1Button1_notify_1
NOTIFYDEV
Shelly1Button1
NR
1870
NTFY_ORDER
50-Shelly1Button1_notify_1
REGEXP
Shelly1Button1:battery:.872020-08-01.10:57:38.MQTT2_DEVICE.Shelly1Button1.event:.S
STATE
active
TYPE
notify
Readings
state
active
2020-08-01 10:58:32
Shelly1Button1_notify_1
addStateEvent alias cmdIcon comment devStateIcon devStateStyle disable disabledAfterTrigger disabledForIntervals eventMap fhem_widget_command forwardReturnValue genericDeviceType group homebridgeMapping icon ignoreRegexp readLog room showtime siriName sortby suppressReading userReadings userattr verbose webCmd webCmdLabel widgetOverride
Probably associated with
Shelly1Button1
???
MQTT2_DEVICE
Select icon
Extend devStateIcon
Raw definition
Delete this device (Shelly1Button1_notify_1)
Device specific help
]
ad2) Ja, ich sehe jedesmal diesen Event.
ad3 Und hier das List.
[Code
Internals:
CID shellybutton1_A4CF12F44F70
DEF shellybutton1_A4CF12F44F70
DEVICETOPIC Shelly1Button1
FUUID 5f23f183-f33f-7695-72f7-f697ee862ebf5109
IODev mqtt2s
LASTInputDev mqtt2s
MSGCNT 57
NAME Shelly1Button1
NR 150
STATE ???
TYPE MQTT2_DEVICE
mqtt2s_MSGCNT 57
mqtt2s_TIME 2020-08-01 10:57:38
READINGS:
2020-08-01 10:57:38 battery 87
2020-08-01 10:57:38 event S
2020-08-01 10:57:38 event_cnt 29
2020-07-31 22:38:40 fw_ver 20200625-102446/v1.7.3@2aa0993a
2020-07-31 22:38:40 id shellybutton1-A4CF12F44F70
2020-07-31 22:38:40 ip 192.168.178.64
2020-07-31 22:38:40 mac A4CF12F44F70
2020-07-31 22:38:40 new_fw false
2020-07-31 22:38:39 online true
Attributes:
IODev mqtt2s
readingList shellybutton1_A4CF12F44F70:shellies/shellybutton1-A4CF12F44F70/online:.* online
shellybutton1_A4CF12F44F70:shellies/announce:.* { json2nameValue($EVENT) }
shellybutton1_A4CF12F44F70:shellies/shellybutton1-A4CF12F44F70/announce:.* { json2nameValue($EVENT) }
shellybutton1_A4CF12F44F70:shellies/shellybutton1-A4CF12F44F70/sensor/battery:.* battery
shellybutton1_A4CF12F44F70:shellies/shellybutton1-A4CF12F44F70/input_event/0:.* { json2nameValue($EVENT) }
room MQTT2_DEVICE
verbose 5
][/code]
Danke und Gruß,
Kurt
Moin Kurt,
findest Du deinen Post gut lesbar? Also ich nicht :'(
Du kannst mit der Vorschau deinen Post ansehen, bevor Du ihn abschickst.
Du kannst jeden deiner Posts ändern um Fehler zu korrigieren.
Wenn das hier wirklich die DEF von deinem notify ist - dann habe ich keine Ahnung wie das erzeugt wurde
DEF
Shelly1Button1:battery:.872020-08-01.10:57:38.MQTT2_DEVICE.Shelly1Button1.event:.S {}
Ich bin der Meinung, dass diese notify richtig wäre
define n_Shelly1Button1 notify Shelly1Button1:event:.S set Sonos_Esszimmer Pause
Es gibt einen guten Wiki Artikel https://wiki.fhem.de/wiki/Notify vielleicht kannst Du mit Hilfe von dem Artikel das Problem eingrenzen.
Jetzt habe ich noch Deine lange erste Zeile bis zum Schluss gelesen. Dein ursprüngliches Problem ist also mit dem notify und mit der ursprünglichen Lösung in gleicher Ausprägung vorhanden?
Da gibt es zwei Möglichkeiten:
Geht denn der Befehl set Sonos_Esszimmer Pause auch von Hand immer zuverlässig oder nur eine begrenze Zeit (Also wenn der Button nicht mehr funktioniert - geht er von Hand?)
Geht der Button selbst nur eine begrenzte Zeit? Wobei das keinen Grund für einen Shutdown Restart hätte.
Ich bin ratlos und weiß nicht mehr weiter.
Gruß Otto
Hallo Otto,
Du hast es getroffen!
"Von Hand" geht auch nicht!
Also gucke ich mir jetzt mal Sonos an.
Danke und Gruß,
Kurt
Zitat von: Otto123 am 01 August 2020, 11:52:10
findest Du deinen Post gut lesbar? Also ich nicht :'(
Du kannst mit der Vorschau deinen Post ansehen, bevor Du ihn abschickst.
@Otto, IMHO war das
Zitat von: Kurt77 am 31 Juli 2020, 17:10:25
muss ich wohl noch ein bisschen rumprobieren, bin blind.
kein "Witz" , seine Posts sehen stark nach Kampf mit einem Screenreader aus.
Oh Mann, da bin ich einfach drüber gegangen. Das habe ich nicht realisiert - Entschuldigung.
@Kurt
Ist dein Sonos insgesamt noch in Funktion, oder ist dein Player zu der Zeit wenn es nicht mehr funktioniert disappeared? Das Problem haben ja ein paar Leute hier im Forum. Reiner hat aber eine neue Version von Sonos rausgebracht, hast Du die schon?
Gruß Otto
Zitat von: Wzut am 01 August 2020, 17:16:50
@Otto, IMHO war das kein "Witz" , seine Posts sehen stark nach Kampf mit einem Screenreader aus.
Ich kämpfe nicht mit meinem Screenreader, sondern mit nicht vollständig barrierefreier Forensoftware!
Gruß Kurt
Zitat von: Otto123 am 02 August 2020, 00:01:13
Oh Mann, da bin ich einfach drüber gegangen. Das habe ich nicht realisiert - Entschuldigung.
Hallo Otto,
Kein Problem, kein Grund für eine Entschuldigung. Danke für Deine bisher gezeigte Geduld!
[quote author=Otto123 link=topic=113182.msg1075736#msg1075736
@Kurt
Ist dein Sonos insgesamt noch in Funktion, oder ist dein Player zu der Zeit wenn es nicht mehr funktioniert disappeared? Das Problem haben ja ein paar Leute hier im Forum. Reiner hat aber eine neue Version von Sonos rausgebracht, hast Du die schon?
Gruß Otto
[/quote]
Ich habe den forenbeitrag schon gelesen. Die neue Version werde ich schnelllstmöglich einspielen, aber nicht mehr heute.
Ich habe gesehen dass Sonos_Esszimmer noch "lebt", aber dafür steht ein anderer Player, der aktuell einen stream abspielt auf "disapeared".
Danke und schönen Abend!
Kurt
Hallo Otto,
nach dem Löschen und nachfolgender Neuanlage des Sonos-Device läuft jetzt alles seit 2 Tagen stabil.
Jetzt geht's natürlich weiter.
Ziel ist nun, die Mehrfachnutzung eines Schalters zu implementieren. Ich will also 3 Radiosender der Reihe nach durchschalten. Dazu gibt es ja auch einen sehr brauchbaren Wiki-Eintrag.
Auf dem Weg dahin bin ich über readingsval gestolpert.
Es funktioniert:
define n_test notify Shelly1Button1:event:.SSS { if ( ReadingsVal ("Sonos_Kueche","Volume",99 ) < 50 ) { fhem "set Sonos_Buero speak 40 de Hallo" }}
Es funktioniert nicht:
define n_test notify Shelly1Button1:event:.SSS { if ( ReadingsVal ("Sonos_Kueche","currentSender","" ) eq "NDR%20Info" ) { fhem "set Sonos_Buero speak 40 de Hallo" }}
Was ist beim 2. Notify falsch?
Danke und Gruß,
Kurt
Hallo Kurt,
ich glaube die code Tags sind eine unlösbare Aufgabe für Dich. Lass die einfach weg, es geht glaube ich ohne besser. Ich habe keine Ahnung ob man in der Forensoftware etwas für Barrierefreiheit tun kann, aber ich werde mich mal etwas damit beschäftigen.
Zu Deiner Frage: Das Problem ist schon verrückt, ich weiß, dass man den Sender so wie Du geschrieben hast übergeben muss - also Leerzeichen durch %20 ersetzt, quasi url encoded.
In dem Fall des Vergleiches darfst Du es nicht, also richtig muss es heißen:
( ReadingsVal ("Sonos_Kueche","currentSender","" ) eq "NDR Info" )
Ich habe das bei mir gerade getestet.
Du kannst ja den currentSender mal auslesen. So direkt in der FHEM Kommandozeile:
{ ReadingsVal ("Sonos_Kueche","currentSender","" )}
Damit weißt Du was drin steht und genau auf diesen String musst Du mit eq testen.
Gruß Otto
Hallo Otto,
danke, das Notify funktioniert nun.
Was nicht funktioniert hat, ist die eingabe in der Kommandozeile:
syntax error at (eval 1242) line 1, at EOF
Zum Thema Code Tags. ja, das scheint ein unlösbares Problem zu sein, weil Deine (z.B. Post #18) und meine (z.B. Post #33) für mich identisch aussehen!
Muss ich bei Gelegenheit meine Frau mal draufgucken lassen.
Danke und noch einen schönen Tag!
Kurt
Sorry Kurt, da war eine Klammer zu viel. Ich habe es oben korrigiert ;)
Dir auch einen schönen Tag
Otto
Hallo,
einfach im Event-Monitor das Event (die ganze Zeile) markieren auf welches das notify reagieren soll und mit dem Button oben 'Create/Modify Device' ein notify erstellen.
Angenommen die drei Radiosender sind in dem Reading RadiosList vorhanden, dann kannst diesen Code hier:
my $l = ReadingsVal("Sonos_Kueche","RadiosList","unknown");
$l =~ s/\|/,/g;
return fhem("set Sonos_Kueche StartRadio /".Each('Sonos_Kueche', $l)."/");
einfach in der DEF des notify in die {} eintragen.
Ergebnis : Mit jedem Event auf welches das notify reagiert wird der nächste Radiosender in RadiosList gestartet, am Ende der Liste wird wieder von vorne angefangen.
Gruß
Thomas
Zitat von: TomLee am 05 August 2020, 09:55:37
Hallo,
einfach im Event-Monitor das Event (die ganze Zeile) markieren auf welches das notify reagieren soll und mit dem Button oben 'Create/Modify Device' ein notify erstellen.
Angenommen die drei Radiosender sind in dem Reading RadiosList vorhanden, dann kannst diesen Code hier:
my $l = ReadingsVal("Sonos_Kueche","RadiosList","unknown");
$l =~ s/\|/,/g;
return fhem("set Sonos_Kueche StartRadio /".Each('Sonos_Kueche', $l)."/");
einfach in der DEF des notify in die {} eintragen.
Ergebnis : Mit jedem Event auf welches das notify reagiert wird der nächste Radiosender in RadiosList gestartet, am Ende der Liste wird wieder von vorne angefangen.
Gruß
Thomas
Hallo Thomas,
1. Wie kriege ich denn die 3 Radiosender in die RadiosList rein?
2. Der Code sieht dann also genau so aus?
define n_test notify Shelly1Button1:event:.SSS {
my $l = ReadingsVal("Sonos_Kueche","RadiosList","unknown")
$l = s/\|/,/g
return fhem("set Sonos_Kueche StartRadio /".Each('Sonos_Kueche', $l)."/")
3. Ich hätte gerne vor jedem Senderstart noch eine sprachdurchsage des Sendernamens.
Danke und Gruß,
Kurt
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 (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 (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.
Zitat von: TomLee am 05 August 2020, 14:02:17
"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.
@TomLee: Das Each() sollte doch einen Sendernamen zurückliefern? Dann kann man den m.E. auch durchsagen lassen, oder übersehe ich was (@Kurt77: ich habe die Hardware nicht und kann daher nur tippen)?
________________
@Kurt77:
Sorry, wußte nicht, dass es für dich schwieriger ist, Links zu verfolgen und Infobausteine zusammenzupuzzeln. Sorry, wenn daher irgendwo was falsch rübergekommen sein sollte.
Was Code-Tags bzw. Formatierung angeht: mach doch einfach ein paar "--------" in eine neue Zeile, dann den Code/das list usw., und dann wieder eine abschließende Zeile (wieder "----", oder "+++++" oä.. Dann dürfte es für dich besser erkennbar sein, was du "eingekastelt" hast, und wir können das "bemühen" erkennen (sonst mosert ggf. der nächste wegen der "Tags" rum, ohne die Hintergründe zu kennen...).
"@TomLee: Das Each() sollte doch einen Sendernamen zurückliefern? Dann kann man den m.E. auch durchsagen lassen, oder übersehe ich was"
Zur Wiedergabe mit StartRadio wird aber die Schreibweise mit den Punkten (Regulärer-Ausdruck-Schreibweise oder auch wie vor kurzem URL-encoded) benötigt, die ist weniger geeignet zur Sprachansage.
"setstate Sonos_Wohnzimmer 2020-07-24 13:01:27 RadiosList 011.FM.-.Non.Stop.60s|1LIVE.diggi..Top.40.Pop.|DASDING.92.5..Euro-Hits.|Hitradio.Ö3.99.9..Österreichisch.|Nota.Masria..Gemeinden.|PsyRadio.Chillout|Radio.Regenbogen|SWR4.Baden-Württemberg|SWR4.Rheinland-Pfalz|die.neue.welle.101.8..Rock.
setstate Sonos_Wohnzimmer 2020-07-24 13:01:27 RadiosListAlias 011.FM - Non Stop 60s|1LIVE diggi (Top 40/Pop)|DASDING 92.5 (Euro-Hits)|Hitradio Ö3 99.9 (Österreichisch)|Nota Masria (Gemeinden)|PsyRadio Chillout|Radio Regenbogen|SWR4 Baden-Württemberg|SWR4 Rheinland-Pfalz|die neue welle 101.8 (Rock)"
Man könnte jetzt so Spielchen machen wie gestern und über den Index eines Array den passenden Sender aus RadiosListAlias nehmen.
edit:
Achso oder einfach die Punkte durch Leerzeichen ersezen ;D
"oder übersehe ich was"
ich denke ja, für die Sprachausgabe muss einmal Each aufgerufen und dann wieder für die Wiedergabe StartRadio.
Also mein ich bekommt man mit der Sprachausgabe den nächsten Sender angesagt, mit StartRadio schaltet man aber schon wieder auf den nächsten Sender ;D
"für die Sprachausgabe muss einmal Each aufgerufen und dann wieder für die Wiedergabe StartRadio".
Warum nicht die Rückmeldung von Each() in eine Variable packen *grins*?
(Bzw. diese Variable dann nochmal in eine zweite Variable umpacken für die punktbereinigte Variante zum Zwecke der Sprachausgabe?)
"Warum nicht die Rückmeldung von Each() in eine Variable packen *grins*?"
Ja soweit hatte ich auch schon gebaut und das funzt erst mal auch beim (um)schalten, bis mir die Erkentniss kam das so oder so Each aufgerufen wird und der Index erhöht wird oder versteh ich es immer noch nicht
my $l = ReadingsVal("$sondev","RadiosList","unknown");
$l =~ s/\|/,/g;
my $lv = Each($sondev, $l)."/";
return fhem("set $sondev StartRadio /".$lv);
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);
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.
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 ;) .
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.
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.
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
"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.
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.
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 (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 (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
Kommando zurück: Nach einem shudown Restart sind die readings nun doch da.
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
"S2 wird also nie abgespielt"
Bist dir sicher das den Sender genauso in der Liste eingetragen hast wie er in RadiosList steht ?
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.
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>"
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
Bei mir klappts auch nicht mit NDR.2 :)
Zitat von: TomLee am 07 August 2020, 11:02:55
Bei mir klappts auch nicht mit NDR.2 :)
Hallo Thomas,
das ist ja schräg! Hatte auch noch einen anderen Sender ausprobiert, der auch nicht ging. Soeben Bayern5.Plus probiert, ging auch nix, aber dann hat BAYERN.3 funktioniert. Jetzt weiß ich also, dass das Notify i.O. ist. Danke dafür!
Jetzt bin ich gespannt, ob Dir zum Thema "Sprachausgabe Sendername" noch etwas einfällt.
Danke und Gruß,
Kurt
solange die Frage aus #48 unbeantwortet bleibt, weshalb die Variable immer leer ist, hab ich keine Idee den Titel vor dem abspielen auszugeben.
Wenn der Player schon spielt und eines der current.*-Reading reinkommt, dann die Sprachansage, das ginge, aber mMn. nix halbes und nichts ganzes.
Zitat von: TomLee am 07 August 2020, 14:17:52
solange die Frage aus #48 unbeantwortet bleibt, weshalb die Variable immer leer ist, hab ich keine Idee den Titel vor dem abspielen auszugeben.
Wenn der Player schon spielt und eines der current.*-Reading reinkommt, dann die Sprachansage, das ginge, aber mMn. nix halbes und nichts ganzes.
Hallo Thomas,
ich habe am Sonos-Device das Attribut event-on-Change auf 1 gesetzt. Seither werden die Sendernamen im Reading currentSender abgelegt.
Hilft das beim Thema "Sprachausgabe"?
Danke und Gruß,
Kurt
"ich habe am Sonos-Device das Attribut event-on-Change auf 1 gesetzt"
Das ist ein weit verbreiteter Irrtum, dass "1" irgendwie eine sinnvolle Angabe in event-on-change-reading wäre. (Rudi hat da jüngst auch was an FHEMWEB gedreht, damit Attribute nicht fälschlicherweise automatisch mit 1 vorbelegt werden). Bitte lösche das Attribut entweder ganz oder mache einen sinnvollen Wert da rein.
@TomLee: Zu #48 fällt mir leider auch nichts ein, außer evtl. dem Versuch, das mit einem Punkt in einen Scalar zu "zwingen":
#####Code######
{my $l = ReadingsVal("Sonos_Wohnzimmer","RadiosList","unknown");;$l =~ s/\|/,/g;;my $lvwodot .= Each("Sonos_Wohnzimmer", $l);;my $lv = $lvwodot."/";;$lvwodot=~ s/./ /g;;$lvwodot}
#####Ende Code##
(Ich nehme an, im Log steht nichts zielführendes?)
Hallo Beta-User,
Ich meine beobachtet zu haben, dass erst nach dem Setzen von event-on-Change das Reading currentSender regelmäßig gefüllt wurde.
Was wäre denn ein sinnvoller Wert, der da reingehört?
Danke und Gruß,
Kurt
Die current.*-Readings aktualisieren sich nur wenn was abgespielt wird, sonst sind sie leer.
Mit der Sprachansage beschäftige ich mich später nochmal, muss noch was arbeiten.
Sorry Thomas,
das habe ich anders beobachtet. correntSender wurde nach einem Neustart von Sonos nach dem Abspielen eines Senders genau auf diesen Sender gesetzt. Nach einem Senderwechsel ist currentSender auf dem "alten" Wert stehen geblieben.
Gruß,
Kurt
"Was wäre denn ein sinnvoller Wert, der da reingehört?"
Das ist "von ferne" schwierig zu beantworten. Mein Tipp wäre weiterhin, das einfach zu löschen. Falls du das nicht willst, wäre ".*" vermutlich das, was du dachtest, was die "1" bewirkt. Letzteres (".*") ist mir aber eigentlich zu pauschal, du solltest eher mal im Event-Monitor (mit gesetztem Filter auf das/die Sonos-Geräte) beobachten, ob da (zu) viel passiert, wenn das Attribut ganz gelöscht ist. (Falls dir das irgendwie hilft: ggf. ist es über telnet einfacher, wenn du dort "inform" verwendest: https://fhem.de/commandref_modular.html#inform; wäre nett, wenn du uns eine Rückmeldung dazu gibst, dann können wir (mind. Otto ist auch mit von der Partie) ggf. anderen Screenreader-Nutzern auch entsprechende Tipps geben *Augenzwinker*)
Was die "1" angeht: Vermutlich ist die "schuld", dass du die Änderung des Readinginhalts in "currentSender" gar nicht mitbekommst, weil das dann erst nach einem Browser-Refresh in FHEMWEB abgezeigt wird...
#{my $l = '011.FM.-.Non.Stop.60s,1LIVE.diggi..Top.40.Pop.,DASDING.92.5..Euro-Hits.';; my $lvwodot = Each("Sonos_Wohnzimmer", $l);; my $lv = $lvwodot."/";; $lvwodot =~ s/./i/g;;$lvwodot;;}
iASDING.92.5..Euro-Hits.
#
Und weitere Tests sind alle für mich kurios, es liegt an dem ersetzen $lvwodot =~ s/./ /g.
Jemand eine Erklärung ?
Hallo Beta-User,
Du überforderst mich gleich 2-mal:
- Was soll das Ziel meiner Beobachtung sein? Was bedeutet in diesem Zusammenhang (zu) viel passiert"?
- Wie verwende ich inform? Probiere ich gerne mal aus, komme aber mit dem event-monitor gut klar.
Danke und Gruß,
Kurt
@TomLee:
Das mit dem Punkt = "alles/beliebiges Zeichen" ist das Problem...
Das hier funktioniert bei mir:
####Code#####
{my $l = '011.FM.-.Non.Stop.60s,1LIVE.diggi..Top.40.Pop.,DASDING.92.5..Euro-Hits.';; my $lvwodot = Each("ot_dummy", $l);; my $lv = $lvwodot."/";; $lvwodot =~ s/[.]/ /g;;$lvwodot;;}
####End Code#####
----------------------------
@Kurt77
"zu viel" bedeutet, dass ständig die immergleichen Events kommen. Wenn aber nur Events generiert werden, wenn sich die Information wirklich ändert, ist alles ok. Kommen immer mal wieder Status-Updates ohne Änderung, mußt du entscheinden, ob du das so haben willst. (Nur) dafür sind diese event-on...-Attribute da.
Für inform brauchst du einen Telnet-Zugang. Wenn du mit dem Event-Monitor gut klarkommst, kannst du dir das sparen, funktional sollte beides nach meinem Verständnis auf dasselbe rauslaufen: Man bekommt alle Events (ggf. gefiltert).
Dann sollte es eigentlich so klappen, das was bisher in {} stand einfach durch den u.a. Code ersetzen:
#{my $l = '011.FM.-.Non.Stop.60s,1LIVE.diggi..Top.40.Pop.,DASDING.92.5..Euro-Hits.';
my $lvwodot = Each("Sonos_Kueche", $l);
my $lv = $lvwodot."/";
$lvwodot =~ s/[.]/ /g;
fhem ("set Sonos_Kueche speak 15 de es wird $lvwodot abgespielt");
return fhem("sleep 6;set Sonos_Kueche StartRadio /".$lv);}#
Aber: bei mir hängt sich das Sonos-Modul dann auf, kein setter funktioniert mehr, wenn man das zweimal ausführt, nix steht mit verbose 3 im Log. Das war vorher auch schon so, dachte aber das liegt an dem "falschen" ersetzen.
disablen und wieder aktivieren hilft nur oder per Sprache (Sonos-Skil) einmal stoppen.
Nach dem stoppen per Sprache kommen dann plötzlich all die Sprachansagen nacheinander die zuvor hätten ausgeführt.
Probier mal aus Kurt ob das bei dir auch so ist.
Otto kannst du auch mal testen ?
Hey Kurt,
denke hab das Problem gefunden, der Befehl StartRadio darf nicht in der Zeit der Sprachansage ausgeführt werden.
Du musst das sleep mindestens so hoch wählen (plus scheinbar noch etwas Puffer) wie die Sprachansage lang ist.
Bei den mit meinen getesteten Sendern (011.FM.-.Non.Stop.60s,1LIVE.diggi..Top.40.Pop.,DASDING.92.5..Euro-Hits.) sind das mindestens 9-10 Sekunden.
Hab das jetzt auch bei mir eingebaut, gefällt mir sehr gut.
Danke auch mal wieder zwischendurch an Beta-User .
Optimal wäre wenn StartRadio erst ausgeführt wird wenn die Sprachansage beendet ist, hab ich erstmal aber keine Idee.
Immer wieder gerne :) .
Gibt es ein Event, wenn die Sprachansage durch ist?
Dann könnte man ein sleep auf Event-Basis verwenden (ja, sowas gibt es)...
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 ?
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 ).
"(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);#
(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#####
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, ...
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");#
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.
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);}#
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
Kann den Code problemlos in der DEF eines Notify eintragen bekomme keinen Fehler.
Hast du die letzte } mit dabei ?
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
"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"
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
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.
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
Zitat von: amenomade am 08 August 2020, 20:52:14
So so... ::) :D
Hallo amenomade,
würdest Du mir bitte deine Reaktion erklären?
Danke und Gruß,
Kurt
;D ;)
Zitat von: Kurt77 am 08 August 2020, 22:17:41
Hallo amenomade,
würdest Du mir bitte deine Reaktion erklären?
Danke und Gruß,
Kurt
Nö, das erkläre ich nicht. Hat wirklich nix mit dir zu tun, aber ich glaube TomLee hat es verstanden ;) Sagen wir mal: "private joke" und sorry fürs OT
Zitat von: Kurt77 am 08 August 2020, 19:19:33
Ich habe den Anspruch, irgendwann diesen Code zu verstehen. Was würdest Du mir dazu als Lektüre empfehlen?
Vermutlich hat da jeder seine eigene Methode.
Wie TomLee angemerkt hatte, sind das "eigentlich" hautsächlich Perl-Grundlagen (wobei man sich trefflich darüber streiten kann, ab wann es nicht mehr Grundlagen sind), verbunden mit dem Verständnis dafür, wie "FHEM tickt".
Was mir im sehr geholfen hat, mich in "FHEM+Perl" reinzufinden, war immer wieder den "Rahmen" der Commandref durchzusehen, dazu notify und at; da sind eigentlich schon unglaublich viele kleine Bausteinchen drin. Zu Perl z.B. speziell noch: https://fhem.de/commandref_modular_DE.html#perl
"Richtig los" ging es dann, als ich irgendwann lieber Code nach myUtils geschoben habe, wofür man eigentlich nur ein Verständnis dafür entwickeln muß wie man Daten zwischen Event/config und myUtils austauscht, also im Wesentlichen Parameter ermittelt und übergibt. Dazu steht (mMn.) das Notwendige in https://wiki.fhem.de/wiki/99_myUtils_anlegen (mein persönlicher "Steinbruch" war lange die dort verlinkte" Globale und flexible Fenster- und Türüberwachung", zwischenzeitlich habe ich über die Betreuung (und von Experten begleitete Überarbeitung) diverser Module und der attrTemplate sowas wie einen eigenen Steinbruch). Wenn ich mal sonst was brauche oder nicht verstehe, nutze ich eine Suchmaschine, und v.a. Seiten wie Perlmonks oder die offizielle Perl-Doku unter https://perldoc.perl.org/index-language.html.
In diesem Thread hat pah dankenswerterweise Auszüge aus dem "Handbuch Programmiersprachen" veröffentlicht:
https://forum.fhem.de/index.php/topic,100206.msg993864.html#msg993864, das kann ggf. helfen, systematischer und schneller einzusteigen, als das bei mir der Fall war...
Ansonsten: laß dir Zeit, Rom wurde nicht an einem Tag erbaut, und das, was hier entstanden ist, ist jedenfalls (mindestens mAn) auf bestem Weg Richtung "Fortgeschritten" *grins*
Das Problem bei Perl ist, dass man darin so kryptischen Code schreiben kann, dass kein halbwegs intelligenter Mensch ihn entziffern kann...
LG
pah
...wie wahr... (wobei es Leute zu geben scheint, denen man allgemein nicht unterstellen kann, nicht intelligent zu sein, die aber in Perl Dinge "einfach so" lesen können, die für mich eher aussehen wie Hieroglyphen)...
Aber das ist nicht das Niveau, das wir hier diskutieren, oder?
-------------------------------
Btw, die Beschreibung sollte min. an einer Stelle korrigiert werden:### code ####
$lvwodot =~ s/[.]/ /g; # ersetze alle Punkte (genauer: das Zeichen Punkt) in der Variablen $lvwodot durch Leerzeichen ### end code ####
Das Suchwort für den Punkt in der Zeile darüber (ein / anhängen) nennt sich übrigens concatenation. Unter https://perlmaven.com/string-operators findet man dazu auch näheres, der dortige Autor erklärt vieles andere auch sehr anschaulich...
Zitat von: SimonHipp am 04 Januar 2021, 12:43:25
vll. hier nicht ganz richtig, aber ich möchte mit dem ShellyButton1 folgendes Umsetzten.
Wenn du schon den "Verdacht" hast, dass du hier nicht ganz richtig ist: Mach' bitte einen eigenen Thread dafür auf. Das ist nichts, was speziell mit dem Shelly Button1 zu tun hat, sondern beinhaltet ziemlich andere allgemeine Frage zur Strukturierung von Devices (z.B. via structure) und ggf. zu Perl-if und/oder FHEM-IF.
Da der TE hier ggf. mitliest, ist es ziemlich unhöflich, ihn mit diesen anderen Fragen zu behelligen...
Zitat von: Beta-User am 04 Januar 2021, 12:52:28
Wenn du schon den "Verdacht" hast, dass du hier nicht ganz richtig ist: Mach' bitte einen eigenen Thread dafür auf. Das ist nichts, was speziell mit dem Shelly Button1 zu tun hat, sondern beinhaltet ziemlich andere allgemeine Frage zur Strukturierung von Devices (z.B. via structure) und ggf. zu Perl-if und/oder FHEM-IF.
Da der TE hier ggf. mitliest, ist es ziemlich unhöflich, ihn mit diesen anderen Fragen zu behelligen...
Hi und sorry, ich habe meinen Beitrag entfernt und einen neuen erstellt.
Grüße
Simon