OpenHAB Digitalstrom Binding Stabilität

Aus Laub-Home Wiki

Leider habe ich maßive Probleme mit der Stabilität des digitalSTROM Bindings und dem digitalSTROM Server (dss). Leider auch unter openHAB 3. Deshalb habe ich das unten stehende Script entwickelt, was mir ein bisschen mehr Stabilität in mein SmartHome gebracht hat. Ich versuche hier einmal eine Sammlung mit allen möglichen Problemen zu schaffen, die mir beim Bauen meines SmartHome mit digitalSTROM und openHAB unter gekommen sind. Soll also eine kleine Wissenssammlung werden, da leider zum Thema digitalSTROM und openHAB nicht wirklich viel hilfreiches im Netz zu finden ist.

Aufgetauchte Probleme

Die folgende Probleme sind mir beim Handtieren mit openHAB und digitalSTROM aufgefallen:

  • dss Antwortet nicht mehr und ist auch via Browser nicht mehr verfügbar
  • Rollladen / Licht aktualisieren ihren Status nicht
  • Status wird in HABPanel nicht richtig angezeigt da der Refresh des ITEM Status nicht richtig funktioniert
  • diverse Verbindungsabbrüche
  • SSL Handshake Probleme
  • Benutzertoken wird nicht angenommen
  • Beim start von openHAB Bridge Online, aber die anderen Things sind im Status Unitialized
  • von 12:00 -13:00 liefern die Stromzähler keine Werte
  • Amazon Alexa kann Rollladen oft nicht steuern, der digitalSTROM Server nicht erreichbar ist, oder der Thing Status der dssBridge nicht auf online steht.

Um ein paar dieser Probleme besser in den griff zu bekommen und vor allem immer zu sehen, was das Problem war, habe ich das folgende Script geschrieben. Dieses wird via cronjob automatisch ausgeführt.

digitalstrom_binding_tools.sh

Das folgende Script bietet folgende Funktionen:

  • Es liest den Thing Status vom Digitalstrom Binding aus
    • Einmal von der Bridge
    • dann von einem Rolladen
    • und von einem Stromzähler
  • es startet via REST API das DSS Bridge Thing neu
  • Es macht ein Refresh des Rollladen Status auf eine Gruppe wo alle Rollläden zugehörig sein sollten
  • Der Autorestart Modus ermöglicht einem cron Job alle X Minuten zu prüfen ob das Binding bzw. Das DSS Bridge Thing Online ist.
    • es verschickt dann via cron eine Mail mit ein paar Debug Informationen wie dem Auszug der letzten Logzeilen des openhab.log und einer Prüfung via Ping ob der DSS überhaupt erreichbar ist.

Ihr könnt das Script hier herunterladen:

cd /usr/local/sbin
wget https://github.com/alaub81/openHAB/raw/master/digitalstrom_binding_tools.sh
chmod +x digitalstrom_binding_tools.sh

Falls ihr openHAB 3 verwendet, müsst ihr euch einen Token in der MainUI generieren und diesen hinter der AUTH= Variable einfügen. Ihr findet den Punkt indem ihr in der Main UI einfach auf euren Usernamen links unten klickt und dann ganz nach unten Scrollt. Ediert bitte die folgenden Variablen im Oberen Abschnitt:

#set the variables:

#openHAB URL
OPENHAB=https://localhost:8443
#API Authentification Token for openhab3
AUTH="oh.tokenname.hkkjbkjbQVizb8P82bKQUh7epUXFnyRJ83pQJuzZlQVdj8BJdzwjTznZQkcK1sIysEWtrWQLf2RhTg"
#digitalSTROM Things UID (%3A is :)
#digitalSTROM Bridge
BRIDGE=digitalstrom:dssBridge:eb907aa7
#digitalSTROM Rolladen
ROLLO=digitalstrom%3AGR%3Aeb907aa7%3A303505d7f8000f00000fb6e7
#digitalSTROM Stromverbrauch
WATT=digitalstrom%3Acircuit%3Aeb907aa7%3A302ed89f43f00e400000cc38
#digitalSTROM ALL Groups for refresh the Sensor Status
ALL="Rolladen_ALL Lichter_DSS_ALL"

# IP of the Digitalstrom Server
DSS=192.168.50.100

