Aller au contenu
fredokl

Quick App - Monitoring Serveur NAS Synology

Recommended Posts

Quick App - Monitoring Nas Synology

Je vous propose un QA pour le monitoring de la HC3.

Ce QA a été encore une fois réalisé avec l'aide de mon neveu (et oui je suis en train de la convertir:2:).

Il peut certainement être optimisé mais il fait le job. Je n'ai pas rencontré de bug.

Vous pouvez le modifier et l'améliorer à votre guise.

Il a les mêmes fonctions que celui de la HC2 dont on s'est largement inspiré.

Utilisation :
--      Créer deux variables "IPAddress" & "TCPPort"
--      Renseigner votre "LOGIN" et votre "PASSWORD"
--      Pour la fonction WOL, utiliser le QA WOL de Fibaro et appellé-le avec la commande:
--          ==> fibaro.call(ID, "turnOn")

 

EDIT: Voir le Header

EDIT: Nouvelle version du QuickApp - Monitoring Nas Synology. Ajout des boutons pour l'éjection des disques durs connectés en USB sur les NAS. J'ai ajouté 4 boutons. Je pense que cela sera suffisant. Pour en ajouter d'autres, il suffit de suivre les commentaires dans la partie "FONCTION EJECT USB" du code. Les boutons se nomment USB Disk 1 à 4.

677419373_QA_SERVEURNAS_Detail_USB.png.543f849f677db1533d1ce31387e71619.png

Lorsque l'un des disques est déconnecté, les boutons se déplacent vers la gauche ( USB Disk 1 / USB Disk 2/ USB Disk 3/ No Disk ==> On élève le USB Disk 2 ==> / USB Disk 1 / USB Disk 3/ No Disk / No Disk).

Je n'ai pas rencontré de bug.

1685756474_QA_SERVEURNAS.thumb.png.40c0a0cb73868bf3cbcb71b1d473bff1.png

 

Le code:

-- QuickApp Monitoring Nas Synology pour Fibaro HC3
-- Generic device type have no default actions to handle
-- HISTORIQUE
-- Adapté de https://www.domotique-fibaro.fr/topic/5682-synology-monitoring/
-- v2.4 (29/08/2015 - jojo) : première version
--                            merci à Krikroff, Lazer, Steven, mprinfo, FDP2
-- v2.41 (02/09/2015 - jojo) : slider pour double click
-- V1.0 (14/05/2020) pour Home Center 3 par fredokl et Maxime pour le site www.domotique-fibaro.fr
-- V1.1 (15/05/2020) pour Home Center 3 par fredokl et Maxime pour le site www.domotique-fibaro.fr
--      Ajout du push pour avertir que le serveur n'est plus connecté. Ligne 409 de ce code
-- V1.2 (27/05/2020) pour Home Center 3 par fredokl et Maxime pour le site www.domotique-fibaro.fr
--      Transformation du QA en "com.fibaro.genericDevice" à la place de "Commutateur binaire"
--      Ajout des icônes "serveur allumé" et "serveur éteint"
-- V1.3 (29/05/2020) pour Home Center 3 par fredokl et Maxime pour le site www.domotique-fibaro.fr
--      Ajout des boutons "Eject Disk"
--      Changement rafraîchissement automatique (toute les minutes ==> Check tout le NAS et toutes les 10 secondes ==> Check les Disk USB)
--      Améliorations du code
-- Lien topic: https://www.domotique-fibaro.fr/topic/14308-quick-app-monitoring-serveur-nas-synology/
-- Utilisation:
--      La connexion au NAS se fait par HTTP
--      Créer deux variables "IPAddress" & "TCPPort"
--      Renseigner votre "LOGIN" et votre "PASSWORD"
--      Pour la fonction WOL, utiliser le QA WOL de Fibaro et appellé-le avec la commande:
--          ==> fibaro.call(ID, "turnOn")
-- Vous pouvez le modifier et l'améliorer à votre guise.
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
--                              PARAMÈTRES UTILISATEUR                                    --
-------------------------------------------------------------------------------------------
-- System variables
function QuickApp:onInit()
__TAG = "QA_"..plugin.mainDeviceId.."_DS 416 PLAY"
self:trace("==========================================")
self:debug("onInit")
-- User configurable variables
self.login = "login"  -- votre login DSM
self.password = "Password" -- votre mot de psse DSM
self.ip = self:getVariable('IPAddress'); 
self.port = self:getVariable('TCPPort');
self.http = net.HTTPClient({ timeout = 10000 })
self.diskusblistid = {}
self.diskusblistname = {}
self.API_AUTH_ERROR_CODE = {
    [0] = "Sans erreur.",
    [100] = "Erreur inconnue.",
    [101] = "Compte non spécifié.",
    [400] = "Mot de passe invalide.",
    [401] = "Compte désactivé.",
    [402] = "Permission refusée.",
    [403] = "Unique mot de passe non spécifié.",
    [404] = "Autentification erronée."
};
self.API_RECORD_ERROR_CODE = {
    [400] = "Exécution ratée.",
};
self.nbmsg = 0
self.timerOn = false
self.isCheckin = false
self.nbCheck = 0
self:autoCheck()
end
--------------------------------------------------------------------------------------  
-- WAKE ON LAN
--------------------------------------------------------------------------------------                  
function QuickApp:uiWoLOnR()
    fibaro.call(47, "turnOn")
