Apcupsd tarkvara ja MODBUS protokolli kasutamine operatsioonisüsteemiga Debian

Allikas: Imre kasutab arvutit

Sissejuhatus

apcupsd http://www.apcupsd.com/ tarkvara abil saab ühendada arvuti ja puhvertoiteallika (UPS) nii, et arvuti jälgib UPS'i tööd ning saab anda UPS'ile korraldusi. Tundub, et aja jooksul on oluliselt muutunud arvuti ja UPS vahelise suhtlemise protokoll, lisaks saab arvuti ja UPS'i omavahel ühedada mitmel erineval viisil (serial kaabel, usb kaabel, ethernet kaabel).

Käesolev tekst on koostatud 2016 aastal levinud ca 750 VA kuni 1500 VA APC Smart-UPS tüüpi puhvertoiteallikate haldamiseks. Konkreetselt on see koostatud sellise kogemuse alusel

  • mudel - APC Smart-UPS 750I (tootekood SMT750I)
  • firmware - v. 09.x
  • arvuti ja ups vaheline ühendus - USB kaabel
  • protokoll - MODBUS (see on üldtunnustatud automaatjuhtimise protokoll, st kasutusala on laiem kui ainult APC UPS'ide jaoks)

Tõenäoliselt sobib see tekst ka muude sarnaste APC mudelite kasutamiseks, aga kolm viimast momenti peavad olema samasugused. Nagu üldiselt, tõenäoliselt on lihtsam tähelepanelikult enne ostu valida välja mida ostetakse, kui peale juhuslikult tehtud ostu hakata otsima, kuidas õnnestub seadet kasutada.

Riistvara

APC Smart-UPS 750I paistab üldvaates välja selline, ta on võrreldes nö vanade UPS'idega kitsam ja madalam, nõks kergem ka

Apcupsd-modbus-3.jpg

APC Smart-UPS 750I paistab tagantvaates välja selline

Apcupsd-modbus-2.jpg

kus

  • kuue tarbija kontaktid, mis kuuluvad kõik ühte korraga juhitavasse nn 'outlet group'i
  • USB kaabel ühenduses arvutiga
  • serial kaabli koht ühendamiseks arvutiga (UPS poolne ots on nn RJ45 formaadis)
  • koht UPS võrgumooduli jaoks

ja eestvaates, eriti LCD paneel nii

Apcupsd-modbus-1.jpg

kus

  • LCD paneel - nuppudega ja paneeliga saab väga hästi UPS seadistused teha; UPSi tarbijate ja UPS enda toidet sisse ja välja lülitada; saab infot UPS ja tema ümbruse olukorra kohta; saab vaadata toimunud sündmuste ajalugu

Tundub, et APC Smart-UPS seadmete identifitseerimisel on oluline fikseerida, mis firmware versiooni seade kasutab

  • < 08 - seadmega ei ole võimalik kasutada MODBUS protokolli ja ehk ei peaks eelistama uuema aja APC selliseid UPS'isid Linuxiga koostöö seisukohast
  • => 08 - väidetavalt on see uuendatav ülespoole edasi, nt 09.x peale (tõenäoliselt PowerChute tarkvara abil Windows keskkonnas); seadmega on võimalik kasutada MODBUS protokolli

LCD paneelilt saab UPS EEPROM sees praktiliselt vajalikud seadistused ära teha (st selleks ei ole tingimata vajalik PowerChute tarkvara Windows platvormilt kasutada kuigi kindlasti on see ülevaatlik)

  • UPS kaliibrida
Main Menu -> Tests & Diags -> CalibrationTest
  • lülitada sisse MODBUS protokolli kasutamine
Main Menu -> Configuration -> Modbus -> Enable
  • Tundub, et sellel parameetril ei ole praktilist tähendust (vähemalt apcupsd kasutamise seisukohast)
Main Menu -> Configuration -> Low Battery Warning -> 500 s
  • ajavahemik peale seda, kui UPS saaks oma tarbijatele toite lülitada ja kui ta seda teeb
Main Menu -> Configuration -> Group Outlets -> Turn on delay -> 30 s
  • viivitus peale seda, kui arvuti on upsile öelnud, et --killpower ja kui UPS lülitab tarbijatel toite välja
Main Menu -> Configuration -> Group Outlets -> Turn off delay -> 60 s
  • kui UPSile öelda reboot käsk, kui kaua ta seejuures peab vahet
Main Menu -> Configuration -> Group Outlets -> Reboot duration -> 45 s
  • milline tagatud tööaeg saavutatakse UPS akude laadimisega enne, kui ups ise käivitatakse ja oma tarbijatele toide sisse lülitatakse (tundub, et see aeg arvutatakse viimati olnud koormuse alusel)
Main Menu -> Configuration -> Group Outlets -> Minium Return Runtime -> 600 s

UPS kaliibrimine

UPS kaliibrimine on vajalik, et UPS oskaks oma akude laaditust, tarbijate toitega varustamise aega jms arvutada.

Kaliibrimise protseduur

  • ühendada UPS järgi stabiilne koormus > 35 %
  • leida LCD pealt üles
Main Menu -> Test & Diag -> Calibration Test

Test võtab aega ca 20 minutit.

Kasulikud lisamaterjalid

Tööpõhimõte

apcupsd seadistusfail /etc/apcupsd/apcupsd.conf koosneb viiest sektsioonist, iga ees märkus, millal nendega töötada

  • General configuration parameters - UPS esmane seadistamisel ja käivitamisel
  • Configuration parameters used during power failures - UPS ja arvuti toite probleemide haldamine
  • Configuration statements for Network Information Server - UPS kasutamine mitme arvutiga
  • Configuration statements used if sharing a UPS with more than one machine
  • Configuration statements used in updating the UPS EPROM - seda ei soovitata kasutada

Olgu ülesandeks seadistada valmisolek selliseks sündmuste toimumiseks

  • UPS akud on 100% täis, arvuti töötab
  • UPS toide kaob lühikeseks ajaks (nt 2 minutit), akud hakkavad tühjenema, arvuti saab UPS käest info, et UPS töötab akude pealt
  • UPS toide tuleb varsti tagasi, arvuti saab UPS käest info, et UPS toide on tagasi
  • UPS akud laaditakse 100% peale ja süsteemi normaalne töörežiim on tagasi
  • UPS toide kaob pikemaks ajaks (nt 5 tunniks), akud hakkavad tühjenema, arvuti saab UPS käest info, et UPS töötab akude pealt
  • UPS akudel on jäänud jõudu alles 20%, arvuti saab selle kohta UPS käest info
  • arvutis töötav UPS suhtlemise protsess käivitab arvutis tavalise shutdown järgnevuse (ühe erandiga)
  • shutdown järgnevuse lõpuosas toimub erand, kuna shutdown'i käivitas ups suhtlemise protsess, siis tekitati kontrollfail /etc/apcupsd/powerfail
  • shutdown järgnevus oskab seda powerfail faili arvestada ning UPS'ile endale saadetakse enne nö päris lõppu (aga peale failisüsteemide read-only lülitamist) käsk, et UPS lülitaks endale toite välja
  • arvuti jääb nö õhku, failisüsteemid on ohtus asendis, kus on /sbin/apcupsd on külge ühendatud read-only, kernel töötab
  • UPS kasutab teatud viivitust ja lülitab enda tarbijatel ja ise enda jaoks toite välja
  • UPS toite taastumisel UPS käivitub ja hakkab akusid laadima
  • kui akud on nt 40% laaditud, siis ups lülitab oma tarbijatele toite sisse (nn 40% on seadistatav ja põhineb vajadusel olla valmis ära teenindama võimalik järgmine voolukatkestus koos vajaliku shutdown järgnevusega)
  • teenused hakkavad arvutis tööle ja akud laadidakse 100% juurde, süsteemi töötab tavalises režiimis

Seejuures tuleb arvestada erandlike olukordadega

  • kui peale seda kui UPS sai korralduse lülitada enda toide välja (mida üldiselt ei ole kuna nö 'vool on serveriruumist ära pikemaks ajaks), kuid UPS toide taastub, siis UPS lülitab siiski oma toite välja; ja ootab seadistatud ajavahemiku ning lülitab enda jaoks oma toite tagasi sisse

Tarkvara paigaldamine MODBUS protokolli kasutamiseks

Vaikimisi ei ole Debian v. 8 Jessie paketihalduse apcupsd tarkvaras modbus protokolli kasutamine sisse lülitatud. Kuna apcupsd sisaldab suhteliselt vähe faile, siis võiks sobida selline lähenemine

  • paigaldada paketihaldusest (nii tekivad sobivad käivitusskriptid, seadistusfailid jms)
  • kompileerida
  • kopeerida üle programmid

Paigaldamiseks sobib öelda

# apt-get install apcupsd
# apt-mark hold apcupsd

Kompileerimiseks tuleb kopeerida aadressil http://www.apcupsd.com/ lähtetekst (nt v. 3.14.14) ja sobib öelda

 # apt-get build-dep apcupsd
 # apt-get install libusb-dev
 # ./configure --enable-modbus-usb
Configuration on Fri Nov 25 12:39:31 EET 2016:

  Host:                       x86_64-unknown-linux-gnu -- debian 8.6
  Apcupsd version:            3.14.14 (31 May 2016)
  Source code location:       .
  Install binaries:           /sbin
  Install config files:       /etc/apcupsd
  Install man files:          ${prefix}/share/man
  Nologin file in:            /etc
  PID directory:              /var/run
  LOG dir (events, status)    /var/log
  LOCK dir (for serial port)  /var/lock
  Power Fail dir              /etc/apcupsd
  Compiler:                   g++ 4.9.2-10)
  Preprocessor flags:          -I/usr/local/include -I$(topdir)/src/libusbhid
  Compiler flags:             -g -O2 -fno-exceptions -fno-rtti -Wall -Wno-unused-result 
  Linker:                     gcc
  Linker flags:                -L/usr/local/lib
  Host and version:           debian 8.6
  Shutdown Program:           /sbin/shutdown
  Port/Device:                /dev/ttyS0
  Network Info Port (CGI):    3551
  UPSTYPE                     apcsmart
  UPSCABLE                    smart

  drivers (no-* are disabled): apcsmart dumb net no-usb snmp pcnet modbus modbus-usb no-test

  enable-nis:                 yes
  with-nisip:                 0.0.0.0
  enable-cgi:                 no
  with-cgi-bin:               /etc/apcupsd
  with-libwrap:               
  enable-pthreads:            yes
  enable-dist-install:        yes
  enable-gapcmon:             no
  enable-apcagent:            no
  
Configuration complete: Run 'make' to build apcuspd.

Seejärel

# make

ning kopeerida üle sellised failid

# cd src
# cp smtp apctest apcupsd apcaccess /sbin

Lisaks, tundub, et kuna Debian v. 8 Jessie puhul on kasutuses systemd, siis nö tavaline /etc/init.d/halt skripti juures '/sbin/apcupsd --powerkill' väljakutsumine ei toimi. Systemd jaoks tuleks moodustada nt selline seadistusfail

# cat /etc/systemd/system/apcupsd_poweroff.service 
[Unit]
Description=To poweroff UPS after power failure and system shutdown
DefaultDependencies=no
Before=halt.target shutdown.target poweroff.target

[Service]
Type=oneshot
ExecStart=/etc/init.d/ups-monitor poweroff

[Install]
WantedBy=halt.target shutdown.target poweroff.target

ning öelda

# systemctl enable apcupsd_poweroff.service

Kasulikud lisamaterjalid

Esmane seadistamine ja käivitamine

Alustuseks võiks lihtsalt kontrollida, et apcupsd tarkvara saab UPS'iga suheldud, seejuures on oluline töötada vaid 'General configuration parameters' sektsiooni parameetritega

# egrep -v "^$|^#" /etc/apcupsd/apcupsd.conf 
UPSNAME apc
UPSCABLE usb
UPSTYPE modbus
DEVICE 
LOCKFILE /var/lock
SCRIPTDIR /etc/apcupsd
PWRFAILDIR /etc/apcupsd
NOLOGINDIR /etc
ONBATTERYDELAY 6
BATTERYLEVEL 5
MINUTES 3
TIMEOUT 0
ANNOY 300
ANNOYDELAY 60
NOLOGON disable
KILLDELAY 0
NETSERVER on
NISIP 127.0.0.1
NISPORT 3551
EVENTSFILE /var/log/apcupsd.events
EVENTSFILEMAX 10
UPSCLASS standalone
UPSMODE disable
STATTIME 0
STATFILE /var/log/apcupsd.status
LOGSTATS off
DATATIME 0

ning failis /etc/default/apcupsd

..
ISCONFIGURED=yes

MODBUS protokolliga apctest ütlemine, apcupsd deemon ei käi samal ajal

# apctest 

2016-11-25 01:35:01 apctest 3.14.14 (31 May 2016) debian
Checking configuration ...
sharenet.type = Network & ShareUPS Disabled
cable.type = USB Cable
mode.type = MODBUS UPS Driver
Setting up the port ...
Doing prep_device() ...

You are using a MODBUS cable type, so I'm entering MODBUS test mode
Hello, this is the apcupsd Cable Test program.
This part of apctest is for testing MODBUS UPSes.

Getting UPS capabilities...SUCCESS

Please select the function you want to perform.

1)  Test kill UPS power
2)  Perform self-test
3)  Read last self-test result
4)  View/Change battery date
5)  View manufacturing date
10) Perform battery calibration
11) Test alarm
 Q) Quit

