33 * Copyright (C)
44 * 2003 - 2015 Arnaud Quette <arnaud.quette@free.fr>
55 * 2015 - 2024 Eaton / Arnaud Quette <ArnaudQuette@Eaton.com>
6- * 2020 - 2025 Jim Klimov <jimklimov+nut@gmail.com>
6+ * 2020 - 2026 Jim Klimov <jimklimov+nut@gmail.com>
77 * 2024 - 2025 "DaRK AnGeL" <28630321+masterwishx@users.noreply.github.com>
88 *
99 * Sponsored by MGE UPS SYSTEMS <http://www.mgeups.com>
5252# endif
5353#endif /* WIN32 */
5454
55- #define MGE_HID_VERSION "MGE HID 1.57 "
55+ #define MGE_HID_VERSION "MGE HID 1.58 "
5656
5757/* (prev. MGE Office Protection Systems, prev. MGE UPS SYSTEMS) */
5858/* Eaton */
@@ -2059,9 +2059,9 @@ static hid_info_t mge_hid2nut[] =
20592059 { "ups.test.interval" , ST_FLAG_RW | ST_FLAG_STRING , 8 , "UPS.BatterySystem.Battery.TestPeriod" , NULL , "%.0f" , HU_FLAG_SEMI_STATIC , NULL },
20602060 /* Duplicate data for some units (such as 3S) that use a different path
20612061 * Only the first valid one will be used */
2062- { "ups.beeper.status" , 0 , 0 , "UPS.BatterySystem.Battery.AudibleAlarmControl" , NULL , "%s" , HU_FLAG_SEMI_STATIC , beeper_info },
2063- { "ups.beeper.status" , 0 , 0 , "UPS.PowerSummary.AudibleAlarmControl" , NULL , "%s" , HU_FLAG_SEMI_STATIC , beeper_info },
2064- { "ups.beeper.status" , 0 , 0 , "UPS.AudibleAlarmControl" , NULL , "%s" , HU_FLAG_SEMI_STATIC , beeper_info }, /* yonesmit - support for Masterpower MF-UPS650VA */
2062+ { "ups.beeper.status" , 0 , 0 , "UPS.BatterySystem.Battery.AudibleAlarmControl" , NULL , "%s" , HU_FLAG_SEMI_STATIC , beeper_info },
2063+ { "ups.beeper.status" , 0 , 0 , "UPS.PowerSummary.AudibleAlarmControl" , NULL , "%s" , HU_FLAG_SEMI_STATIC , beeper_info },
2064+ { "ups.beeper.status" , 0 , 0 , "UPS.AudibleAlarmControl" , NULL , "%s" , HU_FLAG_SEMI_STATIC , beeper_info }, /* yonesmit - support for Masterpower MF-UPS650VA */
20652065 { "ups.temperature" , 0 , 0 , "UPS.PowerSummary.Temperature" , NULL , "%s" , 0 , kelvin_celsius_conversion },
20662066 { "ups.power" , 0 , 0 , "UPS.PowerConverter.Output.ApparentPower" , NULL , "%.0f" , 0 , NULL },
20672067 { "ups.L1.power" , 0 , 0 , "UPS.PowerConverter.Output.Phase.[1].ApparentPower" , NULL , "%.0f" , 0 , NULL },
@@ -2227,7 +2227,9 @@ static hid_info_t mge_hid2nut[] =
22272227 { "output.frequency.nominal" , 0 , 0 , "UPS.Flow.[4].ConfigFrequency" , NULL , "%.0f" , HU_FLAG_STATIC , NULL },
22282228 { "output.powerfactor" , 0 , 0 , "UPS.PowerConverter.Output.PowerFactor" , NULL , "%s" , 0 , mge_powerfactor_conversion },
22292229
2230- /* Outlet page (using MGE UPS SYSTEMS - PowerShare technology) */
2230+ /* Outlet page (using MGE UPS SYSTEMS - PowerShare technology)
2231+ * Summary, the "main" or the only outlet group is seen in Outlet.[1].* values
2232+ */
22312233 { "outlet.id" , 0 , 0 , "UPS.OutletSystem.Outlet.[1].OutletID" , NULL , "%.0f" , HU_FLAG_STATIC , NULL },
22322234 { "outlet.desc" , ST_FLAG_RW | ST_FLAG_STRING , 20 , "UPS.OutletSystem.Outlet.[1].OutletID" , NULL , "Main Outlet" , HU_FLAG_ABSENT , NULL },
22332235 { "outlet.switchable" , 0 , 0 , "UPS.OutletSystem.Outlet.[1].PresentStatus.Switchable" , NULL , "%s" , HU_FLAG_STATIC , yes_no_info },
@@ -2241,14 +2243,14 @@ static hid_info_t mge_hid2nut[] =
22412243 { "outlet.current" , 0 , 0 , "UPS.OutletSystem.Outlet.[1].Current" , NULL , "%.2f" , 0 , NULL },
22422244 { "outlet.powerfactor" , 0 , 0 , "UPS.OutletSystem.Outlet.[1].PowerFactor" , NULL , "%.2f" , 0 , NULL }, /* "%s", 0, mge_powerfactor_conversion }, */
22432245
2244- /* First outlet */
2246+ /* First outlet (group) [2] */
22452247 { "outlet.1.id" , 0 , 0 , "UPS.OutletSystem.Outlet.[2].OutletID" , NULL , "%.0f" , HU_FLAG_STATIC , NULL },
22462248 { "outlet.1.desc" , ST_FLAG_RW | ST_FLAG_STRING , 20 , "UPS.OutletSystem.Outlet.[2].OutletID" , NULL , "PowerShare Outlet 1" , HU_FLAG_ABSENT , NULL },
22472249 { "outlet.1.switchable" , 0 , 0 , "UPS.OutletSystem.Outlet.[2].PresentStatus.Switchable" , NULL , "%s" , HU_FLAG_STATIC , yes_no_info },
2248- /* FIXME: should better use UPS.OutletSystem.Outlet.[1 ].Status? */
2250+ /* FIXME: should better use UPS.OutletSystem.Outlet.[2 ].Status? */
22492251 { "outlet.1.status" , 0 , 0 , "UPS.OutletSystem.Outlet.[2].PresentStatus.SwitchOn/Off" , NULL , "%s" , 0 , on_off_info },
2250- { "outlet.1.protect.status" , 0 , 0 , "UPS.OutletSystem.Outlet.[1 ].Status" , NULL , "%s" , 0 , eaton_outlet_protection_status_info },
2251- { "outlet.1.designator" , 0 , 0 , "UPS.OutletSystem.Outlet.[1 ].iDesignator" , NULL , NULL , HU_FLAG_STATIC , stringid_conversion }, /* FIXME */
2252+ { "outlet.1.protect.status" , 0 , 0 , "UPS.OutletSystem.Outlet.[2 ].Status" , NULL , "%s" , 0 , eaton_outlet_protection_status_info },
2253+ { "outlet.1.designator" , 0 , 0 , "UPS.OutletSystem.Outlet.[2 ].iDesignator" , NULL , NULL , HU_FLAG_STATIC , stringid_conversion }, /* FIXME */
22522254 /* For low end models, with 1 non backup'ed outlet */
22532255 { "outlet.1.status" , 0 , 0 , "UPS.PowerSummary.PresentStatus.ACPresent" , NULL , "%s" , 0 , on_off_info },
22542256 /* FIXME: change to outlet.1.battery.charge.low, as in mge-xml.c?! */
@@ -2261,7 +2263,8 @@ static hid_info_t mge_hid2nut[] =
22612263 { "outlet.1.powerfactor" , 0 , 0 , "UPS.OutletSystem.Outlet.[2].PowerFactor" , NULL , "%.2f" , 0 , NULL }, /* "%s", 0, mge_powerfactor_conversion }, */
22622264 /* 0: The outlet is not ECO controlled. / 1 : The outlet is ECO controlled. => Readonly! use some yes_no_info */
22632265 { "outlet.1.ecocontrol" , 0 , 0 , "UPS.OutletSystem.Outlet.[2].ECOControl" , NULL , "%s" , HU_FLAG_SEMI_STATIC , outlet_eco_yes_no_info },
2264- /* Second outlet */
2266+
2267+ /* Second outlet (group) [3] */
22652268 { "outlet.2.id" , 0 , 0 , "UPS.OutletSystem.Outlet.[3].OutletID" , NULL , "%.0f" , HU_FLAG_STATIC , NULL },
22662269 { "outlet.2.desc" , ST_FLAG_RW | ST_FLAG_STRING , 20 , "UPS.OutletSystem.Outlet.[3].OutletID" , NULL , "PowerShare Outlet 2" , HU_FLAG_ABSENT , NULL },
22672270 /* needed for Pegasus to enable master/slave mode:
@@ -2271,7 +2274,7 @@ static hid_info_t mge_hid2nut[] =
22712274 { "outlet.2.switchable" , 0 , 0 , "UPS.OutletSystem.Outlet.[3].PresentStatus.Switchable" , NULL , "%s" , 0 , yes_no_info },
22722275 { "outlet.2.status" , 0 , 0 , "UPS.OutletSystem.Outlet.[3].PresentStatus.SwitchOn/Off" , NULL , "%s" , 0 , on_off_info },
22732276 { "outlet.2.protect.status" , 0 , 0 , "UPS.OutletSystem.Outlet.[3].Status" , NULL , "%s" , 0 , eaton_outlet_protection_status_info },
2274- /* FIXME: should better use UPS.OutletSystem.Outlet.[1 ].Status? */
2277+ /* FIXME: should better use UPS.OutletSystem.Outlet.[3 ].Status? */
22752278 { "outlet.2.autoswitch.charge.low" , ST_FLAG_RW | ST_FLAG_STRING , 3 , "UPS.OutletSystem.Outlet.[3].RemainingCapacityLimit" , NULL , "%.0f" , HU_FLAG_SEMI_STATIC , NULL },
22762279 { "outlet.2.delay.shutdown" , ST_FLAG_RW | ST_FLAG_STRING , 5 , "UPS.OutletSystem.Outlet.[3].ShutdownTimer" , NULL , "%.0f" , HU_FLAG_SEMI_STATIC , NULL },
22772280 { "outlet.2.delay.start" , ST_FLAG_RW | ST_FLAG_STRING , 5 , "UPS.OutletSystem.Outlet.[3].StartupTimer" , NULL , "%.0f" , HU_FLAG_SEMI_STATIC , NULL },
@@ -2282,6 +2285,27 @@ static hid_info_t mge_hid2nut[] =
22822285 /* 0: The outlet is not ECO controlled. / 1 : The outlet is ECO controlled. => Readonly! use some yes_no_info */
22832286 { "outlet.2.ecocontrol" , 0 , 0 , "UPS.OutletSystem.Outlet.[3].ECOControl" , NULL , "%s" , HU_FLAG_SEMI_STATIC , outlet_eco_yes_no_info },
22842287
2288+ /* Third outlet (group) [4] */
2289+ { "outlet.3.id" , 0 , 0 , "UPS.OutletSystem.Outlet.[4].OutletID" , NULL , "%.0f" , HU_FLAG_STATIC , NULL },
2290+ { "outlet.3.desc" , ST_FLAG_RW | ST_FLAG_STRING , 20 , "UPS.OutletSystem.Outlet.[4].OutletID" , NULL , "PowerShare Outlet 2" , HU_FLAG_ABSENT , NULL },
2291+ /* needed for Pegasus to enable master/slave mode:
2292+ * FIXME: rename to something more suitable (outlet.?) */
2293+ { "outlet.3.switchable" , ST_FLAG_RW | ST_FLAG_STRING , 3 , "UPS.OutletSystem.Outlet.[4].PresentStatus.Switchable" , NULL , "%s" , HU_FLAG_SEMI_STATIC , pegasus_yes_no_info },
2294+ /* Generic version (RO) for other models */
2295+ { "outlet.3.switchable" , 0 , 0 , "UPS.OutletSystem.Outlet.[4].PresentStatus.Switchable" , NULL , "%s" , 0 , yes_no_info },
2296+ { "outlet.3.status" , 0 , 0 , "UPS.OutletSystem.Outlet.[4].PresentStatus.SwitchOn/Off" , NULL , "%s" , 0 , on_off_info },
2297+ { "outlet.3.protect.status" , 0 , 0 , "UPS.OutletSystem.Outlet.[4].Status" , NULL , "%s" , 0 , eaton_outlet_protection_status_info },
2298+ /* FIXME: should better use UPS.OutletSystem.Outlet.[4].Status? */
2299+ { "outlet.3.autoswitch.charge.low" , ST_FLAG_RW | ST_FLAG_STRING , 3 , "UPS.OutletSystem.Outlet.[4].RemainingCapacityLimit" , NULL , "%.0f" , HU_FLAG_SEMI_STATIC , NULL },
2300+ { "outlet.3.delay.shutdown" , ST_FLAG_RW | ST_FLAG_STRING , 5 , "UPS.OutletSystem.Outlet.[4].ShutdownTimer" , NULL , "%.0f" , HU_FLAG_SEMI_STATIC , NULL },
2301+ { "outlet.3.delay.start" , ST_FLAG_RW | ST_FLAG_STRING , 5 , "UPS.OutletSystem.Outlet.[4].StartupTimer" , NULL , "%.0f" , HU_FLAG_SEMI_STATIC , NULL },
2302+ { "outlet.3.power" , 0 , 0 , "UPS.OutletSystem.Outlet.[4].ApparentPower" , NULL , "%.0f" , 0 , NULL },
2303+ { "outlet.3.realpower" , 0 , 0 , "UPS.OutletSystem.Outlet.[4].ActivePower" , NULL , "%.0f" , 0 , NULL },
2304+ { "outlet.3.current" , 0 , 0 , "UPS.OutletSystem.Outlet.[4].Current" , NULL , "%.2f" , 0 , NULL },
2305+ { "outlet.3.powerfactor" , 0 , 0 , "UPS.OutletSystem.Outlet.[4].PowerFactor" , NULL , "%.2f" , 0 , NULL }, /* "%s", 0, mge_powerfactor_conversion }, */
2306+ /* 0: The outlet is not ECO controlled. / 1 : The outlet is ECO controlled. => Readonly! use some yes_no_info */
2307+ { "outlet.3.ecocontrol" , 0 , 0 , "UPS.OutletSystem.Outlet.[4].ECOControl" , NULL , "%s" , HU_FLAG_SEMI_STATIC , outlet_eco_yes_no_info },
2308+
22852309 /* instant commands. */
22862310 /* splited into subset while waiting for extradata support
22872311 * ie: test.battery.start quick
@@ -2311,6 +2335,8 @@ static hid_info_t mge_hid2nut[] =
23112335 { "outlet.1.load.on" , 0 , 0 , "UPS.OutletSystem.Outlet.[2].DelayBeforeStartup" , NULL , "0" , HU_TYPE_CMD , NULL },
23122336 { "outlet.2.load.off" , 0 , 0 , "UPS.OutletSystem.Outlet.[3].DelayBeforeShutdown" , NULL , "0" , HU_TYPE_CMD , NULL },
23132337 { "outlet.2.load.on" , 0 , 0 , "UPS.OutletSystem.Outlet.[3].DelayBeforeStartup" , NULL , "0" , HU_TYPE_CMD , NULL },
2338+ { "outlet.3.load.off" , 0 , 0 , "UPS.OutletSystem.Outlet.[4].DelayBeforeShutdown" , NULL , "0" , HU_TYPE_CMD , NULL },
2339+ { "outlet.3.load.on" , 0 , 0 , "UPS.OutletSystem.Outlet.[4].DelayBeforeStartup" , NULL , "0" , HU_TYPE_CMD , NULL },
23142340
23152341 /* Command to switch ECO(HE), ESS Mode */
23162342 { "experimental.ecomode.stop" , 0 , 0 , "UPS.PowerConverter.Input.[5].Switchable" , NULL , "0" , HU_TYPE_CMD , NULL },
0 commit comments