end
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
--                      == NE RIEN MODIFIER À PARTIR D'ICI ==
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
-- FONCTION GETRequest: Connexion GET
--------------------------------------------------------------------------------------
function QuickApp:GETRequest(payload, callBack)
--self:trace("Commande GETRequest")
    local url = "http://" ..self.ip ..":" ..self.port ..payload
    self.http:request(url, 
    {
        options= {
            headers= {
            ["Connection"] = "keep-alive",
            ["Accept"] = "application/json"
            },
            method = "GET"
        },
        success = function(response)
        self.nbmsg = self.nbmsg + 1
           if callBack then callBack(response.data) end
        end,
        error = function(message)
            self:trace("error:" ..json.encode(message))
            self.nbmsg = 0
            self.timerOn = false
        end
    })
end
--------------------------------------------------------------------------------------
-- FONCTION EJECT USB
--------------------------------------------------------------------------------------
-- Refresh USB Disk
function QuickApp:refreshUSBdisk()
        payload = "/webapi"..self.cgiUsed_sys.."?api="..self.apiStorage_usb.."&version=1&method=list&_sid="..self.SID;
        self:GETRequest(payload, function(data)
        jsonTable = json.decode(data);
            if jsonTable.success == true then
                local devices = jsonTable.data.devices
                self.diskusblistid = {}
                self.diskusblistname = {}
                for k,v in pairs(devices) do
                    table.insert(self.diskusblistid, v.dev_id)
                    table.insert(self.diskusblistname, v.dev_title)
                end
                self:trace("refreshUSBdisk")
                self:updateView("btn6", "text", self:getDiskName(self.diskusblistname[1])) -- Pour ajouter des boutons copier la ligne puis
                self:updateView("btn7", "text", self:getDiskName(self.diskusblistname[2])) -- changer les id pour ajouter des disks.
                self:updateView("btn8", "text", self:getDiskName(self.diskusblistname[3])) -- Pour supprimer un boutons ==> supprimer une ligne
                self:updateView("btn9", "text", self:getDiskName(self.diskusblistname[4]))
                --self:updateView("btn10", "text", self:getDiskName(self.diskusblistname[5])) -- Exemple bouton en plus
                self:trace("==========================================")
            end
end)     
end
-- Eject USB Disk en fonction du diskID et refresh juste après
function QuickApp:ejectUSBdisk(diskID)
        payload = "/webapi"..self.cgiUsed_sys.."?api="..self.apiStorage_usb.."&version=1&method=eject&dev_id="..diskID.."&_sid="..self.SID;
        self:GETRequest(payload, function(data)
        jsonTable = json.decode(data);
            if jsonTable.success == true then
            self:trace("==========================================")
            self:trace("Disk: "..diskID.." éjecté")
            self:refreshUSBdisk()
            end
        end)
