DZVents : Supervision d'un nas Synology avec SNMP

Vous avez crée un script lua dont vous êtes fier, un .sh génial, un programme python hors du commun, un tuto , c'est ici que vous pouvez les partager.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
Répondre
papoo
Messages : 1851
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

DZVents : Supervision d'un nas Synology avec SNMP

Message par papoo » 26 août 2018, 14:27

2018-08-24 18_31_58-Domoticz.png
2018-08-24 18_31_58-Domoticz.png (24.57 Kio) Vu 3553 fois
Pour que ce script fonctionne, vous devez activer SNMP sur votre NAS et installer SNMP sur votre Raspberry Pi

Activer SNMP sur votre Synology NAS
Le service SNMP (dans Panneau de configuration > Terminal & SNMP > SNMP) permet aux utilisateurs de surveiller le Synology NAS avec le logiciel de gestion du réseau. Actuellement, les protocoles SNMPv1, SNMPv2c et SNMPv3 sont pris en charge.
Activation du service SNMP
Cochez Activer le service SNMP et suivez les étapes ci-dessous.
Pour activer le service SNMPv1, SNMPv2c :
Cochez Service SNMPv1, SNMPv2c.
Saisissez un nom de Communauté.
Cliquez sur Appliquer.
<strong>Installation de SNMP sur Raspberry Pi (ou système linux)</strong>
Connectez-vous à vous à la console de votre Raspberry Pi:

Code : Tout sélectionner

sudo apt-get install snmpd
sudo apt-get install snmp
Reboot de votre Pi:

Code : Tout sélectionner

sudo reboot
Vérifiez si SNMP est opérationnel:

Code : Tout sélectionner

snmpget -v 2c -c PASSWORD -O qv NASIPADDRESS 1.3.6.1.4.1.6574.1.5.1.0
Remplacer PASSWORD par le nom de Communauté que vous avez saisie lors de la configuration de votre NAS
Remplacer NASIPADDRESS par l'adresse ip de votre NAS
Vous devriez obtenir quelque chose comme ceci :
"DS218+" qui correspond au modèle de votre synology

testez les 3 requetes suivantes
snmpget -v 2c -c PASSWORD -O qv NASIPADDRESS 1.3.6.1.2.1.25.2.3.1.5.31
snmpget -v 2c -c PASSWORD -O qv NASIPADDRESS 1.3.6.1.2.1.25.2.3.1.5.38
snmpget -v 2c -c PASSWORD -O qv NASIPADDRESS 1.3.6.1.2.1.25.2.3.1.5.41
puis modifiez les variables OID_HDUnit, OID_HDTotal, OID_HDUsed (.38 sur DSM 5.1, .41 sur DSM 6.0+ ou .31 sur mon nouveau synology DS218+)

Ensuite créez :
1 device Interrupteur
X device température
3 devices pourcentage
1 device compteur

il ne vous reste plus qu'a créer un fichier Synology.lua que vous placerez dans /home/pi/domoticz/scripts/dzVents/scripts/Synology.lua
dont vous personnaliserez le code suivant

le script complet

Code : Tout sélectionner

--[[
name : synology2.lua
auteur : papoo
creation : 17/02/2019
mise à  jour : 05/04/2019

https://pon.fr/dzvents-supervision-dun-nas-synology-avec-snmp/
https://github.com/papo-o/domoticz_scripts/blob/master/dzVents/scripts/synology2.lua
https://easydomoticz.com/forum/viewtopic.php?f=17&t=7022
https://www.domoticz.com/forum/viewtopic.php?f=59&t=24618

For this script to work you need to enable SNMP on your synology NAS and install SNMP on your Raspberry Pi

Enable SNMP on your synology NAS
 
Go toMain Menu>Control Panel >SNMP to enable SNMP service, which allows users to monitor
Synology DiskStation network flow with the network management software.

You can use V1/V2
And set a password (Community)

Install SNMP on Raspberry Pi
Log in to you Raspberry Pi and issue:

sudo apt-get install snmpd
sudo apt-get install snmp

Reboot your Pi:
sudo reboot

Check if SNMP is up and running, issue:
snmpget -v 2c -c PASSWORD -O qv NASIPADDRESS 1.3.6.1.4.1.6574.1.5.1.0

Replace PASSWORD with the Community name you entered while setting up your NAS
Replace NASIPADDRESS with the ip address of your NAS
You should get something like this:
"DS218+" which corresponds to your Synology Model

how to choose disk capacity to monitor?

snmpwalk -v 2c -c PASSWORD NASIPADDRESS 1.3.6.1.2.1.25.2.3.1.3
results of my DS218 :

HOST-RESOURCES-MIB::hrStorageDescr.1 = STRING: Physical memory
HOST-RESOURCES-MIB::hrStorageDescr.3 = STRING: Virtual memory
HOST-RESOURCES-MIB::hrStorageDescr.6 = STRING: Memory buffers
HOST-RESOURCES-MIB::hrStorageDescr.7 = STRING: Cached memory
HOST-RESOURCES-MIB::hrStorageDescr.8 = STRING: Shared memory
HOST-RESOURCES-MIB::hrStorageDescr.10 = STRING: Swap space
HOST-RESOURCES-MIB::hrStorageDescr.31 = STRING: /
HOST-RESOURCES-MIB::hrStorageDescr.36 = STRING: /tmp
HOST-RESOURCES-MIB::hrStorageDescr.37 = STRING: /run
HOST-RESOURCES-MIB::hrStorageDescr.38 = STRING: /dev/shm
HOST-RESOURCES-MIB::hrStorageDescr.39 = STRING: /sys/fs/cgroup
HOST-RESOURCES-MIB::hrStorageDescr.40 = STRING: /run/cgmanager/fs
HOST-RESOURCES-MIB::hrStorageDescr.51 = STRING: /volume1
HOST-RESOURCES-MIB::hrStorageDescr.54 = STRING: /volume1/@docker/btrfs


then modify     OID_HDUnit, OID_HDTotal, OID_HDUsed variables with your last number choice (.38 on DSM 5.1, .41 on DSM 6.0+ or .51 on my new DS218)

if you have à DS2XX model, uncomment     -- local OID_HDtemp2='1.3.6.1.4.1.6574.2.1.1.6.1'  to show the hdd2 temperature
Then create:
1 device Switch
1 temperature device
3 percent devices
x meter device   
--]]
--------------------------------------------
-------------Fonctions----------------------
-------------------------------------------- 
function format(str)
   if (str) then
      str = string.gsub (str, " Bytes", "")
      str = string.gsub (str, " kB", "")

   end
   return str   
end

-------------------------------------------
-------------Fin Fonctions-----------------
-------------------------------------------

    local NasIp = "diskstation2"                            -- NAS IP Address
    local CommunityPassword = "synology"                    -- SNMP Password
    local NAS = "Synology"                                  -- NAS Switch
    local NAS_TEMP = "Synology Temp"
    local NAS_CPU = "Synology Utilisation CPU"              -- NAS CPU 
    local NAS_MEM = "Synology Utilisation RAM"              -- NAS MEM 
    local NAS_HD_SPACE_PERC = "Synology Occupation Disque"  -- NAS HD Space  in %
    local NAS_HD_SPACE = "Synology Espace Disponible"       -- NAS HD Space  in Go (custom sensor)
    local NAS_HDD1_TEMP = "Synology HDD1 Temp"              -- NAS HD1 Temp, nil si inutilisé 
    local NAS_HDD2_TEMP = nil                               -- NAS HD2 Temp, nil si inutilisé
    local NAS_HDD3_TEMP = nil                               -- NAS HD3 Temp, nil si inutilisé
    local NAS_HDD4_TEMP = nil                               -- NAS HD4 Temp, nil si inutilisé
    local OID_NAS_TEMP = '1.3.6.1.4.1.6574.1.2.0'
    local OID_HDUnit = '1.3.6.1.2.1.25.2.3.1.4.51'          -- OID HD Unit Change OID to .38 on DSM 5.1 or .41 on DSM 6.0+ or .51 on my DS218
    local OID_HDTotal = '1.3.6.1.2.1.25.2.3.1.5.51'         -- OID Total space volume in Go Change OID to .38 on DSM 5.1 or .41 on DSM 6.0+ or .51 on my DS218
    local OID_HDUsed = '1.3.6.1.2.1.25.2.3.1.6.51'          -- OID Space used volume in Go Change OID to .38 on DSM 5.1 or .41 on DSM 6.0+ or .51 on my DS218
    local OID_CpuUser = '1.3.6.1.4.1.2021.11.9.0'           -- OID CPU user
    local OID_CpuSystem = '1.3.6.1.4.1.2021.11.10.0'        -- OID CPU System
    local OID_MemAvailable = '1.3.6.1.4.1.2021.4.13.0'      -- OID Free Memory Available
    local OID_MemTotalSwap = '1.3.6.1.4.1.2021.4.3.0'       -- OID MemTotalSwap
    local OID_MemTotalReal = '1.3.6.1.4.1.2021.4.5.0'       -- OID MemTotalReal
    local OID_MemTotalFree = '1.3.6.1.4.1.2021.4.11.0'      -- OID MemTotalFree
    local OID_HDtemp1 = '1.3.6.1.4.1.6574.2.1.1.6.0'        -- OID Temperature HDD1   
    local OID_HDtemp2 = '1.3.6.1.4.1.6574.2.1.1.6.1'        -- OID Temperature HDD2 
    local OID_HDtemp3 = '1.3.6.1.4.1.6574.2.1.1.6.2'        -- OID Temperature HDD3
    local OID_HDtemp4 = '1.3.6.1.4.1.6574.2.1.1.6.3'        -- OID Temperature HDD4
    --local OID_Raid_Status = '1.3.6.1.4.1.6574.3.1.1.3.0'        -- OID Raid Status
    --local OID_Physical_Memory_Units = '1.3.6.1.2.1.25.2.3.1.4.1'
    --local OID_Physical_Memory_Size = '1.3.6.1.2.1.25.2.3.1.5.1'
    --local OID_Physical_Memory_Used = '1.3.6.1.2.1.25.2.3.1.6.1'
    --local OID_system_memory_total = '1.3.6.1.4.1.2021.4.5.0'
    --local OID_system_memory_free = '1.3.6.1.4.1.2021.4.6.0'
    --local OID_system_vsmemory_shared = '1.3.6.1.4.1.2021.4.13.0'
    --local OID_system_vsmemory_buffer = '1.3.6.1.4.1.2021.4.14.0'

   
