Daten des Teltonika Routers in Homeassistant anzeigen

Natürlich wäre es schön, in Homeassistant auch die wichtigsten Daten des LTE-Routers des Wohnwagens angezeigt zu bekommen. Der RUT950 kann MQTT, daher sollte man meinen, daß dies der einfachste Weg ist. Leider ist die MQTT-Konfiguration schwierig, man muß wohl erst ein Topic vom eigentlichen Client aus veröffentlichen, erst dann publiziert der Router. Ich habe es nicht hinbekommen und wäre an einer funktionierenden Lösung interessiert.

Eine andere Möglichkeit ist Modbus, eine etwas simplere und rustikalere Variante. Homeassistant unterstützt das auch, aber ohne Konfiguration in der GUI.

In der configuration.yaml ist folgende Zeile zu ergänzen:

modbus: !include modbus.yaml # für Modbus
sensor: !include sensors.yaml # für die spätere Umrechnung der Laufzeit

Die Datei modbus.yaml sieht im Moment so aus – zusammengesucht aus verschiedenen Seiten im Netz:

#Router
- name: router
    type: tcp
    host: 192.168.1.1
    port: 502
    sensors:
    - name: "Teltonika - Mobile Signal Strength" #aka sensor.rutx_mobile_signal_strength
        unique_id: "Teltonika_Mobile_Signal_Strength"
        scan_interval: 30
        unit_of_measurement: "dBm"
        device_class: signal_strength
        slave: 1
        address: 4
    - name: "Teltonika - System Temp" #aka sensor.rutx_system_temp
        unique_id: "Teltonika_System_Temp"
        scan_interval: 30
        unit_of_measurement: "°C"
        scale: 0.1
        device_class: temperature
        data_type: int32
        slave: 1
        address: 5
    - name: "Teltonika - System hostname"
        unique_id: "Teltonika_System_hostname"
        slave: 1
        address: 7
        count: 16
        data_type: string
    - name: "Teltonika - GSM operator name"
        unique_id: "Teltonika_GSM_operator_name"
        slave: 1
        address: 23
        count: 16
        data_type: string
    - name: "Teltonika - Network registration info"
        unique_id: "Teltonika_Network_registration_info"
        slave: 1
        address: 103
        count: 16
        data_type: string
    - name: "Teltonika - Network type"
        unique_id: "Teltonika_Network_type"
        slave: 1
        address: 119
        count: 16
        data_type: string
    - name: "Teltonika - Local ISO time"
        unique_id: "Teltonika_Local_ISO_time"
        slave: 1
        address: 366
        count: 12
        data_type: string
    - name: "Teltonika - UTC time"
        unique_id: "Teltonika_UTC_time"
        slave: 1
        address: 378
        count: 12
        data_type: string
    - name: "Teltonika Daten download Monat"
        unique_id: "Teltonika_Daten_download_Monat"
        scan_interval: 30
        unit_of_measurement: "B"
        data_type: int32
        slave: 1
        address: 194
    - name: "bytes sent mtd"
        unique_id: bts_snt_mtd01
        scan_interval: 30
        data_type: uint32
        input_type: holding
        state_class: total_increasing
        device_class: data_size
        unit_of_measurement: "B"
        slave: 1
        address: 196
    - name: "Teltonika - System uptime"
        unique_id: "teltonika_system_uptime"
        device_class: duration
        unit_of_measurement: "s"
        slave: 1
        address: 1
        data_type: uint32
    - name: "Teltonika - Active SIM Card"
        unique_id: "Teltonika_Active_SIM_Card"
        unit_of_measurement: "SIM"
        slave: 1
        address: 205
        data_type: uint16
    - name: "Teltonika - Router serial Nr"
        unique_id: "Teltonika_Router_serial_Nr"
        slave: 1
        address: 39
        count: 16
        data_type: string

Nach Neustart vom HA werden dann die entsprechenden Entitäten angezeigt und können benutzt werden. Die Anzeige der heruntergeladenen Daten ist nicht korrekt, auch stellt der Router diese zu Monatsbeginn nicht wieder zurück, wenn er nicht eingeschaltet ist, ich habe das daher zunächst so belassen.

Die Anzeige der Uptime ist in Sekunden und muß noch umgerechnet werden. In der sensor.yaml folgendes ergänzen:

- platform: template
    sensors:
    teltonika_uptime_converted:
        friendly_name: "Teltonika Uptime D:M:S"
        unique_id: "teltonika_uptime_converted"
        value_template: >
        {% set uptime = states('sensor.teltonika_system_uptime')|int  %}
        {% set minutes = ((uptime % 3600) / 60) | int %}
        {% set hours = ((uptime % 86400) / 3600) | int %}
        {% set days = (uptime / 86400) | int %}
        {%- if uptime < 60 -%}
            Weniger als eine Minute
        {%- else -%}
            {%- if days > 0 -%}
            {%- if days == 1 -%}
                1 Tag
            {%- else -%}
                {{ days }} Tage
            {%- endif -%}
            {%- endif -%}
            {%- if hours > 0 -%}
            {%- if days > 0 -%}
                {{ ', ' }}
            {%- endif -%}
            {%- if hours == 1 -%}
                1 Stunde
            {%- else -%}
                {{ hours }} Stunden
            {%- endif -%}
            {%- endif -%}
            {%- if minutes > 0 -%}
            {%- if days > 0 or hours > 0 -%}
                {{ ', ' }}
            {%- endif -%}
            {%- if minutes == 1 -%}
                1 Minute
            {%- else -%}
                {{ minutes }} Minuten
            {%- endif -%}
            {%- endif -%}
        {%- endif -%}