Skip to content

Commit 1514389

Browse files
committed
This change ensures that MQTT messages are retained, allowing Home Assistant to correctly display sensor values even if the openScale app is not running. Additionally, the Home Assistant payload has been updated to use default(none) for sensor values. This prevents errors when a sensor value is not available.
1 parent 108f2f1 commit 1514389

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed

src/app/src/main/java/com/health/openscale/sync/core/sync/MQTTSync.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,9 @@ class MQTTSync(private val mqttClient: Mqtt5BlockingClient) : SyncInterface() {
6868

6969
fun publishLastMeasurement(measurement: OpenScaleMeasurement?): SyncResult<Unit> {
7070
return if (measurement != null) {
71-
publishMeasurement(measurement, "openScaleSync/measurements/last")
71+
publishMeasurement(measurement, "openScaleSync/measurements/last", true)
7272
} else {
73-
publishMessage(mapOf<String, Any>(), "openScaleSync/measurements/last")
73+
publishMessage(mapOf<String, Any>(), "openScaleSync/measurements/last", true)
7474
}
7575
}
7676

@@ -135,11 +135,12 @@ class MQTTSync(private val mqttClient: Mqtt5BlockingClient) : SyncInterface() {
135135
}
136136
}
137137

138-
private fun publishMeasurement(measurement: OpenScaleMeasurement, topic: String) : SyncResult<Unit> {
138+
private fun publishMeasurement(measurement: OpenScaleMeasurement, topic: String, retain : Boolean = false) : SyncResult<Unit> {
139139
val payload = gson.toJson(measurement).toByteArray()
140140
val publish = Mqtt5Publish.builder()
141141
.topic(topic)
142142
.payload(payload)
143+
.retain(retain)
143144
.build()
144145
val result = mqttClient.publish(publish)
145146
if (result.error.isPresent) {
@@ -149,11 +150,12 @@ class MQTTSync(private val mqttClient: Mqtt5BlockingClient) : SyncInterface() {
149150
}
150151
}
151152

152-
private fun publishMessage(message: Map<String, Any>, topic: String) : SyncResult<Unit> {
153+
private fun publishMessage(message: Map<String, Any>, topic: String, retain : Boolean = false) : SyncResult<Unit> {
153154
val payload = gson.toJson(message).toByteArray()
154155
val publish = Mqtt5Publish.builder()
155156
.topic(topic)
156157
.payload(payload)
158+
.retain(retain)
157159
.build()
158160
val result = mqttClient.publish(publish)
159161
if (result.error.isPresent) {
@@ -163,10 +165,11 @@ class MQTTSync(private val mqttClient: Mqtt5BlockingClient) : SyncInterface() {
163165
}
164166
}
165167

166-
private fun publishMessage(value : Boolean, topic: String) : SyncResult<Unit> {
168+
private fun publishMessage(value : Boolean, topic: String, retain : Boolean = false) : SyncResult<Unit> {
167169
val publish = Mqtt5Publish.builder()
168170
.topic(topic)
169171
.payload(value.toString().toByteArray())
172+
.retain(retain)
170173
.build()
171174
val result = mqttClient.publish(publish)
172175
if (result.error.isPresent) {

src/app/src/main/res/raw/homeassistant_payload.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,44 +15,44 @@
1515
"platform": "sensor",
1616
"device_class": "weight",
1717
"unit_of_measurement": "kg",
18-
"value_template": "{{ value_json.weight }}",
18+
"value_template": "{{ value_json.weight | default(none) }}",
1919
"unique_id": "openscale_weight"
2020
},
2121
"openscale_fat": {
2222
"name": "Body fat",
2323
"platform": "sensor",
2424
"unit_of_measurement": "%",
25-
"value_template": "{{ value_json.fat }}",
25+
"value_template": "{{ value_json.fat | default(none) }}",
2626
"unique_id": "openscale_fat"
2727
},
2828
"openscale_muscle": {
2929
"name": "Muscle",
3030
"platform": "sensor",
3131
"unit_of_measurement": "%",
32-
"value_template": "{{ value_json.muscle }}",
32+
"value_template": "{{ value_json.muscle | default(none) }}",
3333
"unique_id": "openscale_muscle"
3434
},
3535
"openscale_water": {
3636
"name": "Total body water",
3737
"platform": "sensor",
3838
"device_class": "moisture",
3939
"unit_of_measurement": "%",
40-
"value_template": "{{ value_json.water }}",
40+
"value_template": "{{ value_json.water | default(none) }}",
4141
"unique_id": "openscale_water"
4242
},
4343
"openscale_measurement_date": {
4444
"name": "Measurement date",
4545
"platform": "sensor",
4646
"entity_category": "diagnostic",
4747
"device_class": "timestamp",
48-
"value_template": "{{ value_json.date }}",
48+
"value_template": "{{ value_json.date | default(none) }}",
4949
"unique_id": "openscale_date"
5050
},
5151
"openscale_measurement_id": {
5252
"name": "Measurement id",
5353
"platform": "sensor",
5454
"entity_category": "diagnostic",
55-
"value_template": "{{ value_json.id }}",
55+
"value_template": "{{ value_json.id | default(none) }}",
5656
"unique_id": "openscale_id"
5757
}
5858
},

0 commit comments

Comments
 (0)