end
-- Affiche des noms sur les boutons
function QuickApp:getDiskName(text)
        local res= "No Disk "
        if text then res = text end
        return res
end
-- Eject Disk vérification présence disk
function QuickApp:ejectDisk(numero)
        local diskID = self.diskusblistid[numero]
        if diskID then
            self:CheckConnect(
            function()
                if self.isCheckin == false then
                    self.isCheckin = true
                    self:DoAction(function () self:ejectUSBdisk(diskID) end, 2)
                end
            end)
        end
end
-- Boutons Eject Disk
function QuickApp:uiEject1OnP(event) self:ejectDisk(1) end
function QuickApp:uiEject2OnP(event) self:ejectDisk(2) end
function QuickApp:uiEject3OnP(event) self:ejectDisk(3) end
function QuickApp:uiEject4OnP(event) self:ejectDisk(4) end
--function QuickApp:uiEject5OnP(event) self:ejectDisk(5) end -- Ajouter ligne pour commande bouton
--------------------------------------------------------------------------------------
-- AUTHORISATION CONNEXION NAS
--------------------------------------------------------------------------------------
function QuickApp:DoAction(action, nbmsgtotal)
--self:trace("Test avant ok connected")
        self.timerOn = true
        -- API & informations disponibles
        payload = "/webapi/query.cgi?api=SYNO.API.Info&method=Query&version=1&query=SYNO.API.Auth"
        self:GETRequest(payload,
        function (data)
            jsonTable = json.decode(data)
            self.version = jsonTable.data["SYNO.API.Auth"].maxVersion
            if self.version >= 2 then
                self:trace("Version API Synology OK")
                self.pathAuth = jsonTable.data["SYNO.API.Auth"].path
                self.cgiUsed_cpu_mem = "/entry.cgi"
                self.cgiUsed_sys= self.cgiUsed_cpu_mem
                self.cgiUsed_temp = self.cgiUsed_cpu_mem
                self.cgiUsed_vols = self.cgiUsed_cpu_mem
                self.apiUsed_cpu_mem = "SYNO.Core.System.Utilization"
                self.apiUsed_temp_system = "SYNO.Core.System"
                self.apiUsed_sys= self.apiUsed_temp_system;
                self.apiUsed_temp_disk = self.apiUsed_temp_system
                self.apiUsed_vols = self.apiUsed_temp_system
                self.apiMethod_cpu_mem="get"
                self.apiMethod_temp = "info"
                self.apiMethod_vols = self.apiMethod_temp
                self.apiStorage_usb= "SYNO.Core.ExternalDevice.Storage.USB"
                if self.version < 6 then
                    self.cgiUsed_cpu_mem = "/dsm/system_loading.cgi"
                    self.cgiUsed_sys="/dsm/system.cgi";
                    self.cgiUsed_temp = "/dsm/info.cgi"
                    self.cgiUsed_vols = "/dsm/volume.cgi"
                    self.apiUsed_cpu_mem = "SYNO.DSM.SystemLoading"
                    self.apiUsed_temp_system = "SYNO.DSM.Info"
                    self.apiUsed_temp_disk = ""
                    self.apiUsed_vols = "SYNO.DSM.Volume"
                    self.apiMethod_cpu_mem = "getinfo"
                    self.apiMethod_temp = self.apiMethod_cpu_mem
                    self.apiMethod_vols = "list"
                    self.apiUsed_sys="SYNO.DSM.System";
                end
            end
            self:GetSid_Send(action)
            self:timer(nbmsgtotal + 2)
        end)
