From b38f887c0ed04e32ae62f097288fd318b4d3c8f2 Mon Sep 17 00:00:00 2001 From: xengineering Date: Sat, 17 Jan 2026 21:12:25 +0100 Subject: Indicate disconnected Sia server There are now three instead of two status states: - "Connected" / MQTT connected, Sia server connected - "Connection issue" / MQTT connected, Sia server disconnected - "Disconnected" / all other cases (Sia server connection unknown) --- lib/data.dart | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'lib/data.dart') diff --git a/lib/data.dart b/lib/data.dart index 38fd564..2583d1a 100644 --- a/lib/data.dart +++ b/lib/data.dart @@ -13,6 +13,8 @@ class AppState with ChangeNotifier { late final MqttServerClient _client; bool _brokerConnected = false; bool get brokerConnected => _brokerConnected; + bool _serverConnected = false; + bool get serverConnected => _serverConnected; AppState() { _initMqtt(); @@ -53,6 +55,7 @@ class AppState with ChangeNotifier { void _onConnected() { _client.subscribe('$topicPrefix/contact/+/state', MqttQos.exactlyOnce); + _client.subscribe('$topicPrefix/server/health', MqttQos.exactlyOnce); _brokerConnected = true; notifyListeners(); } @@ -76,6 +79,23 @@ class AppState with ChangeNotifier { for (final MqttReceivedMessage message in messages) { final String topic = message.topic; + final MqttPublishMessage payloadMessage = + message.payload as MqttPublishMessage; + final String payload = + MqttPublishPayload.bytesToStringAsString(payloadMessage.payload.message); + + if (topic == '$topicPrefix/server/health') { + if (payload == 'good') { + _serverConnected = true; + notifyListeners(); + } + + if (payload == 'bad') { + _serverConnected = false; + notifyListeners(); + } + } + // format /contacts/
/state final List parts = topic.split('/'); if (parts.length != 4 || parts[1] != 'contact' || parts[3] != 'state') { @@ -83,11 +103,6 @@ class AppState with ChangeNotifier { } final String address = parts[2]; - final MqttPublishMessage payloadMessage = - message.payload as MqttPublishMessage; - final String payload = - MqttPublishPayload.bytesToStringAsString(payloadMessage.payload.message); - final bool? parsedState = _parseBool(payload); if (parsedState != null) { -- cgit v1.2.3-70-g09d2