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 -%}