13 PING_FREQUENCY = 10 # seconds
15 def exec_command(command):
16 stream = os.popen(command)
18 out = re.split('\n',out);
23 elif newline.startswith("Error:"):
33 self.ind = appindicator.Indicator("nut-indicator",
34 "gpm-ups-100-charging",
35 appindicator.CATEGORY_APPLICATION_STATUS)
36 self.ind.set_status(appindicator.STATUS_ACTIVE)
37 self.ind.set_attention_icon("gpm-ups-000")
46 command = "upsc -l {0}".format(host)
48 local_upses=exec_command(command)
49 for ups in local_upses:
50 self.upses.append('{0}@{1}'.format(ups,host))
55 print "No connected ups'es found!\n"
59 self.ind.set_menu(self.menu)
61 if not pynotify.init ("nut-indicator"):
66 self.ups_dictionary = {}
67 self.ups_dictionary['battery charge'] = 'Battery charge %'
68 self.ups_dictionary['input voltage'] = 'Input voltage'
69 self.ups_dictionary['output voltage'] = 'Output voltage'
70 self.ups_dictionary['ups load'] = 'UPS load %'
71 self.ups_dictionary['ups status'] = 'UPS status'
73 self.ups_value_dictionary = {}
74 self.ups_value_dictionary['ups status'] = {}
75 self.ups_value_dictionary['ups status']['OL'] = {1,'online'}
76 self.ups_value_dictionary['ups status']['OB'] = {0,'on battery'}
77 self.ups_value_dictionary['ups status']['LB'] = {-1,'low batter'}
80 self.menu = gtk.Menu()
83 for ups in self.upses:
85 menu_item = gtk.MenuItem(ups)
86 menu_item.connect("activate",self.call_check_local_ups,ups)
88 self.menu.append(menu_item)
89 self.menuitems[ups]=menu_item
91 separator = gtk.SeparatorMenuItem()
93 self.menu.append(separator)
95 self.quit_item = gtk.MenuItem("Quit")
96 self.quit_item.connect("activate", self.quit)
98 self.menu.append(self.quit_item)
102 gtk.timeout_add(PING_FREQUENCY * 1000, self.check_ups)
105 def quit(self, widget):
108 def call_check_local_ups(self,item,ups):
109 return self.check_local_ups(ups,1)
111 def check_local_ups(self,ups,notify):
112 command = "upsc {0}".format(ups)
113 res = exec_command(command)
120 paramname,paramvalue = newline.split(': ',1)
121 paramname = paramname.replace('.',' ')
123 status,paramvalue = self.ups_value_dictionary[paramname][paramvalue]
129 printname = self.ups_dictionary[paramname]
130 text="{0}\n{1} = {2}".format(text,printname,paramvalue)
134 if paramname=="battery charge":
136 elif paramname=="ups status":
137 ups_status=paramvalue
140 self.menuitems[ups].get_child().set_text('{0}: {1}'.format(ups,ups_status))
142 self.menuitems[ups].get_child().set_text('{0}: {1}, {2}%'.format(ups,ups_status,battery))
143 if (notify==1 or minstatus<0) and self.disable_notify==0:
144 n = pynotify.Notification(ups,text)
145 helper = gtk.Button()
146 icon = helper.render_icon(gtk.STOCK_DIALOG_INFO, gtk.ICON_SIZE_DIALOG)
147 n.set_icon_from_pixbuf(icon)
155 for ups in self.upses:
156 status=self.check_local_ups(ups,0)
157 if status<min_status:
161 self.ind.set_status(appindicator.STATUS_ATTENTION)
162 self.ind.set_attention_icon("gpm-ups-000")
164 self.ind.set_status(appindicator.STATUS_ATTENTION)
165 self.ind.set_attention_icon("gpm-ups-060")
167 self.ind.set_status(appindicator.STATUS_ACTIVE)
170 if __name__ == "__main__":
171 indicator = CheckNUT()