return {
    active = true,
    on = {
    timer = {'every minute'}
    },    
   -- on = { devices = { "your trigger device" }},
        
  logging =   {   level    =   domoticz.LOG_DEBUG,                                             -- Seulement un niveau peut être actif; commenter les autres
                -- level    =   domoticz.LOG_INFO,                                            -- Only one level can be active; comment others
                -- level    =   domoticz.LOG_ERROR,
                -- level    =   domoticz.LOG_MODULE_EXEC_INFO,
                marker    =   "Synology Monitor v1.35 "      },
    
    execute = function(dz)
        local i = 0
        local results = {}
        local command = 'snmpget -v 2c -c '..CommunityPassword..' -O qv '..NasIp..' '..OID_NAS_TEMP..' '..OID_HDUnit..' '..OID_HDTotal..' '..OID_HDUsed..' '..OID_CpuUser..' '..OID_CpuSystem..' '..OID_MemAvailable ..' '.. OID_MemTotalSwap ..' '..OID_MemTotalReal..' '..OID_MemTotalFree..' '..OID_HDtemp1..' '..OID_HDtemp2..' '..OID_HDtemp3..' '..OID_HDtemp4--..' '..OID_Physical_Memory_Units ..' '..OID_Physical_Memory_Used..' '..OID_Physical_Memory_Size ..' '..OID_system_memory_total ..' '..OID_system_memory_free ..' '.. OID_system_vsmemory_shared ..' '.. OID_system_vsmemory_buffer 
        local handle = assert(io.popen(command))
        for line in handle:lines() do
            results[i] =  format(line)
            i = i + 1
        end
        handle:close()
        if results[0] then
            dz.log("NASTemp : "..results[0],dz.LOG_DEBUG)
            if NAS_TEMP then dz.devices(NAS_TEMP).update(0,results[0]) end
            end
        if results[1] then dz.log("HDUnit : "..results[1],dz.LOG_DEBUG) end
        if results[2] then dz.log("HDTotal : "..results[2],dz.LOG_DEBUG) end
        if results[3] then dz.log("HDUsed : "..results[3],dz.LOG_DEBUG) end
        if results[4] then dz.log("CpuUser : "..results[4],dz.LOG_DEBUG) end
        if results[5] then dz.log("CpuSystem : "..results[5],dz.LOG_DEBUG) end
        
        if results[1] and results[2] then

           HDTotalGo = dz.utils.round((results[2] *  results[1] / 1024 / 1024 / 1024/1024),2)
           dz.log("HDTotalGo : "..HDTotalGo,dz.LOG_DEBUG)
        end
         if results[1] and results[3] then
           HDUsedGo = dz.utils.round(((results[3]) *  results[1] / 1024 / 1024 / 1024/1024), 2)
        end       

        if results[1] and results[2] and results[3] then
            HDFreeGo = dz.utils.round(((results[2] - results[3]) *  results[1] / 1024 / 1024 / 1024/1024),2)
        end
        if HDFreeGo then 
            dz.log("HDFreeGo : "..HDFreeGo,dz.LOG_DEBUG) 
            dz.devices(NAS_HD_SPACE).update(0,HDFreeGo)
            end 
        if results[2] and results[3] then         
            HDFreePerc = dz.utils.round(((results[3] * 100) / results[2]), 0)
        end
        if HDFreePerc then 
            dz.log("HDFreePercent : "..HDFreePerc,dz.LOG_DEBUG)
            dz.devices(NAS_HD_SPACE_PERC).update(0,HDFreePerc)
            end
        if results[4] and results[5] then
            CpuUsed = (results[4] + results[5])
        end
        if CpuUsed then 
            dz.log("CpuUsed : "..CpuUsed,dz.LOG_DEBUG)
            dz.devices(NAS_CPU).update(0,CpuUsed)
            end

        if results[7] then
            dz.log("memTotalSwap: "..tostring(results[7]),dz.LOG_DEBUG)
        end
        if results[8] then
            dz.log("memTotalReal: "..tostring(results[8]),dz.LOG_DEBUG)
        end
        if results[9] then
            dz.log("memTotalFree: "..tostring(results[9]),dz.LOG_DEBUG)
        end

        if results[7] and results[8] and results[9] then
            MemUsedPerc = dz.utils.round(100-results[9]*100/(results[7]+results[8]), 0)
        end
        if MemUsedPerc then 
            dz.log("MemUsedPercent : "..MemUsedPerc,dz.LOG_DEBUG)
            dz.devices(NAS_MEM).update(0,MemUsedPerc)
        end

        if results[10] then 
            dz.log("HDTemp1 : "..tostring(results[10]),dz.LOG_DEBUG) 
            if NAS_HDD1_TEMP ~= nil then dz.devices(NAS_HDD1_TEMP).update(0,results[10]) end
        end
        if results[11] then 
            dz.log("HDTemp2 : "..tostring(results[11]),dz.LOG_DEBUG) 
            if NAS_HDD2_TEMP ~= nil then dz.devices(NAS_HDD2_TEMP).update(0,results[11]) end
        end
        if results[12] then 
            dz.log("HDTemp3 : "..tostring(results[12]),dz.LOG_DEBUG) 
            if NAS_HDD3_TEMP ~= nil then dz.devices(NAS_HDD3_TEMP).update(0,results[12]) end
        end
        if results[13] then 
            dz.log("HDTemp4 : "..tostring(results[13]),dz.LOG_DEBUG) 
            if NAS_HDD4_TEMP ~= nil then dz.devices(NAS_HDD4_TEMP).update(0,results[13]) end
        end

        if results[0] and results[5] and results[6] then
                dz.log("Requete SNMP correcte ",dz.LOG_DEBUG)
                dz.devices(NAS).switchOn().checkFirst()
            else
                dz.log("Requete SNMP incorrecte ",dz.LOG_DEBUG)
                dz.devices(NAS).switchOff().checkFirst()
            end

        --RAID Status :
        --OK(1), Repairing(2), Migrating(3), Expanding(4), Deleting(5), Creating(6), RaidSyncing(7), RaidParityChecking(8), RaidAssembling(9), Canceling(10), Degraded(11), Creashed(12)
    end
}
Voici les logs de mon NAS lorsque le level domoticz.LOG_DEBUG est activé :
2018-08-24 19_06_24-Domoticz.png
2018-08-24 19_06_24-Domoticz.png (17.33 Kio) Vu 3553 fois
Modifié en dernier par papoo le 05 avr. 2019, 13:28, modifié 5 fois.
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Tonio16
Messages : 332
Enregistré le : 13 oct. 2017, 17:00

