[Erledigt] Fritz offline?

Begonnen von Det20, 25 Februar 2022, 13:12:48

Vorheriges Thema - Nächstes Thema

Det20

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.

Det20

#1
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)

Otto123

Hi,

über tr064 bekommst Du eigentlich exakte Infos. Probier mal
get xxxx tr064Command WANIPConnection:1 wanipconn1 GetInfo

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Det20

#3
Da kommt leider


Service='WANIPConnection:1' Control='wanipconn1'
Action='GetInfo'
{ 'UPnPError' => { 'errorCode' => '401', 'errorDescription' => 'Invalid Action' } }

Otto123

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?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Det20

Genau, fritz nutzt starlink am blauen wan port

Otto123

Was liefert denn?
get xxxx tr064Command Layer3Forwarding:1 layer3forwarding GetDefaultConnectionService
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Det20

Service='Layer3Forwarding:1' Control='layer3forwarding' Action='GetDefaultConnectionService' ---------------------------------------------------------------------- { 'GetDefaultConnectionServiceResponse' => { 'NewDefaultConnectionService' => '1.WANIPConnection.1' } }

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Det20

Wow, geil, da sind die Daten. Aber wie komme ich per Script da dran?

Otto123

#10
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Det20

#11
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.