end
--------------------------------------------------------------------------------------
-- FONCTION GetInfo: RÉCUPÉRATION DES DONNÉES
--------------------------------------------------------------------------------------
function QuickApp:GetInfo(onlyDisk)
self.timercount = 1000
if onlyDisk == false then
                    -- CPU info du DSM
                    payload = "/webapi"..self.cgiUsed_cpu_mem.."?api="..self.apiUsed_cpu_mem.."&version=1&method="..self.apiMethod_cpu_mem.."&type=current&_sid="..self.SID;
                    self:GETRequest(payload,
                    function (data)
                        jsonTable = json.decode(data);
                        if jsonTable.success == true then
                            info_cpu = jsonTable.data.cpu;
                            load_mem = jsonTable.data.memory.real_usage;
                            self:trace("Memory: "..load_mem.."%");
                            info_cpu_memory = "Memory: "..load_mem.."% ";
                            load_cpu = 0;
                            if (self.version < 6) then
                                load_cpu = info_cpu.user*100;
                            else
                                load_cpu = info_cpu.other_load+info_cpu.system_load+info_cpu.user_load;
                            end
                            self:trace("CPU: "..load_cpu.."%")
                            info_cpu_memory = info_cpu_memory.."CPU: "..load_cpu.."%";
                            self:updateView("lbl3", "text", "Memoire: " ..load_mem .."% " .."CPU: " ..load_cpu .."%")
                            self:trace("==========================================")
                        end
                    end)

                    -- Info Température Système info du DSM
                    payload = "/webapi"..self.cgiUsed_temp.."?api="..self.apiUsed_temp_system.."&version=1&method="..self.apiMethod_temp.."&_sid="..self.SID;
                    self:GETRequest(payload,
                    function (data)
                        jsonTable = json.decode(data);
                        if jsonTable.success == true then
                            if jsonTable.data.sys_temp ~= nil then
                                temp_system = "Température du Système: " ..jsonTable.data.sys_temp.."°C";
                            else
                                temp_system = "Système: N/A";
                            end
                            self:trace(temp_system);
                            self:updateView("lbl4", "text", temp_system)
                        end
                    end)

                    -- Info Température des disques
                    -- Prépare string
                    temp_disks = "";

                    payload = "/webapi"..self.cgiUsed_temp.."?api="..self.apiUsed_temp_disk.."&version=2&method="..self.apiMethod_temp.."&type=storage&_sid="..self.SID;
                    self:GETRequest(payload,
                    function (data)
                        jsonTable = json.decode(data);
                        if jsonTable.success == true then
                            local disk_tab = jsonTable.data.hdd_info;
                            for nb = 1, #disk_tab do
                                temp_disks = temp_disks..disk_tab[nb].diskno..": "..disk_tab[nb].temp.."°C ";
                            end
                            self:trace("Température des Disques: "..temp_disks);
                            self:updateView("lbl5", "text", temp_disks)
                        end
                    end)

                    -- Info taille des disques
                    -- Prépare string
                    vols_load = "";

                    payload = "/webapi"..self.cgiUsed_vols.."?api="..self.apiUsed_vols.."&version=1&method="..self.apiMethod_vols.."&type=storage&_sid="..self.SID;
                    self:GETRequest(payload,
                    function (data)
                        jsonTable = json.decode(data);
                        if jsonTable.success == true then
                            local vols_tab = jsonTable.data.vol_info;
                            for nb = #vols_tab, 1, -1 do
                                used_size_vol = vols_tab[nb].used_size;
                                total_size_vol = vols_tab[nb].total_size;
                                occupied_size = self:round(used_size_vol / total_size_vol * 100);
                                vols_load = vols_load..vols_tab[nb].name..": "..occupied_size.."% ";
                            end
                            self:trace("Taille des Volumes: "..vols_load);
                            self:updateView("lbl6", "text", vols_load)
                        end
                    end)