# logfile options
# Lines displayed in the output
NUMBER=30
# Where is the openhab.log
LOGFILE=/var/lib/docker/volumes/openhab_data_openhab_userdata/_data/logs/openhab.log

nun könnt ihr einen ersten Test mit den folgenden Parametern machen:

Usage: /usr/local/sbin/digitalstrom_binding_tools.sh { status | fullstatus | refresh | restart | autorestart }

hier nun das Script zum copy and pasten:

digitalstrom_binding_tools.sh

#!/bin/bash
#########################################################################
#Name: digitalstrom_binding_tools.sh
#Subscription: This Script tries to get the things with the openHAB digitalstrom
#              binding more stable
#by A. Laub
#andreas[-at-]laub-home.de
#
#License:
#This program is free software: you can redistribute it and/or modify it
#under the terms of the GNU General Public License as published by the
#Free Software Foundation, either version 3 of the License, or (at your option)
#any later version.
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
#or FITNESS FOR A PARTICULAR PURPOSE.
#########################################################################
#Set the language
export LANG="en_US.UTF-8"
#Load the Pathes
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

#set the variables:

#openHAB URL
OPENHAB=https://localhost:8443
#API Authentification Token for openhab3
AUTH="oh.tokenname.hkkjbkjbQVizb8P82bKQUh7epUXFnyRJ83pQJuzZlQVdj8BJdzwjTznZQkcK1sIysEWtrWQLf2RhTg"
#digitalSTROM Things UID (%3A is :)
#digitalSTROM Bridge
BRIDGE=digitalstrom:dssBridge:eb907aa7
#digitalSTROM Rolladen
ROLLO=digitalstrom%3AGR%3Aeb907aa7%3A303505d7f8000f00000fb6e7
#digitalSTROM Stromverbrauch
WATT=digitalstrom%3Acircuit%3Aeb907aa7%3A302ed89f43f00e400000cc38
#digitalSTROM ALL Groups for refresh the Sensor Status
ALL="Rolladen_ALL Lichter_DSS_ALL"

# IP of the Digitalstrom Server
DSS=192.168.50.100

# logfile options
# Lines displayed in the output
NUMBER=30
# Where is the openhab.log
LOGFILE=/var/lib/docker/volumes/openhab_data_openhab_userdata/_data/logs/openhab.log

#do the things
function getstatus {
        FULLSTATUSBRIDGE=$(curl -s -k -X GET "$OPENHAB/rest/things/$BRIDGE/status" -H "accept: application/json" -H "Authorization: Bearer $AUTH")
        FULLSTATUSROLLO=$(curl -s -k -X GET "$OPENHAB/rest/things/$ROLLO/status" -H "accept: application/json" -H "Authorization: Bearer $AUTH")
        FULLSTATUSWATT=$(curl -s -k -X GET "$OPENHAB/rest/things/$WATT/status" -H "accept: application/json" -H "Authorization: Bearer $AUTH")
        STATUSBRIDGE=$(echo $FULLSTATUSBRIDGE | cut -d":" -f2 | cut -d"," -f1 | cut -d'"' -f2)
        STATUSROLLO=$(echo $FULLSTATUSROLLO | cut -d":" -f2 | cut -d"," -f1 | cut -d'"' -f2)
        STATUSWATT=$(echo $FULLSTATUSWATT | cut -d":" -f2 | cut -d"," -f1 | cut -d'"' -f2)
        STATUSBRIDGEDETAIL=$(echo $FULLSTATUSWATT | cut -d":" -f3 | cut -d"," -f1 | cut -d'"' -f2)
}

function status {
        echo "Bridge Status: $STATUSBRIDGE"
        echo "Bridge Status Detail: $STATUSBRIDGEDETAIL"
        echo "Rolladen Status: $STATUSROLLO"
        echo "Verbrauch Status: $STATUSWATT"
}

function fullstatus {
        echo "Bridge Fullstatus: $FULLSTATUSBRIDGE"
        echo "Rolladen Fullstatus: $FULLSTATUSROLLO"
        echo "Verbrauch Fullstatus: $FULLSTATUSWATT"
}

function refresh {
        for i in $ALL; do
                curl -s -k -X POST "$OPENHAB/rest/items/$i" -H "Content-Type: text/plain" -H "accept: */*" -H "Authorization: Bearer $AUTH" -d "REFRESH" 
                echo "Refresh $i Done!"
        done
}