Re: DZVents : Supervision d'un nas Synology avec SNMP

Message par Tonio16 » 29 août 2018, 21:43

Papoo

Merci pour le script.

Deux remarques:
La ligne que tu donnes pour tester le snmp est bien activé et installé sur le Pi, ne fonctionne pas pour moi. OIP non reconnu.
snmpget -v 2c -c PASSWORD -O qv NASIPADDRESS 1.3.6.1.4.1.24681.1.2.11.1.3.1
Passwaord et NASIPADDRESS avec les bonnes valeurs.

Si on utilise la deuxième température, il manque la mise à jour de l'inter.

J'ai un doute quant à la formule pour le %age d'utilisation de la ram:
tu as: local MemUsedPerc = dz.utils.round(((results[6] / 1024)), 0)
le script de base a:
MemAvailable=`snmpget -v 2c -c $PASSWORD -O qv $NASIP 1.3.6.1.4.1.2021.4.6.0`
MemAvailableinMo=$(($MemAvailable / 1024))
MemUsepercent=$((($MemAvailableinMo * 100) / 1024))

Tcho


Antoine
Modifié en dernier par Tonio16 le 29 août 2018, 22:02, modifié 1 fois.
Domoticz V4.9700 sous raspbian-Stretch
Raspberry Pi B+ avec Clé Z-Wave Plus Z-Stick GEN5 - Aeon Labs
Raspberry Pi 3B+ avec RFLink

