[PATCH] disable & DNS Check für 59_Weather

Begonnen von Markus M., 26 Mai 2016, 21:26:39

Vorheriges Thema - Nächstes Thema

Markus M.

Bitte einbauen:
- 2 Stunden Pause (und auch nur 10sec Blockierung) bei DNS Ausfall um FHEM nicht komplett lahmzulegen.
  (nach einer globalen Lösung wird gesucht, ist aber noch nicht soweit)
- Attribut disable

Siehe hier.

Index: 59_Weather.pm
===================================================================
--- 59_Weather.pm (revision 11525)
+++ 59_Weather.pm (working copy)
@@ -86,7 +86,7 @@
   $hash->{UndefFn} = "Weather_Undef";
   $hash->{GetFn}   = "Weather_Get";
   $hash->{SetFn}   = "Weather_Set";
-  $hash->{AttrList}= $readingFnAttributes;
+  $hash->{AttrList}= "disable:0,1 $readingFnAttributes";
   $hash->{NotifyFn}= "Weather_Notify";

   #Weather_DebugCodes('de');
@@ -303,6 +303,14 @@
     my ($hash) = @_;
     my $name = $hash->{NAME};

+    my $resolve = inet_aton("query.yahooapis.com");
+    if(!defined($resolve))
+    {
+      $hash->{STATE} = "DNS error";
+      InternalTimer( gettimeofday() + 7200, "Weather_GetUpdate", $hash, 0);
+      return undef;
+    }
+
     Weather_RetrieveData($name, 0);

     return 1;
@@ -369,7 +377,7 @@
   return if($dev->{NAME} ne "global");
   return if(!grep(m/^INITIALIZED|REREADCFG$/, @{$dev->{CHANGED}}));

-  return if($attr{$name} && $attr{$name}{disable});
+  return undef if(AttrVal($name,"disable",0) eq "1");

   # update weather after initialization or change of configuration
   # wait 10 to 29 seconds to avoid congestion due to concurrent activities
@@ -417,6 +425,7 @@

   $hash->{fhem}{allowCache}= 1;

+  return undef if(AttrVal($name,"disable",0) eq "1");
   Weather_GetUpdate($hash) if($init_done);

   return undef;


Viele Grüsse,
Markus
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

Markus Bloch

Hi Markus,

warum machst du es dir so kompliziert?

return undef if(IsDisabled($name));

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

justme1968

und dann kann man auch gleich disabledForIntervals in die attribute mit aufnehmen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Dr. Boris Neubert

Hallo,

eine lokale Lösung für die Prüfung auf einen nicht antwortenden DNS-Server kommt für mich nicht in Frage. Das muss in HttpUtils.pm rein.

attr disable baue ich gelegentlich ein.

Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

Zitat von: Dr. Boris Neubert am 29 Mai 2016, 21:50:39
eine lokale Lösung für die Prüfung auf einen nicht antwortenden DNS-Server kommt für mich nicht in Frage.

Danke.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Benni

Hier mal ein möglicher Workaround:

Bei Mailcheck gibt es ein ähnliches Problem, dass dieses FHEM komplett blockiert, wenn kein Internet vorhanden ist.

Daher habe ich mir inzwischen ein PRESENCE-Device mit LAN-Ping auf den Google-DNS Service ( IP 8.8.8.8 ) angelegt und deaktiviere, bzw. aktiviere (set active/inactive) dann eben je nach dem das Mailcheck-Device um das zu verhindern. 100% habe ich damit bisher auch nicht geschafft, da es eben aufgrund der Check-Intervalle eben ein Timing-Problem geben kann, so dass Mailcheck den Internetausfall vor dem PRESENCE-Device "bemerkt" und dieses dann nebst restlichem FHEM doch wieder blockiert.
Dann schlägt als Fallback aber spätestens 3 Minuten später mein Watchdog zu und startet FHEM einmal  neu.