end

                    --Refresh button disk
                    self:refreshUSBdisk()

                    -- Affichage IP Serveur
                    self:trace("IP Serveur ", "Serveur connecté: " ..self.ip ..":" ..self.port)
                    self:updateView("lbl1", "text", "Serveur connecté: " ..self.ip ..":" ..self.port)
end
--------------------------------------------------------------------------------------
-- FONCTION POUR ARRONDIR LES POURCENTAGES
--------------------------------------------------------------------------------------
function QuickApp:round(num)
     local a = math.floor(num*100 + 0.5)/ 100;
     return a,string.format("%.2f",a);
end
--------------------------------------------------------------------------------------
-- DÉCONNEXION
--------------------------------------------------------------------------------------
function QuickApp:Disconnect()
payload = "/webapi/"..self.pathAuth.."?api=SYNO.API.Auth&method=Logout&version=2&session=DSM&_sid="..self.SID;
self:GETRequest(payload, function()end);
end
--------------------------------------------------------------------------------------
-- TIMER
--------------------------------------------------------------------------------------
function QuickApp:timer(nbmsgtotal)
if self.timerOn then
    if self.nbmsg < nbmsgtotal then fibaro.setTimeout(2000, function() self:timer(nbmsgtotal) end)
    else
    self:Disconnect()
    self.nbmsg = 0
    self.timerOn = false
    self.isCheckin = false
    end
end
end
--------------------------------------------------------------------------------------
-- REFRESH
--------------------------------------------------------------------------------------
function QuickApp:autoCheck()
self.nbCheck = self.nbCheck + 1
if self.nbCheck%6 == 0 or self.nbCheck == 1 then
    onlyDisk = false
    nbOperation = 5
else
    onlyDisk =  true
    nbOperation = 1
end
self:CheckAll(onlyDisk, nbOperation)
fibaro.setTimeout(1000*10, function() self:autoCheck() end) --10 secondes
end
--------------------------------------------------------------------------------------
-- VÉRIFICATION DE TOUS LES ÉLÉMENTS
--------------------------------------------------------------------------------------
function QuickApp:CheckAll(onlyDisk, nbOperation)
    self:CheckConnect(
    function()
        if self.isCheckin == false then
            self.isCheckin = true
            self:DoAction(function () self:GetInfo(onlyDisk) end, nbOperation)
        end
    end)
    
    heure = os.date("%H:%M:%S")
    date = os.date("%d/%m")
    dateheure = string.format(" %s à %s", date, heure)
    self:updateView("lbl7", "text", "Dernière vérification: "..dateheure)
end
--------------------------------------------------------------------------------------
-- CRÉATION D'UN NOUVEAU SID ET ENVOI DES COMMANDES
--------------------------------------------------------------------------------------
function QuickApp:GetSid_Send(callBack)
    payload = "/webapi/"..self.pathAuth.."?api=SYNO.API.Auth&method=Login&version=2&account="..self.login.."&passwd="..self.password.."&session=DSM&format=sid";
    self:GETRequest(payload,
    function (data)
        jsonTable = json.decode(data);
        if jsonTable.success == true then
            self.SID = jsonTable.data.sid;
            callBack()
        end      
    end)
end
--------------------------------------------------------------------------------------
-- BOUTON RAFRAÎCHISSEMENT
--------------------------------------------------------------------------------------
function QuickApp:uiCheckOnR(event)
self:CheckAll(false, 5)
end

