Продолжение серии постов о мониторинге состояния ИБП. Предыдущий пост: Настройка мониторинга состояния ИБП SNR серии Element в Windows.

APC Back-UPS RS 900G

ups.conf
[ups-apc900br]
    driver = usbhid-ups
    port = auto
    vendorid = 051d
    productid = 0002
    ignorelb
    override.battery.charge.low = 10
    override.battery.charge.warning = 30
    override.battery.runtime.low = 120
nut.conf
MODE=standalone
upsd.conf
LISTEN 0.0.0.0 3493
upsd.users
[admin]
    password=pass
    actions=SET
    instcmds=ALL
    upsmon master

[upsmon_local]
    password=pass
    upsmon master

[upsmon_remote]
    password=pass
    upsmon slave
upsmon.conf
MONITOR ups-apc900br@localhost 1 upsmon_local pass master

MINSUPPLIES 1
POWERDOWNFLAG "C:\\killpower"
#SHUTDOWNCMD "shutdown -s -t 0 -d 6:12"
SHUTDOWNCMD "C:\\Windows\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe C:\\ProgramData\\icinga2\\scripts\\icinga2\\Invoke-UPSShutdownSystem.ps1"

NOTIFYCMD "C:\\Windows\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe C:\\ProgramData\\icinga2\\scripts\\icinga2\\Send-UPSNotify.ps1"

NOTIFYMSG ONLINE     "\"'UPS %s on line power'\""
NOTIFYMSG ONBATT     "\"'UPS %s on battery'\""
NOTIFYMSG LOWBATT    "\"'UPS %s battery is low'\""
NOTIFYMSG FSD        "\"'UPS %s: forced shutdown in progress'\""
NOTIFYMSG COMMOK     "\"'Communications with UPS %s established'\""
NOTIFYMSG COMMBAD    "\"'Communications with UPS %s lost'\""
NOTIFYMSG SHUTDOWN   "\"'Auto logout and shutdown proceeding'\""
NOTIFYMSG REPLBATT   "\"'UPS %s battery needs to be replaced'\""
NOTIFYMSG NOCOMM     "\"'UPS %s is unavailable'\""
NOTIFYMSG NOPARENT   "\"'upsmon parent process died - shutdown impossible'\""

NOTIFYFLAG ONLINE    SYSLOG+EXEC
NOTIFYFLAG ONBATT    SYSLOG+EXEC
NOTIFYFLAG LOWBATT   SYSLOG+EXEC
NOTIFYFLAG FSD       SYSLOG+EXEC
NOTIFYFLAG COMMOK    SYSLOG+EXEC
NOTIFYFLAG COMMBAD   SYSLOG+EXEC
NOTIFYFLAG SHUTDOWN  SYSLOG+EXEC
NOTIFYFLAG REPLBATT  SYSLOG+EXEC
NOTIFYFLAG NOCOMM    SYSLOG+EXEC
NOTIFYFLAG NOPARENT  SYSLOG+EXEC

POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5
Параметры ИБП APC Back-UPS RS 900G
c:\NUT\bin>upsc.exe apc900br

battery.charge: 100
battery.charge.low: 50
battery.charge.warning: 80
battery.date: 2001/09/25
battery.mfr.date: 2018/02/19
battery.runtime: 5105
battery.runtime.low: 120
battery.type: PbAc
battery.voltage: 27.3
battery.voltage.nominal: 24.0
device.mfr: American Power Conversion
device.model: Back-UPS RS 900G
device.serial: 4B1808P00130
device.type: ups
driver.flag.ignorelb: enabled
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.productid: 0002
driver.parameter.vendorid: 051d
driver.version: Windows-v2.6.5-5-7-g72f380c
driver.version.data: APC HID 0.95
driver.version.internal: 0.38
input.sensitivity: medium
input.transfer.high: 294
input.transfer.low: 176
input.transfer.reason: input voltage out of range
input.voltage: 242.0
input.voltage.nominal: 230
ups.beeper.status: enabled
ups.delay.shutdown: 20
ups.firmware: 879.L4 .I
ups.firmware.aux: L4
ups.load: 13
ups.mfr: American Power Conversion
ups.mfr.date: 2018/02/19
ups.model: Back-UPS RS 900G
ups.productid: 0002
ups.realpower.nominal: 540
ups.serial: 4B1808P00130
ups.status: OL
ups.test.result: No test initiated
ups.timer.reboot: 0
ups.timer.shutdown: -1
ups.vendorid: 051d
Send-UPSNotify.ps1
<#
 .SYNOPSIS
  Скрипт для Icinga 2 - Отправка push-сообщения от ИБП.

 .DESCRIPTION


 .PARAMETER UPSMessage
  Текст сообщения от ИБП

 .EXAMPLE