function restart {
        echo "Restarting $BRIDGE"
        curl -s -k -X PUT "$OPENHAB/rest/things/$BRIDGE/enable" -H "Content-Type: text/plain" -H "accept: */*" -H "Authorization: Bearer $AUTH" -d "false" > /dev/null
        sleep 3
        curl -s -k -X PUT "$OPENHAB/rest/things/$BRIDGE/enable" -H "Content-Type: text/plain" -H "accept: */*" -H "Authorization: Bearer $AUTH" -d "true" > /dev/null
}

function autorestart {
        if [ "$STATUSBRIDGE" != "ONLINE" ] || [ "$STATUSROLLO" != "ONLINE" ] || [ "$STATUSWATT" != "ONLINE" ] || [ "$STATUSBRIDGEDETAIL" != "NONE" ]; then
                echo "status is not Online!"
                echo "-------------------------------------"
                fullstatus
                echo -e "\nConnection Test"
                echo "-------------------------------------"
                ping -q -c 5 $DSS
                echo -e "\nlast $NUMBER line of $LOGFILE"
                echo "-------------------------------------"
                tail -n $NUMBER $LOGFILE
                echo " "
                restart
                echo "-------------------------------------"
                sleep  10
                echo -e "\n after restart"
                echo "last $NUMBER line of $LOGFILE"
                echo "-------------------------------------"
                tail -n $NUMBER $LOGFILE
                getstatus
                if [ "$STATUSBRIDGE" != "ONLINE" ] || [ "$STATUSROLLO" != "ONLINE" ] || [ "$STATUSWATT" != "ONLINE" ] || [ "$STATUSBRIDGEDETAIL" != "NONE" ]; then
                        echo -e "\nRestart didn't work Bridge Status!"
                        echo "-------------------------------------"
                        fullstatus
                elif [ "$NEWSTATUS" = "ONLINE" ]; then
                        refresh
                        echo "\n refreshing Item Status "
                        echo "-------------------------------------"
                fi
        fi
}

case "$1" in
        status)
                getstatus
                status
                ;;
        fullstatus)
                getstatus
                status
                fullstatus
                ;;
        restart)
                restart
                ;;
        autorestart)
                getstatus
                autorestart
                ;;
        refresh)
                refresh
                ;;
        *)
                echo "Usage: $0 { status | fullstatus | refresh | restart | autorestart }"
                exit 1
                ;;
esac

Damit das Ganze seinen Job erfüllt und für einen stabileren Betrieb sorgt, habe ich folgende cron Datei angelegt:

/etc/cron.d/digitalstrom_binding

1-59/3 * * * *   root    /usr/local/sbin/digitalstrom_binding_tools.sh autorestart
5-59/5 * * * *  root    /usr/local/sbin/digitalstrom_binding_tools.sh refresh > /dev/null
0 12 * * * root /usr/local/sbin/digitalstrom_binding_tools.sh restart

Damit im Falle von einem nicht Online Zustand des digitalSTROM Binding das Bridge Thing neu gestartet wird, schaut der autorestart job alle 3 Minuten immer zu einer ungeraden Uhrzeit nach dem Status des Thing und startet im nicht ONLINE fall das Bridge Thing neu.

Der Zweite cronjob refreshed mittels refresh Parameter immer um 5, 25, 45 den Status aller Rollläden.

Und cronjob Nummer drei, sorgt dafür das auch von 12:00-13:00 Daten des Stromzähler ausgelesen werden können, in dem es direkt um 12:00 das Bridge Thing einmal mittels restart Parameter durch startet.

Mit diesem Script und einer ständigen Kontrolle der Logfiles würde ich sagen, ist das Binding einigermaßen zu gebrauchen.

Fehlermeldungen des Thing Status

"status":"OFFLINE","statusDetail":"CONFIGURATION_ERROR","description":"User defined Application-Token is wrong. Please set user name and password to generate an Application-Token or set an valid Application-Token."

{"status":"OFFLINE","statusDetail":"BRIDGE_OFFLINE"}


Fehlermeldungen im openHAB Logfile

Im openhab.log kam es unter anderem zu folgenden Fehlermeldungen:

Scheduled runnable ended with an exception

