Setze für den Internetverkehr ein Modem Vigor167 und als Router eine UniFi UCG Ultra ein. Es gibt zwar noch eine FB7590, die regelt aber ausschließlich die DECT Geräte (Heizkörperthermostate) inkl. Telefonie. Funktioniert alles problemlos und geschmeidig.
Habe jetzt Tailscale für den externen Zugriff auf HA als App eingerichtet. Funktioniert auch prima. Allerdings macht die Zwangstrennung mit Vergabe einer neuen externen IP von 1&1 Tailscale Probleme. Sobald eine neue externe IP bei der Zwangstrennung vergeben wird funktioniert die Tailscale-App nicht mehr.
Manuelle Lösung ist Tailscale-App neu starten und es geht wieder bis zur nächsten Zwangstrennung mit neuer externer IP.
Meine Idee wäre jetzt, dass HA über die Unifi Integration die Änderung der externen IP als Trigger erkennt und dann einen Reboot der Tailscale-App durchführt. Damit wäre Tailscale in HA durchgehend verfügbar und muss nicht manuell von mir gestartet werden.
Sollte ich was undeutlich beschrieben haben, gerne nachfragen und Voraus Dank für Eure Unterstützung.
Melde doch die FritzBox bei MyFritz an, und lasse Tailscale auf die myfritz Adresse zeigen.
Wenn das nicht geht, weil die FritzBox nur DECT und kein Internet macht musst Du in der UCG Ultra einen dyndns dienst eintragen. Dafür musst Du dich bei einem der Dienste anmelden.
Eingetragen wird das an der Internetkonfiguration unter dnydns.
Also bei mir läuft alles über die UDM Pro als GW. Aber leider gibt es keine Entität, die irgendwelchen Bezug zur WAN Adresse hat. Bin alles durchgegangen. Vermutlich gibt es eine solche Entität generell innerhalb Unifi (da die UDM ja genau weiß, wann sie eine neue öffentliche IP erhalten hat) aber die Integration greift diese offensichtlich nicht ab.
Wenn du mal eine Lösung hast, wäre ich sehr daran interessiert. Aktuell löse ich das Problem so, dass ich den Reconnect auf 04:00 getimed habe und den Tailgate-Service um 04:15 einfach neustarte. Ist zwar unprofessionell, aber funktioniert bis dato einwandfrei
Habe es mit Hilfe der KI mal folgendermaßen versucht.
Trigger für “externe IP” erstellt, (s.u.., in der sensor.yaml) Läuft alle 5 Minuten (300sek.)
Dann einen Textsensor erstellt und in diesem einmalig manuell die aktuelle IP-Adresse hinterlegt.
Die Automation vergleicht dann externe IP gegen Textsensor.
Wenn sie gleich ist passiert nichts
Wenn Sie ungleich ist wird der Trigger zum Neustart der Tailscale-App geschaltet
Tailscale-App wird neu gestartet und im Textsensor die neue IP vermerkt.
Zusätzlich gebe ich noch eine Whatsapp für mich aus, dass die IP verändert wurde
Aktuell habe ich den Neustart der Tailscale-App deaktiviert und teste ob alles korrekt funktioniert. Nachdem 1&1 sehr unregelmäßig die IP-Adresse ändert kann der Test länger dauern.
Ergebnis ob der Ansatz funktioniert ergänze ich dann hier.
# ------- Unifi Trigger externe Ip -------
#sensor:
- platform: rest
name: Externe IP
resource: https://api.ipify.org?format=json
value_template: "{{ value_json.ip }}"
scan_interval: 300
# ------- Unifi Trigger externe Ip Ende -------
Im Prinzip das was Tuxtom007 geschrieben hat.
Bei Bedarf kann ich auch die Autmation hier mal einstellen. Würde ich aber erst dann machen wenn der Test positiv verläuft.
@jabberwoky - wollte gerade mal deine Automation nachbauen, um dann festzustellen, dass mein Wissen gar nicht dazu ausreicht
Was ich schon geschafft habe, ist folgendes
Ordner “sensors” erstellt
wan_ip_change.yaml im o.a. Ordner angelegt
via configuration.yaml wie folgt auf den Ordner verlinkt
sensor: !include_dir_list sensors/
So - und jetzt kann ich der nächsten Anweisung schon nicht mehr folgen.
Kannst du mir das etwas detaillierter oder ggf. mit Screenshots mal aufzeigen?
Zudem - weil ich gerade erst die Whatsapp-Notification eingebunden habe - vielleicht auch noch erklären, wie du dann genau HA beigebracht hast, bei IP Änderung eine Nachricht zu verschicken?
Ich brauche dazu ja ein “event” - stehe mal wieder am Bahnhof.
Trigger für “externe IP” erstellt,
(s.u.., in der sensor.yaml) Läuft alle 5 Minuten (300sek.)
Dazu den Trigger in der configuration.yaml erstellen.
Dazu suchst du in der configuration.yaml den Sektor “sensor:” und stellst unterhalb den u.s. code ein.
Achte auf die Leerstellen das die übereinstimmen. Der Sektor “sensor:” darf nur einmal vohanden sein. Aus meinem Schnipsel löschen wenn er bei dir schon besteht.
Sollte er in deiner configuration.yaml noch nicht vorhanden sein kannst du den Schnipsel wie nachstehend einfügen. # ------- Unifi Trigger externe Ip ------- sensor: - platform: rest name: Externe IP resource: https://api.ipify.org?format=json value_template: "{{ value_json.ip }}" scan_interval: 300 # ------- Unifi Trigger externe Ip Ende -------
Helfer anlegen:
Einstellungen → Geräte & Dienste → Helfer → Helfer erstellen - “Text-Eingabe” → Name: Letzte bekannte externe IP
Nachdem ersellen den Wert der aktuelle Ip-Adresse eintragen
Einstellungen → Geräte & Dienste → Helfer
“Letzte bekannte externe IP” anklicken
Dort gibt es ein Eingabefeld, in das du direkt deine aktuelle externe IP4-Adresse eintippen und speichern kannst.
Das musst Du intial nur einmal machen. Wenn die Automation läuft wird hier automatisch die letzte bekannte IP vermerkt.
Damit hast nun die IP-Adressen (“Letzte bekannte externe IP” und “Externe IP”) zum Vergleichen in der Automation:
Zum Schluß die Automation erstellen und die entsprechenden Stellen anpassen.
Einstellungen - Automationen - u.rechts Automation erstellten - neue Automation erstellen - oben rechts auf die drei Punkte - in yaml bearbeiten - u.s. code einfügen und speichern.
alias: Externe IP geändert -> Tailscale Add-on neu starten
description: >
Erkennt IP-Wechsel durch 1&1-Zwangstrennung (auch über einen
unavailable-Zwischenzustand) und startet das Tailscale-Add-on neu
triggers:
- entity_id: sensor.externe_ip
trigger: state
conditions:
- condition: template
value_template: |
{{ trigger.to_state.state is match('^\d{1,3}(\.\d{1,3}){3}$')
and trigger.to_state.state != states('input_text.letzte_bekannte_externe_ip') }}
actions:
- action: notify.MIT DEINEM WHATSAPP NOTIY ersetzen
data:
title: Tailscale neu gestartet
message: >
Externe IP hat sich geändert: {{
states('input_text.letzte_bekannte_externe_ip') }} → {{
trigger.to_state.state }}. Tailscale-Add-on wird neu gestartet.
- action: input_text.set_value
target:
entity_id: input_text.letzte_bekannte_externe_ip
data:
value: "{{ trigger.to_state.state }}"
- action: hassio.addon_restart
data:
addon: a0d7b954_tailscale
mode: single
Anschließend den Code noch auf Deine Einstellungen anpassen.
Die Zeile: - action: notify**.MIT DEINEM WHATSAPP NOTIY ersetzen**
Beispiel action: notify.whatsapp_hanswurst
Kontrolle ob addon-Slug korrrekt ist: addon: a0d7b954_tailscale
Allerdings hat es vorher, mit der “best practice” (also das auslagern der Sensoren in einzelne yaml Dateien innerhalb eines Ordners und diesen dann via sensor: !include_dir_list sensors/
verlinken, nicht geklappt. Aber egal - bleibt jetzt so.
Da ich noch am Anfang stehe, ist meine configuration.yaml eh so gut wie leer
Kleines Update:
Der Neustart der Tailscale-App wird sofort nach Erkennen der neuen IP ausgeführt. Das hat vereinzelt (wirklich vereinzelt) zu einem Problem geführt. Der Aufbau der neuen IP-Adresse inkl. Synchronisierung mit dem Netzwerk kann etwas dauern. War der Sync noch nicht abgeschlossen, wurde Tailscale zwar neu gestartet aber der neue Weg war nicht vorhanden. Ergebnis HA nicht über Tailscale erreichbar.
Habe die Automation jetzt dahingehend angepasst, dass nach Erkennen der neuen IP der Neustart der Tailscale-App um fünf Minuten verzögert wird. Das behebt das Problem des nicht fertig gestellten Sync der Leitung.
Nachfolgend die angepasste Automation:
alias: Externe IP geändert -> Tailscale Add-on neu starten
description: >
Erkennt IP-Wechsel durch 1&1-Zwangstrennung (auch über einen
unavailable-Zwischenzustand). Wartet nach der Erkennung, bis sich Router/NAT
stabilisiert haben, und startet das Tailscale-Add-on dann einmalig neu.
triggers:
- entity_id: sensor.externe_ip
trigger: state
conditions:
- condition: template
value_template: |
{{ trigger.to_state.state is match('^\\d{1,3}(\\.\\d{1,3}){3}$')
and trigger.to_state.state != states('input_text.letzte_bekannte_externe_ip') }}
actions:
- action: notify.MIT DEINEM WHATSUP NOTIFY ersetzen
data:
title: Externe IP geändert
message: >
Externe IP hat sich geändert: {{
states('input_text.letzte_bekannte_externe_ip') }} → {{
trigger.to_state.state }}. Warte 5 Minuten, bevor Tailscale neu
gestartet wird.
- action: input_text.set_value
target:
entity_id: input_text.letzte_bekannte_externe_ip
data:
value: '{{ trigger.to_state.state }}'
- delay: '00:05:00'
- action: hassio.addon_restart
data:
addon: a0d7b954_tailscale
- action: notify.whatsapp_hartmut
data:
title: Tailscale neu gestartet
message: Tailscale-Add-on wurde nach der IP-Änderung neu gestartet.
mode: single
Anschließend den Code wieder auf Deine Einstellungen anpassen.
Die Zeile: - action: notify**.MIT DEINEM WHATSAPP NOTIY ersetzen**
Beispiel action: notify.whatsapp_hanswurst
Kontrolle ob addon-Slug korrrekt ist: addon: a0d7b954_tailscale
Hinweis: Wenn die IP-Adresse innerhalb der 5 Minuten nochmals vom Provider gewechselt wird, erkennt das die Automation nicht. Meiner Kenntniss nach zwar möglich aber n der Praxis dürfte das aber kaum bzw. gar nicht vorkommen.