-- Check Connect
function QuickApp:CheckConnect(callBack)
self.tcp = net.TCPSocket({timeout = 1000})
self.tcp:connect(self.ip, tonumber(self.port),
{
    success = function()
        self:trace("Check Connect OK")
        self:updateView("lbl2", "text", "Serveur: Allumé")
        fibaro.setGlobalVariable("Syno_Status1", "1")
        self:updateProperty("deviceIcon", 1042) -- Mettre ici le code pour l'icone allumé
        self.tcp:close()
        if callBack then callBack() end
    end,
    error = function(message)
        self:trace("erreur " ..message)
        self:updateProperty("deviceIcon", 1043) -- mettre ici le code pour l'icone éteint
        self:updateView("lbl1", "text", "Serveur connecté: N/A")
        self:updateView("lbl2", "text", "Serveur: Éteint")
        self:updateView("lbl3", "text", "Mémoire: N/A")
        self:updateView("lbl4", "text", "Température Système: NA")
        self:updateView("lbl5", "text", "Température diques: N/A")
        self:updateView("lbl6", "text", "Volume des disques: N/A")
        fibaro.setGlobalVariable("Syno_Status1", "0")
--------------------------------------------------------------------------------------  
-- ENVOI PUSH TOUTES LES DIX MINUTES
--------------------------------------------------------------------------------------
        if self.nbCheck%60 == 0 then fibaro.alert("push", {26}, "NAS Synology DS 416 Play est éteint: " ..os.date("%H:%M:%S")) end
    end
})
end
--------------------------------------------------------------------------------------
-- REDÉMARRAGE DU DISK STATION
--------------------------------------------------------------------------------------
-- Bouton Reboot
function QuickApp:uiRebootOnP(event)
    self:CheckConnect(
    function()
        if self.isCheckin == false then
            self.isCheckin = true
            self:DoAction(function () self:Reboot() end, 1)
        end
    end)
end
-- Code Reboot
function QuickApp:Reboot()
                payload = "/webapi"..self.cgiUsed_sys.."?api="..self.apiUsed_sys.."&version=1&method=reboot&_sid="..self.SID;
                self:GETRequest(payload, function(data)
                    jsonTable = json.decode(data);
                    if jsonTable.success == true then
                        self:trace("Redémarrage Disk Station Synology OK");
                    end
end)
end
--------------------------------------------------------------------------------------
-- ARRÊT DU DISK STATION
--------------------------------------------------------------------------------------
-- ShutDown the disk station
function QuickApp:uiShutdownOnP(event)
    self:CheckConnect(
    function()
        if self.isCheckin == false then
            self.isCheckin = true
            self:DoAction(function () self:ShutDown() end, 1)
        end
    end)
end

function QuickApp:ShutDown()
                payload = "/webapi"..self.cgiUsed_sys.."?api="..self.apiUsed_sys.."&version=1&method=shutdown&_sid="..self.SID;
                self:GETRequest(payload, function(data)
                jsonTable = json.decode(data);
                if jsonTable.success == true then
                    self:trace("Le Disk Station s'est arrêté");
                end
end)
end
--------------------------------------------------------------------------------------
--                                     FIN DU CODE                                  --
--------------------------------------------------------------------------------------

QuickApp:

QA-NAS_Synology.fqa

 

Icônes:

Synology.DS416Play.png.9b85cce9ac5a961a2a53bafdeedaea10.pngSynology.DS416Play_On.png.433348030b3bea3274efaebfedd51ac2.pngSynology.DS416Play_Off.png.19ad4d6436439230dc44c381fd10d0a6.png

Modifié par fredokl
  • Like 6
  • Thanks 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Super merci un QA de moins à faire

Envoyé de mon BLA-L29 en utilisant Tapatalk

  • Haha 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut les amis, les QA ne sont implémentables que sur la HC3 ?

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Le QA c'est HC3 et le VD c'est HC2
Beaucoup de QA partagé ici sont des VD réécrit à partir de VD hc2

Envoyé de mon BLA-L29 en utilisant Tapatalk

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

tu pourrais ajouter un bouton pour éjecter un HDD connecté en USB sur le SYNO ? 

ce serait vraiment super :D

Partager ce message


Lien à poster
Partager sur d’autres sites

Et le stp merci ?

Envoyé de mon BLA-L29 en utilisant Tapatalk

  • Haha 1

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 26 minutes, mprinfo a dit :

Et le stp merci ? emoji16.png

