1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
|
proc DrawTickLines {c imwid imhgt} {
$c create line 50 60 150 60 -fill darkgrey
$c create line 50 120 150 120 -fill darkgrey
$c create line 50 180 150 180 -fill darkgrey
$c create line 50 240 150 240 -fill darkgrey
$c create line 50 300 150 300 -fill darkgrey
$c create line 50 0 50 300 150 300 150 1 50 1 -fill black
}
proc DrawText {c min step imwid imhgt} {
set next $min
$c create text 46 300 -anchor se -text [format "%d" $next]
set next [expr $next + $step]
$c create text 46 240 -anchor e -text [format "%d" $next]
set next [expr $next + $step]
$c create text 46 180 -anchor e -text [format "%d" $next]
set next [expr $next + $step]
$c create text 46 120 -anchor e -text [format "%d" $next]
set next [expr $next + $step]
$c create text 46 60 -anchor e -text [format "%d" $next]
set next [expr $next + $step]
$c create text 46 0 -anchor ne -text [format "%d" $next]
}
proc DrawBattVolt {c imwid imhgt} {
global BattV NomBattV
switch -- $NomBattV {
12.0 {
set minv 3
set maxv 18
set hip [expr 12 + 3]
set lowp [expr 12 - 3]
}
24.0 {
set minv 15
set maxv 30
set hip [expr 24 + 5]
set lowp [expr 24 - 5]
}
48.0 {
set minv 30
set maxv 60
set hip [expr 48 + 7]
set lowp [expr 48 - 7]
}
default {
set minv 0
set maxv [expr 10 * (($BattV / 10) + 1)]
set hip [expr $BattV + 5]
set lowp [expr $BattV -5]
}
}
set deltav [expr $maxv - $minv]
set battpos [expr $imhgt - (($BattV - $minv) * $imhgt / $deltav)]
set hipos [expr $imhgt - (($hip - $minv) * $imhgt / $deltav)]
set lowpos [expr $imhgt - (($lowp - $minv) * $imhgt / $deltav)]
$c create rectangle 50 0 150 $imhgt -fill green
$c create rectangle 50 0 150 $hipos -fill red -width 0
$c create rectangle 50 $lowpos 150 $imhgt -fill red -width 0
$c create rectangle 75 $battpos 125 $imhgt -fill black
$c create text 75 [expr $imhgt + 10] -anchor w -text [format "%.1f VDC" $BattV]
DrawTickLines $c $imwid $imhgt
DrawText $c $minv [expr $deltav/5] $imwid $imhgt
}
proc DrawUtility {c imwid imhgt} {
global LineV LowTrans HiTrans
set minv 175
set deltav 75
set utilpos [expr $imhgt - (($LineV - $minv) * $imhgt / $deltav)]
set hipos [expr $imhgt - (($HiTrans - $minv) * $imhgt / $deltav)]
set lowpos [expr $imhgt - (($LowTrans - $minv) * $imhgt / $deltav)]
$c create rectangle 50 0 150 $imhgt -fill green
$c create rectangle 50 0 150 $hipos -fill red
$c create rectangle 50 $lowpos 150 $imhgt -fill red
$c create rectangle 75 $utilpos 125 $imhgt -fill black
$c create text 75 [expr $imhgt + 10] -anchor w -text [format "%.1f VAC" $LineV]
DrawTickLines $c $imwid $imhgt
DrawText $c $minv [expr $deltav/5] $imwid $imhgt
}
proc DisplayStatus {} {
global BattChg TimeLeft LoadPct HostName Release LineV RetPct
global LineFreq BattV NomBattV ITemp
global Model Status
set imhgt 300
set imwid 100
frame .main.text -borderwidth 2
pack .main.text -side left -expand no -pady 4
label .main.text.lab00 -text "Host:"
label .main.text.lab01 -text $HostName
grid .main.text.lab00 -row 0 -column 0 -sticky e
grid .main.text.lab01 -row 0 -column 1 -sticky ew
label .main.text.lab10 -text "UPS Model:"
label .main.text.lab11 -text $Model
grid .main.text.lab10 -row 1 -column 0 -sticky e
grid .main.text.lab11 -row 1 -column 1 -sticky ew
label .main.text.lab20 -text "UPS Status:"
label .main.text.lab21 -text $Status
grid .main.text.lab20 -row 2 -column 0 -sticky e
grid .main.text.lab21 -row 2 -column 1 -sticky ew
label .main.text.lab30 -text "Internal Temp:"
label .main.text.lab31 -text $ITemp
grid .main.text.lab30 -row 3 -column 0 -sticky e
grid .main.text.lab31 -row 3 -column 1 -sticky ew
label .main.text.lab40 -text "Apcupsd Release:"
label .main.text.lab41 -text $Release
grid .main.text.lab40 -row 4 -column 0 -sticky e
grid .main.text.lab41 -row 4 -column 1 -sticky ew
grid columnconfigure .main.text 1 -weight 1
frame .main.image1
pack .main.image1 -side left -pady 4
canvas .main.image1.c -width [expr $imwid+50] -height [expr $imhgt + 20]
DrawBattVolt .main.image1.c $imwid $imhgt
pack .main.image1.c
frame .main.image2
pack .main.image2 -side left -pady 4
canvas .main.image2.c -width [expr $imwid+50] -height [expr $imhgt + 20]
DrawUtility .main.image2.c $imwid $imhgt
pack .main.image2.c
frame .main.image3
pack .main.image3 -side left -pady 4
canvas .main.image3.c -width [expr $imwid+75] -height [expr $imhgt + 20]
DrawUtility .main.image3.c $imwid $imhgt
pack .main.image3.c
}
proc GetStatus {} {
global BattChg TimeLeft LoadPct HostName Release LineV RetPct
global LineFreq BattV NomBattV ITemp LowTrans HiTrans
global Model Status
foreach {i} {BattChg TimeLeft LoadPct HostName Release LineV \
RetPct LineFreq BattV ITemp NomBattV LowTrans \
HiTrans Model Status} {
set $i 0
}
set fd [open "| ./client localhost:7000 status" "r"]
while {[gets $fd line] > 0} {
scan $line "%9s" label
switch -- $label {
BCHARGE {
scan $line "%*s : %f Percent" BattChg
}
TIMELEFT {
scan $line "%*s : %f Minutes" TimeLeft
}
LOADPCT {
scan $line "%*s : %f Percent" LoadPct
}
HOSTNAME {
scan $line "%*s : %s" HostName
}
RELEASE {
scan $line "%*s : %s" Release
}
LINEV {
scan $line "%*s : %f Volts" LineV
}
LOTRANS {
scan $line "%*s : %f Volts" LowTrans
}
HITRANS {
scan $line "%*s : %f Volts" HiTrans
}
RETPCT {
scan $line "%*s : %f Percent" RetPct
}
ITEMP {
scan $line "%*s : %f C Internal" ITemp
}
LINEFREQ {
scan $line "%*s : %f Hz" LineFreq
}
BATTV {
scan $line "%*s : %f Volts" BattV
}
NOMBATTV {
scan $line "%*s : %f" NomBattV
}
MODEL {
scan $line "%*s : %s" Model
}
STATUS {
scan $line "%*s : %s" Status
}
default {
}
}
}
catch {close $fd}
}
|