Festgelegte Variable plus 1 setzen

Hallo,

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?

Danke

Hi,

das ist eine vordefinierte Variable, in der Du die Sender alle abgespeichert hast, oder?

VG Hoggle

Ja Hoggle, die Variable ist vordefiniert…

Sorry, da bin ich raus.
Ich habe letztens zwar mit Globalen Variablen und Arrays experimentiert, aber irgendwann aufgegeben…

Hm, ich hab Folgendes probiert:

--[[
%% 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…

Danke für eure Hilfe

Hi,

du kannst folgende Zeile nicht nutzen:

local sender = ( tonumber(sender +1));

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.

Gruß

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?

Hi,

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.

Gruß

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! :slight_smile: 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 :frowning:

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 :slight_smile:

Poste doch mal deinen Code und was du bisher hast…

Gruß

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 :frowning:

In Zeile 8:
local sender = ( tonumber(sender +1));
nutzt Du eine Variable, die vorher noch nicht definiert wurde, also bei dem " sender +1".

Du kannst “sender” als Array definieren und vorher mit den entsprechenden Ausprägungen definieren.

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.

Gruß

Läuft :slight_smile:

--[[
%% 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

Danke für eure Hilfe