Hallo,
ab und an hängt sich mein Starlink auf, dann kommt die Fritz 7590 nicht raus und die WWW-Lampe leuchtet rot. Gibt es ein Reading, über das ich feststellen kann, ob die Fritz gerade online bzw offline ist? Irgendwie muss sie das ja erkennen, sonst wäre die Lampe nicht rot. Ich könnte Starlink dann über eine Steckdose ggf neu starten; scheint leider keine Dishy-API zu geben, scheint mir also der einzige Weg zu sein. Habe schon versucht, über den Raspberry ein DNS Lookup auf verschiedene Seiten wie Google oder Microsoft zu machen, nur leider funktioniert das aus irgendwelchen Gründen manchmal nicht, obwohl alles online ist.
box_ipExtern ist leider leer, liegt vielleicht daran, dass Starlink als "Anschluss an externes Modem oder Router" angebunden ist? Laut Oberfläche bekommt er die IP .170, es gibt aber kein entsprechendes Reading.
Habe es jetzt erstmal so gelöst (falls es irgendjemanden interessiert): Auf dem Raspberry läuft ein Apache, der regelmäßig ein PHP Script aufruft:
function IsOffline_Intern()
{
try
{
$file = fsockopen ('192.168.0.1', 80, $errno, $errstr, 5); // 5 Sek Timeout
if (!$file) { $offline = true; }
else { $offline = false; }
}
catch (Exception $e) { $offline = true; };
if($Offline==true) { @LogToFileClearSingle("/opt/fhem/online_int.txt","0"); }
else { @LogToFileClearSingle("/opt/fhem/online_int.txt","1"); };
return $Offline;
};
function IsOffline_Extern()
{
$Zufall = Rand(0,3);
putenv('RES_OPTIONS=retrans:1 retry:1 timeout:2 attempts:2');
if($Zufall==0) { $TestURL = "www.microsoft.de"; }
else if($Zufall==1) { $TestURL = "www.google.de"; }
else if($Zufall==2) { $TestURL = "www.oracle.com"; }
else { $TestURL = "www.akamai.com"; };
try
{
$WWWTest = gethostbyname($TestURL);
$Offline = (($WWWTest==$TestURL) or ($WWWTest==""));
}
catch (Exception $e) { $Offline = true; };
if($Offline==true) { @LogToFileClearSingle("/opt/fhem/online_ext.txt","0"); }
else { @LogToFileClearSingle("/opt/fhem/online_ext.txt","1"); };
return $Offline;
};
Es werden zwei Textdateien erzeugt, in denen jeweils 0 (offline) oder 1 (online) steht. Eine Funktion prüft die Verbindung ins Internet (ext), eine zur Fritzbox (int).
In FHEM rufe ich nun alle 5 Minuten eine Funktion auf:
my $OnlineExt = read_file("/opt/fhem/online_ext.txt");
my $OnlineInt = read_file("/opt/fhem/online_int.txt");
- Wenn Ext 1 und Int 1, dann ist alles ok
- Wenn Ext 0 und Int 0, dann wird der Raspberry neu gestartet
- Wenn Ext 0 und Int 1, dann wird über eine Fritz Dect Steckdose der Starlink Router für 10 Sekunden vom Strom genommen (off-for-timer)
Hi,
über tr064 bekommst Du eigentlich exakte Infos. Probier mal
get xxxx tr064Command WANIPConnection:1 wanipconn1 GetInfo
Gruß Otto
Da kommt leider
Service='WANIPConnection:1' Control='wanipconn1'
Action='GetInfo'
{ 'UPnPError' => { 'errorCode' => '401', 'errorDescription' => 'Invalid Action' } }
Ich hätte gedacht weil sie zweiter Router ist? Doch als PPP verbindung?
Versuch:
get xxxx tr064Command WANPPPConnection:1 wanpppconn1 GetInfo
Edit: Achso Starlink hängt hinter der FB?
Genau, fritz nutzt starlink am blauen wan port
Was liefert denn?
get xxxx tr064Command Layer3Forwarding:1 layer3forwarding GetDefaultConnectionService
Service='Layer3Forwarding:1' Control='layer3forwarding' Action='GetDefaultConnectionService' ---------------------------------------------------------------------- { 'GetDefaultConnectionServiceResponse' => { 'NewDefaultConnectionService' => '1.WANIPConnection.1' } }
Ok sorry, ich darf nicht interpolieren und davon ausgehen, dass Schnittstellen einer Grundlogik entsprechen. ::)
Der korrekte tr064 Befehl sollte so aussehen.
WANIPConnection:1 wanipconnection1 GetInfo
Wow, geil, da sind die Daten. Aber wie komme ich per Script da dran?
In etwa so für die Kommandozeile:
{my $val=fhem("get FB7590 tr064Command WANPPPConnection:1 wanpppconn1 GetInfo",1);;$val =~ m/'NewConnectionStatus' => (.*),/g;;return $1}
Achtung: PPPConnection - ich habe das bei mir so getestet - musst Du in Deinen Befehl ändern
Super, das hilft mir weiter, vielen vielen Dank!!
Service='WANIPConnection:1' Control='wanipconnection1' Action='GetInfo'
----------------------------------------------------------------------
{
'GetInfoResponse' => {
'NewConnectionStatus' => 'Connected',
'NewEnable' => '1',
'NewConnectionType' => 'IP_Routed',
'NewDNSOverrideAllowed' => '1',
'NewUptime' => '18976',
'NewPossibleConnectionTypes' => 'IP_Routed, IP_Bridged',
'NewName' => 'internet',
'NewDNSServers' => '192.168.1.1,192.168.1.1',
'NewRSIPAvailable' => '0',
'NewConnectionTrigger' => 'OnDemand',
'NewExternalIPAddress' => '192.168.1.170',
'NewRouteProtocolRx' => 'Off',
'NewNATEnabled' => '1',
'NewMACAddress' => '....',
'NewDNSEnabled' => '1',
'NewLastConnectionError' => 'ERROR_NONE'
}
}
Wäre toll, wenn das auch als Reading verfügbar wäre.