[gelöst] notify und userReading - Steuerung Volumio 2

Begonnen von Bond246, 24 Februar 2018, 19:39:02

Vorheriges Thema - Nächstes Thema

Bond246

Hallo zusammen,

ich möchte meine Volumio2 Steuerung etwas vielseitiger machen.
Für das ein/ausschalten nutze ich ein DOIF
define kuechenradio DOIF (["$SELF:aktiv: on"]) { GetHttpFile("kuechenradio:3000", "/api/v1/commands/?cmd=play") } DOELSEIF (["$SELF:aktiv: off"]) { GetHttpFile("kuechenradio:3000", "/api/v1/commands/?cmd=stop") }
attr kuechenradio readingList aktiv volume
attr kuechenradio setList aktiv:on,off volume:slider,0,5,100
attr kuechenradio webCmd volume:aktiv


Das funktioniert auch soweit mit dem ein- und ausschalten. Ursprünglich hatte ich geplant auch die Lautstärke zu regeln, das hat allerdings nur funktioniert, wenn ich vorher das Geräte ein/ausschalte, der cmd-state also ein anderer ist.
DOELSEIF ([$SELF:volume]>0) { GetHttpFile("kuechenradio:3000", "/api/v1/commands/?cmd=volume&volume=[$SELF:volume]") }
Wenn einer dafür eine Lösung hat, könnte ich mir das folgende sparen.

Da ich allerdings keine Lösung kannte, dachte ich, das Problem mit einem notify auf das volume-reading zu lösen:
define kuechenradio.volume notify kuechenradio:volume:.* { GetHttpFile("kuechenradio:3000", "/api/v1/commands/?cmd=volume&volume=$EVENT") }

Ich ändere also die Lautstärke im Device "kuechenradio" und das notify sollte das Event auslesen und im HTTP-Request verwenden.
Leider sehe ich aber im Logfile, dass er nicht den Lautstärke-Wert verwendet sondern einfach nur den "$EVENT"-String. Das kann dann natürlich nicht funkionieren.

Weiß jemand, wo mein Denkfehler ist?

Grüße,
Bond

Otto123

Hi Bond,

ich hatte letzten eine ähnliche Diskussion, vielleicht hilft es Dir.

https://forum.fhem.de/index.php/topic,84511.msg769115.html#msg769115

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Bond246

#2
Meine Vermutung ist, dass nicht das notify selbst fehlerhaft ist sondern die Übergabe von meinem volume-reading.
Wobei das Volume-reading schon ansich schaltet, wenn ich am Regler drehe und es triggert ja auch das notify. Aber der Wert wandert nicht mehr (glaube ich zumindest).

Stattdessen habe ich ein von mir nicht gesetztes Reading "e_kuechenradio_volume" im device "kuechenradio", welches parallel den gleichen Wert hat wie "volume", wenn ich am slider drehe oder über set kuechenradio volume x einen wert festlege.

Otto123

Du sagst doch, Dein Aufruf { GetHttpFile("kuechenradio:3000", "/api/v1/commands/?cmd=volume&volume=$EVENT") } enthält den String $EVENT.
Also wird doch die Variable nicht aufgelöst!?
Versuch macht kluch - hast Du -> ??? { GetHttpFile("kuechenradio:3000", "/api/v1/commands/?cmd=volume&volume=".$EVENT) }

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Bond246

Moin Otto,

sorry, ja genau, mit
volume=".$EVENT)
hab ich es auch probiert. Ich hab auch probiert
volume=[$EVENT]")

Im Filelog steht dazu:
Zitat2018.02.25 11:46:27 5: Triggering kuechenradio.volume
2018.02.25 11:46:27 4: kuechenradio.volume exec { GetHttpFile("kuechenradio:3000", "/api/v1/commands/?cmd=volume&volume=[$EVENT]") }
2018.02.25 11:47:04 5: Triggering kuechenradio.volume
2018.02.25 11:47:04 4: kuechenradio.volume exec { GetHttpFile("kuechenradio:3000", "/api/v1/commands/?cmd=volume&volume=".$EVENT) }

Beide devices sind verbose 5. Aber nur eins davon steht auch im Log.
Könnte es vielleicht mit dem DOIF zu tun haben, was das Event nicht raus rückt?

Otto123

Moin Konfuzius,

Du wolltest Hilfe für ein notify und nicht für DOIF.  :o

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Bond246

Es läuft jetzt, allerdings hab ich es auch nochmal komplett umgebaut.

define kuechenradio dummy
attr kuechenradio DbLogExclude .*
attr kuechenradio readingList volume mute
attr kuechenradio setList state:on,off volume:slider,0,5,100 mute:on,off
attr kuechenradio verbose 5


Dazu jeweils ein DOIF für Ein/Aus bzw. Muting
define kuechenradio.an_aus DOIF ([kuechenradio] eq "on") { GetHttpFile("kuechenradio:3000", "/api/v1/commands/?cmd=play") }\
DOELSEIF ([kuechenradio] eq "off") { GetHttpFile("kuechenradio:3000", "/api/v1/commands/?cmd=stop") }
attr kuechenradio.an_aus DbLogExclude .*
attr kuechenradio.an_aus verbose 5


define kuechenradio.mute DOIF ([kuechenradio:mute] eq "on") { GetHttpFile("kuechenradio:3000", "/api/v1/commands/?cmd=volume&volume=mute") }\
DOELSEIF ([kuechenradio:mute] eq "off") { GetHttpFile("kuechenradio:3000", "/api/v1/commands/?cmd=volume&volume=unmute") }
attr kuechenradio.mute DbLogExclude .*
attr kuechenradio.mute verbose 5


Mein Fehler im $EVENT war, dass es dann ja offenbar das gesamte Event übergibt. Ich brauchte aber nur den Wert. Da bin ich irgendwie erst beim schreiben von dieser Antwort drauf gekommen.
define kuechenradio.volume notify kuechenradio:volume:..* { GetHttpFile("kuechenradio:3000", "/api/v1/commands/?cmd=volume&volume=[b]$EVTPART1[/b]") }
attr kuechenradio.volume DbLogExclude .*
attr kuechenradio.volume verbose 5


Besten Dank fürs begleiten
Bond