Go to the documentation of this file.00001
00002 from threading import Thread
00003 import time
00004 import rospy
00005 import rostopic
00006 from BAL.Header.Requests.PublishRequest import PublishRequest
00007 from BAL.Header.Response.ParamBuildResponse import Battery
00008
00009 __author__ = 'tom1231'
00010 import re
00011 from rospy import Publisher
00012 from ric_board.msg import Battery
00013 from BAL.Interfaces.Device import Device
00014 from BAL.Handlers.keepAliveHandler import KeepAliveHandler
00015 from BAL.RiCParam.RiCParam import RiCParam
00016 class RiCBattery(Device):
00017 def __init__(self, param, output):
00018 """
00019
00020 :param param:
00021 :type param: RiCParam
00022 :param output:
00023 :return:
00024 """
00025 Device.__init__(self, param.getBatteryName(), output)
00026 self._pub = Publisher('%s' % self._name, Battery, queue_size=param.getBatteryPubHz())
00027 self._haveRightToPublish = False
00028
00029 self._min = param.getBatteryMin()
00030 self._max = param.getBatteryMax()
00031
00032
00033
00034 def publish(self, data):
00035 msg = Battery()
00036 msg.data = data
00037 msg.min = self._min
00038 msg.max = self._max
00039
00040 self._pub.publish(msg)
00041
00042 def getType(self): return Battery
00043
00044 def checkForSubscribers(self):
00045 try:
00046 subCheck = re.search('Subscribers:.*', rostopic.get_info_text(self._pub.name)).group(0).split(': ')[1]
00047
00048 if not self._haveRightToPublish and subCheck == '':
00049 self._output.write(PublishRequest(Battery, 0, True).dataTosend())
00050 self._haveRightToPublish = True
00051
00052 elif self._haveRightToPublish and subCheck == 'None':
00053 self._output.write(PublishRequest(Battery, 0, False).dataTosend())
00054 self._haveRightToPublish = False
00055 except: pass