Aller au contenu

Messages recommandés

Posté(e) (modifié)

Bonsoir,

 

Je viens de voir ceci : http://www.domotique-info.fr/2017/10/xiaomi-mi-smart-speaker-network/

 

 ou là :      XIAOMI Mi Wifi Network Speaker

 

 mi-wifi-network-speaker-600x404.jpg

 

 

domotique-info-img_20170901_205632-1024x

 

Pensez-vous que l'on peut faire l'utiliser comme SONOS , LMS ou squeezeBox  ?

 

Vu le prix , hyper cool si ça peut le faire ...

 

merci de vos retours

 

Minos

mi-wifi-network-speaker-600x404.jpg

Modifié par minos
modif
Posté(e)

Dans ton deuxième lien, j'ai pu lire ceci :

Citation

Si vous utilisez la solution LMS (Logitech Média Serveur) même chose, l’enceinte est compatible, dans ce cas il suffit simplement d’activer et de paramétrer le plugin DLNA, elle sera ensuite vue ensuite comme une platine.

 

Dans ce cas, tu pourras récupérer l'adresse MAC de la platine pour renseigner la valeur "local player" du code LUA (voir mon 1er post de ce topic)

Tu auras noté qu'il faut monter un serveur LMS (dans mon exemple sur un NAS)

 

Je ne pourrai pas en dire plus, n'ayant plus de box Fibaro

 

Posté(e)
Il y a 7 heures, i-magin a dit :

Tu auras noté qu'il faut monter un serveur LMS (dans mon exemple sur un NAS)

@i-magin

 

J 'ai un syno 415+...ça devrait le faire 

 

je vais encore étudier... sont fort ces chinois ...!!:74: 

 

merci de ton reour

  • Upvote 1
  • 10 mois après...
Posté(e) (modifié)

Bonjour,

 

J'ai enfin reussi a faire ce que je voulais, sans utiliser de plugin externe.

 

C'est une scene qui va lire la prochaine alarme endéans les 24h d'une squeezebox et demarre des actions de votre souhait.

l'avantage de celle-ci, c'est qu'il est possible de demarrer des actions un certain temps juste avant le reveil... tel chauffage dans la SDB :).  Dans le code qui suite j'ai cree un simulateur d'aube sur du RGBW

 

N'hesitez pas a me notifier de vos ameliorations de code.. ou de bugs

 

Ce code est donc composé d'un virualDevice (pour consulter la SqueezeBox) et d'une scène 

Voici le VirtualDevice:  SqueezeBox.vfib

 

sbDev.jpg.1a80cd29b6c1ac83189a74bdff6032bd.jpg

 

 

et specifiez l'IP du LMS (Serveur Logitech) et le port 9090

 

sb2.jpg.a089a95725d153c20cbd6ed059b98b70.jpg 

 

Dans le code de chaque bouton et le main loop, n'oubliez pas de modifier la variable PlayerMAC qui est la MACaddress de votre squeezebox :

 

sb3.jpg.7f929bae1f5821940249d9d899a5a548.jpg

 

 

Dans la partie Main Loop (tout en bas), vous pouvez modifier le pollingTime (Frequence de consultation de la Squeezzbox) dans la variable pollingTimeSec qui a la valeur de 10 (secondes).  

sb4.jpg.6ba417204eedba50a553b22f3d8057a8.jpg

 

 

 

 

Créez une nouvellle scene, dont voici le code :

--[[
%% autostart
%% properties
%% events
%% globals
--]]

local runTaskFrom = ""; -- empty string if running all the time
local runTaskTo = "";
local vdSqueezeboxId = 132;
local polltimeCheck = 60; --in minutes
local taskDuration = 0; -- in minutes  0 if nothing to do after task is done
local waitSBStopOFF = true;
local timeToStartBeforeSqueezeBox = 0; -- in minutes

local lightId = 16;