Send-UPSNotify -UPSMessage "UPS apc900br battery is low"

 .LINK
  https://webnote.satin-pl.ru/2018/07/05/win_nut_part2/

 .NOTES
  Version:        0.1
  Author:         Pavel Satin
  Email:          plsatin@yandex.ru
  Creation Date:  08.07.2018
  Purpose/Change: Initial script development

#>
Param(
    [Parameter(Mandatory = $true)]
        [string]$UPSMessage
    )

# [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
# $ErrorActionPreference = "SilentlyContinue"

#Отправка pushover сообщения
$uri = "https://api.pushover.net/1/messages.json"
$parameters = @{
    token = "PUSHOVER_TOKEN"
    user = "PUSHOVER_USER"
    message = "NUT: $UPSMessage"
}
$pushoverreq = $parameters | Invoke-RestMethod -Uri $uri -Method Post
Invoke-UPSShutdownSystem.ps1
<#
 .SYNOPSIS
  Скрипт для Icinga 2 - Выключение удаленного хоста (для NUT)

 .DESCRIPTION


 .PARAMETER ComputerName
  Имя компьютера

 .LINK
  https://webnote.satin-pl.ru

 .NOTES
  Version:        0.1
  Author:         Pavel Satin
  Email:          plsatin@yandex.ru
  Creation Date:  12.07.2018
  Purpose/Change: Initial script development
#>
Param(
    [Parameter(Mandatory = $false)]
    [string]$ComputerName = "."
)


$returnStateOK = 0
$returnStateWarning = 1
$returnStateCritical = 2
$returnStateUnknown = 3

if ($ComputerName -eq ".") {
    $result = $true
} else {
    $result = Test-Connection -ComputerName $ComputerName -Count 2 -Quiet
}

if ((Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain) {
    $myFQDN = (Get-WmiObject win32_computersystem).DNSHostName+"."+(Get-WmiObject win32_computersystem).Domain
    $myFQDN = $myFQDN.ToLower()
    Write-Verbose "FQDN HostName: $myFQDN"
} else {
    $myFQDN = (Get-WmiObject win32_computersystem).DNSHostName
    $myFQDN = $myFQDN.ToLower()
    Write-Verbose "FQDN HostName: $myFQDN"
}


if ($result) {

    $UPSSutdownMessage = "System (FQDN: $myFQDN) forced shutdown by NUT"

    $uri = "https://api.pushover.net/1/messages.json"
    $parameters = @{
        token = "PUSHOVER_TOKEN"
        user = "PUSHOVER_USER"
        message = "NUT: $UPSSutdownMessage"
    }
    $pushoverreq = $parameters | Invoke-RestMethod -Uri $uri -Method Post

    # Здесь должны быть какие то действия, например выключение виртуальных машин






    $haltResult = (Get-WmiObject -Class Win32_OperatingSystem -ComputerName $ComputerName).Win32Shutdowntracker(10, $UPSSutdownMessage, 0x00060000, 12)

    if ($haltResult.ReturnValue -eq 0) {
        Write-Host "OK - Command send"
        [System.Environment]::Exit($returnStateOK)
    } else {
        Write-Host "UNKNOWN - Command sent, but something went wrong!"
        [System.Environment]::Exit($returnStateUnknown)
    }

} else {
    Write-Host "Host $ComputerName is not available."
    [System.Environment]::Exit($returnStateUnknown)
}
System Events (для анализа выключений)
  • 1074 - Инициация процесса выключения
  • 6008 - Событие: Предыдущее завершение работы системы ... было неожиданным.

Ссылки