2020-04-17 16:18:30.166 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception: 
java.lang.NullPointerException: null
        at org.openhab.binding.digitalstrom.internal.lib.sensorjobexecutor.AbstractSensorJobExecutor$ExecutorRunnable.run(AbstractSensorJobExecutor.java:77) ~[?:?]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_232]
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) ~[?:1.8.0_232]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_232]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) ~[?:1.8.0_232]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_232]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_232]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_232]
2020-04-17 16:18:30.968 [WARN ] [.core.thing.binding.BaseThingHandler] - Handler BridgeHandler of thing digitalstrom:dssBridge:eb907aa7 tried updating channel total_consumption_wh although the handler was already disposed.
2020-04-17 16:18:31.105 [WARN ] [.core.thing.binding.BaseThingHandler] - Handler BridgeHandler of thing digitalstrom:dssBridge:eb907aa7 tried updating channel total_energy_wh although the handler was already disposed.
2020-04-17 16:18:31.269 [WARN ] [.core.thing.binding.BaseThingHandler] - Handler BridgeHandler tried updating the thing status although the handler was already disposed.
2020-04-17 16:18:45.752 [WARN ] [.core.thing.binding.BaseThingHandler] - Handler BridgeHandler tried updating the thing status although the handler was already disposed.
2020-04-17 16:18:46.015 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception: 
java.lang.NullPointerException: null
        at org.openhab.binding.digitalstrom.internal.lib.sensorjobexecutor.AbstractSensorJobExecutor$ExecutorRunnable.run(AbstractSensorJobExecutor.java:77) ~[?:?]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_232]
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) ~[?:1.8.0_232]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_232]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) ~[?:1.8.0_232]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_232]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_232]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_232]
2020-04-17 16:18:46.015 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception: 
java.lang.NullPointerException: null
        at org.openhab.binding.digitalstrom.internal.lib.sensorjobexecutor.AbstractSensorJobExecutor$ExecutorRunnable.run(AbstractSensorJobExecutor.java:77) ~[?:?]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_232]
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) ~[?:1.8.0_232]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_232]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) ~[?:1.8.0_232]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_232]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_232]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_232]
2020-04-17 16:18:46.759 [WARN ] [.core.thing.binding.BaseThingHandler] - Handler BridgeHandler of thing digitalstrom:dssBridge:eb907aa7 tried updating channel total_consumption_wh although the handler was already disposed.
2020-04-17 16:18:46.899 [WARN ] [.core.thing.binding.BaseThingHandler] - Handler BridgeHandler of thing digitalstrom:dssBridge:eb907aa7 tried updating channel total_energy_wh although the handler was already disposed.
2020-04-17 16:18:47.068 [WARN ] [.core.thing.binding.BaseThingHandler] - Handler BridgeHandler tried updating the thing status although the handler was already disposed.
2020-04-17 16:18:47.732 [WARN ] [o.internal.handler.SysteminfoHandler] - No information for channel sensors#fanSpeed with device index 0 :
2020-04-17 16:19:01.633 [WARN ] [.core.thing.binding.BaseThingHandler] - Handler BridgeHandler tried updating the thing status although the handler was already disposed.
2020-04-17 16:19:01.992 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception: 
java.lang.NullPointerException: null
        at org.openhab.binding.digitalstrom.internal.lib.sensorjobexecutor.AbstractSensorJobExecutor$ExecutorRunnable.run(AbstractSensorJobExecutor.java:77) ~[?:?]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_232]
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) ~[?:1.8.0_232]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_232]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) ~[?:1.8.0_232]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_232]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_232]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_232]

Remote host closed connection during handshake