papoo
Messages : 1851
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : Supervision d'un nas Synology avec SNMP

Message par papoo » 29 août 2018, 21:50

Merci pour ton retour
je vais corriger l'oid dans le post
ton nas est de quel modele?
si la requete snmp ne retourne rien pour un OID donné elle s'arrete
la mise à jour de l'etat du switch est conditionné à la bonne execution de cette requete SNMP.
si ton nas n'as qu'un seul disque la requete ne pourra aboutir si tu demande l'OID de la temperature d'un deuxieme disque
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

Tonio16
Messages : 332
Enregistré le : 13 oct. 2017, 17:00

Re: DZVents : Supervision d'un nas Synology avec SNMP

Message par Tonio16 » 30 août 2018, 06:13

Salut
Pour la température du disque 2, , il manque la ligne dans le if qui met à jour Domoticz:
dz.devices(NAS_HD2_TEMP).update(0,results[7])


Mon Synology est le Ds216play.


Pour la ram, le calcul est aussi basé sur une ram de 1024 Mo. Je ne sais pas si tous les nas Synology ont cette quantité.

Antoine
Domoticz V4.9700 sous raspbian-Stretch
Raspberry Pi B+ avec Clé Z-Wave Plus Z-Stick GEN5 - Aeon Labs
Raspberry Pi 3B+ avec RFLink

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


papoo
Messages : 1851
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : Supervision d'un nas Synology avec SNMP

Message par papoo » 02 sept. 2018, 11:11

Tonio16 a écrit :
J'ai un doute quant à la formule pour le %age d'utilisation de la ram:
tu as: local MemUsedPerc = dz.utils.round(((results[6] / 1024)), 0)
le script de base a:
MemAvailable=`snmpget -v 2c -c $PASSWORD -O qv $NASIP 1.3.6.1.4.1.2021.4.6.0`
MemAvailableinMo=$(($MemAvailable / 1024))
MemUsepercent=$((($MemAvailableinMo * 100) / 1024))

Tcho

Antoine
tu as raison il faut

Code : Tout sélectionner

local MemUsedPerc = dz.utils.round((((results[6] / 1024) *100 / 1024)), 0)
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

papoo
Messages : 1851
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : Supervision d'un nas Synology avec SNMP

Message par papoo » 03 sept. 2018, 21:38

mise à jour du script et de l'aide à l'installation
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

Tonio16
Messages : 332
Enregistré le : 13 oct. 2017, 17:00

Re: DZVents : Supervision d'un nas Synology avec SNMP

Message par Tonio16 » 04 sept. 2018, 07:13

Sur mon Syno DS216Play, j'ai mis .42 au lieu de .41.

Antoine
Domoticz V4.9700 sous raspbian-Stretch
Raspberry Pi B+ avec Clé Z-Wave Plus Z-Stick GEN5 - Aeon Labs
Raspberry Pi 3B+ avec RFLink

Gimli1780
Messages : 18
Enregistré le : 05 sept. 2017, 19:45

Re: DZVents : Supervision d'un nas Synology avec SNMP

Message par Gimli1780 » 18 oct. 2018, 18:34

Bonjour,

Parfait fonctionne à la perfection sur mon DS115j. Avant je fonctionnais avec un système de serveur Domoticz esclave sur le NAS, mais la fiabilité n'était pas là.

Je pense adapter le script pour récupérer les valeurs de mon PC, et asservir quelques lampes LED RGB aux températures.

Encore merci pour le partage.

dokho
Messages : 490
Enregistré le : 28 déc. 2014, 19:32

Re: DZVents : Supervision d'un nas Synology avec SNMP

Message par dokho » 20 déc. 2018, 21:00

Bonsoir,

Cela ne fonctionne pas chez moi sur mon DS218+:

Code : Tout sélectionner

