Code:
--UPS SHTYL (SW250/SW500/SW1000)
--IC-SNMP/Web
--MIB (https://www.shtyl.ru/upload/iblock/74f/Shtyl_MIB_UPS2_06.mib)
ups_ip = "192.168.0.1"
Connection_status = "1/6/25"
DataUPS = {}
DataUPS[1] = {oid=".1.3.6.1.2.1.33.1.2.1.0", knx_grop="1/6/26", dtype=5}
-- upsBatteryStatus{unknown(1),batteryNormal(2),batteryLow(3),batteryDepleted(4)}
DataUPS[2] = {oid=".1.3.6.1.2.1.33.1.2.2.0", knx_grop="1/6/27", dtype=99}
-- upsSecondsOnBattery --(Datatype 9, value Hours.minutes)
DataUPS[3] = {oid=".1.3.6.1.2.1.33.1.2.3.0", knx_grop="1/6/28", dtype=7}
-- upsEstimatedMinutesRemaining
DataUPS[4] = {oid=".1.3.6.1.2.1.33.1.2.4.0", knx_grop="1/6/29", dtype=7}
-- upsEstimatedChargeRemaining
DataUPS[5] = {oid=".1.3.6.1.2.1.33.1.2.5.0", knx_grop="1/6/30", dtype=9}
-- upsBatteryVoltage
DataUPS[6] = {oid=".1.3.6.1.2.1.33.1.2.6.0", knx_grop="1/6/31", dtype=9}
-- upsBatteryCurrent
DataUPS[7] = {oid=".1.3.6.1.2.1.33.1.2.7.0", knx_grop="1/6/32", dtype=7}
-- upsBatteryTemperature
DataUPS[8] = {oid=".1.3.6.1.2.1.33.1.3.3.1.2.1", knx_grop="1/6/33", dtype=9}
-- upsInputFrequency
DataUPS[9] = {oid=".1.3.6.1.2.1.33.1.3.3.1.3.1", knx_grop="1/6/34", dtype=7}
-- upsInputVoltage
DataUPS[10] = {oid=".1.3.6.1.2.1.33.1.3.3.1.4.1", knx_grop="1/6/35", dtype=9}
-- upsInputCurrent
DataUPS[11] = {oid=".1.3.6.1.2.1.33.1.4.1.0", knx_grop="1/6/36", dtype=5}
-- upsOutputSource {other(1),none(2),normal(3),bypass(4),battery(5),booster(6),reducer(7)}
DataUPS[12] = {oid=".1.3.6.1.2.1.33.1.4.2.0", knx_grop="1/6/37", dtype=9}
-- upsOutputFrequency
DataUPS[13] = {oid=".1.3.6.1.2.1.33.1.4.4.1.2.1", knx_grop="1/6/38", dtype=7}
-- upsOutputVoltage
DataUPS[14] = {oid=".1.3.6.1.2.1.33.1.4.4.1.3.1", knx_grop="1/6/39", dtype=9}
-- upsOutputCurrent
DataUPS[15] = {oid=".1.3.6.1.2.1.33.1.4.4.1.5.1", knx_grop="1/6/40", dtype=7}
-- upsOutputPercentLoad
DataUPS[16] = {oid=".1.3.6.1.2.1.33.1.5.1.0", knx_grop="1/6/41", dtype=9}
-- upsBypassFrequency
DataUPS[17] = {oid=".1.3.6.1.2.1.33.1.5.3.1.2.1", knx_grop="1/6/42", dtype=7}
-- upsBypassVoltage
DataUPS[18] = {oid=".1.3.6.1.2.1.33.1.5.3.1.3.1", knx_grop="1/6/43", dtype=9}
-- upsBypassCurrent
DataUPS[19] = {oid=".1.3.6.1.2.1.33.1.6.1", knx_grop="1/6/44", dtype=1}
-- upsAlarmsPresent
--oid=".1.3.6.1.2.1.33.1.3.3.1.5.1" -- upsInputTruePower
--oid=".1.3.6.1.2.1.33.1.4.4.1.4.1" -- upsOutputPower
--oid=".1.3.6.1.2.1.33.1.5.3.1.4.1" -- upsBypassPower
require "snmp"
local mib, err = snmp.mib.load('/home/ftp/snmp/UPS-MIB.mib')
if not mib then
--log('Failed to load mib: ' .. err)
end
ups1, err = snmp.open{
version = snmp.SNMPv2,
community = "public",
port = 161,
peer = ups_ip,
}
if ups1 then
grp.checkwrite(Connection_status, 1)
for i=1,19 do
vbind, err = ups1:get(DataUPS[i].oid)
if (vbind.value ~= nil) then
res = vbind.value
end
if ((DataUPS[i].dtype == 9) and (i~=5)) then res = res * 0.1 end
if i == 2 then
hour = vbind.value/60
hour = math.floor(hour)
min = vbind.value%60
res=hour+(min*0.01)
end
if i == 19 then
if res ~= 0 then res = 1 end
end
grp.checkwrite(DataUPS[i].knx_grop, res)
end
else
grp.checkwrite(Connection_status, 0)
end
ups1:close()