Tempest

Falls ja dann auf Debug klicken

Dann müsstest Du so etwas sehen (Text Roh auswählen)

Nein. Ich habe nur obs_st und Rohdaten.

OK dann ist das der Fehler, Lass mich mal nachschauen

Muss im Script etwas eingetragen werden, z.B. ein Bezug zur Station? Stört es, wenn das Modul auch läuft? Muss das Forecast-Script auch ausgeführt werden? Dort gibt es die Stations-ID und den Token.

Es ist schon eine Weile her das ich mich mit dem Skript beschäftigt habe.
Die Register Variable wird anscheinend nicht automatisch angelegt. Ist aber kein Beinbruch.
Rechts Klick auf das Skript im Objektbaum
Auswahl Instanzen
Im Schnellfilter register eingeben
Register Variable erstellen
Als Ziel das Skript angeben
Bei Gateway ändern den UDP Socket auswählen

Das wars

Das Forecast Skript muss nicht ausgeführt werden. Es holt seine Daten nicht von der Station sondern vom Tempest Server

Vielen Dank! Durch deine schnelle Hilfe funktioniert es jetzt. Ich bin begeistert.

1 „Gefällt mir“

Hab auch Probleme bei der Installation. Das Debug-Window bei der Registervariable zeigt jede Menge Messages zum ‚Hub Status‘, aber keine zu echten Wetterdaten. Was kann das sein?

Gruss, H-C

Das kann dann eigentlich nur an der Wetterstation liegen. Bekommst Du eigentlich die Wetterdaten auf der App ?

Stimmt, das Pairing hat ausgesetzt. Nachdem ich das neu gemacht hatte war alles in Ordnung. Danke!

1 „Gefällt mir“

Ich bekomme z.Zt. keine Daten mehr angezeigt. In der App ist alles OK.

Fehlermeldung:

14.10.2021, 20:00:50 | ScriptEngine         | Result for Event 33691
Notice: Trying to access array offset on value of type null in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1389
Warning: array_key_exists() expects parameter 2 to be array, null given in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1389
Notice: Undefined index: forecast in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1157
Notice: Trying to access array offset on value of type null in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1157
Warning: count(): Parameter must be an array or an object that implements Countable in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1157
Notice: Undefined variable: condition in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1168
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1061
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1061
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1061
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1061
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1061
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1061
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1061
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1061
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1061
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1061
Notice: Undefined index: forecast in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1157
Notice: Trying to access array offset on value of type null in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1157
Warning: count(): Parameter must be an array or an object that implements Countable in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1157
Notice: Undefined variable: condition in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1168
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1061
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1061
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1061
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1061
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1061
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1061
Notice: Undefined index: icon in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1087
Notice: Undefined index:  in C:\ProgramData\Symcon\scripts\39750.ips.php on line 1087

Ich habe bei mir eben mal nachgeschaut und ich hatte bei der Abfrage 19:00 Uhr und 20:00 Uhr auch diese Fehlermeldungen. Dazwischen und danach wieder alles ok.
Ich glaube, die selben Fehlermeldungen kommen, wenn die Verbindung zum Internet/Tempest-Server nicht verfügbar ist. Da habe ich dann immer die Ausführung blockiert, damit die Fehlermeldungen nicht ständig kommen. Ich trigger das Script mit der Aktualisierung der obs_st Rohdaten (so jede Minute).

Vielleicht kann @BestEx hier noch im Script was abfangen, wenn der Server nicht erreichbar ist?

Gruß
Rainer

Ich könnte abfragen ob $array wirklich ein ARRAY ist
Macht das Sinn ? Oder sollte ich besser nachschauen ob $resp leer ist ?

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?