2020#endif
2121
2222void HomeAssistantMqttHandler::setHomeAssistantConfig (HomeAssistantConfig config, char * hostname) {
23- l1Init = l2Init = l2eInit = l3Init = l3eInit = l4Init = l4eInit = rtInit = rteInit = pInit = sInit = rInit = fInit = false ;
23+ l1Init = l2Init = l2eInit = l3Init = l3eInit = l4Init = l4eInit = rtInit = rteInit = pInit = sInit = rInit = fInit = dInit = false ;
2424
2525 if (strlen (config.discoveryNameTag ) > 0 ) {
2626 snprintf_P (json, 128 , PSTR (" AMS reader (%s)" ), config.discoveryNameTag );
@@ -541,7 +541,6 @@ void HomeAssistantMqttHandler::publishSensor(const HomeAssistantSensor sensor) {
541541 mqttConfig.publishTopic , sensor.topic ,
542542 deviceUid.c_str (), uid.c_str (),
543543 deviceUid.c_str (), uid.c_str (),
544- sensor.uom ,
545544 sensor.path ,
546545 sensor.ttl ,
547546 deviceUid.c_str (),
@@ -550,13 +549,20 @@ void HomeAssistantMqttHandler::publishSensor(const HomeAssistantSensor sensor) {
550549 FirmwareVersion::VersionString,
551550 manufacturer.c_str (),
552551 deviceUrl.c_str (),
552+
553553 strlen_P (sensor.devcl ) > 0 ? " ,\" dev_cla\" :\" " : " " ,
554554 strlen_P (sensor.devcl ) > 0 ? (char *) FPSTR (sensor.devcl ) : " " ,
555555 strlen_P (sensor.devcl ) > 0 ? " \" " : " " ,
556+
556557 strlen_P (sensor.stacl ) > 0 ? " ,\" stat_cla\" :\" " : " " ,
557558 strlen_P (sensor.stacl ) > 0 ? (char *) FPSTR (sensor.stacl ) : " " ,
558- strlen_P (sensor.stacl ) > 0 ? " \" " : " "
559+ strlen_P (sensor.stacl ) > 0 ? " \" " : " " ,
560+
561+ strlen_P (sensor.uom ) > 0 ? " ,\" unit_of_meas\" :\" " : " " ,
562+ strlen_P (sensor.uom ) > 0 ? (char *) FPSTR (sensor.uom ) : " " ,
563+ strlen_P (sensor.uom ) > 0 ? " \" " : " "
559564 );
565+
560566 mqtt.publish (sensorTopic + " /" + deviceUid + " _" + uid + " /config" , json, true , 0 );
561567 loop ();
562568}
@@ -831,8 +837,26 @@ uint8_t HomeAssistantMqttHandler::getFormat() {
831837 return 4 ;
832838}
833839
834- bool HomeAssistantMqttHandler::publishRaw (String data) {
835- return false ;
840+ bool HomeAssistantMqttHandler::publishRaw (uint8_t * raw, size_t length) {
841+ if (strlen (mqttConfig.publishTopic ) == 0 || !mqtt.connected ())
842+ return false ;
843+
844+ if (length <= 0 || length > BufferSize) return false ;
845+
846+ if (!dInit) {
847+ // Not sure how this sensor should be defined in HA, so skipping for now
848+ // publishSensor(DataSensor);
849+ dInit = true ;
850+ }
851+
852+ String str = toHex (raw, length);
853+
854+ snprintf_P (json, BufferSize, PSTR (" {\" data\" :\" %s\" }" ), str.c_str ());
855+ char topic[192 ];
856+ snprintf_P (topic, 192 , PSTR (" %s/data" ), mqttConfig.publishTopic );
857+ bool ret = mqtt.publish (topic, json);
858+ loop ();
859+ return ret;
836860}
837861
838862bool HomeAssistantMqttHandler::publishFirmware () {
@@ -865,7 +889,7 @@ void HomeAssistantMqttHandler::onMessage(String &topic, String &payload) {
865889 if (debugger->isActive (RemoteDebug::INFO ))
866890 #endif
867891 debugger->printf_P (PSTR (" Received online status from HA, resetting sensor status\n " ));
868- l1Init = l2Init = l2eInit = l3Init = l3eInit = l4Init = l4eInit = rtInit = rteInit = pInit = sInit = rInit = false ;
892+ l1Init = l2Init = l2eInit = l3Init = l3eInit = l4Init = l4eInit = rtInit = rteInit = pInit = sInit = rInit = fInit = dInit = false ;
869893 for (uint8_t i = 0 ; i < 32 ; i++) tInit[i] = false ;
870894 priceImportInit = 0 ;
871895 priceExportInit = 0 ;
0 commit comments