2018-12-20 20:35:06.455  Status: dzVents: Error (2.4.6): Synology Monitor v1.04 : An error occured when calling event handler ds218
2018-12-20 20:35:06.456  Status: dzVents: Error (2.4.6): Synology Monitor v1.04 : /home/domoticz/domoticz/scripts/dzVents/scripts/ds218.lua:73: attempt to perform arithmetic on field '?' (a nil value)
2018-12-20 20:35:06.456  Status: dzVents: Info:  Synology Monitor v1.04 : ------ Finished ds218.lua
La ligne 73 contient:

Code : Tout sélectionner

local HDFree = dz.utils.round(((results[2] - results[3]) *  results[1] / 1024 / 1024 / 1024), 0)
Quelqu'un a-t-il le même problème ?

Merci.

papoo
Messages : 1851
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : Supervision d'un nas Synology avec SNMP

Message par papoo » 20 déc. 2018, 22:49

je n'ai pas ça en ligne 73 personnellement
as tu fais les essais des differents OID pour trouver celui qui correspond à ton nas?
j'ai moi aussi un ds218+
voici le script adapté que j'utilise

Code : Tout sélectionner

--[[
name : synology2.lua
auteur : papoo
creation : 24/08/2018
mise à  jour : 03/09/2018

https://pon.fr/dzvents-supervision-dun-nas-synology-avec-snmp/
https://github.com/papo-o/domoticz_scripts/blob/master/dzVents/scripts/synology2.lua
https://easydomoticz.com/forum/viewtopic.php?f=17&t=7022
https://www.domoticz.com/forum/viewtopic.php?f=59&t=24618

For this script to work you need to enable SNMP on your synology NAS and install SNMP on your Raspberry Pi

Enable SNMP on your synology NAS
 
Go toMain Menu>Control Panel >SNMP to enable SNMP service, which allows users to monitor
Synology DiskStation network flow with the network management software.

You can use V1/V2
And set a password (Community)

Install SNMP on Raspberry Pi
Log in to you Raspberry Pi and issue:

sudo apt-get install snmpd
sudo apt-get install snmp

Reboot your Pi:
sudo reboot

Check if SNMP is up and running, issue:
snmpget -v 2c -c PASSWORD -O qv NASIPADDRESS 1.3.6.1.4.1.6574.1.5.1.0

Replace PASSWORD with the Community name you entered while setting up your NAS
Replace NASIPADDRESS with the ip address of your NAS
You should get something like this:
"DS218+" which corresponds to your Synology Model

how to choose disk capacity to monitor?

snmpwalk -v 2c -c PASSWORD NASIPADDRESS 1.3.6.1.2.1.25.2.3.1.3
results of my DS218 :

HOST-RESOURCES-MIB::hrStorageDescr.1 = STRING: Physical memory
HOST-RESOURCES-MIB::hrStorageDescr.3 = STRING: Virtual memory
HOST-RESOURCES-MIB::hrStorageDescr.6 = STRING: Memory buffers
HOST-RESOURCES-MIB::hrStorageDescr.7 = STRING: Cached memory
HOST-RESOURCES-MIB::hrStorageDescr.8 = STRING: Shared memory
HOST-RESOURCES-MIB::hrStorageDescr.10 = STRING: Swap space
HOST-RESOURCES-MIB::hrStorageDescr.31 = STRING: /
HOST-RESOURCES-MIB::hrStorageDescr.36 = STRING: /tmp
HOST-RESOURCES-MIB::hrStorageDescr.37 = STRING: /run
HOST-RESOURCES-MIB::hrStorageDescr.38 = STRING: /dev/shm
HOST-RESOURCES-MIB::hrStorageDescr.39 = STRING: /sys/fs/cgroup
HOST-RESOURCES-MIB::hrStorageDescr.40 = STRING: /run/cgmanager/fs
HOST-RESOURCES-MIB::hrStorageDescr.51 = STRING: /volume1
HOST-RESOURCES-MIB::hrStorageDescr.54 = STRING: /volume1/@docker/btrfs


then modify     OID_HDUnit, OID_HDTotal, OID_HDUsed variables with your last number choice (.38 on DSM 5.1, .41 on DSM 6.0+ or .51 on my new DS218)

if you have à DS2XX model, uncomment     -- local OID_HDtemp2='1.3.6.1.4.1.6574.2.1.1.6.1'  to show the hdd2 temperature
Then create:
1 device Switch
1 temperature device
3 percent devices
x meter device   
--]]
--------------------------------------------
-------------Fonctions----------------------
-------------------------------------------- 
function format(str)
   if (str) then
      str = string.gsub (str, " Bytes", "")
      str = string.gsub (str, " kB", "")

   end
   return str   
end