Select function number: 5

Manufacturing date: 08/20/2016

Käivitamiseks käsurealt foregroundis

# apcupsd -b

ja andmete lugemiseks (apcaccess kasutamine eeldab, et NETSERVER on sisse lülitatud ja kuulab localhost aadressil)

# apcaccess
APC      : 001,041,1006
DATE     : 2016-11-25 01:24:11 +0200  
HOSTNAME : moraal
VERSION  : 3.14.14 (31 May 2016) debian
UPSNAME  : APCUPS
CABLE    : USB Cable
DRIVER   : MODBUS UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2016-11-25 01:17:53 +0200  
MODEL    : Smart-UPS 750
STATUS   : ONLINE 
LINEV    : 228.9 Volts
LOADPCT  : 0.0 Percent
LOADAPNT : 0.0 Percent
BCHARGE  : 100.0 Percent
TIMELEFT : 270.0 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 0 Seconds
OUTPUTV  : 228.9 Volts
DWAKE    : 100 Seconds
DSHUTD   : 300 Seconds
ITEMP    : 31.9 C
BATTV    : 26.3 Volts
LINEFREQ : 50.0 Hz
OUTCURNT : 0.00 Amps
LASTXFER : Line voltage notch or spike
NUMXFERS : 1
XONBATT  : 2016-11-25 01:22:02 +0200  
TONBATT  : 0 Seconds
CUMONBATT: 127 Seconds
XOFFBATT : 2016-11-25 01:24:09 +0200  
SELFTEST : OK
STATFLAG : 0x05000008
MANDATE  : 2016-08-20
SERIALNO : 3S1633X06742
BATTDATE : 2016-08-20
NOMOUTV  : 230 Volts
NOMPOWER : 500 Watts
NOMAPNT  : 750 VA
FIRMWARE : UPS 09.3 / 00.4
END APC  : 2016-11-25 01:24:11 +0200

