Nochmals Sonos, abspeilen von MP3

Hallo zusammen,

ich habe meinen Sonos Play 1 mit dem virtuellen Modul von Doonic angelegt. die Wahl des Radiosenders habe ich hinbekommen. Ich will aber Systemklänge (z.B. Mitteilungen aus Szenen, wie z.B. “die Garage” steht noch offen oder “die Waschmaschine ist fertig” generieren. Ich habe in meinem Synolgy NAS entsprechende MP3 abgelegt. Leider bekomme ich das nicht zum Laufen. Ich habe als Variable unter SONOS_MUSIC folgendes hinterlegt:
//192.x.x.x/Cloud Station/Systemklänge/Beispiel.mp3

Hat jemand einen Tipp, wie man das ans Laufen bekommen kann?

Hi,

denke mal, dass es Probleme mit den Leerzeichen und den Sonderzeichen gibt. Sollte man bei sowas eher drauf verzichten.

Gruß

Hi,

bei mir läuft es ohne die vorangestellten “//”.

VG Hoggle

Hallo Hoggle,

habe ich versucht. Geht leider auch nicht. Kann es sein, dass HC2 einen Zugriff als User für meine Synology Diskstation benötigt? Wie ist denn der Zugriff bei Dir gestaltet?

VG

Dieter

Hallo,

hatte das gleiche Problem (allerdings mit FritzBox und angehängter Festplatte). Bei mir hat geholfen, den Pfad in der Sonos-App hinzuzufügen (Musikbibliothek hinzufügen o.ä.); dort kann man dann auch Benutzernamen und Passwort eingeben. Seit dem läuft es…
Und Leerzeichen scheinen auch ein Problem zu sein.

Ich habe nun die Leerzeichen und Sonderzeichen entfernt, den Pfad in der Sonos App berechtigt und es auch mit dem Webspace versucht. Leider ohne Erfolg.
Kannst Du Deinen Code posten?

Viele Grüße

Dieter

Kannst Du normal über die Sonos-App Dateien von Deiner Synology Diskstation weidergeben/abspielen?
Ich nutze dafür eine Fritzbox und USB-Stick.

Hier meine Variable für den Sonos-Commander: fritz.nas/fritzbox/musik/Sonos/Alarm.mp3

Funktioniert denn die Musikwiedergabe in der Sonos-App mit deiner Pfadangabe?

WICHTIG: Eine URL immer testen mit einer (Block)-Szene. Habs mal über setzen im Variablen Panel und manueller Bedienung des VD versucht und erst nach gefühlten 10 Jahren mit hinzufügen von Debug-Meldungen im VD gemerkt, dass immer die falschen (veralteten) URLs angezogen wurden. Mit einer Szene hat es dann direkt geklappt.

Bei Synology heißt das: ohne //, IP/music/Ordner/name.mp3, Sonderzeichen müssen escaped werden, z.B. Leerzeichen = %20

Viel Erfolg!
Markus

Da ich bei dem Versuch vorher aufgezeichnetet mp3s von meiner Synology mit Sonos abzuspielen eben fast verrückt geworden bin, hier die Lösung:

Man muss in der File Station bei den Eigenschaften des entsprechenden Ordners eine Berechtigung für “Everyone” hinzufügen.
Das ist Standardmäßig nicht aktiviert und ohne die geht es nicht, da die Ordner sonst immer Benutzernamen und Passwort für den Zugriff haben wollen.

Grüße

Hallo Matthias,

ich bekomme es nicht zum Laufen. Dabei wäre es das Zusatz-Feature schlechthin. Neben den Ansage, dass die Waschmaschine fertig ist, könnte z.B. ein Hund bei Abwesenheit und getriggerten Ereignissen bellen,…
Welche Version des Sonos Commanders hast Du denn in Verwendung?
Ich die Datei wie geraten für Erveryone berechtigt, keine Umlaute verwendet, Leerzeichen vermieden… Nichts geht. Mir würde es vollkommen reichen, wenn ich einfach nur ein File abspielen könnte. TTS und Radio snd für mich uninteressant. Die paar hundert Zeilen im virtuellen Modul helfen mir nicht gerade.
Bei der Gelegenheit: Wie hast Du die Variable gestaltet? Bei Hoggle ging es ohne voran gestellte //
Hast Du den Namen Deiner Disksstation verwendet oder ihre IP?
Also //Diskstation/music/Beispiel.mp3 oder 192.X.X.X/music/Beispuel.mp3?

Grüße

Hallo Homer,

Die “everyone” Berechtigung soll für den Ordner gelten. Ob es nur bei der Datei funktioniert bezweifele ich, da die Fibaro vermutlich sonst gar nicht an den Ordner kommt.

Die Version des Commanders weiß ich auf die Schnelle nicht. Ist aber die hier aus dem Downloadbereich.

Das setzen der Variable sieht in der Szene wie folgt aus: fibaro:setGlobal(“SONOS_MUSIC”, “192.168.220.2/sonos/gutenmorgen.mp3”);

(Der Ordner Sonos hat in dem Fall eine Berechtigung für “everyone”.

Danach noch das abspielen starten (als Musik, nicht als TTS):
fibaro:call(107, “pressButton”, “2”);

Grüße

Danke schön schon einmal für Deinen Hinweis,
leider klappt es immer noch nicht. In Lua sieht eine einfache Szene so aus (128 ist der Motionsensor, das Volume habe ich auf 70 gesteuert):

–[[
%% properties
128 value
%% events
%% globals
–]]

local startSource = fibaro:getSourceTrigger();
if (
( tonumber(fibaro:getValue(128, “value”)) > 0 )
or
startSource[“type”] == “other”
)
then
fibaro:call(225, “setSlider”, “6”, “70”);
fibaro:call(225, “pressButton”, “2”);
end

als Variable unter SONOS_MUSIC habe ich gesetzt:
192.168.1.65/music/Hundebellen.mp3

ich finde den Fehler einfach nicht.

Ich habe den Fehler. Die Variable SONOS_MUSIC hatte einen Hau. Ich habe sie neu angelegt und schon ging es. Herzlichen Dan an Eure Mithilfe, das war nicht einfach…

Hallo Leute,

ich kämpfe schon eine Ewigkeit mit dem Sonos Commander.
Egal was ich mache, er aktualisiert die Variablen einfach nicht.
Ein Beispiel:
Szene 1 ermittelt das Ereignis und aktualisiert die Variable bzw. die Adresse der hinterlegten Audiofile
Szene 2 löst den zugehörigen Knopf im Sonos Commander aus
Der Sonos Commander lebt in der Vergangenheit und gibt eine File wieder, die überhaupt nicht mehr als Variable hinterlegt ist

Kennt jemand von euch das Problem?
Ich trenne mich auch gerne vom Sonos Cammander, wenn ihr mir sagen könnt, womit ich sonst noch Audiofiles über Sonos aufrufen kann.

Ich danke euch.

LG
Mr.Coffee

Hi,

Wird die vorfefinuerte Variable nicht umgesetzt? Also wenn du im Panel nachsiehst, ist dort der “falsche” Wert abgebildet?
Oder stehe im Panel der richtige Werte, der nicht abgefragt wird?

Viele Grüße Hoggle

Hier ist noch eine Alternative:

https://www.siio.de/board/thema/sonos_remote_v1-0-1/

Hi,

danke für die Unterstützung.
Im Panel wird die Variable geändert, nur scheinbar nicht abgefragt.

Könnte es daran liegen, dass ich den “Music Button” im Sonos Commander mehrfach kopiert habe und nun für verschiedene Ereignisse und Variablen nutzen will?
Ich hätte ja gesagt, dass ich alles angepasst habe.
Um das Problem noch etwas zu konkretisieren:
Button 1: Alarm aktiviert.mp3
Button 2: Wetter.mp3
Die Szenen und Variablen dahinter haben nichts miteinander zu tun.

Wenn ich Button 2 gehört habe und danach den Button 1 wiedergeben will, spielt mir der Commander erneut die Wetter.mp3 ab.
Bevor ich die Wetter.mp3 hatte, hat die Alarmdatei jedoch funktioniert.

VG

Poste mal die Codes der beiden Buttons.

Vielen Dank.
In der Tat hat der Sonos Commander so dermaßen viel Coe, dass ich etwas lost bin.

Button1:

selfId = fibaro:getSelfId();    
ip = fibaro:get(selfId, 'IPAddress');
port = fibaro:get(selfId, 'TCPPort');
currentTransportState = "";
lastTransportState = "";
currentVolume = 0;
lastVolume = 0;
ttsVolumeIsDifferent = false;

urlencode = function(str)
  if (str) then
    str = string.gsub (str, "\n", "\r\n");
    str = string.gsub (str, "([^%w ])", function (c) return string.format ("%%%02X", string.byte(c)) end);
    str = string.gsub (str, " ", "+");
  end
  return str;
end

createRequestBody = function(action, schema, data)
  return string.format("<u:%s xmlns:u=\"%s\">%s</u:%s>", action, schema, data, action);
end

reponseCallback = function(fnc, args)
  if (fnc == nil) then
    return nil;
  end
  return fnc(args);
end

createSocket = function()
    -- Check IP and PORT before
  if (ip == nil or port == nil) then
    fibaro:debug("You must configure IPAddress and TCPPort first");
    return;
  end
  local socket;
  local status, err = pcall(function() 
      socket = Net.FTcpSocket(ip, port);
      socket:setReadTimeout(1000);
    end);  
  if (status ~= nil and status ~= true) then
    fibaro:debug("socket status: " .. tostring(status or ''));
  end  
  if (err ~= nil) then
    fibaro:debug("socket err: " .. tostring(err or ''));
    return;
  end
  return socket;
end

disposeSocket = function(socket)
  if (socket ~= nil) then
    socket:disconnect();
    socket = nil;
    return true;
  end
  return false;
end

sendSoapMessage = function(url, service, action, args, callback, retry)
    
  local socket = createSocket();
  if (socket == nil) then
    return;
  end
  retry = retry or 0
  -- prepare data
  local url = "POST " .. url .. " HTTP/1.1";
  local soapaction = "SOAPACTION: \"" .. service .. "#" .. action.name .. "\"";
  local body = createRequestBody(action.name, action.service, tostring(args or ""));
  local envelope = "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body>" .. body .. "</s:Body></s:Envelope>";
  local ctl = "Content-Length: " .. string.len(envelope); 
  local payload = url .. "\r\n" .. ctl .. "\r\n" .. soapaction .. "\r\n" .. "\r\n" .. envelope;
  -- write data
  local bytes, errorcode = socket:write(payload);
  if (errorcode == 0) then
    local state, errorcode = socket:read();
    if (errorcode == 0) then
      if (string.len(state or "") > 0) then
        -- callback
        if (callback ~= nil) then
          reponseCallback(callback, state);
        end
        -- dispose ...
        disposeSocket(socket);
        return true;
      else
        fibaro:debug("Error: Invalid response. response length: " .. string.len(state or ""));
      end
    else      
      if (retry < 5) then
        fibaro:debug("retry #"..retry.." action: " .. action.name);
        return sendSoapMessage(url, service, action, args, callback, (retry + 1));
      else
        fibaro:debug("Error: Code returned "..tostring(errorcode or ""));
      end
    end
  elseif (errorcode == 2) then
    fibaro:debug("Error: You must check your IP and PORT settings.");
  else
    if (retry < 5) then
      fibaro:debug("retry #"..retry.." action: " .. action.name);
      return sendSoapMessage(url, service, action, args, callback, (retry + 1));
    else
      fibaro:debug("Error: Code returned "..tostring(errorcode or ""));
    end
  end  
  -- dispose ...
  disposeSocket(socket);
  -- default response
  return false;
end

stop = function()
  return sendSoapMessage(
    -- control url
    "/MediaRenderer/AVTransport/Control",
    -- service type
    "urn:schemas-upnp-org:service:AVTransport:1",
    -- action
    { name = "Stop", service = "urn:schemas-upnp-org:service:AVTransport:1" },
    -- soap body data (options)
    "<InstanceID>0</InstanceID><Speed>1</Speed>",
      -- callback (options)
    function(response)
      fibaro:debug("stop sent");
    end);    
end

unMute = function()
  return sendSoapMessage(
    -- control url
    "/MediaRenderer/RenderingControl/Control",
    -- service type
    "urn:schemas-upnp-org:service:RenderingControl:1",
    -- action
    { name = "SetMute", service = "urn:schemas-upnp-org:service:RenderingControl:1" },
    -- soap body data (options)
    "<InstanceID>0</InstanceID><Channel>Master</Channel><DesiredMute>0</DesiredMute>",
      -- callback (options)
    function(response)
      fibaro:debug("unMute sent");
    end); 
end

play = function(duration)
  return sendSoapMessage(
    -- control url
    "/MediaRenderer/AVTransport/Control",
    -- service type
    "urn:schemas-upnp-org:service:AVTransport:1",
    -- action
    { name = "Play", service = "urn:schemas-upnp-org:service:AVTransport:1" },
    -- soap body data (options)
    "<InstanceID>0</InstanceID><Speed>1</Speed>",
      -- callback (options)
    function(response)   
      fibaro:debug("Play");
    end);    
end

setVolume = function(value)
  return sendSoapMessage(
    -- control url
    "/MediaRenderer/RenderingControl/Control",
    -- service type
    "urn:schemas-upnp-org:service:RenderingControl:1",
    -- action
    { name = "SetVolume", service = "urn:schemas-upnp-org:service:RenderingControl:1" },
    -- soap body data (options)
    "<InstanceID>0</InstanceID><Channel>Master</Channel><DesiredVolume>" .. tostring(value) .. "</DesiredVolume>",
    -- callback (options)
    function(response)      
      fibaro:debug("Volume set: " .. value);
    end);
end

getVolume = function()
  fibaro:log("Get volume, please wait...");
  return sendSoapMessage(
    -- control url
  	"/MediaRenderer/RenderingControl/Control",
    -- service type
    "urn:schemas-upnp-org:service:AVTransport:1",
    -- action
    { name = "GetVolume", service = "urn:schemas-upnp-org:service:RenderingControl:1" },
    -- soap body data (options)    
    "<InstanceID>0</InstanceID><Channel>Master</Channel>",
    -- callback (options)
    function(response)
      currentVolume = tonumber(response:match("<CurrentVolume>(.+)</CurrentVolume>") or 0);    
    end);
end

getTransportState = function()
  return sendSoapMessage(
    -- control url
  	"/MediaRenderer/AVTransport/Control",
    -- service type
    "urn:schemas-upnp-org:service:AVTransport:1",
    -- action
    { name = "GetTransportInfo", service = "urn:schemas-upnp-org:service:AVTransport:1" },
    -- soap body data (options)
    "<InstanceID>0</InstanceID>",
    -- callback (options)
    function(response)      
      currentTransportState = response:match("<CurrentTransportState>(.+)</CurrentTransportState>") or "";
    end);
end

-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
-- SONOS Radio
-- Version 0.0.1 pre-release
-- Copyright (C) 2015 Nicolas Dörig
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------

playMusic= function(music, volume)
  return sendSoapMessage(
  -- control url
  "/MediaRenderer/AVTransport/Control",
  -- service type
  "urn:schemas-upnp-org:service:AVTransport:1",
  -- action
  { name = "SetAVTransportURI", service = "urn:schemas-upnp-org:service:AVTransport:1" },
  -- soap body data (options)
  "<InstanceID>0</InstanceID>,<CurrentURI>x-file-cifs://" .. music .. "</CurrentURI>,<CurrentURIMetaData></CurrentURIMetaData>",
  -- callback (options)
  function(response)
  -- retrieve current transport state
  getTransportState();
  lastTransportState = currentTransportState;
  -- unmute before
  unMute();
  -- retrieve volume
  getVolume();
  lastVolume = currentVolume;
  -- set tts volume if <> with current
  if (volume ~= nil and volume ~= currentVolume) then
  setVolume(volume);
  ttsVolumeIsDifferent = true;
  end
      
  play();
 
  end);
end

-- Globale Variabel abfragen & verwenden
if fibaro:getGlobalValue("Wochentag") == "" then
  playMusic("Wochentag", nil);
else
  playMusic(fibaro:getGlobalValue("Wochentag"), nil);
end

fibaro:call(selfId, "setProperty", "ui.Label1.value", "Musik läuft..."); --Status Anzeige im VD Interface


Button 2:

selfId = fibaro:getSelfId();    
ip = fibaro:get(selfId, 'IPAddress');
port = fibaro:get(selfId, 'TCPPort');
currentTransportState = "";
lastTransportState = "";
currentVolume = 0;
lastVolume = 0;
ttsVolumeIsDifferent = false;

urlencode = function(str)
  if (str) then
    str = string.gsub (str, "\n", "\r\n");
    str = string.gsub (str, "([^%w ])", function (c) return string.format ("%%%02X", string.byte(c)) end);
    str = string.gsub (str, " ", "+");
  end
  return str;
end

createRequestBody = function(action, schema, data)
  return string.format("<u:%s xmlns:u=\"%s\">%s</u:%s>", action, schema, data, action);
end

reponseCallback = function(fnc, args)
  if (fnc == nil) then
    return nil;
  end
  return fnc(args);
end

createSocket = function()
    -- Check IP and PORT before
  if (ip == nil or port == nil) then
    fibaro:debug("You must configure IPAddress and TCPPort first");
    return;
  end
  local socket;
  local status, err = pcall(function() 
      socket = Net.FTcpSocket(ip, port);
      socket:setReadTimeout(1000);
    end);  
  if (status ~= nil and status ~= true) then
    fibaro:debug("socket status: " .. tostring(status or ''));
  end  
  if (err ~= nil) then
    fibaro:debug("socket err: " .. tostring(err or ''));
    return;
  end
  return socket;
end

disposeSocket = function(socket)
  if (socket ~= nil) then
    socket:disconnect();
    socket = nil;
    return true;
  end
  return false;
end

sendSoapMessage = function(url, service, action, args, callback, retry)
    
  local socket = createSocket();
  if (socket == nil) then
    return;
  end
  retry = retry or 0
  -- prepare data
  local url = "POST " .. url .. " HTTP/1.1";
  local soapaction = "SOAPACTION: \"" .. service .. "#" .. action.name .. "\"";
  local body = createRequestBody(action.name, action.service, tostring(args or ""));
  local envelope = "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body>" .. body .. "</s:Body></s:Envelope>";
  local ctl = "Content-Length: " .. string.len(envelope); 
  local payload = url .. "\r\n" .. ctl .. "\r\n" .. soapaction .. "\r\n" .. "\r\n" .. envelope;
  -- write data
  local bytes, errorcode = socket:write(payload);
  if (errorcode == 0) then
    local state, errorcode = socket:read();
    if (errorcode == 0) then
      if (string.len(state or "") > 0) then
        -- callback
        if (callback ~= nil) then
          reponseCallback(callback, state);
        end
        -- dispose ...
        disposeSocket(socket);
        return true;
      else
        fibaro:debug("Error: Invalid response. response length: " .. string.len(state or ""));
      end
    else      
      if (retry < 5) then
        fibaro:debug("retry #"..retry.." action: " .. action.name);
        return sendSoapMessage(url, service, action, args, callback, (retry + 1));
      else
        fibaro:debug("Error: Code returned "..tostring(errorcode or ""));
      end
    end
  elseif (errorcode == 2) then
    fibaro:debug("Error: You must check your IP and PORT settings.");
  else
    if (retry < 5) then
      fibaro:debug("retry #"..retry.." action: " .. action.name);
      return sendSoapMessage(url, service, action, args, callback, (retry + 1));
    else
      fibaro:debug("Error: Code returned "..tostring(errorcode or ""));
    end
  end  
  -- dispose ...
  disposeSocket(socket);
  -- default response
  return false;
end

stop = function()
  return sendSoapMessage(
    -- control url
    "/MediaRenderer/AVTransport/Control",
    -- service type
    "urn:schemas-upnp-org:service:AVTransport:1",
    -- action
    { name = "Stop", service = "urn:schemas-upnp-org:service:AVTransport:1" },
    -- soap body data (options)
    "<InstanceID>0</InstanceID><Speed>1</Speed>",
      -- callback (options)
    function(response)
      fibaro:debug("stop sent");
    end);    
end

unMute = function()
  return sendSoapMessage(
    -- control url
    "/MediaRenderer/RenderingControl/Control",
    -- service type
    "urn:schemas-upnp-org:service:RenderingControl:1",
    -- action
    { name = "SetMute", service = "urn:schemas-upnp-org:service:RenderingControl:1" },
    -- soap body data (options)
    "<InstanceID>0</InstanceID><Channel>Master</Channel><DesiredMute>0</DesiredMute>",
      -- callback (options)
    function(response)
      fibaro:debug("unMute sent");
    end); 
end

play = function(duration)
  return sendSoapMessage(
    -- control url
    "/MediaRenderer/AVTransport/Control",
    -- service type
    "urn:schemas-upnp-org:service:AVTransport:1",
    -- action
    { name = "Play", service = "urn:schemas-upnp-org:service:AVTransport:1" },
    -- soap body data (options)
    "<InstanceID>0</InstanceID><Speed>1</Speed>",
      -- callback (options)
    function(response)   
      fibaro:debug("Play");
    end);    
end

setVolume = function(value)
  return sendSoapMessage(
    -- control url
    "/MediaRenderer/RenderingControl/Control",
    -- service type
    "urn:schemas-upnp-org:service:RenderingControl:1",
    -- action
    { name = "SetVolume", service = "urn:schemas-upnp-org:service:RenderingControl:1" },
    -- soap body data (options)
    "<InstanceID>0</InstanceID><Channel>Master</Channel><DesiredVolume>" .. tostring(value) .. "</DesiredVolume>",
    -- callback (options)
    function(response)      
      fibaro:debug("Volume set: " .. value);
    end);
end

getVolume = function()
  fibaro:log("Get volume, please wait...");
  return sendSoapMessage(
    -- control url
  	"/MediaRenderer/RenderingControl/Control",
    -- service type
    "urn:schemas-upnp-org:service:AVTransport:1",
    -- action
    { name = "GetVolume", service = "urn:schemas-upnp-org:service:RenderingControl:1" },
    -- soap body data (options)    
    "<InstanceID>0</InstanceID><Channel>Master</Channel>",
    -- callback (options)
    function(response)
      currentVolume = tonumber(response:match("<CurrentVolume>(.+)</CurrentVolume>") or 0);    
    end);
end

getTransportState = function()
  return sendSoapMessage(
    -- control url
  	"/MediaRenderer/AVTransport/Control",
    -- service type
    "urn:schemas-upnp-org:service:AVTransport:1",
    -- action
    { name = "GetTransportInfo", service = "urn:schemas-upnp-org:service:AVTransport:1" },
    -- soap body data (options)
    "<InstanceID>0</InstanceID>",
    -- callback (options)
    function(response)      
      currentTransportState = response:match("<CurrentTransportState>(.+)</CurrentTransportState>") or "";
    end);
end

-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
-- SONOS Radio
-- Version 0.0.1 pre-release
-- Copyright (C) 2015 Nicolas Dörig
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------

playMusic= function(music, volume)
  return sendSoapMessage(
  -- control url
  "/MediaRenderer/AVTransport/Control",
  -- service type
  "urn:schemas-upnp-org:service:AVTransport:1",
  -- action
  { name = "SetAVTransportURI", service = "urn:schemas-upnp-org:service:AVTransport:1" },
  -- soap body data (options)
  "<InstanceID>0</InstanceID>,<CurrentURI>x-file-cifs://" .. music .. "</CurrentURI>,<CurrentURIMetaData></CurrentURIMetaData>",
  -- callback (options)
  function(response)
  -- retrieve current transport state
  getTransportState();
  lastTransportState = currentTransportState;
  -- unmute before
  unMute();
  -- retrieve volume
  getVolume();
  lastVolume = currentVolume;
  -- set tts volume if <> with current
  if (volume ~= nil and volume ~= currentVolume) then
  setVolume(volume);
  ttsVolumeIsDifferent = true;
  end
      
  play();
 
  end);
end

-- Globale Variabel abfragen & verwenden

if fibaro:getGlobalValue("Test") == "" then
  playMusic("Test", nil);
else
  playMusic(fibaro:getGlobalValue("Test"), nil);
end

fibaro:call(selfId, "setProperty", "ui.Label1.value", "Musik läuft..."); --Status Anzeige im VD Interface

Von mir kommen nur die beiden Variablen “Wochentag” und “Test” am Ende der beiden Button.

Vielen Dank.