Logic Machine Forum
SNMP send orders - Printable Version

+- Logic Machine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8)
+--- Thread: SNMP send orders (/showthread.php?tid=5112)



SNMP send orders - nmedalacabeza - 24.11.2023

How could I send a start order from SNMP to the generator set?

Thank you


Code:
---Vale para la lectura de varios Dispositivos SNMP de lectura ---------------
if not devices then
  require('snmp')
  devices = {
    {
      ip = '192.168.1.33',  -- Grupo Electrogeno 
      mapping = {
        { oid = '1.3.6.1.4.1.41809.1.1.0', addr = '35/1/0' },  --Frecuencia red
        { oid = '1.3.6.1.4.1.41809.1.2.0', addr = '35/1/1' },  --Tensión red entre fases 12
       
        { oid = '1.3.6.1.4.1.41809.1.3.0', addr = '35/1/2' },  --Tensión red entre fases 23
        { oid = '1.3.6.1.4.1.41809.1.4.0', addr = '35/1/3' },  --Tensión red entre fases 31
       
       
        { oid = '1.3.6.1.4.1.41809.1.5.0', addr = '35/1/4' },  --Tensión red fase 1
        { oid = '1.3.6.1.4.1.41809.1.6.0', addr = '35/1/5' },  --Tensión red fase 2
       
       
        { oid = '1.3.6.1.4.1.41809.1.7.0', addr = '35/1/6' },  --Tensión red fase 3
        { oid = '1.3.6.1.4.1.41809.1.8.0', addr = '35/1/7' },  --Frecuencia grupo
       
       
        { oid = '1.3.6.1.4.1.41809.1.9.0', addr = '35/1/8' },  --Tensión grupo entre fases 12
        { oid = '1.3.6.1.4.1.41809.1.10.0', addr = '35/1/9' }, --Tensión grupo entre fases 23
       
       
       
        { oid = '1.3.6.1.4.1.41809.1.11.0', addr = '35/1/10' },  --Tensión grupo entre fases 31
        { oid = '1.3.6.1.4.1.41809.1.12.0', addr = '35/1/11' },  --Tensión grupo fase 1
       
        { oid = '1.3.6.1.4.1.41809.1.13.0', addr = '35/1/12' },  --Tensión grupo fase 2
        { oid = '1.3.6.1.4.1.41809.1.14.0', addr = '35/1/13' },  --Tensión grupo fase 3
       
       
        { oid = '1.3.6.1.4.1.41809.1.15.0', addr = '35/1/14' },  --Corriente fase 1
        { oid = '1.3.6.1.4.1.41809.1.16.0', addr = '35/1/15' },  --Corriente fase 2
       
       
        { oid = '1.3.6.1.4.1.41809.1.17.0', addr = '35/1/16' },  --Corriente fase 3
        { oid = '1.3.6.1.4.1.41809.1.18.0', addr = '35/1/17' },  --flagsCurrent
       
       
        { oid = '1.3.6.1.4.1.41809.1.23.0', addr = '35/1/18' },  --Potencia activa
        { oid = '1.3.6.1.4.1.41809.1.24.0', addr = '35/1/19' },  --Potencia aparente
       
        { oid = '1.3.6.1.4.1.41809.1.25.0', addr = '35/1/20' },  --Potencia reactiva
        { oid = '1.3.6.1.4.1.41809.1.27.0', addr = '35/1/21' },  --Nivel combustible
       
       
        { oid = '1.3.6.1.4.1.41809.1.28.0', addr = '35/1/22' },  --Tensión alternador carga batería
        { oid = '1.3.6.1.4.1.41809.1.29.0', addr = '35/1/23' },  --Tensión batería
         
       
        { oid = '1.3.6.1.4.1.41809.1.35.0', addr = '35/1/24' },  --totalInstant Power
        { oid = '1.3.6.1.4.1.41809.1.40.0', addr = '35/1/25' }, --totalRunningTime
       
       
       
        { oid = '1.3.6.1.4.1.41809.1.42.0', addr = '35/1/26' },  --successfulStarts
        { oid = '1.3.6.1.4.1.41809.1.43.0', addr = '35/1/27' },  --unsuccessfulStarts
       
        { oid = '1.3.6.1.4.1.41809.1.45.0', addr = '35/1/28' }, --Contador total energía grupo
        { oid = '1.3.6.1.4.1.41809.1.46.0', addr = '35/1/29' }, --status  Estado de la central CEA7 / CEM7 representado en mapa de bits:
                                                                --(R G Al Bt B T Mn Au P A) pasar valor de hex (que da ) a bin
                                                                --El valor activo indica: hex 518 a bin 1  0  1  0  0  0  1  1  0  0  0
                                                                --    EJEMPLO                                R  Al            Mn Au
                                                                --1. R: Contactor de red cerrado
                                                                --2. G: Contactor de grupo cerrado
                                                                --3. Al: Alarma activa
                                                                --4. Bt: Bomba trasiego
                                                                --5. B: Modo Bloqueo
                                                                --6. T: Modo Test
                                                                --7. Mn: Modo Manual
                                                                --8. Au: Modo Automático
                                                                --9. P: Motor Parado
                                                                --10. M: Motor Arrancado
       
       
        { oid = '1.3.6.1.4.1.41809.1.47.0', addr = '35/1/30' },  --alarmBitMapHigh
        { oid = '1.3.6.1.4.1.41809.1.48.0', addr = '35/1/31' },  --alarmBitMapLow
       
       
       
        { oid = '1.3.6.1.4.1.41809.2.52.0', addr = '35/1/32' },  --start stop Grupo Electrogeno
        { oid = '1.3.6.1.4.1.41809.2.53.0', addr = '35/1/33' },  --mode Grupo Electrogeno
       
       
       
      }
    },
    {
      ip = '192.168.1.35,      --Sai 
      mapping = {
      { oid = '1.3.6.1.4.1.318.1.1.1.2.1.1.0', addr = '35/0/0' }, -- BatteryStatus
      { oid = '1.3.6.1.4.1.318.1.1.1.2.1.2.0', addr = '35/0/1' },  --BatteryTimeOnBattery
      { oid = '1.3.6.1.4.1.318.1.1.1.2.1.3.0', addr = '35/0/3' }, -- BatteryLastReplaceDate
      { oid = '1.3.6.1.4.1.318.1.1.1.2.2.1.0', addr = '35/0/4' },  --BatteryCapacity
       
      { oid = '1.3.6.1.4.1.318.1.1.1.2.2.2.0', addr = '35/0/5' }, -- BatteryTemperature
      { oid = '1.3.6.1.4.1.318.1.1.1.2.2.3.0', addr = '35/0/6' },  --BatteryRunTimeRemaining
       
      { oid = '1.3.6.1.4.1.318.1.1.1.2.2.4.0', addr = '35/0/7' }, -- BatteryReplaceIndicator
      { oid = '1.3.6.1.4.1.318.1.1.1.2.2.7.0', addr = '35/0/8' },  --NominalVoltage
       
      { oid = '1.3.6.1.4.1.318.1.1.1.2.2.8.0', addr = '35/0/9' }, -- ActualVoltage
      { oid = '1.3.6.1.4.1.318.1.1.1.2.2.9.0', addr = '35/0/10' },  --BatteryCurrent
       
      -- { oid = '1.3.6.1.4.1.318.1.1.1.2.2.17.0', addr = '35/0/11' }, -- BatteryChargerStatus
      --{ oid = '1.3.6.1.4.1.318.1.1.1.2.2.21.0', addr = '35/0/12' },  --BatteryRecommendedReplaceDate
       
      --{ oid = '1.3.6.1.4.1.318.1.1.1.2.2.23.0', addr = '35/0/13' }, -- BatteryCondition
      --{ oid = '1.3.6.1.4.1.318.1.1.1.2.2.25.0', addr = '35/0/14' },  --BatteryTotalCapacity
       
      { oid = '1.3.6.1.4.1.318.1.1.1.3.2.1.0', addr = '35/0/15' }, -- InputLineVoltage
      { oid = '1.3.6.1.4.1.318.1.1.1.3.2.4.0', addr = '35/0/16' },  --InputFrequency
       
     
      --{ oid = '1.3.6.1.4.1.318.1.1.1.3.2.11.0', addr = '35/0/17' }, -- InputTotalApparentPower
      --{ oid = '1.3.6.1.4.1.318.1.1.1.3.2.12.0', addr = '35/0/18' },  --InputTotalActivePower
       
       
      --{ oid = '1.3.6.1.4.1.318.1.1.1.3.2.13.0', addr = '35/0/19' }, -- InputBypassTotalApparentPower
      --{ oid = '1.3.6.1.4.1.318.1.1.1.3.2.14.0', addr = '35/0/20' },  --InputBypassTotalActivePower
       
        --{ oid = '1.3.6.1.4.1.318.1.1.1.4.1.3.0', addr = '35/0/21' }, -- SystemStatus
      { oid = '1.3.6.1.4.1.318.1.1.1.11.1.1.0', addr = '35/0/22' },  --StateOutputState
       
      --{ oid = '1.3.6.1.4.1.318.1.1.1.11.1.2.0', addr = '35/0/23' },  --StateAlarmStatusr
       
    }
  },
  }
