Aller au contenu

Krikroff

Modérateurs
  • Compteur de contenus

    6 719
  • Inscription

  • Dernière visite

  • Jours gagnés

    128

Tout ce qui a été posté par Krikroff

  1. Krikroff

    Script Php

    Peut^-être que le php que tu utilises ne gère pas toute les données, même si c'est la cas c'est facilement contournable en te basant sur le code pour le bruit et l'humidité
  2. oui j'ai retrouvé le sujet ... je viens de tester le code suivant et tout marche bien chez moi ------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------- -- SONOS Play stream... -- Copyright © 2014 Jean-Christophe Vermandé ------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------- local selfId = fibaro:getSelfId(); local ip = fibaro:get(selfId, 'IPAddress'); local port = fibaro:get(selfId, 'TCPPort') or 1400; local currentTransportState = ""; local lastTransportState = ""; local currentVolume = 0; local lastVolume = 0; local 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) if (duration ~= nil) then fibaro:debug("play sent for " .. duration .. " seconds"); fibaro:sleep(duration); stop(); else fibaro:debug("play sent"); local n = 0; currentTransportState = "TRANSITIONING"; while (currentTransportState == "TRANSITIONING") do if (n > 15) then break end; getTransportState(); fibaro:debug(currentTransportState); fibaro:sleep(6000); n = n + 1; end local i = 0; currentTransportState = "PLAYING"; while (currentTransportState == "PLAYING") do getTransportState(); fibaro:debug(currentTransportState); fibaro:sleep(3000); end fibaro:sleep(500); stop(); end -- update volume with value before tts if different if (ttsVolumeIsDifferent == true) then setVolume(lastVolume); ttsVolumeIsDifferent = false; end 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 playFile= function(file, volume) file = urlencode(file); 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:" .. file .. "</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 play(); end ); end -- en paramètres: le fichier, puis le volume... playFile("//HOME-SERVER/Musique/CD/Dream Theater/A Change of Seasons/01-A Change of Seasons [Medley].flac", 10); As-tu vérifié de ton côté si ton fichier est joignable et lisible depuis par exemple VLC player ?
  3. Je pense qu'il manque un bout dans ton copier/coller non ? Mais au fait le code du playFile sort d’où ?
  4. playFile(urlEncode("//Home_synology/Volume 1/music/Locked Out of Heaven - Bruno Mars.m4a"), 20); Cela devrait faire l'affaire
  5. Oui il me semble bien que Domadoo était sur le coup au CES, moi perso ce sont les thermostats que je trouve top !!! edit: c'est ici -> http://blog.domadoo.fr/2014/01/08/mcohome-technology-presente-des-peripheriques-z-wave-tres-designs/ mais bon visiblement toujours pas de news
  6. Krikroff

    Script Php

    Rien ne me saute aux yeux ! Et lorsque tu appelles l'url /Web_Scripts/netatmo.php?intext=int depuis ton navigateur web ?
  7. pour encoder l'url voici la metode: function urlEncode(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
  8. Bah non pas d'erreur Steven local sensors = {43, 37, 42, 45, 46, 44} -- i pour index (ici table avec indexes numériques), v pour valeur for i, v in ipairs (sensors) do fibaro:debug("Le volet ID"..v.." va s\'ouvrir"); end Dans le cadre d'un tableau avec indexes numériques et ou alphabétiques il faut utiliser pairs -- k pour clé (key) et v pour valeur for k, v in pairs (sensors) do fibaro:debug("Le volet ID"..v.." va s\'ouvrir"); end
  9. Oui et le plus dingue dans l'histoire c'est qu'un St814 a la sauce Fibaro serait un best seller [emoji15]
  10. C'est le message d'erreur dans le debug ? Est-ce que le fichier est accessible si tu colles le lien dans vmc par exemple ? J'ai un doute mais il est possible que cela vienne du non encodage du chemin complet du fichier il faut que je Check cela [emoji6]
  11. En gros 90mm x 90mm pour les côtés et 35mm de profondeur... Le bloc piles prend beaucoup de place mais même sans celui ci le ST814 est trop gros pour rentrer dans une boîte d'encadrement classique !!! Gros, moche et sans complexe car seul sur le marché [emoji16]
  12. Heureusement sinon j'étais mal [emoji16][emoji16][emoji16]
  13. Krikroff

    Débuter En Domotique

    Tu vas déjàbien t'amuser avec un RPi + clé z-wave tout en te familiarisant avec la Domotique et ce qu'elle peut t'apporter [emoji4]. Attention tout de même car ce type de solution peut aussi avoir l'effet inverse et tirer définitivement un trait sur la Domotique... Donc... Persévérance dans tous les cas [emoji1]
  14. Super tu vas pouvoir avancer [emoji6]
  15. Tu peux essayer avec ceci: local vol = 50; fibaro:setGlobal("SonosLastCmd", tostring(fibaro:getGlobalValue("SonosLastCmd").."VOL"..vol.." ")); ?
  16. Krikroff

    Bonjour

    Bonjour et bienvenue
  17. Bonjour et bienvenue [emoji5]ï¸
  18. Il me semble que c'est la bonne, il faut peut une charge dessus... Logiquement il y a un mouvement du moteur lorsque le module Reset puis il fait débrancher de suite ...
  19. Krikroff

    V3.903 Alpha

    @Pilou87, pour sencha touch pas de problème [emoji6] j'ai développé une bonne partie des BO de mon groupe sous EXTJS [emoji12] mais je trouve que sencha touch n'est pas encore suffisamment aboutit, pour les devs je préfère encore angularjs notamment et le reste àla mano sauf pour du corporate ou sencha-touch excelle [emoji4]
  20. Non le debug "start script" n'apparaît que lors de la première exécution, après il reste en mémoire et ce n'est plus le scheduler du HC2 mais bien la scène elle même qui gère la tâche Il t a un debug si il y a un nœud mort détecté [emoji4]
  21. Krikroff

    My Batteries

    Ah !!! Toujours une longueur d'avance le Steven [emoji16][emoji16][emoji16].
  22. Bonne nouvelle [emoji2]... Il faut aussi remettre àjour l'app ios qui plante parfois avec la version alpha mais c'est pas le sujet.
  23. Krikroff

    V3.903 Alpha

    @Nico, le HCLite disons que c'est juste pour le fun [emoji12] et il servira lorsque l'étage de ma maison sera terminé ou peut-être déporté dans le future garage étendre la portée àl'extérieur. @Pilou87, cool l'installation bravo [emoji6], je suis persuadé que ton expérience nous sera profitable a tous [emoji2]. Vivement la 3.904 alpha en espérant que tous les bugs bloquants seront résolus et que nous pourrons passer rapidement sur la bêta...
  24. Oui c'est une chance pour toi, moi c'est en moyenne 3/4 changements de piles par ans et par tête [emoji19]
×
×
  • Créer...