Tempest

wenn der Server - warum auch immer - nicht erreichbar ist, wird $resp wohl immer leer sein. Damit ist $array auch NULL.
Wieso hast du die Bearbeitung von ‚lightning_strike_last_epoch‘ mit in get_data() integriert? Damit bekommst du immer ein Array zurück, wenn auch nur mit ‚lightning_strike_last_epoch‘ = 0, es fehlen dann aber die restlichen Einträge.
In der Funktion würde ich nur testen, ob $array ein Array ist.

function get_data($Station_ID,$token)
{
      global $time_lapsed;
      $url = 'https://swd.weatherflow.com/swd/rest/better_forecast?station_id='.$Station_ID.'&units_temp=c&units_wind=kph&units_pressure=hpa&units_precip=mm&units_distance=km'; 

      $headers = array(
      "Content-Type: application/json; charset=utf-8",
      "Authorization: Bearer ".$token
      );


      $ch = curl_init();
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

      $resp = curl_exec($ch);
      curl_close($ch);

      $forecast = json_decode ($resp);
      $array = json_decode(json_encode($forecast), true);
      if(is_array($array))
      {
            return $array;
      }
      else
      {
            return false;
      }
}

die weiter Bearbeitung erfolgt dann wieder hier:

//------------------------------------------------------Statische und dynamsiche Daten besorgen ---------------------------------------

$token = check_secret($token,'Token');
$Station_ID = check_secret($Station_ID,'Station ID');
if(!$token or !$Station_ID) return;
$array = get_data($Station_ID,$token);
if(!$array) return;
      if(array_key_exists('lightning_strike_last_epoch',$array['current_conditions']))
      {
            $array['current_conditions']['lightning_strike_last_epoch'] = $array['current_conditions']['lightning_strike_last_epoch'] ;
            if($time_lapsed)
            {
                  $array['current_conditions']['lightning_strike_last_epoch'] =  timeEllapsedFrom($array['current_conditions']['lightning_strike_last_epoch']);
            }
            else
            {
                  $array['current_conditions']['lightning_strike_last_epoch'] = date("d-m-Y H:i:s",$array['current_conditions']['lightning_strike_last_epoch']);
            }
      }
      else
      {
            $array['current_conditions']['lightning_strike_last_epoch'] = 0;
      }

$array_device = get_device_data();


ein leeres $resp bricht dann ab und es kommen keine Fehlermeldungen. Ob man hier noch einen Hinweis oder Meldung einbaut? Bei mir würde das auch nur jede Minute wieder eine Meldung verursachen :frowning:

Habe das bei mir mal zum Testen so geändert.

Rainer

Bei mir läuft auch alles wieder. War nur gestern Abend für die paar Stunden.
Von mir aus kann man es sogar so lassen. Da sieht man wenigstens das keine Daten kommen. Oder halt schreiben Server nicht erreichbar. Aber da weiß man auch nicht warum.
Mir war in diesem Fall nur wichtig ob es nur bei mir so war oder ob es auch andere Betroffen hat.

Upps… Erpe war schneller…

Ok. Eine Fehlermeldung an der Stelle macht ja Sinn, aber nicht gleich 20 und mehr im Log.
Wie schon gesagt, bei mir kommt das dann jede Minute.
Die Darstellung der Meldung hängt ja dann auch davon ab, wie jeder das gemeldet haben möchte.
Reicht ein echo, oder sollen da gleich die „Alarmglocken“ angehen :wink:
Es ist dann ja auch ein Zeichen, dass z.B. die Verbindung ins Internet gestört sein kann, wenn das länger besteht.
Bei mir waren es gestern aber nur zwei „Aussetzer“ jeweils um 19 und 20 Uhr.

Die Anzahl der Fehlermeldungen zu reduzieren macht das Skript noch komplexer als es schon ist. @Erpe vielen Dank für die Skript Erweiterung, beim nächsten größeren update bau ich das ein mit einer erklärenden Fehlermeldung

@BestEx
Mit „Reduzierung“ meinte ich ja auch nur, das ein Fehler nicht gleich 20 bis 30 Meldungen verursacht. Ansonsten kommen von dem Skript bei mir gar nicht so viele Fehlermeldungen.
Du hast da schon gute Arbeit geleistet. Danke. :slight_smile:
Und dass die Verbindung zum Server mal nicht geht, kann ja schon mal vorkommen.