-------------------------------------------
-------------Fin Fonctions-----------------
-------------------------------------------

    local NasIp = "diskstation2"                                -- NAS IP Address
    local CommunityPassword = "synology"                        -- SNMP Password
    local NAS = "Synology"                                      -- NAS Switch
    local NAS_TEMP = "Synology Temp"
    local NAS_CPU = "Synology Utilisation CPU"                  -- NAS CPU 
    local NAS_MEM = "Synology Utilisation RAM"                  -- NAS MEM 
    local NAS_HD_SPACE_PERC = "Synology Occupation Disque"      -- NAS HD Space  in %
    local NAS_HD_SPACE = "Synology Espace Disponible"           -- NAS HD Space  in Go
    local NAS_HD1_TEMP = "Synology HDD1 Temp"                   -- NAS HD1 Temp 
    -- local NAS_HD2_TEMP = ""                                     -- NAS HD2 Temp 
    local OID_NAS_TEMP = '1.3.6.1.4.1.6574.1.2.0'
    local OID_HDUnit = '1.3.6.1.2.1.25.2.3.1.4.51'              -- OID HD Unit Change OID to .38 on DSM 5.1 or .41 on DSM 6.0+ or .51 on my DS218
    local OID_HDTotal = '1.3.6.1.2.1.25.2.3.1.5.51'             -- OID Total space volume in Go Change OID to .38 on DSM 5.1 or .41 on DSM 6.0+ or .51 on my DS218
    local OID_HDUsed = '1.3.6.1.2.1.25.2.3.1.6.51'              -- OID Space used volume in Go Change OID to .38 on DSM 5.1 or .41 on DSM 6.0+ or .51 on my DS218
    local OID_CpuUser = '1.3.6.1.4.1.2021.11.9.0'               -- OID CPU user
    local OID_CpuSystem = '1.3.6.1.4.1.2021.11.10.0'            -- OID CPU System
    local OID_MemAvailable = '1.3.6.1.4.1.2021.4.13.0'          -- OID Free Memory Available
    local OID_HDtemp1 = '1.3.6.1.4.1.6574.2.1.1.6.0'            -- OID Temperature HD1   
    local OID_HDtemp2 = '1.3.6.1.4.1.6574.2.1.1.6.1'            -- OID Temperature HD2 
    local OID_Raid_Status = '1.3.6.1.4.1.6574.3.1.1.3.0'        -- OID Raid Status
    local OID_Physical_Memory_Units = '1.3.6.1.2.1.25.2.3.1.4.1'
    local OID_Physical_Memory_Size = '1.3.6.1.2.1.25.2.3.1.5.1'
    local OID_Physical_Memory_Used = '1.3.6.1.2.1.25.2.3.1.6.1'     
   