Teoreetiliselt on võimalik apctest utiliidi abil ka UPS EEPROM sisu seadistada, kuid seda üldiselt ei soovitata teha, pigem kasutada LCD paneeli või Windows keskkonnas PowerChute utiliidiga.

Toiteprobleemide haldamise seadistamine ja käivitamine

Toiteprobleemide haldamiseks on kasutada sellised parameetrid

  • ONBATTERYDELAY 6 - see puudutab ainult sündmuste logimist ja konsoolile teadete esitamist
  • BATTERYLEVEL 50 - millise aku täituvuse protsendi juures algavad shutdown sündmused
  • MINUTES 3 - kui palju tohib olla UPSil veel aega (minutites) jäänud süsteeme käigus hoida, et algaksin shutdown sündmused

Lisaks neile parameetritele on olulised UPS LCD paneelil tehtud 'Outlets' sektsiooni seadistused.

apcupsd kasutamine võrgus mitme arvuti jaoks

Tundub, et apcupsd kasutamine võrgus on suhteliselt primitiivne võrreldes NUT tarkvara võimalustega.

Server

Võrgus töötamise jaoks on UPS'iga ühendatud arvuti /etc/apcupsd/apcupsd.conf seadistusfailis asjakohased sellised parameetrid

..
NETSERVER on
# NISIP 127.0.0.1
NISPORT 3551
EVENTSFILE /var/log/apcupsd.events
EVENTSFILEMAX 10
...