function task()
    fibaro:debug ("Running the task ");
    
    if waitSBStopOFF == true then
       fibaro:debug ("Waiting Squeezebox to start");
       while fibaro:getValue(vdSqueezeboxId, "ui.Status.value") ~= "Play" do
            fibaro:sleep(5000);
       end
    end
  
    StartDawn();
   
    if taskDuration > 0 or waitSBStopOFF == true then
       if taskDuration > 0 then
             fibaro:debug ("Waiting " .. math.floor(taskDuration) .. " minutes");
            fibaro:sleep ((taskDuration) * 60000 );
       end

       if waitSBStopOFF == true then
          fibaro:debug ("Waiting Squeezebox to stop");
          while fibaro:getValue(vdSqueezeboxId, "ui.Status.value") == "Play" do
             fibaro:sleep(5000);
          end
       end

       StopDawn();
    end
end

function StartDawn()
  local dawnDuration = 5; -- in minutes
  local dawnRGBW={{15,0,30,0}, {45,13,5,30}, {15,0,15,60}, {5,0,0,90}, {0,0,0,120}, {0,0,0,255}};
  local maxValueByStep={};
  local changeColor={};
  
  fibaro:call(lightId, "turnOff");
  fibaro:sleep(1000);
  
  local currentColor = split(fibaro:getValue(lightId, "color"),",");
  for k,v in ipairs(dawnRGBW) do
    maxValueByStep[k]=0;
    for i=1,4 do
      if (math.abs(v-currentColor) > maxValueByStep[k]) then 
         maxValueByStep[k] = math.abs(v-currentColor); 
      end;
    end
    currentColor = v;
  end
  
  --calculate time to wait for each color steps
  local totalChangeColors=0;
  for i,val in ipairs(maxValueByStep) do
   totalChangeColors = totalChangeColors + val;
  end
  local waitTime = math.floor(((dawnDuration*60*1000) / totalChangeColors) + 0.5);
  fibaro:debug(string.format("total change : %d steps in %d min = %dms by step",totalChangeColors, dawnDuration, waitTime));
  
  --let's go for changing the colors
  currentColor = split(fibaro:getValue(lightId, "color"),",");
  for k,v in ipairs(dawnRGBW) do
    fibaro:debug(string.format("%d sec in %d steps to go to %d %d %d %d",(waitTime/1000*maxValueByStep[k]), maxValueByStep[k], v[1],v[2],v[3],v[4]));
    for i=1,4 do
      changeColor = (v-currentColor)/ maxValueByStep[k];
    end

    for i=1, maxValueByStep[k] do
      for j=1,4 do
        currentColor[j] = currentColor[j]+changeColor[j];
      end
      
      local R = math.floor(currentColor[1] + 0.5);
      local G = math.floor(currentColor[2] + 0.5);
      local B = math.floor(currentColor[3] + 0.5);
      local W = math.floor(currentColor[4] + 0.5);
      fibaro:call(lightId, "setColor",R,G,B,W);
      local keepOn = true;
      if waitSBStopOFF == true and fibaro:getValue(vdSqueezeboxId, "ui.Status.value") ~= "Play" then
          keepOn = false;
      end
      
      if keepOn == false then return; end;
      fibaro:sleep(waitTime);
    end
  end  
end

function StopDawn()
   fibaro:call(lightId, "turnOff");
end   

function getTimeToWait(TimeToWaitStr)
  local startDate = os.date("*t");
  
  startDate.hour = tonumber(string.sub(TimeToWaitStr,1,2));
  startDate.min = tonumber(string.sub(TimeToWaitStr,4,5));
  startDate.sec = 0;

  if (os.time() >= os.time(startDate)) then
      startDate =  os.date("*t",os.time()+(24*60*60));
      startDate.hour = tonumber(string.sub(TimeToWaitStr,1,2));
      startDate.min = tonumber(string.sub(TimeToWaitStr,4,5));
      startDate.sec = 0;
  end
  return os.time(startDate)-os.time();
end 

