Переглянути джерело

fix: mqtt debug handling; fix: minor i2c fix

Silas Gruen 9 місяців тому
батько
коміт
35c185e670

+ 5 - 5
battery_measure_ctrl/config/config.yaml

@@ -35,11 +35,11 @@ measurement:
 
 devices:
   - id: 1
-    i2c_address: 0x40
-    num_slots: 8
-  - id: 2
-    i2c_address: 0x41
-    num_slots: 8
+    i2c_address: 0x48
+    num_slots: 3
+  # - id: 8
+  #   i2c_address: 0x41
+  #   num_slots: 4
 
 logging:
   level: "INFO"

+ 1 - 1
battery_measure_ctrl/requirements.txt

@@ -6,4 +6,4 @@ pyyaml==6.0.1
 pytest==7.4.0
 pytest-asyncio==0.21.1
 requests==2.32.3
-pydantic==2.27.2
+pydantic

+ 4 - 3
battery_measure_ctrl/src/services/i2c_service.py

@@ -23,15 +23,16 @@ class I2CService:
         if self.debug:
             return [DeviceStatus.EMPTY for _ in range(num_slots)]
 
-        status_list = self.bus.read_block_data(i2c_adress, self.status_register)
+        logger.debug(f"Requesting status list (i2c_adress: {i2c_adress}, register: {self.status_register})")
+        status_list = self.bus.read_i2c_block_data(i2c_adress, self.status_register, num_slots)
         logger.debug(f"Received status list: {status_list} (i2c_adress: {i2c_adress})")
-        return [DeviceStatus(value) for value in status_list[:num_slots]]
+        return [DeviceStatus(value) for value in status_list]
 
     def request_measure_values(self, i2c_adress: int, slot_id: int) -> MeasureValues:
         """Request the cell values of a specific slot."""
         if self.debug:
             return MeasureValues(4.2, 3.6, 1.5)
-        measure_values:MeasureValues = self.bus.read_block_data(i2c_adress, self.cell_data_register, slot_id) # TODO [SG]: How do i specify the slot?
+        measure_values:MeasureValues = self.bus.read_i2c_block_data(i2c_adress, self.cell_data_register, 3, slot_id) # TODO [SG]: How do i specify the slot?
         logger.debug(f"Received measure values: {measure_values} (i2c_adress: {i2c_adress}, slot_id: {slot_id})")
         return measure_values
     

+ 9 - 4
battery_measure_ctrl/src/services/mqtt_service.py

@@ -20,18 +20,23 @@ class MQTTService:
         keepalive = config['mqtt']['keepalive']
         username = config['mqtt']['username']
         password = config['mqtt']['password']
+        debug = config['mqtt']['debug']
         
         self.client = mqtt.Client()
         self.client.username_pw_set(username, password)
         self.client.on_connect = self.on_connect
         self.client.on_message = self.on_message
-        
-        if broker_address == "debug":
-            self.client.connect("test.mosquitto.org", 1883)
-            return        
 
         self.devices: dict[int: int] = {}
         self.insertion_callbacks: Dict[str, Dict[int, Callable]] = {}
+
+        if debug:
+            logger.info("No MQTT in debug mode")
+            return
+        
+        if broker_address == "debug" or debug:
+            self.client.connect("test.mosquitto.org", 1883)
+            return        
         
         self.client.connect(broker_address, port, keepalive)
         self.client.loop_start()