Klient

..
UPSCABLE ether
UPSTYPE net
DEVICE 192.168.10.8:3551

apcaccess väljundi tõlgendamine

# apcaccess 
APC      : 001,042,1049
DATE     : 2016-12-17 17:33:06 -0500  
HOSTNAME : audorups
VERSION  : 3.14.14 (31 May 2016) debian
UPSNAME  : APCUPS
CABLE    : USB Cable
DRIVER   : MODBUS UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2016-12-17 15:05:28 -0500  
MODEL    : Smart-UPS 750
STATUS   : ONLINE 
LINEV    : 233.2 Volts
LOADPCT  : 71.5 Percent
LOADAPNT : 65.0 Percent
BCHARGE  : 93.0 Percent
TIMELEFT : 9.0 Minutes
MBATTCHG : 95 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 0 Seconds
OUTPUTV  : 233.2 Volts
DWAKE    : 30 Seconds
DSHUTD   : 60 Seconds
ITEMP    : 41.4 C
BATTV    : 26.6 Volts
LINEFREQ : 50.0 Hz
OUTCURNT : 2.06 Amps
LASTXFER : Automatic or explicit self test
NUMXFERS : 1
XONBATT  : 2016-12-17 15:38:10 -0500  
TONBATT  : 0 Seconds
CUMONBATT: 515 Seconds
XOFFBATT : 2016-12-17 15:46:45 -0500  
LASTSTEST: 2016-12-17 15:38:11 -0500  
SELFTEST : OK
STATFLAG : 0x05000008
MANDATE  : 2016-08-20
SERIALNO : 3S1633X06742
BATTDATE : 2016-08-20
NOMOUTV  : 230 Volts
NOMPOWER : 500 Watts
NOMAPNT  : 750 VA
FIRMWARE : UPS 09.3 / 00.4
END APC  : 2016-12-17 17:33:10 -0500

