Introduced MQTT detectors to autodetect MQTT devices

This commit is contained in:
Ziver Koc 2024-09-04 02:58:44 +02:00
parent e4707c2493
commit b7ee6b16dc
21 changed files with 714 additions and 108 deletions

View file

@ -0,0 +1,141 @@
package se.hal.plugin.mqtt.detector;
import org.junit.Test;
import se.hal.plugin.mqtt.device.HalMqttHumidityDeviceConfig;
import se.hal.plugin.mqtt.device.HalMqttParticularMatterDeviceConfig;
import se.hal.plugin.mqtt.device.HalMqttTemperatureDeviceConfig;
import se.hal.struct.devicedata.HumiditySensorData;
import se.hal.struct.devicedata.ParticulateMatterSensorData;
import se.hal.struct.devicedata.TemperatureSensorData;
import se.hal.test.MockHalDeviceReportListener;
import zutil.converter.Converter;
import java.nio.charset.StandardCharsets;
import static org.junit.Assert.*;
public class GenericMqttDetectorTest {
@Test
public void ignoredTopics() {
MockHalDeviceReportListener listener = new MockHalDeviceReportListener();
GenericMqttDetector detector = new GenericMqttDetector();
detector.addListener(listener);
listener.reset();
detector.parseTopic("", new byte[]{});
assertEquals(0, listener.getNumberOfReports());
listener.reset();
detector.parseTopic("invalid/topic", new byte[]{});
assertEquals(0, listener.getNumberOfReports());
}
@Test
public void parseTemperature() {
MockHalDeviceReportListener listener = new MockHalDeviceReportListener();
GenericMqttDetector detector = new GenericMqttDetector();
detector.addListener(listener);
listener.reset();
detector.parseTopic(
"zigbee2mqtt/Kitchen air quality/temperature",
Converter.toBytes(26));
assertEquals(1, listener.getNumberOfReports());
assertEquals(
new HalMqttTemperatureDeviceConfig("zigbee2mqtt/Kitchen air quality/temperature"),
listener.getReport(0).config);
listener.getReport(0).data.setTimestamp(0);
assertEquals(
new TemperatureSensorData(26, 0),
listener.getReport(0).data);
listener.reset();
detector.parseTopic(
"zigbee2mqtt/Kitchen air quality",
"{\"temperature\": 26}".getBytes(StandardCharsets.UTF_8));
assertEquals(1, listener.getNumberOfReports());
assertEquals(
new HalMqttTemperatureDeviceConfig("zigbee2mqtt/Kitchen air quality", "$.temperature"),
listener.getReport(0).config);
listener.getReport(0).data.setTimestamp(0);
assertEquals(
new TemperatureSensorData(26, 0),
listener.getReport(0).data);
}
@Test
public void parseHumidity() {
MockHalDeviceReportListener listener = new MockHalDeviceReportListener();
GenericMqttDetector detector = new GenericMqttDetector();
detector.addListener(listener);
listener.reset();
detector.parseTopic(
"zigbee2mqtt/Kitchen air quality/humidity",
Converter.toBytes(51));
assertEquals(1, listener.getNumberOfReports());
assertEquals(
new HalMqttHumidityDeviceConfig("zigbee2mqtt/Kitchen air quality/humidity"),
listener.getReport(0).config);
listener.getReport(0).data.setTimestamp(0);
assertEquals(
new HumiditySensorData(51, 0),
listener.getReport(0).data);
listener.reset();
detector.parseTopic(
"zigbee2mqtt/Kitchen air quality",
"{\"humidity\": 51}".getBytes(StandardCharsets.UTF_8));
assertEquals(1, listener.getNumberOfReports());
assertEquals(
new HalMqttHumidityDeviceConfig("zigbee2mqtt/Kitchen air quality", "$.humidity"),
listener.getReport(0).config);
listener.getReport(0).data.setTimestamp(0);
assertEquals(
new HumiditySensorData(51, 0),
listener.getReport(0).data);
}
@Test
public void parseParticularMatter() {
MockHalDeviceReportListener listener = new MockHalDeviceReportListener();
GenericMqttDetector detector = new GenericMqttDetector();
detector.addListener(listener);
listener.reset();
detector.parseTopic(
"zigbee2mqtt/Kitchen air quality/pm25",
Converter.toBytes(1));
assertEquals(1, listener.getNumberOfReports());
assertEquals(
new HalMqttParticularMatterDeviceConfig("zigbee2mqtt/Kitchen air quality/pm25"),
listener.getReport(0).config);
listener.getReport(0).data.setTimestamp(0);
assertEquals(
new ParticulateMatterSensorData(1, 0),
listener.getReport(0).data);
listener.reset();
detector.parseTopic(
"zigbee2mqtt/Kitchen air quality",
"{\"pm25\": 1}".getBytes(StandardCharsets.UTF_8));
assertEquals(1, listener.getNumberOfReports());
assertEquals(
new HalMqttParticularMatterDeviceConfig("zigbee2mqtt/Kitchen air quality", "$.pm25"),
listener.getReport(0).config);
listener.getReport(0).data.setTimestamp(0);
assertEquals(
new ParticulateMatterSensorData(1, 0),
listener.getReport(0).data);
}
}

View file

@ -0,0 +1,62 @@
package se.hal.plugin.mqtt.detector;
import org.junit.Test;
import se.hal.plugin.mqtt.device.HalMqttParticularMatterDeviceConfig;
import se.hal.test.MockHalDeviceReportListener;
import java.nio.charset.StandardCharsets;
import static org.junit.Assert.*;
public class Zigbee2mqttDetectorTest {
@Test
public void ignoredTopics() {
MockHalDeviceReportListener listener = new MockHalDeviceReportListener();
Zigbee2mqttDetector detector = new Zigbee2mqttDetector();
detector.addListener(listener);
listener.reset();
detector.parseTopic("", new byte[]{});
assertEquals(0, listener.getNumberOfReports());
listener.reset();
detector.parseTopic("invalid/topic", new byte[]{});
assertEquals(0, listener.getNumberOfReports());
}
/*
@Test
public void parseTemperature() {
Zigbee2mqttDetector detector = new Zigbee2mqttDetector();
assertEquals(
Collections.emptyList(),
detector.parseTopic(
"zigbee2mqtt/Kitchen air quality",
"{\"temperature\":26}".getBytes(StandardCharsets.UTF_8)));
}
@Test
public void parseHumidity() {
Zigbee2mqttDetector detector = new Zigbee2mqttDetector();
assertEquals(
Collections.emptyList(),
detector.parseTopic(
"zigbee2mqtt/Kitchen air quality",
"{\"humidity\":51}".getBytes(StandardCharsets.UTF_8)));
}
@Test
public void parseParticularMatter() {
Zigbee2mqttDetector detector = new Zigbee2mqttDetector();
assertEquals(
Collections.list(new HalMqttParticularMatterDeviceConfig()),
detector.parseTopic(
"zigbee2mqtt/Kitchen air quality",
"{\"pm25\":1}".getBytes(StandardCharsets.UTF_8)));
}
*/
}