end
for _, dev in ipairs(devices) do
  local conn, err = snmp.open({
    version = snmp.SNMPv1,
    community = 'public',
    port = dev.port or 161,
    peer = dev.ip,
  })
  if conn then
    for _, map in ipairs(dev.mapping) do
      local res, err = conn:get(map.oid)
      if res and res.value ~= nil then
        grp.checkwrite(map.addr, res.value)
      else
        alert('SNMP read from %s %s failed (%s)', dev.ip, map.oid, tostring(err))
      end
    end
    conn:close()
  else
    alert('SNMP connection to %s failed (%s)', dev.ip, tostring(err))
  end
  end



RE: SNMP send orders - admin - 27.11.2023

See this thread for examples: https://forum.logicmachine.net/showthread.php?tid=1573&pid=13456#pid13456
Look for ":set" function calls.


RE: SNMP send orders - nmedalacabeza - 16.12.2023

(27.11.2023, 08:37)admin Wrote: See this thread for examples: https://forum.logicmachine.net/showthread.php?tid=1573&pid=13456#pid13456
Look for "Confusedet" function calls.
I can't get it to work, I send it 1 and it gives me an error


snmp set to 192,168,1,33 1.3.6.1.4.1.41809.2.52.0 failed: snmp bad type(2) prim=0 in index 1