punaise oui désolé s'il te plaît  :D

  • Like 1
  • Haha 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Je plaisante

Envoyé de mon BLA-L29 en utilisant Tapatalk

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

@jjacques68 QA modifié avec l'ajout de l'éjection de HDD. Sujet mis à jour plus haut.

Partager ce message


Lien à poster
Partager sur d’autres sites

:60: superbe !!

 

alors je viens de l'installer...

 

et ça bloque à partir d'un moment

 

[30.05.2020] [18:34:50] [TRACE] [QA_598_DS 416 PLAY]: ==========================================
[30.05.2020] [18:34:51] [DEBUG] [QA_598_DS 416 PLAY]: onInit
[30.05.2020] [18:34:51] [TRACE] [QA_598_DS 416 PLAY]: Check Connect OK
[30.05.2020] [18:34:52] [TRACE] [QA_598_DS 416 PLAY]: Version API Synology OK
[30.05.2020] [18:34:54] [TRACE] [QA_598_DS 416 PLAY]: IP Serveur Serveur connecté: 192.168.2.13:4501
[30.05.2020] [18:35:01] [TRACE] [QA_598_DS 416 PLAY]: Check Connect OK
[30.05.2020] [18:35:03] [TRACE] [QA_598_DS 416 PLAY]: Memory: 34%
[30.05.2020] [18:35:03] [TRACE] [QA_598_DS 416 PLAY]: CPU: 100%
[30.05.2020] [18:35:03] [TRACE] [QA_598_DS 416 PLAY]: ==========================================
[30.05.2020] [18:35:04] [TRACE] [QA_598_DS 416 PLAY]: error:"Operation canceled"
[30.05.2020] [18:35:04] [TRACE] [QA_598_DS 416 PLAY]: error:"Operation canceled"
[30.05.2020] [18:35:04] [TRACE] [QA_598_DS 416 PLAY]: error:"Operation canceled"
[30.05.2020] [18:35:04] [TRACE] [QA_598_DS 416 PLAY]: error:"Operation canceled"

suis entrain de voir...

 

PS : j'ai un rack station RS214, pas un DS 416, j'espère que le problème vient pas de là...

 

Partager ce message


Lien à poster
Partager sur d’autres sites

en fait c'est assez étrange, j'ai l'impression que le NAS met trop de temps à répondre... et que les questions viennent trop vite...

