UPS scripts

From MikroTik Wiki
Revision as of 10:06, 26 February 2008 by Steinmann (talk | contribs) (New page: == version for ROS 3.x == version for 2.9 below # UPS-Script powerfail # (c) steinmann und weidinger OEG # www.stone-rich.at # # Watches ups status and sends emails on powerfail and batt...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

version for ROS 3.x

version for 2.9 below

  1. UPS-Script powerfail
  2. (c) steinmann und weidinger OEG
  3. www.stone-rich.at
  4. Watches ups status and sends emails on powerfail and battery low.
  5. This script will FAIL if:
  6. - Policies write, test, and read are not set
  7. - The system name contains non-standard characters (space, /, ...)
  8. - The UPS is not named ups1
  9. This script was tested on 3.0rc5.
  10. user-configurable parameters below:
local mailserver [:resolve mailserver]
local mailfrom "from@domain.xy"
local mailto "noc@xyz.xy"
  1. do NOT make changes below!
local battalarm 15
local battok 40
global flagonbatt
global flagbattlow
local curonbatt
local curcharge
local sysname [/system identity get name]
local datetime ([/system clock get date] . " " . [/system clock get time])
  1. First run? If so, we need to initialize the global flags
if (("-" . $flagonbatt)="-") do={:set flagonbatt 0}
if (("-" . $flagbattlow)="-") do={:set flagbattlow 0}
set curonbatt false
set curcharge 100

/system ups monitor [/system ups find name="ups1"] once do={:set curonbatt $"on-battery"; :set curcharge $"battery-charge"}

if (($curonbatt) && ($flagonbatt=0)) do={
 :set flagonbatt 1
/tool e-mail send from=($mailfrom)  to=($mailto) server=($mailserver) subject=($sysname . ": Power failure!") body=($sysname . " is on battery since " . $datetime)
 :log info ("Power-Fail: EMail sent to " . $mailto)

}

if ((!$curonbatt) && ($flagonbatt=1)) do={
:set flagonbatt 0
/tool e-mail send from=($mailfrom)  to=($mailto) server=($mailserver) subject=($sysname . ": Power is back") body=($sysname . " is back on power since " . $datetime)
 :log info ("Power-Restore: Email sent to " . $mailto)

}

if (($curcharge <= $battalarm) && ($flagbattlow=0)) do={
 :set flagbattlow 1
 /tool e-mail send from=($mailfrom)  to=($mailto) server=($mailserver) subject=($sysname . ": Low battery!") body=($sysname . " battery is at " . $curcharge . "%! " . $datetime)
 :log info ("Batt-Low: Email sent to " . $mailto)

}

if (($curcharge >= $battok) && ($flagbattlow=1)) do={
 :set flagbattlow 0
 /tool e-mail send from=($mailfrom)  to=($mailto) server=($mailserver) subject=($sysname . ": Battery recharged") body=($sysname . " Battery recharged to " . $curcharge . "% " . $datetime)
 :log info ("Batt-Recharged: Email sent to " . $mailto)

}


version for ROS 2.9x:

  1. UPS-Script powerfail
  2. (c) steinmann und weidinger OEG
  3. www.stone-rich.at
  4. Watches ups status and sends emails on powerfail and battery low.
  5. This script will FAIL if:
  6. - Policies write, test, and read are not set
  7. - The system name contains non-standard characters (space, /, ...)
  8. - The UPS is not named ups1
  9. This script will not run on 3.x beta!!
set mailserver [:resolve mailserver]
set mailto "to@domain.com"
set mailfrom "from@doamin.xy"
set battalarm 15
set battok 40
set sysname [/system identity get name]
set datetime ([/system clock get date] . " " . [/system clock get time])


  1. First run? If so, we need to initialize the global flags
if (("-" . $flagonbatt)="-") do {:global flagonbatt 0}
if (("-" . $flagbattlow)="-") do {:global flagbattlow 0}
set curonbatt false
set curcharge 100

/system ups monitor [/system ups find name "ups1"] once do {:set curonbatt $on-battery; :set curcharge $battery-charge}

if (($curonbatt) && ($flagonbatt=0)) do {
 :global flagonbatt 1
 /tool e-mail send from=($mailfrom)  to=($mailto) server=($mailserver) subject=($sysname . ": Power failure!") body=($sysname . " is on battery since " . $datetime)
 :log info ("Power-Fail: EMail sent to " . $mailto)

}

if ((!$curonbatt) && ($flagonbatt=1)) do {
:global flagonbatt 0
 /tool e-mail send from=($mailfrom)  to=($mailto) server=($mailserver) subject=($sysname . ": Power is back") body=($sysname . " is back on power since " . $datetime)
 :log info ("Power-Restore: Email sent to " . $mailto)

}

if (($curcharge <= $battalarm) && ($flagbattlow=0)) do {
 :global flagbattlow 1
 /tool e-mail send from=($mailfrom)  to=($mailto) server=($mailserver) subject=($sysname . ": Low battery!") body=($sysname . " battery is at " . $curcharge . "%! " . $datetime)
 :log info ("Batt-Low: Email sent to " . $mailto)

}

if (($curcharge >= $battok) && ($flagbattlow=1)) do {
 :global flagbattlow 0
 /tool e-mail send from=($mailfrom)  to=($mailto) server=($mailserver) subject=($sysname . ": Battery recharged") body=($sysname . " Battery recharged to " . $curcharge . "% " . $datetime)
 :log info ("Batt-Recharged: Email sent to " . $mailto)

}