thank you


Code:
require('snmp')
function setSNMPValue(ip, oid, value, type)
  type = type or snmp.INTEGER  -- Valor predeterminado: snmp.INTEGER si no se especifica el tipo
  local conn, err = snmp.open({
    version = snmp.SNMPv1,
    community = 'public',
    peer = ip,
  })
  if conn then
    local res, err = conn:set({
      {
        oid = oid,
        value = value,
        type = type,
      }
    })
    if err then
      alert('snmp set to ' .. ip .. ' ' .. oid .. ' failed: ' .. tostring(err))
    else
      alert('snmp set to ' .. ip .. ' ' .. oid .. ' ok')
      -- Realizar una operación GET para verificar si el valor se ha establecido correctamente
      local res_get, err_get = conn:get(oid)
      if res_get and res_get.value == value then
        alert('Verification: snmp get for ' .. ip .. ' ' .. oid .. ' successful')
      else
        alert('Verification: snmp get for ' .. ip .. ' ' .. oid .. ' failed')
      end
    end
    conn:close()
  else
    alert('snmp connection to ' .. ip .. ' failed: ' .. tostring(err))
  end
end
-- Ejemplos de uso con valores enteros
setSNMPValue('192.168.1.33', '1.3.6.1.4.1.41809.2.52.0', 1, snmp.INTEGER)
setSNMPValue('192.168.1.33', '1.3.6.1.4.1.41809.2.53.0', 3, snmp.INTEGER)
-- Agrega más llamadas según sea necesario para otros dispositivos o parámetros SNMP



RE: SNMP send orders - admin - 18.12.2023

Correct type constant is snmp.TYPE_INTEGER, not snmp.INTEGER.


RE: SNMP send orders - nmedalacabeza - 19.12.2023

(18.12.2023, 07:36)admin Wrote: Correct type constant is snmp.TYPE_INTEGER, not snmp.INTEGER.

ok, thanks working