parce que quand je fais des reboot du QA, une fois sur 3 tout passe nickel (pas les disk USB, là j'ai rien...) !!

Partager ce message


Lien à poster
Partager sur d’autres sites

Moi aucun soucis dsm sous esxi xpenology

Tu as essayé avec un time out dans http

Envoyé de mon BLA-L29 en utilisant Tapatalk

 

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut. Aucun souci aussi. j'ai un DS416Play et un XPEnology.

Partager ce message


Lien à poster
Partager sur d’autres sites

mouais j'ai essayé, c'est mieux mais voilà : 

 

[30.05.2020] [19:45:05] [DEBUG] [QA_598_DS 416 PLAY]: onInit
[30.05.2020] [19:45:05] [TRACE] [QA_598_DS 416 PLAY]: Check Connect OK
[30.05.2020] [19:45:07] [TRACE] [QA_598_DS 416 PLAY]: Version API Synology OK
[30.05.2020] [19:45:09] [TRACE] [QA_598_DS 416 PLAY]: IP Serveur Serveur connecté: 192.168.2.13:4501
[30.05.2020] [19:45:17] [TRACE] [QA_598_DS 416 PLAY]: Memory: 34%
[30.05.2020] [19:45:17] [TRACE] [QA_598_DS 416 PLAY]: CPU: 61%
[30.05.2020] [19:45:17] [TRACE] [QA_598_DS 416 PLAY]: ==========================================
[30.05.2020] [19:45:18] [TRACE] [QA_598_DS 416 PLAY]: Température du Système: 53°C
[30.05.2020] [19:45:18] [TRACE] [QA_598_DS 416 PLAY]: Température des Disques: Drive 1: 34°C Drive 2: 36°C
[30.05.2020] [19:45:19] [TRACE] [QA_598_DS 416 PLAY]: Taille des Volumes: volume_1: 23.16%
[30.05.2020] [19:45:19] [TRACE] [QA_598_DS 416 PLAY]: refreshUSBdisk
[30.05.2020] [19:45:29] [TRACE] [QA_598_DS 416 PLAY]: UIEvent: {"eventType":"onReleased","values":[],"deviceId":598,"elementName":"btn6"}
[30.05.2020] [19:45:29] [TRACE] [QA_598_DS 416 PLAY]: Check Connect OK
[30.05.2020] [19:45:31] [TRACE] [QA_598_DS 416 PLAY]: Version API Synology OK
[30.05.2020] [19:45:35] [TRACE] [QA_598_DS 416 PLAY]: Check Connect OK
[30.05.2020] [19:45:44] [TRACE] [QA_598_DS 416 PLAY]: error:"Operation canceled"

 

Partager ce message


Lien à poster
Partager sur d’autres sites

AAAHHH mais minute là, il faut pas accéder au  NAS via l'interface WEB en même temps ?

 

si je ferme la page web du nas, c'est ok !

Partager ce message


Lien à poster
Partager sur d’autres sites

 

self:updateProperty("deviceIcon", 1043) -- mettre ici le code pour l'icone éteint

Tout fonctionne à merveille!

Pas d'icônes - où trouver le code d'icône? Les icônes personnalisées ne peuvent pas être ajoutées.

Désolé, je ne connais pas le français (Google translator)Icony.thumb.png.a6d41b0be0910933f6dfe1bcbf8cf2fe.png

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

Merci aux développeurs pour ce QA! Testé et fonctionne très bien!

J'ai deux questions, qui ont (plus ou moins..) un rapport avec ce QA : Peut-on, et si oui comment, appeler une fonction de ce QA depuis une scène (ex. allumer / éteindre..)?

Et, j'ai presque honte de la deuxième, je ne sais pas comment faire pour récupérer les icônes ??

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui tu peux appeler facilement une fonction d'un QuickApp depuis une scène, c'est même documenté par Fibaro : https://manuals.fibaro.com/home-center-3-lua-scenes/

 

Exemple pour appeler la fonction d'éjection du disque :

fibaro.call(123, "ejectUSBdisk", 1)

Il faudra juste mettre l'ID de ton QuickApp (123 dans cet exemple), et l'ID de ton disque (1 dans cet exemple)

 

De manière générale, tu peux passer autant d'arguments que nécessaires pour la fonction appelée en les ajoutant à la suite.

  • Like 2
  • Thanks 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

Ce QA ne fonctionne plus chez moi.

Je ne sais pas pourquoi :

[2021-04-01] [19:56:00] [ERROR] [QUICKAPP77]: QuickApp crashed
[2021-04-01] [19:56:00] [ERROR] [QUICKAPP77]: Unknown error occurred: 

Ce n'est pas très causant.

Je suis passé en DSM 6.2.4 il n'y a pas longtemps.

 

Si vous avez une idée.

 

Merci pour votre aide.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon ... en redémarrant le NAS et la HC3 cela à résolu le souci.

Mais pour combien de temps ?

 

Voilà ... :D

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir

je viens d'installer cette Quick App sur ma HC3 elle fonctionne super bien

merci pour le partage

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour et Merci pour ce super QA !!! Il marche parfaitement sur mon DS 418

 

En revanche, j'avoue mon incompétence pour incorporer les bons icones... je ne comprends pas ce qu'il faut mettre ? Comment intégrer les icones et obtenir leur numéro ? Merci pour votre aide. 

 

self:updateProperty("deviceIcon", 1043) -- mettre ici le code pour l'icone éteint

Partager ce message


Lien à poster
Partager sur d’autres sites

×