ich würde gern mit einem Doppelklick auf meine Dimmer2 Taste die Radiosender beim Sonos wechseln. Diese sind in einer Variablen alle festgelegt. Nun müsste (ähnlich wie bei der Anleitung mit dem Rocki) bei einem Doppelklick eben diese Variable +1 gesetzt werden, damit er den Sender wechselt. Leider habe ich keine Ahnung, wie ich das bei einer Variablen realisieren kann. Kann mir bitte jemand helfen?
--[[
%% properties
%% events
%% globals
--]]
local startSource = fibaro:getSourceTrigger();
local sender = ( tonumber(sender +1));
if ( tonumber(sender)) > 2
then sender = 1
end
if (sender == 1) then
fibaro:setGlobal("SONOS_RADIO", "jamfm.hoerradar.de/jamfm-blacklabel-mp3-192?");
debug("JamFM")
fibaro:abort()
end
if (sender == 2) then
fibaro:setGlobal("SONOS_RADIO", "ndr-n-joy-mp3.akacast.akamaistream.net/7/665/273752/v1/gnl.akacast.akamaistream.net/ndr_n-joy_mp3");
debug("N-JOY")
fibaro:abort()
end
Nur leider bekomme ich es nicht zum laufen.
line 8: attempt to perform arithmetic on global ‘sender’ (a nil value)
Die Idee dahinter ist, dass eine Variable bei jedem Start der Szene um +1 erhöht wird. Je nach Höhe des Werts wird dann die vordefinierte SONOS_RADIO Variable neu gesetzt. Da ich nur zwei Sender habe, soll er ab dem Wert 2 in der Variable Sender diese automatisch wieder auf 1 setzen…
Hier versuchst du den Wert der Variablen “sender” zu verändern, welche aber gar keinen Wert besitzt. (a nil value). Wenn dann so:
local sender = 0
sender = sender +1
Da du aber bei jedem Start den Wert erhöhen willst, musst du für sender auch eine globale Variable nutzen, sonst ist der Wert bei jedem Start der Szene wieder 0.
Hm, komm mit deinem Tipp nicht so recht weiter boomx… wie meinst du das mit der Variablen? Habe die GlobaleVariable sender jetzt mit local sender = 0 und sender = sender +1 gefüttert. Er schaltet beim starten der Szene nun auch immer brav auf den ersten Sendern, unabhängig davon, was zuvor eingestellt war. Nur werden die Werte nicht addiert…brauche ich dafür noch eine weitere Variable? Wenn ja, wie muss ich das machen?
du hast keine globale Variable sondern eine lokale Variable “Sender”. Diese wird natürlich bei jedem Start der Szene auf 0 gesetzt. Hier musst du wie beschrieben mit zusätzlichen globalen Variablen arbeiten, damit die Szene weiß, was beim letzten Mal für ein Wert gesetzt wurde.
Bei zwei Variablen kannst Du auch diese abfragen und jeweils die andere aktivieren, a la:
if (fibaro:getGlobalValue("SONOS_RADIO") == "jamfm.hoerradar.de/jamfm-blacklabel-mp3-192?") then
fibaro:setGlobal("SONOS_RADIO", "ndr-n-joy-mp3.akacast.akamaistream.net/7/665/273752/v1/gnl.akacast.akamaistream.net/ndr_n-joy_mp3");
else
fibaro:setGlobal("SONOS_RADIO", "jamfm.hoerradar.de/jamfm-blacklabel-mp3-192?");
end
Danke Hoogle! Ich wollte aber gern noch 2-3 Sender hinzunehmen, weshalb ich boomx Schritt mit der Variablen gehen muss. Da gucke ich mal, wie weit ich heute Abend komme.
Hm, ich bekomme es nicht hin und bräuchte doch nochmal Hilfe
Ich komme mit den Variablen nicht klar. Alles was ich brauche ist eine Variable “sender” die ausgelesen wird, in z.B. “senderneu” um +1 erhöht wird und dann wieder in “sender” geschrieben wird. Alles weitere hab ich bereits…bei den Variablen hängt es am nil value…egal was ich mache. Ich hab die Funktionsweise noch nicht wirklich verstanden. Bitte helft mir mit etwas code… Danke
Hi boomx, danke! Code siehe oben…Ich hab bisher nur mit vordefinierten und den anderen Variablen rumexperimentiert. Hab versucht aus der vordefinierten Variable “sender” die mit 1,2,3,4 gefüllt wurde mit getValue was in einer lokalen Variablen mit +1 zu laufen zu bekommen und dann den neuen Wert wieder auf die globale “sender” Variable mit SetGlobal zu schreiben…erfolglos…bei zwei lokalen Variablen habe ich das Problem mit nilValue…Ich verstehe es einfach nicht so recht
sender ist in deinem Fall eine lokale Variable und keine globale. (wie hoggle und ich bereits geschrieben haben) Die globalen Variablen musst du selbstständig anlegen und von dort musst du den zuletzt hinterlegten Wert auslesen.
--[[
%% properties
%% events
%% globals
--]]
local startSource = fibaro:getSourceTrigger()
if (fibaro:getGlobalValue('sender') == '4' ) then
fibaro:setGlobal('sender', '1');
end
fibaro:setGlobal('senderneu', fibaro:getGlobalValue('sender') +1);
fibaro:setGlobal('sender', fibaro:getGlobalValue('senderneu'));
if (fibaro:getGlobalValue('sender') == '3' ) then
fibaro:setGlobal('SONOS_RADIO', 'jamfm.hoerradar.de/jamfm-blacklabel-mp3-192?');
end
if (fibaro:getGlobalValue('sender') == '2' ) then
fibaro:setGlobal('SONOS_RADIO', 'ndr-n-joy-mp3.akacast.akamaistream.net/7/665/273752/v1/gnl.akacast.akamaistream.net/ndr_n-joy_mp3');
end