Wie auch immer: Grundsätzlich sollte das  Verfahren auch mit dem Weather-Modul funktionieren (sobald ein disabled oder besser ein set active/inactive zur Verfügung steht.). PRESENCE kann ja auch mit einer Perl-function angelegt werden, in der dann die konkrete DNS-Auflösung, ähnlich wie von Markus vorgeschlagen, versucht und auf Erfolg geprüft wird.

betateilchen

Wieso habt Ihr eigentlich Ausfälle bei der Verbindung zu Google DNS Servern? Die sind doch hochverfügbar.

Wenn der Server von fhem aus nicht erreichbar ist, ist das mit 99,999999999% Sicherheit kein Problem des Google Servers, sondern der fhem Installation selbst oder der von fhem genutzten Internetverbindung.

Abgesehen davon ist es natürlich unbestritten, dass man darüber nachdenken muss, ob dieser Fehlerfall künftig in den HttpUtils abgefangen wird.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Benni

Zitat von: betateilchen am 29 Mai 2016, 22:20:21
Wieso habt Ihr eigentlich Ausfälle bei der Verbindung zu Google DNS Servern? Die sind doch hochverfügbar.

Wenn der Server von fhem aus nicht erreichbar ist, ist das mit 99,999999999% Sicherheit kein Problem des Google Servers, sondern der fhem Installation selbst oder der von fhem genutzten Internetverbindung.

Exakt! Und genau deshalb verwende ich die Prüfung auf die google-DNS-Sercer um festzustellen, ob ich eine aktive und funktionierende Internetverbindung habe.

Bei mir im Wohnwagen habe ich eben keine 100% zuverlässige Internetverbindung. Liegt eben in der Natur der Sache ;)

Markus M.

Zitat von: betateilchen am 29 Mai 2016, 22:20:21
Wieso habt Ihr eigentlich Ausfälle bei der Verbindung zu Google DNS Servern?
Abgesehen davon ist es natürlich unbestritten, dass man darüber nachdenken muss, ob dieser Fehlerfall künftig in den HttpUtils abgefangen wird.

Weil eben die Internetverbindung ausfällt.
Wenn dann FHEM komplett blockiert ist so dass nicht mal mehr der Prozess gekillt werden geschweigedenn der Service neu gestartet werden kann, ist das ungünstig.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

Wuppi68

macht es da nicht mehr Sinn dieses auf OS Ebene zu lösen? Um dann z.B. 127.0.0.1 zurück zu geben?
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

betateilchen

@Wuppi68 Genau auf sowas wollte ich hinaus. Im Prinzip ist nämlich schon der Thread Titel falsch, weil es eigentlich gar nicht um ein DNS Problem geht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

cotecmania

#11
Hi,

Zitat von: Dr. Boris Neubert am 29 Mai 2016, 21:50:39

attr disable baue ich gelegentlich ein.

Grüße
Boris

kommt das noch oder wurde es vergessen ?
Habe auch Bedarf.
Set heute Nacht staendig : MeinWetter: gethostbyname query.yahooapis.com failed


Gruss
Joe
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

Wuppi68

kein Patch, aber eine (nicht saubere) Möglichkeit:

/etc/resolv.conf

nameserver 192.168.178.1     # Dein Router - hier default ip von einer Fritte
nameserver 8.8.8.8                # google Server
nameserver 127.0.0.1


und jetzt einen Nameserver auf dem FHEM Rechner aufsetzen, der für jede Anfrage 127.0.0.1 zurück gibt :-)
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

Dr. Boris Neubert

Zitat von: cotecmania am 10 November 2016, 17:36:11
kommt das noch oder wurde es vergessen ?

ja und ja ;-)

Habe soeben eine aktualisierte Version eingecheckt.

attr <name> disable

lässt den Timer nach Plan weiterlaufen ohne dass zu den Auslösezeitpunkten Werte abgeholt werden. Wie es sich gehört, wird validity auf stale gestellt und pubDateComment gesetzt.

Ab sofort im SVN und morgen per update verfügbar.

Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

cotecmania

FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI