Duh, I didn't think about mapping them to times. Orange should probably 7 instead of 6 as it one of the max usage times. But 4 and 10 look good for the other two, three hours between each color.
Battery drops are random events and shouldn't be accounted for.
Any idea what would cause BME socket reading to block indefinitely? My C script worked fine but the applet blocks on the fifth request read, sixth read if it you include the BMentity reply. I even placed a select call before the reads but it always shows the socket to be ready. To get around this, the applet you have opens, reads and closes the socket every time it requests a value. The charging signal calls the BME update function to change the icon and was requesting a new value every time the charger was unplugged. It seems that requesting a new value too soon after the last can cause the read to block. I've now changed the code so only the 15 second timer requests new values but it might still be possible for some random event to cause read to block and lock up the statusbar. Finding a way to prevent this would not only prevent random lock ups but also use less cpu if it didn't have to open the socket for each request.