diff --git a/IoTSonnenUploader/config-sample/mqtt.yml b/IoTSonnenUploader/config-sample/mqtt.yml index e48fcbf..fab9659 100644 --- a/IoTSonnenUploader/config-sample/mqtt.yml +++ b/IoTSonnenUploader/config-sample/mqtt.yml @@ -1,4 +1,6 @@ mqtt: + monitoruploads: + enabled: true device: id: tims broker: @@ -19,7 +21,7 @@ mqtt: clean-session: true automatic-reconnect: true connection-timeout: "PT30s" - keep-alive-interval: "PT60s" + keep-alive-interval: 60 will-message: topic: home/sonnen/will/${mqtt.device.id} diff --git a/IoTSonnenUploader/src/main/java/com/oracle/demo/timg/iot/iotsonnenuploader/mqtt/MqttUploadMonitor.java b/IoTSonnenUploader/src/main/java/com/oracle/demo/timg/iot/iotsonnenuploader/mqtt/MqttUploadMonitor.java index 5a883de..2be8ff1 100644 --- a/IoTSonnenUploader/src/main/java/com/oracle/demo/timg/iot/iotsonnenuploader/mqtt/MqttUploadMonitor.java +++ b/IoTSonnenUploader/src/main/java/com/oracle/demo/timg/iot/iotsonnenuploader/mqtt/MqttUploadMonitor.java @@ -47,6 +47,7 @@ Software and the Larger Work(s), and to sublicense the foregoing rights on @Log @MqttSubscriber @Requires(property = MqttDeviceSettings.PREFIX + ".id") +@Requires(property = "mqtt.monitoruploads.enabled", value = "true", defaultValue = "false") public class MqttUploadMonitor { @Topic("house/sonnen/configuration/${" + MqttDeviceSettings.PREFIX + ".id}") public void receiveConfig(SonnenConfiguration config) { diff --git a/IoTSonnenUploader/src/main/java/com/oracle/demo/timg/iot/iotsonnenuploader/sonnencontroller/SonnenBatteryClient.java b/IoTSonnenUploader/src/main/java/com/oracle/demo/timg/iot/iotsonnenuploader/sonnencontroller/SonnenBatteryClient.java index ee5b3fc..a7d0d08 100644 --- a/IoTSonnenUploader/src/main/java/com/oracle/demo/timg/iot/iotsonnenuploader/sonnencontroller/SonnenBatteryClient.java +++ b/IoTSonnenUploader/src/main/java/com/oracle/demo/timg/iot/iotsonnenuploader/sonnencontroller/SonnenBatteryClient.java @@ -46,6 +46,7 @@ Software and the Larger Work(s), and to sublicense the foregoing rights on import io.micronaut.http.annotation.Get; import io.micronaut.http.annotation.Header; import io.micronaut.http.client.annotation.Client; +import io.micronaut.http.client.exceptions.HttpClientException; @Client(id = "sonnenbattery", path = "/api/v2") @Header(name = USER_AGENT, value = "Micronaut HTTP Client") @@ -54,9 +55,11 @@ Software and the Larger Work(s), and to sublicense the foregoing rights on public interface SonnenBatteryClient { @Get("/configurations") - public SonnenConfiguration fetchConfiguration(); + // @Error(exception = ReadTimeoutException.class) + public SonnenConfiguration fetchConfiguration() throws HttpClientException; @Get("/status") - public SonnenStatus fetchStatus(); + // @Error(exception = ReadTimeoutException.class) + public SonnenStatus fetchStatus() throws HttpClientException; } diff --git a/IoTSonnenUploader/src/main/java/com/oracle/demo/timg/iot/iotsonnenuploader/uploader/Uploader.java b/IoTSonnenUploader/src/main/java/com/oracle/demo/timg/iot/iotsonnenuploader/uploader/Uploader.java index 1224c34..296a7aa 100644 --- a/IoTSonnenUploader/src/main/java/com/oracle/demo/timg/iot/iotsonnenuploader/uploader/Uploader.java +++ b/IoTSonnenUploader/src/main/java/com/oracle/demo/timg/iot/iotsonnenuploader/uploader/Uploader.java @@ -44,6 +44,7 @@ Software and the Larger Work(s), and to sublicense the foregoing rights on import com.oracle.demo.timg.iot.iotsonnenuploader.sonnencontroller.SonnenBatteryClient; import io.micronaut.context.event.StartupEvent; +import io.micronaut.http.client.exceptions.HttpClientException; import io.micronaut.runtime.event.annotation.EventListener; import io.micronaut.scheduling.TaskExecutors; import io.micronaut.scheduling.annotation.ExecuteOn; @@ -63,7 +64,14 @@ public class Uploader { @Scheduled(fixedRate = "120s", initialDelay = "5s") @ExecuteOn(TaskExecutors.IO) public SonnenConfiguration processConfiguration() { - SonnenConfiguration conf = client.fetchConfiguration(); + SonnenConfiguration conf; + try { + conf = client.fetchConfiguration(); + } catch (HttpClientException e) { + log.warning("HttpClientException getting configuration from sonnen, no data to upload for service " + + e.getServiceId()); + return null; + } log.info("Retrieved configuration from battery : " + conf); CompletableFuture publishResp = mqttSonnenBatteryPublisher.publishSonnenConfiguration(conf); publishResp.thenRun(() -> log.info("Published configuration as object")); @@ -73,7 +81,14 @@ public SonnenConfiguration processConfiguration() { @Scheduled(fixedRate = "10s", initialDelay = "10s") @ExecuteOn(TaskExecutors.IO) public SonnenStatus processStatus() { - SonnenStatus status = client.fetchStatus(); + SonnenStatus status; + try { + status = client.fetchStatus(); + } catch (HttpClientException e) { + log.warning("HttpClientExcepton getting configuration from sonnen, no data to upload, for service " + + e.getServiceId()); + return null; + } log.info("Retrieved status from battery : " + status); CompletableFuture publishResp = mqttSonnenBatteryPublisher.publishSonnenStatus(status); publishResp.thenRun(() -> log.info("Published status as object"));