Steckdose schalten, wenn kein Internet mehr

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Antworten
Bremer2018
Beiträge: 2
Registriert: 11.02.2018, 20:39

Steckdose schalten, wenn kein Internet mehr

Beitrag von Bremer2018 » 11.02.2018, 20:47

Hallo,
mein Router kann sich ab und an nicht mehr mit dem Internet verbinden und muss dann neu gestartet werden. Über das WLAN ist intern noch alles erreichbar, also auch die CCU, aber extern ist kein Netz vorhanden. Meine Idee ist nun, dies automatisiert zu erkennen und zu beheben.

Der Ansatz dazu: Es wird geprüft, ob bestimmte Server über Ping erreichbar sind. Wenn dies innerhalb von 2 Minuten nicht klappt, erhält die Router-Steckdose den Befehl "Aus" und nach 10 Sekunden den Befehl "An".

Ich habe nur leider gar keine Idee, wie man das realisieren kann. Könnt ihr helfen?

Danke, Henning

Benutzeravatar
eiGelbGeek
Beiträge: 979
Registriert: 24.07.2014, 17:46
Wohnort: Ruhrpottrandgebiet
Hat sich bedankt: 105 Mal
Danksagung erhalten: 19 Mal

Re: Steckdose schalten, wenn kein Internet mehr

Beitrag von eiGelbGeek » 11.02.2018, 21:29

CUxD und ein kleines CCU Programm....

CUxD zum pingen von z.b. www.google.de

Wenn Ping Ein oder Aus (auf Aktualisierung) dann verzögert um 120 Sekunden Steckdose aus. und nach 130 Sekunden wieder ein...





Gesendet von iPhone mit Tapatalk
Nur weil es nicht geht, muss es nicht kaputt sein ^^

Apple for Work, Linux for Network, iOS for Mobility and still Windows for Solitaire

Benutzeravatar
Roland M.
Beiträge: 9804
Registriert: 08.12.2012, 15:53
System: CCU
Wohnort: Graz, Österreich
Hat sich bedankt: 252 Mal
Danksagung erhalten: 1381 Mal

Re: Steckdose schalten, wenn kein Internet mehr

Beitrag von Roland M. » 11.02.2018, 21:35

Hallo Henning, willkommen im Forum!

Du suchst das AddOn CUxD! :D

Dort gibt es ein virtuelles Gerät, das nur pingt und einen Ausgang entsprechend "schaltet".

Bei mir schaut dann ein Programm zur Überwachung einer VPN-Verbindung beispielsweise so aus:
cuxd-ping.PNG

Roland
Zur leichteren Hilfestellung bitte unbedingt beachten:
  • Bezeichnung (HM-... bzw. HmIP-...) der betroffenen Geräte angeben (nicht Artikelnummer)
  • Kurzbeschreibung des Soll-Zustandes (Was soll erreicht werden?)
  • Kurzbeschreibung des Ist-Zustandes (Was funktioniert nicht?)
  • Fehlermeldungen genau abschreiben, besser noch...
  • Screenshots von Programmen, Geräteeinstellungen und Fehlermeldungen (direkt als jpg/png) einstellen!

-----------------------------------------------------------------------
1. CCU2 mit ~100 Geräten (in Umstellung auf RaspberryMatic-OVA auf Proxmox-Server)
2. CCU2 per VPN mit ~50 Geräten (geplant: RaspberryMatic auf Charly)
3. CCU2 per VPN mit ~40 Geräten (geplant: RaspberryMatic auf CCU3)
CCU1, Test-CCU2, Raspi 1 mit kleinem Funkmodul, RaspberryMatic als VM unter Proxmox, Access Point,...

mfahs
Beiträge: 280
Registriert: 18.01.2011, 00:06

Re: Steckdose schalten, wenn kein Internet mehr

Beitrag von mfahs » 12.02.2018, 10:12

Moin!
Das Problem hatte ich seinerzeit auch, als in meinem Ferienhaus noch kein stabiles Internet vorhanden war und ich die CCU1 per Funk angebunden hatte. Wenn dann der Router verstarb, konnte ich die Bude nicht mehr vorheizen, bevor wir hinfuhren. Das war ausgesprochen ärgerlich. Mittlerweile habe ich 'ne Glasfussel am Standort und brauche keine Neustarts mehr. Deshalb habe ich die ganzen Programme dafür zwar aus der RaspberryMatic entfernt, aber noch aufbewahrt - vielleicht braucht man sowas mal wieder...

Ich versuche mal, alles notwendige hier zusammenzutragen. Sicherlich kann man das auch weniger aufgebohrt machen und Script-Füchse können das sicherlich auch deutlich schlanker umsetzen, aber ich bitte zu bedenken, dass das ganze vor ewigen Zeiten entstanden ist und damals schon auf einer CCU1 zuverlässig lief! :-)

Benötigte Geräte:
  • - Schaltbare Steckdose "Steckdose.Router"
    - Ping1, Ping2, Ping3 -> CUXD-Ping-Geräte, die alle 15 Minuten einen DNS von der Telekom, einen DNS von Google und einen DNS vom eigene Provider abfragen


