File: status.tcl

package info (click to toggle)
apcupsd 3.14.14-7
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 7,904 kB
  • sloc: ansic: 24,826; cpp: 9,230; sh: 4,484; makefile: 1,200; tcl: 368; objc: 317; php: 107
file content (208 lines) | stat: -rw-r--r-- 6,538 bytes parent folder | download | duplicates (11)
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}
}