function process ()
  --Wakeup time
  fibaro:debug("Starting Check ");
 
  local squeezeBoxNextAlarm = fibaro:getValue(vdSqueezeboxId, "ui.NextAlarm.value");  
  if squeezeBoxNextAlarm ~= nil and squeezeBoxNextAlarm ~= "" then
     fibaro:debug("Next alarm today at "..squeezeBoxNextAlarm);
     local hours = tonumber(string.sub(squeezeBoxNextAlarm,1,2));
     local minutes = tonumber(string.sub(squeezeBoxNextAlarm,4,5));
     local totalMinutes = (hours *60) + minutes;
      
     local timeToWait = getTimeToWait(squeezeBoxNextAlarm) - (timeToStartBeforeSqueezeBox *60);
     if timeToWait < (polltimeCheck *60) then 
        fibaro:debug("Waiting Alarm for " ..  math.floor(timeToWait/ 60) .. " minutes"); 
        fibaro:sleep (timeToWait * 1000);
        task ();
        return true;
     end     
  end
  return false;
end

------------------------
-- Main Code
------------------------
  
if fibaro:countScenes() > 1 then 
    fibaro:abort();
end 

local timeRange = false;
while true do
    if (runTaskFrom ~= "") then
        timeRange = true;
          local timeFrom = getTimeToWait(runTaskFrom);
        local timeTo = getTimeToWait(runTaskTo);
        if timeFrom < timeTo then  -- we are outside the range
            fibaro:debug ("Waiting for "..runTaskFrom);
              fibaro:sleep(timeFrom * 1000);
        end
    end
    
    if process() == false then
        fibaro:debug("Sleeping " ..  polltimeCheck .. " minutes"); 
        fibaro:sleep (polltimeCheck * 60000 );
    end
end

 


 

 

 

les parametres de la scene

 

vdSqueezeboxId = ID du VirtualDevice de la SqueezBox

 

runTaskFrom et runTaskTo : string des heures pendant lesquelles le process va consulter la Squeezebox (si parametres vide, le process va consulter cycliquement la SB tous les X minutes (param timeCheckCycle), ex "08:30" "16h47" (format 24h)

polltimeCheck : minute entre les consultations de la SB

taskDuration : minutes entre les actions à prendre en debut de reveil, et les actions de fin ( valeur 0 = pas d'actions de fin)

waitSBStopOFF : true s'il faut se synchroniser avec l'état de la Squeezebox  On/Off  ou que que le status est Stop (ni Play, ni Pause)

timeToStartBeforeSqueezeBox = délais en minutes pour déclencher les actions avant le réveil

 

 

Parametres de l'aube :

La fonction Dawn simule l'aube sur RGBW, avec comme parametre l'ID du device RGB.

le tableau dawnRGBW definit les etapes de couleurs.. 6 ici en l'occurence, que vous pouvez changer à votre guise ma simulation colorimetrique ne vous satisfait pas.  Le process va calculer la vitesse et les modifications pour chacune des couleurs et pour chacune des étapes en fonction du paramètre : dawnDuration qui specifie combien de minutes doit prendre l'éxecution de toutes les étapes.

 

 

Dans mon code ici, je me synchronise avec l'etat de la squeezebox, et demarre l'aube lorsque la squeezbox est en "play"...  si je stop le reveil pendand l'aube ou apres, il avorte l'execution et eteint le RGBW... par contre si vous mettez une valeur dans la duree de l'execution (taskDuration),  ce délais sera enclenché qu'apres avoir executé l'aube.  Donc si la durée d'exécution de l'aube est de 5 min, si vous coupez le reveil pendant l'exécution de celle-ci, le RGB s'eteindra, si vous le faites après, pendant cette attente... Elle ne s'eteindra une fois ce delais exécuté.

 

have fun

 

yves

Modifié par ygi
  • 3 semaines après...
Posté(e) (modifié)

rebonjour,

 

j'ai ammene une bonne modification a mon poste precedent... si vous l'aviez utilise.. veuillez prendre cette derniere mouture :)

 

belle journee

 

yves

Modifié par ygi
×
×
  • Créer...