return {
    active = true,
    on = {
    timer = {'every minute'}
    },    
   -- on = { devices = { "your trigger device" }},
        
  logging =   { -- level    =   domoticz.LOG_INFO,                                             -- Seulement un niveau peut être actif; commenter les autres
                -- level    =   domoticz.LOG_ERROR,                                            -- Only one level can be active; comment others
                -- level    =   domoticz.LOG_DEBUG,
                -- level    =   domoticz.LOG_MODULE_EXEC_INFO,
                marker    =   "Synology Monitor v1.1 "      },
    
    execute = function(dz)
        local i = 0
        local results = {}
        local command = 'snmpget -v 2c -c '..CommunityPassword..' -O qv '..NasIp..' '..OID_NAS_TEMP..' '..OID_HDUnit..' '..OID_HDTotal..' '..OID_HDUsed..' '..OID_CpuUser..' '..OID_CpuSystem..' '..OID_MemAvailable..' '..OID_HDtemp1..' '..OID_HDtemp2 --..' '..OID_Physical_Memory_Units..' '..OID_Physical_Memory_Used..' '..OID_Physical_Memory_Size
        local handle = assert(io.popen(command))
        for line in handle:lines() do
        --for i, line in pairs(handle) do
            --dz.log(format(line).." "..i,dz.LOG_info)
            results[i] =  format(line)
            i = i + 1
        end
        handle:close()
        if results[0] then
            dz.log("NASTemp : "..results[0],dz.LOG_DEBUG)
            if NAS_TEMP then dz.devices(NAS_TEMP).update(0,results[0]) end
            end
        if results[1] then dz.log("HDUnit : "..results[1],dz.LOG_DEBUG) end        
        if results[2] then dz.log("HDTotal : "..results[2],dz.LOG_DEBUG) end        
        if results[3] then dz.log("HDUsed : "..results[3],dz.LOG_DEBUG) end
        if results[4] then dz.log("CpuUser : "..results[4],dz.LOG_DEBUG) end      
        if results[5] then dz.log("CpuSystem : "..results[5],dz.LOG_DEBUG) end  
        if results[6] then dz.log("MemAvailable : "..results[6],dz.LOG_DEBUG) end
        if results[7] then 
            dz.log("HDTemp1 : "..results[7],dz.LOG_DEBUG) 
            if NAS_HDD1_TEMP then dz.devices(NAS_HDD1_TEMP).update(0,results[7]) end
            end        
        if results[8] then 
            dz.log("HDTemp2 : "..results[8],dz.LOG_DEBUG) 
            if NAS_HDD2_TEMP then dz.devices(NAS_HDD2_TEMP).update(0,results[8]) end
            end
        -- if results[9] then dz.log("Physical Memory Units : "..results[9],dz.LOG_DEBUG) end
        -- if results[10] then dz.log("Physical Memory Used : "..results[10],dz.LOG_DEBUG) end
        -- if results[11] then dz.log("Physical Memory Size : "..results[11],dz.LOG_DEBUG) end
        
        if results[1] and results[2] then
           --local  HDFree = dz.utils.round(((results[2] - results[3]) *  results[1] / 1024 / 1024 / 1024), 1)
           HDTotalGo = dz.utils.round((results[2] *  results[1] / 1024 / 1024 / 1024/1024),2)
           dz.log("HDTotalGo : "..HDTotalGo,dz.LOG_DEBUG)
        end
         if results[1] and results[3] then
           HDUsedGo = dz.utils.round(((results[3]) *  results[1] / 1024 / 1024 / 1024/1024), 2)
           --local  HDUsedGo = (results[3] *  results[1] / 1024 / 1024 / 1024)
           --dz.log("HDUsedGo : "..HDUsedGo,dz.LOG_DEBUG)
        end       
        
        if results[1] and results[2] and results[3] then
           --local  HDFree = dz.utils.round(((results[2] - results[3]) *  results[1] / 1024 / 1024 / 1024), 1)
            HDFreeGo = dz.utils.round(((results[2] - results[3]) *  results[1] / 1024 / 1024 / 1024/1024),2)
           --dz.log("HDFreeGo : "..HDFreeGo,dz.LOG_DEBUG)
        end
        if HDFreeGo then 
            dz.log("HDFreeGo : "..HDFreeGo,dz.LOG_DEBUG) 
            dz.devices(NAS_HD_SPACE).update(0,HDFreeGo)
            end 
        if results[2] and results[3] then         
            HDFreePerc = dz.utils.round(((results[3] * 100) / results[2]), 0)
        end
        if HDFreePerc then 
            dz.log("HDFreePercent : "..HDFreePerc,dz.LOG_DEBUG)
            dz.devices(NAS_HD_SPACE_PERC).update(0,HDFreePerc)
            end
        if results[4] and results[5] then
            CpuUsed = (results[4] + results[5])
        end
        if CpuUsed then 
            dz.log("CpuUsed : "..CpuUsed,dz.LOG_DEBUG)
            dz.devices(NAS_CPU).update(0,CpuUsed)
            end
        if results[6] then
            MemUsedPerc = dz.utils.round((((results[6] / 1024) *100 / 1024)), 0)
        end
        if MemUsedPerc then 
            dz.log("MemUsedPercent : "..MemUsedPerc,dz.LOG_DEBUG)
            dz.devices(NAS_MEM).update(0,MemUsedPerc)
            end
        -- if results[9] and results[11] then
            -- MemTotal = dz.utils.round((((results[11] / results[9]) *100 / 1024)), 0)
        -- end
        -- if MemTotal then 
            -- dz.log("MemTotal : "..MemTotal,dz.LOG_DEBUG)
            dz.devices(NAS_MEM).update(0,MemUsedPerc)
            -- end            
            
            
            
            
        if results[0] and results[5] and results[6] then
                dz.log("Requete SNMP correcte ",dz.LOG_DEBUG)
                dz.devices(NAS).switchOn().checkFirst()
            else
                dz.log("Requete SNMP incorrecte ",dz.LOG_DEBUG)
                dz.devices(NAS).switchOff().checkFirst()
            end
            

            
        --RAID Status :
        --OK(1), Repairing(2), Migrating(3), Expanding(4), Deleting(5), Creating(6), RaidSyncing(7), RaidParityChecking(8), RaidAssembling(9), Canceling(10), Degraded(11), Creashed(12)
    end
}
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre