Aller au contenu

jojo

Membres confirmés
  • Compteur de contenus

    14 837
  • Inscription

  • Dernière visite

  • Jours gagnés

    197

Tout ce qui a été posté par jojo

  1. jojo

    Pb De Scene Bloc Avec La Météo

    la case "Condition météo" (sous weather" doit être cochée
  2. jojo

    Support Gea

    si ta lampe ne se rallume pas tout de suite après une première détection, ce n'est parbablement pas un problème GEA (car il fait son job correctement àla première fois), mais un problème de paramétrage de ton détecteur. Quel détecteur as-tu ?
  3. jojo

    Pb De Scene Bloc Avec La Météo

    si tu nous donnais un exemple de ce que tu as essayé et qui ne fonctionne pas, on pourrait mieux t'aider
  4. jojo

    Debug Plugin Developer

    Gazous, Comme tu es en campagne électorale, tu seras "obligé" de me répondre Quelle est la différence entre un plugin et un virdual device ou une scène ?
  5. jojo

    Vous Avez Dit Waf?

    merci pour cette excellente tranche de bon humeur que tu viens de nous offrir, avec en plus des conseils concrets.
  6. jojo

    Variables Locales

    je pense que ce code ne peut pas fonctionner, car le nombre de paramètres attendus par la fonction ne correspond pas. J'essayerais qqch comme ceci : local groupeLampes = {37,39,57,48,58,56} for _,v inpairs(groupeLampes) do if (tonumber(fibaro:getValue(v, 'value'))) == 0 then fibaro:call(v,'turnOn') end end
  7. jojo

    Hc2 Monitoring

    ce script doit pouvoir fonctionner depuis n'importe quelle plateforme Linux, donc depuis un raspery, ...
  8. content pour toi que cela t'es utile. Mais il faut surtout remercier sebcbien, c'est lui qui est àla base du script, je n'ai fait que de lui rajouter de fonctionnalités supplémentaires
  9. Je vous ai proposé il y a peu un monitoring de votre Synology depuis la HC2 (http://www.domotique-fibaro.fr/index.php/topic/5682-synology-monitoring/) Je vous propose maintenant le contraire : monitorer votre HC2 depuis votre Synology. L'idée vient du fait que mon HC2 fonctionnait très bien, mais qu'il y avait un problème au câble réseau ... Pour le ping, un tout grand merci à Lazer, sans qui je n'y serais jamais arrivé. Pour la notification si la box est en erreur 503, merci à CaptainIgloo et samhuin pour cette partie de script. Pour la notification par mail depuis le synology, voici où je me suis inspiré : http://forum.synology.com/enu/viewtopic.php?f=32&t=79334 Fonctionnalités Ping de la box HC2/L depuis le Synology Vérification si pas de code erreur 503 Si erreur notification dans le Syno et envoie d'un mail Le script : IP=192.168.xxx.xxx TO="adresse.mail@a.notifier" HOST=$(/bin/hostname) /bin/ping -c 1 -w 10 ${IP} if [ $? -ne 0 ] then SUBJECT="HC2/L Ping error" BODY="La box HC2/L (${IP}) ne ping plus (test toutes les minutes).\n\nSynology DiskStation\n\nFrom ${HOST}" HEADERS="From: ${TO}" NOTIF="${SUBJECT} - ${IP}" /usr/bin/php -r "mail(\"${TO}\", \"${SUBJECT}\", \"${BODY}\", \"${HEADERS}\");" /usr/syno/bin/synodsmnotify "@administrators" "System Event" "${NOTIF}" fi URL="http://$IP/api/loginStatus" coderetour=`curl -I $URL 2>/dev/null | head -n 1 | cut -d' ' -f2` if [ "$coderetour" == "503" ] then echo "Code retour 503" SUBJECT="HC2/L 503 error" BODY="La box HC2/L (${IP}) retourne un code erreur 503. Evaluer si un redémarrage de la box est nécessaire.\n\nSynology DiskStation\n\nFrom ${HOST}" HEADERS="From: ${TO}" NOTIF="${SUBJECT} - ${IP}" /usr/bin/php -r "mail(\"${TO}\", \"${SUBJECT}\", \"${BODY}\", \"${HEADERS}\");" /usr/syno/bin/synodsmnotify "@administrators" "System Event" "${NOTIF}" # curl http://$IPHC/services/finishUpgradeAfterError.php else echo "Le code retour est " $coderetour fi Configuration du Synology : Si ce n'est pas fait, il faut configurer le Syno pour qu'il puisse envoyer des mails : Panneau de configuration -> Notifications Panneau de configuration -> Planificateur de tâches Créer -> Script défini par l'utilisateur Dans le champ "Script défini par l'utilisateur", coller le script ci-dessus (en mettant l'IP de la box et votre adresse mail dans les champ IP et TO Le champ "Utilisateur" doit être root (sinon le ping retourne une erreur, même si ping ok) Dans l'onglet" Programmer", planifier la fréquence d'exécution du script Préciser l'heure de dernière exécution à 23:59, car par défaut c'est 00:59. Pour vérifier que tout fonctionne bien, mettez une adresse IP non existante. Bonus : Dans le même ordre d'idée, j'ai fait un petit scrip "Keep Alive", pour vérifier une fois par jour que les mails, etc s'envoient correctement depuis mon Syno. Comme l'IP que je renseigne est celle du Syno, s'il m'envoie un mail comme quoi le Syno ne ping plus, c'est qui il a un autre problème. IP=192.168.xxx.xxx TO="adresse.mail@a.notifier" HOST=$(/bin/hostname) /bin/ping -c 1 -w 1 ${IP} if [ $? -ne 0 ] then SUBJECT="Keep alive error from ${HOST}" BODY="${IP} ne ping plus" HEADERS="From: ${TO}" /usr/bin/php -r "mail(\"${TO}\", \"${SUBJECT}\", \"${BODY}\", \"${HEADERS}\");" /usr/syno/bin/synodsmnotify "@administrators" "System Event" "${BODY}" else SUBJECT="Keep alive from ${HOST} ok" BODY="${IP} ping ok" HEADERS="From: ${TO}" /usr/bin/php -r "mail(\"${TO}\", \"${SUBJECT}\", \"${BODY}\", \"${HEADERS}\");" /usr/syno/bin/synodsmnotify "@administrators" "System Event" "${BODY}" fi
  10. jojo

    Domotique Store

    donc, ce n'était pas un spam ...
  11. jojo

    Domotique Store

    oui, j'en ai même reçu 2
  12. jojo

    Pertes De Paquets Hcl

    ou essaye une connection directe àun PC, pour être sûr à100% que cela vient de la HCL, et pas d'un autre équipement de ton réseau
  13. os.date("%a %d/%m/%Y", unixtime) http://www.lua.org/pil/22.1.html
  14. jojo

    Synology Monitoring

    oui, c'est une bonne idée à première vue, mais si tu as le même nom pour 2 devices (erreur ou test), cela risque de faire des erreurs. Ceci-dit, ça à l'avantage de ne pas devoir entrer le nom de la variable à la main dans chaque bouton du device. Au plus j'écris, au plus je trouve l'idée sympa. Qu'en pensez-vous ? Oui ? Non ?
  15. c'est bien le port 5000 que tu as renseigné ?il n'y a pas d'espaces ?
  16. @Moicphil, tu peux mettre un tuyau d'arrosage au dessus de ton pluviomètre pour simuler
  17. jojo

    Synology Monitoring

    en effet, j'avais identifié le "problème". Je devrais créer une variable dans le code qui donne le nom de la variable globale àutiliser (et créer). Ainsi on pourrait avoir plusieurs instances du VD. Je note cela dans ma to do liste
  18. avant de te chopper une remarque des admin, ne cite pas le message juste au dessus. pour appeler un device en lua : fibaro:call(<ID Device>, "pressButton", "<# bouton>") tu retrouves l'ID du device dans l'url lorque tu es en mode edit du device. Pour retrouver le n° du bouton, suis l'explication de Did dans la section "HC pour les nuls"
  19. tu as bien mis ce code dans un bouton d'un VD ?
  20. jojo

    Disparition Des Modules

    regarde dans ma signature
  21. "(cet automne pas avant)" Tu ne veux pas mettre la pression, mais l'automne c'est dans 5 jours ...
  22. Lazer, si j'ai bien lu, le net.HTTPClient() et le pendant du net.HTTP pour les VD mais pour les Scènes. Il ne permet pas de faire du https
  23. jojo

    Disparition Des Modules

    cherche sur le forum, il y a des solutions proposées qui se basent sur une connexion Wifi pour savoir si tu es chez toi ou pas
  24. Voici une petite modif du player (je j'ai déjà partagée, je ne sais plus où) et qui joue donc un MP3. La modif permet de ne pas interrompre après environ 30s. tu verras la variable locale (FilePath) avec le chemin d'accès vers le fichier mp3 à jouer en début de script. rien ne t’empêche de mettre cette info dans une variable globale, et de la rappeler. ------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------- -- SONOS Play stream... -- Copyright © 2014 Jean-Christophe Vermandé ------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------- ---------------------------------- -- User Settings ---------------------------------- ip = "192.168.xxx.xxx" port = 1400 FilePath = "//HPDS3615xs/music/iTunes/Sons/PoliceInformee.mp3" FileVol = 100 -- le fichier mp3 doit être dans la bibliothèque Sonos -- pour générer des MP3 : http://text2speech.us/# PlayUnlimited = "Yes" -- si <> Yes, arrêt après 30s environ ---------------------------------- -- DO not change bellow this line ---------------------------------- selfId = fibaro:getSelfId(); --ip = fibaro:get(selfId, 'IPAddress'); --port = fibaro:get(selfId, 'TCPPort') or 1400; 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) 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 > 10) then break end; getTransportState(); fibaro:debug(currentTransportState); fibaro:sleep(5000); n = n + 1; end local i = 0; currentTransportState = "PLAYING"; while (currentTransportState == "PLAYING") do if (i > 10 and PlayUnlimited ~= "Yes") then break end; getTransportState(); fibaro:debug(currentTransportState); fibaro:sleep(2000); i = i + 1; end fibaro:sleep(1000); 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) 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(); end); end -- en paramètres: le fichier, puis le volume... playFile(FilePath, FileVol);
  25. jojo

    Je Vais Pas Tarder A Tout Jeter

    Dans ma signature, tu verras 2 outils de backup (et restore) des variables et panneaux de chauffage
×
×
  • Créer...