pr2_battery_states_logger.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 import influxdb
4 import rospy
5 
6 from influxdb_store.utils import timestamp_to_influxdb_time
7 
8 from pr2_msgs.msg import BatteryServer2
9 
10 
11 class PR2BatteryStatesLogger(object):
12  def __init__(self):
13  host = rospy.get_param('~host', 'localhost')
14  port = rospy.get_param('~port', 8086)
15  database = rospy.get_param('~database', 'test')
16  self.client = influxdb.InfluxDBClient(
17  host=host, port=port, database=database)
18  self.client.create_database(database)
19  self.sub = rospy.Subscriber(
20  '~input', BatteryServer2, self._cb, queue_size=10)
21 
22  def _cb(self, msg):
23  time = timestamp_to_influxdb_time(msg.header.stamp)
24  battery_id = msg.id
25  battery0_temp = msg.battery[0].battery_register[8] / 10.0 - 273.15
26  battery1_temp = msg.battery[1].battery_register[8] / 10.0 - 273.15
27  battery2_temp = msg.battery[2].battery_register[8] / 10.0 - 273.15
28  battery3_temp = msg.battery[3].battery_register[8] / 10.0 - 273.15
29  battery0_voltage = msg.battery[0].battery_register[9] / 1000.0
30  battery1_voltage = msg.battery[1].battery_register[9] / 1000.0
31  battery2_voltage = msg.battery[2].battery_register[9] / 1000.0
32  battery3_voltage = msg.battery[3].battery_register[9] / 1000.0
33  battery0_current = msg.battery[0].battery_register[11] / 1000.0
34  battery1_current = msg.battery[1].battery_register[11] / 1000.0
35  battery2_current = msg.battery[2].battery_register[11] / 1000.0
36  battery3_current = msg.battery[3].battery_register[11] / 1000.0
37  battery0_charge = msg.battery[0].battery_register[13]
38  battery1_charge = msg.battery[1].battery_register[13]
39  battery2_charge = msg.battery[2].battery_register[13]
40  battery3_charge = msg.battery[3].battery_register[13]
41  average_temp = (battery0_temp + battery1_temp
42  + battery2_temp + battery3_temp) / 4.0
43  average_voltage = (battery0_voltage + battery1_voltage
44  + battery2_voltage + battery3_voltage) / 4.0
45  average_current = (battery0_current + battery1_current
46  + battery2_current + battery3_current) / 4.0
47  average_charge = msg.average_charge / 100.0
48  query = [{
49  "measurement": "battery_states",
50  "tags": {
51  "battery_id": battery_id
52  },
53  "time": time,
54  "fields": {
55  "temperature": average_temp,
56  "voltage": average_voltage,
57  "current": average_current,
58  "charge_percent": average_charge,
59  "battery0_temperature": battery0_temp,
60  "battery1_temperature": battery1_temp,
61  "battery2_temperature": battery2_temp,
62  "battery3_temperature": battery3_temp,
63  "battery0_voltage": battery0_voltage,
64  "battery1_voltage": battery1_voltage,
65  "battery2_voltage": battery2_voltage,
66  "battery3_voltage": battery3_voltage,
67  "battery0_current": battery0_current,
68  "battery1_current": battery1_current,
69  "battery2_current": battery2_current,
70  "battery3_current": battery3_current,
71  "battery0_charge_percent": battery0_charge,
72  "battery1_charge_percent": battery1_charge,
73  "battery2_charge_percent": battery2_charge,
74  "battery3_charge_percent": battery3_charge,
75  }
76  }]
77  if len(query) > 0:
78  try:
79  self.client.write_points(query, time_precision='ms')
80  except influxdb.exceptions.InfluxDBServerError as e:
81  rospy.logerr("InfluxDB error: {}".format(e))
82 
83 
84 if __name__ == '__main__':
85  rospy.init_node('pr2_battery_states_logger')
87  rospy.spin()
def timestamp_to_influxdb_time(timestamp)
Definition: utils.py:5


influxdb_store
Author(s): Shingo Kitagawa
autogenerated on Sat Jun 24 2023 02:40:23