020-04-17 17:21:04.889 [ERROR] [verconnection.impl.HttpTransportImpl] - An IOException occurred: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake

       at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:994) ~[?:1.8.0_232]
       at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367) ~[?:1.8.0_232]
       at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395) ~[?:1.8.0_232]
       at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379) ~[?:1.8.0_232]
       at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559) ~[?:1.8.0_232]
       at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) ~[?:1.8.0_232]
       at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:167) ~[?:1.8.0_232]
       at org.openhab.binding.digitalstrom.internal.lib.serverconnection.impl.HttpTransportImpl.execute(HttpTransportImpl.java:255) [bundleFile:?]
       at org.openhab.binding.digitalstrom.internal.lib.serverconnection.impl.HttpTransportImpl.execute(HttpTransportImpl.java:238) [bundleFile:?]
       at org.openhab.binding.digitalstrom.internal.lib.serverconnection.impl.DsAPIImpl.getLatest(DsAPIImpl.java:534) [bundleFile:?]
       at org.openhab.binding.digitalstrom.internal.lib.manager.impl.DeviceStatusManagerImpl.getTotalEnergyMeterValue(DeviceStatusManagerImpl.java:1213) [bundleFile:?]
       at org.openhab.binding.digitalstrom.internal.lib.manager.impl.DeviceStatusManagerImpl.getMeterData(DeviceStatusManagerImpl.java:1204) [bundleFile:?]
       at org.openhab.binding.digitalstrom.internal.lib.manager.impl.DeviceStatusManagerImpl.access$6(DeviceStatusManagerImpl.java:1199) [bundleFile:?]
       at org.openhab.binding.digitalstrom.internal.lib.manager.impl.DeviceStatusManagerImpl$PollingRunnable.run(DeviceStatusManagerImpl.java:272) [bundleFile:?]
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_232]
       at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [?:1.8.0_232]
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_232]
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [?:1.8.0_232]
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_232]
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_232]
       at java.lang.Thread.run(Thread.java:748) [?:1.8.0_232]

Caused by: java.io.EOFException: SSL peer shut down incorrectly

       at sun.security.ssl.InputRecord.read(InputRecord.java:505) ~[?:1.8.0_232]
       at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975) ~[?:1.8.0_232]
       ... 20 more

Remote host closed connection during handshake

2020-04-17 19:35:34.823 [ERROR] [verconnection.impl.HttpTransportImpl] - An IOException occurred: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake

       at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:994) ~[?:1.8.0_232]
       at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367) ~[?:1.8.0_232]
       at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395) ~[?:1.8.0_232]
       at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379) ~[?:1.8.0_232]
       at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559) ~[?:1.8.0_232]
       at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) ~[?:1.8.0_232]
       at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:167) ~[?:1.8.0_232]
       at org.openhab.binding.digitalstrom.internal.lib.serverconnection.impl.HttpTransportImpl.execute(HttpTransportImpl.java:255) [bundleFile:?]
       at org.openhab.binding.digitalstrom.internal.lib.serverconnection.impl.HttpTransportImpl.execute(HttpTransportImpl.java:238) [bundleFile:?]
       at org.openhab.binding.digitalstrom.internal.lib.serverconnection.impl.DsAPIImpl.query2(DsAPIImpl.java:1246) [bundleFile:?]
       at org.openhab.binding.digitalstrom.internal.lib.manager.impl.DeviceStatusManagerImpl$PollingRunnable.getDetailedDevices(DeviceStatusManagerImpl.java:407) [bundleFile:?]
       at org.openhab.binding.digitalstrom.internal.lib.manager.impl.DeviceStatusManagerImpl$PollingRunnable.run(DeviceStatusManagerImpl.java:254) [bundleFile:?]
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_232]
       at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [?:1.8.0_232]
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_232]
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [?:1.8.0_232]
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_232]
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_232]
       at java.lang.Thread.run(Thread.java:748) [?:1.8.0_232]

Caused by: java.io.EOFException: SSL peer shut down incorrectly

       at sun.security.ssl.InputRecord.read(InputRecord.java:505) ~[?:1.8.0_232]
       at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975) ~[?:1.8.0_232]
       ... 18 more

String index out of range: 2

2020-04-18 20:40:22.358 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception: java.lang.StringIndexOutOfBoundsException: String index out of range: 2

       at java.lang.String.substring(String.java:1963) ~[?:1.8.0_232]
       at org.openhab.binding.digitalstrom.internal.discovery.DiscoveryServiceManager.onDeviceAdded(DiscoveryServiceManager.java:200) ~[?:?]
       at org.openhab.binding.digitalstrom.internal.lib.manager.impl.DeviceStatusManagerImpl$PollingRunnable.run(DeviceStatusManagerImpl.java:345) ~[?:?]
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_232]
       at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) ~[?:1.8.0_232]
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_232]
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) ~[?:1.8.0_232]
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_232]
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_232]
       at java.lang.Thread.run(Thread.java:748) [?:1.8.0_232]