1 „Gefällt mir“

Kurze Zwischenmeldung:
Der DWD sagt gerade, dass bei uns orkanartige Böen mit bis zu 110km/h zu erwarten sind. Gegen 4 Uhr hatten wir eine sehr heftige Böe, die ganz gut am Dach gezerrt hat. Es bläst unterdessen schon sehr heftig und Gegenstände fliegen etwas herum.
Tempest liegt bei 3-6 km/h und das höchste war 18,4 km/h.

Ok, weit vergrößert sehe ich größere Werte aber insgesamt ist das Niveau sehr niedrig. Oder wird das alles so weit geglättet, dass da nur noch Durchschnittswerte rauskommen.

Höhe Sensor ist 6m über Grund.

Passen eure Werte?

Na Ja,
hier bläst es auch ganz schön und die Werte sind so bis über 35km/h. Gefühlt sind es auch mehr.
Ich habe parallel noch mein altes KS300 laufen. So richtig stimmt es nicht überein.
Allerdings steht das KS300 zwischen 2 Häusern (da sind die Böen verstärkt) und Tempest auf freiem Gelände in 2m Höhe.

Böen werden wohl intern kompensiert.
Es ist hier sehr böig aber zwischendurch auch eher sehr lau. Richtig starker Wind ist zeitlich eng begrenzt aber heftig.
Bei mir ist der Sensor 1m über Baumspitze auf Höhe des unteren 1/3 des Daches in 3 m Entfernung zum Dach.
Das Grundstück ist zwar von hohen Bäumen begrenzt aber das sind ca 30m Entfernung zur nächsten Baumreihe.
Am Dach und auf der Terrasse kommt der Wind ja auch spürbar an.

Ich bekomme seit gestern in jeder Stunde eine Fehlermeldung (exakt um xx:07:27 Uhr):

04.12.2021, 09:07:27 | FlowHandler          | Kann Daten nicht zur Instanz #33383 weiterleiten: 
Notice: Trying to access array offset on value of type null in C:\ProgramData\Symcon\modules\Tempest\Tempest\module.php on line 36

Notice: Trying to access array offset on value of type null in C:\ProgramData\Symcon\modules\Tempest\Tempest\module.php on line 98
RESULT:

Im IO kommt zu dem Zeitpunkt immer ein seltsamer Eintrag:

04.12.2021 09:07:27 | TXT | RECEIVED [192.168.178.1:53] | ©<NAK><ETX><NUL><SOH><NUL><NUL><NUL><NUL><NUL><NUL><SOH>b<BEL>_dns-sd<EOT>_udp<ENQ>fritz<ETX>box<NUL><NUL><FF><NUL><SOH>
04.12.2021 09:07:27 | HEX | RECEIVED [192.168.178.1:53] | A915810300010000000000000162075F646E732D7364045F75647005667269747A03626F7800000C0001

Was kann das wohl sein?

hast du das Modul von paresy noch am laufen? Die Fehler kommen von dem Modul.
Was das mit der Fritzbox zu tun hat, kann ich dir aber auch nicht sagen :thinking: :confused:

Ja. Läuft von Anfang an tadellos.

Vorhin habe ich Symcon aktualisiert und dabei neu gestartet. Seitdem ist die Fehlermeldung weg. Schon seltsam.

Ich habe wiedermal Probleme mit meinem Tempest. Durch die Dunkle Zeit ist die Spannung meiner Station auf 2,354V abgesunken. Und seit letzter Nacht sendet er keinen Durchschnitt des Windes.

Geht mir seit ein paar Tagen auch so. Das ist das normale Energie Sparprogramm des Systems

Meiner hält sich die ganze Zeit noch über dem Level. Aber nur knapp. :blush:

Ja ich weiß.

Letztes Jahr dachte ich noch, es wird nicht genug geladen, weil vorher nicht voll. Aber der Akku (gesamtes Ladesystem) scheint doch etwas zu knapp ausgelegt zu sein.

Da ich mal wieder genauer meine Wetterdaten angeschaut habe fällt mir auf das bei den Helligkeitswerten wieder öfters die 0Lux Werte am Tage auftauchen.

Gerade mal nachgesehen. Bei mir tauchten die Nullwerte auch zwischendurch mal wieder auf. Interessanterweise jeden Tag vom 26.11.-6.12. Vorher und nachher sind keine zu finden.
Ob es da zwischendurch mal einen schlechten Softwarestand gab?

So ein Zeitfenster habe ich nicht. Diese Nullwerte sind ab 17.11.
aber auch nicht jeden Tag.

Mit dem Windwerten stimmt wirklich etwas nicht.

Wind Gust(max 3sec sample) keine Werte
Wind AVg keine Werte
Wind Speed alle 5 Minuten ein Wert
Soweit OK weil Modus 3, Spannung unter 2,355V

Aber in der Deviceansicht wird nichts angezeigt. Eigentlich auch OK weil Daten aus der App sind und Wind Speed anscheinend nicht enthalten ist. In der App stehen seit vorgesstern auch keine Wind Werte.
Müsste also ein Problem von WeaterFlow sein.

1

Neue Version 4.0.0 auf Github Forecast 4.0.0

In der Version. 4.0 wurden die folgenden drei neuen Funktionen eingepflegt:

1.) Wasserstände für Ebbe und Flut (Tide) an Stränden in den USA können angezeigt werden. Dazu muss eine Stations Nummer für die Variable $tide_station_id angegeben werden und wie üblich ist die Anzeige für Tide in der Stunden Anzeige zu aktivieren
US Tide Api CO-OPS Data Retrieval API Station ID von Port Everglade CO-OPS Map - NOAA Tides & Currents
Zum deaktivieren dieser Funktion als $tide_station_id = 0 eintragen

2.) Die Tempest Wetterstation kann in einer anderen Zeitzone betrieben werden als der Server der die Daten auswertet. Dazu muss man die Rohdaten des entfernten Systems auf den lokalen Symcon Server übertragen bzw. spiegeln
Um die Uhrzeiten der entfernten Wetterstation richtig anzuzeigen muss eine Zeit Korrektur in Sekunden angegeben werden : $time_zone_correction = intval(60606); ist der Wert für eine Wetterstation in Florida
Diese Funktion wird zum Beispiel benötigt wenn die Darstellung von Informationen mehrerer Standorte in verschiedenen Zeitzonen über einen zentralen IPS Server läuft , über den mit IPS VIEW Anzeigen generiert werden.

3.) Die angezeigten Werte der Wetterstation können nun entsprechend des aktuellen Wertes im Farbton variiert werden. Dazu wird ein Array mit Farbcodes in HEX angelegt (im einfachsten Fall nur ein Start und Endwert). Das Program ermittelt die Min/Max Werte der betreffenden Daten und generiert einen dem spezifischen Einzelwert entsprechenden Farbton.
Das Array kann beliebig viele Farbstufen enthalten. Die hier gewählte Parametrisierung nutzt nur zwei Werte (Variationen von Blau)
$start_wert_farb_gradient = ‚73a5c6‘;
$end_wert_farb_gradient = ‚1e3f66‘;

 Diese Werte können mit Farbtönen versehen werden :
 $gradient_humidity             
  $gradient_precip                
  $gradient_air_temperature       
  $gradient_feels_like           
  $gradient_sea_level_pressure   
  $gradient_wind_gust            
  $gradient_uv                   
  $gradient_tide                 
  $gradient_air_temp_low          
  $gradient_air_temp_high       
  $gradient_precip_type        
  $gradient_relative_humidity   

Im Moment haben alle Gradienten den gleichen Anfangs und Endwert der zu Verfügung stehenden Farbskala (kann geändert werden)

Hier ist ein Beispiel für eine breitere Farbskale : $gradient_humidity = array($light_green,$green,$green1,$light_blue,$blue,$blue1,$violet,$orange,$red1,$fire);

Falls die Funktion deaktiviert werden soll muss man für den ersten Wert ($start_wert_farb_gradient) ein ‚‘ angeben.

Hier ist ein Beispiel bei dem alle drei Funktionen genutzt werden :

Viel Spaß