Benötigte Variablen (ich hoffe, ich habe alle erwischt):
  • - Router.Steckdose.Status Boolean "normal"/ "" Aktueller Status der Steckdose
    - Router.Connection Boolean 0 / 1 Verbindung da oder nicht
    - Router.ResetCounter Zahl Zähler für die Verbindungsabbrüche. Erst bei 5 Versuchen wird neu gestartet
    - Router.TimeConnection String Zeitstempel letzter korrekter Verbindungsaufbau nach Unterbrechung
    - Router.ResetSwitch Boolean 0 / 1 Es wird ein Reset durchgeführt (=1), sonst 0
    - Router.LastReset Zeichenkette Zeitstempel letzter Reset
    - Router.ResetsWeek Zahl Anzahl Resets in der Woche
    - Router.TimeNoConnection Zeichenkette Zeitstempel der Uhrzeit des Verbindungsausfalls
    - CurrentTimeStamp Zeichenkette zum zwischendurch "Aktuelle Uhrzeit merken"
Programme:

Router.CheckSteckdose
=====================
Wenn bei ansonsten ganz normaler Situation die Steckdose "Setckdose.Router" ausgeschaltet ist, wird sie eingeschaltet und eine Meldung gesendet.
Dann muss ein Stromausfall vorgelegen haben...
Router.CheckSteckdose.jpg
Router.ConnectionAgain
======================
Wenn alle drei Pings erfolgreich und die Var "Router.Connection" = 0 (also auf "Connection weg"), dann Var "Router.Connection" auf 1 setzen,
Info senden, Var "Router.ResetCounter" auf 1 setzen und Zeitstempel in "Router.TimeConnection" packen
Router.ConnectionAgain.jpg
Router.NeustartAlarm
====================
Wenn Var "Router.ResetSwitch" = 1 (also Kennzeichen "mach mal einen Neustart!" gesetzt) und die Verbindung weiterhin nicht vorhanden (weil "Router.Connection" = 0)
dann: Script ausführen, in dem zunächst der aktuelle Zeitpunkt gemerkt wird, dann die Var für die Anzahl der wöchentlichen Resets hochgesetzt wird.
Dann die Steckdose ausschalten, Var "Router.ResetSwitch" auf 0 setzen und nach 10 Sekunden die Steckdose neu starten.
Router.NeustartAlarm.jpg
Router.NeustartWöchentlich
==========================
Jeden Donnerstag um 4:15 einfach mal prophylaktisch den Router neu starten...
Router.NeustartWöchentlich.jpg
Router.NoConnection
===================
Die eigentlich wichtigste Routine: Wenn alle drei PINGs daneben gehen, dann wird "Router.ResetCounter" alle 5 Minuten um 1 hochgezählt und nach 5 Minuten wieder getestet, ob die Verbindung mittlerweile wieder da ist. Erst, wenn "Router.ResetCounter" 6 ist, wird das Kennzeichen "Router.ResetSwitch" auf 1 gesetzt und damit der Reset tatsächlich ausgelöst. Damit wird ein ständiger Neustart verhindert, weil der Router noch 30 Minuten die Chance hat, sich zu "berappeln". Erst, wenn nach 30 Minuten immer noch nichts geht, wird tatsächlich auf den Knopf gedrückt.
Router.NoConnection(1).jpg
Router.NoConnection(2).jpg
Hier nochmal das Script als Text:

Code: Alles auswählen

! Akt. Zeit speichern in "Router.TimeNoConnection"
string timestampString = system.Date("%d.%m.%Y - %H:%M:%S");
string CurrTimeString1 = dom.GetObject("Router.TimeNoConnection");
CurrTimeString1.State(timestampString);

! "TimeConnection" löschen
string CurrTimeString2 = dom.GetObject("Router.TimeConnection");
CurrTimeString2.State("------");

! Akt. Zeit speichern in "CurrentTimeStamp"
integer timestamp = system.Date("%F %X").ToTime().ToInteger();
integer CurrTime = dom.GetObject("CurrentTimeStamp");
CurrTime.State(timestamp);

! Diff. aus LastReset - CurrTime berechnen
integer Reset = dom.GetObject("Router.LastReset");
integer CurrTime = dom.GetObject("CurrentTimeStamp");
integer Delta = dom.GetObject("Router.TimeSinceLastReset");
Delta.State(CurrTime.State() - Reset.State());

integer ResetItNow = dom.GetObject("Router.ResetSwitch");
integer Counter = dom.GetObject("Router.ResetCounter");
string InfoZeile = dom.GetObject("Info");
string text;

if (Delta.State() >= (300.00 * Counter.State()))
{
  text = 300.00 * Counter.State();
  InfoZeile.State("Letzte Wartezeit auf den Neustart:  " # text # " Sekunden");

  if (Counter.State() < 6.0)
  {
    Counter.State(Counter.State() + 1.0);
  }

  text = Counter.State() * 300.00;
  InfoZeile.State("Neustart wird jetzt durchgefuehrt. Dann ggfls. nächster Neustart in weiteren " # text # " Sekunden");
  ResetItNow.State(1);
} 
else 
{
  ResetItNow.State(0); 
}
Router.Set.ResetsWeek.ToZero
============================
Setzt den Zähler für die Resets innerhalb einer Woche auf 0
Router.SetResetsWeekToZero.jpg
Vielleicht hilft es ja Dir oder jemand anderem!?
Wenn noch was unklar ist, gerne fragen...

Grüße,
Martin

Bremer2018
Beiträge: 2
Registriert: 11.02.2018, 20:39

Re: Steckdose schalten, wenn kein Internet mehr

Beitrag von Bremer2018 » 15.02.2018, 23:16

Ganz herzlichen Dank erst einmal an alle, die mir mit den Antworten oben geholfen haben! Einiges ist noch sehr komplex für mich, das werde ich mir in den nächsten Tagen und Wochen erarbeiten. Tolles Forum!

Antworten

Zurück zu „HomeMatic allgemein“