2020-04-18 20:40:23.223 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception: java.lang.NullPointerException: null

       at org.openhab.binding.digitalstrom.internal.lib.sensorjobexecutor.AbstractSensorJobExecutor$ExecutorRunnable.run(AbstractSensorJobExecutor.java:77) ~[?:?]
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_232]
       at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) ~[?:1.8.0_232]
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_232]
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) ~[?:1.8.0_232]
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_232]
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_232]
       at java.lang.Thread.run(Thread.java:748) [?:1.8.0_232]

2020-04-18 20:40:25.293 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception: java.lang.StringIndexOutOfBoundsException: String index out of range: 2

       at java.lang.String.substring(String.java:1963) ~[?:1.8.0_232]
       at org.openhab.binding.digitalstrom.internal.discovery.DiscoveryServiceManager.onDeviceAdded(DiscoveryServiceManager.java:200) ~[?:?]
       at org.openhab.binding.digitalstrom.internal.lib.manager.impl.DeviceStatusManagerImpl$PollingRunnable.run(DeviceStatusManagerImpl.java:345) ~[?:?]
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_232]
       at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) ~[?:1.8.0_232]
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_232]
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) ~[?:1.8.0_232]
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_232]
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_232]
       at java.lang.Thread.run(Thread.java:748) [?:1.8.0_232]

Batch could not be sent. Data will be lost

2020-04-29 04:16:18.532 [ERROR] [org.influxdb.impl.BatchProcessor ] - Batch could not be sent. Data will be lost java.lang.RuntimeException: {"error":"timeout"}

       at org.influxdb.impl.InfluxDBErrorHandler.handleError(InfluxDBErrorHandler.java:19) ~[influxdb-java-2.2.jar:?]
       at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:242) ~[retrofit-1.9.0.jar:?]
       at org.influxdb.impl.$Proxy180.writePoints(Unknown Source) ~[?:?]
       at org.influxdb.impl.InfluxDBImpl.write(InfluxDBImpl.java:151) ~[influxdb-java-2.2.jar:?]
       at org.influxdb.impl.BatchProcessor.write(BatchProcessor.java:171) [influxdb-java-2.2.jar:?]
       at org.influxdb.impl.BatchProcessor$1.run(BatchProcessor.java:144) [influxdb-java-2.2.jar:?]
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_232]
       at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [?:1.8.0_232]
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_232]
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [?:1.8.0_232]
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_232]
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_232]
       at java.lang.Thread.run(Thread.java:748) [?:1.8.0_232]

2020-04-29 04:42:13.025 [ERROR] [verconnection.impl.HttpTransportImpl] - An IOException occurred: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake

       at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:994) ~[?:1.8.0_232]
       at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367) ~[?:1.8.0_232]
       at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395) ~[?:1.8.0_232]
       at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379) ~[?:1.8.0_232]
       at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559) ~[?:1.8.0_232]
       at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) ~[?:1.8.0_232]
       at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:167) ~[?:1.8.0_232]
       at org.openhab.binding.digitalstrom.internal.lib.serverconnection.impl.HttpTransportImpl.execute(HttpTransportImpl.java:255) [bundleFile:?]
       at org.openhab.binding.digitalstrom.internal.lib.serverconnection.impl.HttpTransportImpl.execute(HttpTransportImpl.java:238) [bundleFile:?]
       at org.openhab.binding.digitalstrom.internal.lib.serverconnection.impl.DsAPIImpl.query2(DsAPIImpl.java:1244) [bundleFile:?]
       at org.openhab.binding.digitalstrom.internal.lib.manager.impl.DeviceStatusManagerImpl$PollingRunnable.getDetailedDevices(DeviceStatusManagerImpl.java:408) [bundleFile:?]
       at org.openhab.binding.digitalstrom.internal.lib.manager.impl.DeviceStatusManagerImpl$PollingRunnable.run(DeviceStatusManagerImpl.java:255) [bundleFile:?]
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_232]
       at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [?:1.8.0_232]
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_232]
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [?:1.8.0_232]
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_232]
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_232]
       at java.lang.Thread.run(Thread.java:748) [?:1.8.0_232]

Caused by: java.io.EOFException: SSL peer shut down incorrectly

       at sun.security.ssl.InputRecord.read(InputRecord.java:505) ~[?:1.8.0_232]
       at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975) ~[?:1.8.0_232]
       ... 18 more