kus

  • osa parameetreid ei ole muudetavad ja iseloomustavad füüsilist seadet ennast (nt MODEL)
  • osa parameetreid iseloomustavad käesoleva hetke elektrilisi vm olusid (nt LINEV, ITEMP)
  • osa parameetreid iseloomustavad kasutatavat apcupsd tarkvara (nt VERSION)
  • osa parameetreid väljendavad LCD paneelil tehtud seadistusi (nt DWAKE)
  • osa parameetreid väljendavad apcupsd seadistusfailis tehtud seadistusi (nt MBATTCHG)
  • osa parameetreid iseloomustavad ups'iga toimunud sündmusi (nt NUMXFERS)

Kasulikud lisamaterjalid

Probleemid

  • Peale mõnda aega apcupsd protsessi töötamist (nt paar päeva) saab apcaccess programm käivitamisel timeout'i. Tundub, et kui strace abil minna külge apcupsd protsessile, siis edasi apcaccess jällegi tööötab
# strace -p PID
# apcaccess

Testimine

Läbi tuleks testida sellised stsenaariumid

  • toide läheb ära korraks ja tuleb tagasi (nt mõni minut) - eeldatavasti shutdown jms järgnevus ei käivitu, UPS signaalib sellest sündmusest arvutile ja see registreeritakse, muud midagi (NUMXFERS väärtus suureneb ühe võrra)
  • toide läheb ära pikaks ajaks (nt 5 tundi) ja tuleb tagasi - käivitub shutdown järgnevus, arvuti teeb endale shutdowni ning seejuures öeldakse UPS'ile killpower ja UPS lülitab ennast välja; toite tagasi tulles veendub UPS, et ta on piisavalt jõudu ja alles siis käivitatakse arvuti
  • toide läheb ära, käivitub shutdown järgnevus, aga toide tuleb seejuures tagasi - käivitub shutdown järgnevus ja see tehakse läbi st UPS lülitab enda toite välja ja tagasi sisse (vaatamata sellele, et tegevuse ajal oli UPS toide iseenesest olemas); UPS tarbijate toide lülitatkse seejuures ära välja ja sisse

Seire

TODO

apcupsd kasutamine Windows platvormil

TODO

apcupsd kasutamine Xen virtuaalseid arvuteid haldaval hostil

Põhimõtteliselt on antud juhul virtuaalsete arvutite start-stop kontrollimiseks kaks võimalust

  • hallata virtuaalseid arvuteid üle võrgu
  • start-stoppida neid xl utiliidiga

Üle võrgu juhtimine on suhteliselt kohmakas ja küllap xl abil saab otsekohesema tulemuse.

PowerChute kasutamine Win7 keskkonnas

Powerchute kasutamine paistab välja selliselt, Shutdown

Apc-smart-ups-750I-fw9.x-2.gif

kus

  • TODO

ja Sequence

Apc-smart-ups-750I-fw9.x-1.gif

kus

  • TODO

Tarkvara paigaldamine USB protokolli kasutamiseks

Kõik sarnaselt MODBUS vastavatele punktidele, aga kompileerida

# ./configure --enable-usb

Tulemusena sobib kasutada apcupsd tarkvara muus osas samamoodi kui käesolevas tektist on kirjeldatud, aga nt vanade APC upsidega, mis ei toeta modbus protokolli.

Kasulikud lisamaterjalid