/usr/sbin/upsstatus


#!/bin/sh

unset LANG LANGUAGE LC_ALL
LC_ALL=C
export LC_ALL

PATH=/usr/sbin:/usr/bin:/sbin:/bin
export PATH

ups="ups1@localhost"

upsrealpowernominal=0
desc=`upsc -L 2>/dev/null`
test "${desc}" = "ups1: Green Cell UPS Microsine 1000VA LCD 700W 230V Pure Sinusoid" && upsrealpowernominal=700 || :

upsc=`upsc ${ups} 2>&1` || exit 1

echo "${upsc}"                                                                               \
  | sed 's,:  *#|#|,: ,'                                                                     \
  | awk 'BEGIN{dummy1=0;                                                                     \
               ambienthumidity=-2;                                                           \
               ambienttemperature=-101;                                                      \
               batterycharge=0;                                                              \
               batterychargelow=0;                                                           \
               batteryruntime=0;                                                             \
               batteryruntimelow=0;                                                          \
               outlet1status="";                                                             \
               outlet2status="";                                                             \
               upsdate="";                                                                   \
               upsload=0;                                                                    \
               upsmodel="";                                                                  \
               upspowernominal=0;                                                            \
               upsrealpower=0;                                                               \
               upsrealpowernominal='"${upsrealpowernominal}"';                               \
               upsstatus="";                                                                 \
               upstime="";                                                                   \
               myupsonbattery=0;                                                             \
               myupscharging=0;                                                              \
               myupsdischarging=0;                                                           \
               myupsisoff=0;                                                                 \
               dummy2=0;}                                                                    \
              {if(NF<2)next;                                                                 \
               if($1=="ambient.humidity:")ambienthumidity=$2;                                \
               if($1=="ambient.temperature:")ambienttemperature=$2;                          \
               if($1=="battery.charge:")batterycharge=$2;                                    \
               if($1=="battery.charge.low:")batterychargelow=$2;                             \
               if($1=="battery.runtime:")batteryruntime=$2;                                  \
               if($1=="battery.runtime.low:")batteryruntimelow=$2;                           \
               if($1=="outlet.1.status:")outlet1status=$2;                                   \
               if($1=="outlet.2.status:")outlet2status=$2;                                   \
               if($1=="ups.date:")upsdate=$2;                                                \
               if($1=="ups.load:")upsload=$2;                                                \
               if($1=="ups.model:"){                                                         \
                 upsmodel=$2;                                                                \
                 for(i=3;i<=NF;i++)                                                          \
                   upsmodel=upsmodel " " $(i);}                                              \
               if($1=="driver.parameter.product:"&&length(upsmodel)==0){                     \
                 upsmodel=$2;                                                                \
                 for(i=3;i<=NF;i++)                                                          \
                   upsmodel=upsmodel " " $(i);}                                              \
               if($1=="ups.power.nominal:")upspowernominal=$2;                               \
               if($1=="ups.realpower:")upsrealpower=$2;                                      \
               if($1=="ups.realpower.nominal:")upsrealpowernominal=$2;                       \
               if($1=="ups.status:"){                                                        \
                 for(i=2;i<=NF;i++){                                                         \
                   if($(i)=="OL")myupsonbattery=0;                                           \
                   if($(i)=="OB")myupsonbattery=1;                                           \
                   if($(i)=="CHRG")myupscharging=1;                                          \
                   if($(i)=="DISCHRG")myupsdischarging=1;                                    \
                   if($(i)=="OFF")myupsisoff=1;}}                                            \
               if($1=="ups.time:")upstime=$2;                                                \
               next;}                                                                        \
           END{s=upsmodel;                                                                   \
               if(length(s)==0)s="Unknown UPS Model";                                        \
               if(myupsisoff!=0){                                                            \
                   s=sprintf("%s is OFF\n",s);                                               \
                   printf("%s",s);                                                           \
                   exit;}                                                                    \
                 else{                                                                       \
                   s=sprintf("%s on ",s);                                                    \
                   if(myupsonbattery!=0)                                                     \
                       s=sprintf("%sbattery\n",s);                                           \
                     else                                                                    \
                       s=sprintf("%sline\n",s);}                                             \
               if((length(upsdate)!=0)&&(length(upstime)!=0))                                \
                 s=sprintf("%sUPS time %s %s\n",s,upsdate,upstime);                          \
               if(myupscharging!=0)                                                          \
                 s=sprintf("%sCharging battery\n",s);                                        \
               if(myupsdischarging!=0)                                                       \
                 s=sprintf("%sDischarging battery\n",s);                                     \
               s=sprintf("%sBattery charge %s %%\n",s,batterycharge);                        \
               tt=batteryruntime-batteryruntimelow;                                          \
               tc=batteryruntime*(batterycharge-batterychargelow);                           \
               if(batterycharge>0)                                                           \
                   tc=tc/batterycharge;                                                      \
                 else                                                                        \
                   tc=-(batteryruntimelow+1);                                                \
               if(tt<tc)                                                                     \
                   reasonremainingtime=1;                                                    \
                 else                                                                        \
                   reasonremainingtime=0;                                                    \
               if(tt<0)                                                                      \
                 tt=0;                                                                       \
               if(tc<0)                                                                      \
                 tc=0;                                                                       \
               batteryruntime=batteryruntime/60.0;                                           \
               batteryruntime=sprintf("%d",batteryruntime+0.5);                              \
               s=sprintf("%sBattery runtime %s min\n",s,batteryruntime);                     \
               if(reasonremainingtime!=0){                                                   \
                   tt=tt/60.0;                                                               \
                   tt=sprintf("%d",tt+0.5);                                                  \
                   s=sprintf("%sShutdown command after %s min",s,tt);                        \
                   batteryruntimelow=sprintf("%d",batteryruntimelow+0.5);                    \
                   s=sprintf("%s due to remaining time of %s sec\n",s,batteryruntimelow);}   \
                 else{                                                                       \
                   tc=tc/60.0;                                                               \
                   tc=sprintf("%d",tc+0.5);                                                  \
                   s=sprintf("%sShutdown command after %s min",s,tc);                        \
                   batterychargelow=sprintf("%d",batterychargelow+0.5);                      \
                   s=sprintf("%s due to remaining capacity of %s %%\n",s,batterychargelow);} \
               s=sprintf("%sLoad %d %%\n",s,upsload+0);                                      \
               if(upsload+0.5>0&&upsload-0.5<0){                                             \
                 upsload=0;                                                                  \
                 upsrealpower=0;}                                                            \
               if(upsrealpower+0.5>0&&upsrealpower-0.5<0)                                    \
                 upsrealpower=upsrealpowernominal*upsload/100.0;                             \
               if(upsrealpower+0.5<0||upsrealpower-0.5>0)                                    \
                 s=sprintf("%sReal output power %s W\n",s,upsrealpower "");                  \
               o="";                                                                         \
               for(i=1;i<=length(outlet1status);i++){                                        \
                 c=substr(outlet1status,i,1);                                                \
                 j=index("abcdefghijklmnopqrstuvwxyz",c);                                    \
                 if(j>0)c=substr("ABCDEFGHIJKLMNOPQRSTUVWXYZ",j,1);                          \
                 o=o c;}                                                                     \
               outlet1status=o;                                                              \
               if(length(outlet1status)!=0)                                                  \
                 s=sprintf("%sOutlet 1 status %s\n",s,outlet1status);                        \
               o="";                                                                         \
               for(i=1;i<=length(outlet2status);i++){                                        \
                 c=substr(outlet2status,i,1);                                                \
                 j=index("abcdefghijklmnopqrstuvwxyz",c);                                    \
                 if(j>0)c=substr("ABCDEFGHIJKLMNOPQRSTUVWXYZ",j,1);                          \
                 o=o c;}                                                                     \
               outlet2status=o;                                                              \
               if(length(outlet2status)!=0)                                                  \
                 s=sprintf("%sOutlet 2 status %s\n",s,outlet2status);                        \
               if(ambienttemperature+100>0)                                                  \
                 s=sprintf("%sCabinet exhaust air temperature %s C\n",s,ambienttemperature); \
               if(ambienthumidity+1>0)                                                       \
                 s=sprintf("%sCabinet exhaust air humidity %s %%\n",s,ambienthumidity);      \
               printf("%s",s);}'

exit 0


Stephan K.H. Seidl