Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wetterstation Daten auslesen/speichern (https://www.delphipraxis.net/213324-wetterstation-daten-auslesen-speichern.html)

harfes 10. Jul 2023 07:03

Wetterstation Daten auslesen/speichern
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich habe eine neue Wetterstation (Hersteller Davis "WeatherlinkLive") im lokalen Netzwerk und möchte die Datenverarbeitung automatisieren. Dazu ist es möglich, die Daten der Station via IP-Adresse auszulesen (http://192.168.1.91/v1/current_conditions) - im Browser ergeben sich dann folgende Möglichkeiten bzw Darstellungen:

1. als Jason-Format

ODER

2. als Text-Format

Das kann ich dann natürlich speichern und dort die Weiterverarbeitung via Delphi starten. Das würde aber heissen, das jedesmal von Hand durchzuführen, was natürlich Unsinn ist. Meine Frage also, da ich sowas noch nie gemacht habe: wie kann ich die Daten ohne Browser auslesen (evtl. Indy-Komponenten? oder andere Komponenten?) und für die Weiterverarbeitung entweder direkt in eine DB (evtl. in Firebid-DB) oder eine Datei speichern?

Hartmut

IBExpert 10. Jul 2023 07:48

AW: Wetterstation Daten auslesen/speichern
 
ich benutze das hier in ibexpert für aus auslesen von stromverbrauchswerten auf shelly, technisch macht der da
genau das was du auch brauchst, setzt aber wegen ibeblock die ibexpert vollversion voraus, liesse sich aber
in delphi direkt auch machen

uses urlmon; UrlDownloadToFile (gab es zumindest mal so)


Code:
execute ibeblock
as
begin
  DB = ibec_CreateConnection(__ctInterBase,
                             'DBName="127.0.0.1:C:\db\db.fdb";
                             ClientLib=C:\Program Files (x86)\HK-Software\IBExpert\firebird3\fbclient.dll;
                             User=SYSDBA; Password=masterkey; Names=UTF8; SqlDialect=3;');
  use db;
  ibec_url_DownloadToVar('http://192.168.0.123/rpc/Switch.GetStatus?id=0',dat,'');
  insert into SHELLY (CH, DAT) values ('p1', :DAT);
  commit;
end

Bbommel 10. Jul 2023 08:25

AW: Wetterstation Daten auslesen/speichern
 
Zitat:

Zitat von harfes (Beitrag 1524370)
Das kann ich dann natürlich speichern und dort die Weiterverarbeitung via Delphi starten. Das würde aber heissen, das jedesmal von Hand durchzuführen, was natürlich Unsinn ist. Meine Frage also, da ich sowas noch nie gemacht habe: wie kann ich die Daten ohne Browser auslesen (evtl. Indy-Komponenten? oder andere Komponenten?) und für die Weiterverarbeitung entweder direkt in eine DB (evtl. in Firebid-DB) oder eine Datei speichern?

Viele Wege führen zum Ziel. Du kannst das mit den Indy-Komponenten machen, du kannst das selber mit den eingebauten HTTP-Komponenten von Delphi machen, mit den REST-Komponenten von Delphi und vielen anderen Komponenten.

Hier der Einstieg wie das mit dem mitgelieferten REST-Client geht.

hans65 10. Jul 2023 09:16

AW: Wetterstation Daten auslesen/speichern
 
oder Download per Batch und lokale Datei verarbeiten:
wget URL
curl URL

taveuni 10. Jul 2023 10:30

AW: Wetterstation Daten auslesen/speichern
 
Benutze die Weatherlink REST API
Auch hier

harfes 10. Jul 2023 10:38

AW: Wetterstation Daten auslesen/speichern
 
Danke an euch für die Infos! Ich werde es mal mit den mitgelieferten Delphi-Komponenten versuchen...und hier nachfragen, falls ich irgendwo stecken bleibe.

Hartmut

Pfaffe 10. Jul 2023 12:23

AW: Wetterstation Daten auslesen/speichern
 
Sollte so gehen:
Delphi-Quellcode:
unit uDMHTTP;

interface

uses
  System.SysUtils, System.Classes, System.Net.URLClient, System.Net.HttpClient, System.Net.HttpClientComponent;

type
  TDMHTTP = class(TDataModule)
    NetHTTPRequest1: TNetHTTPRequest;
    NetHTTPClient1: TNetHTTPClient;
  private
    { Private declarations }
  public
    function GetRespString(const aURL: string): string;
  end;

var
  DMHTTP: TDMHTTP;

implementation

{$R *.dfm}

{ TDMHTTP }

function TDMHTTP.GetRespString(const aURL: string): string;
var
  strstr: TStringStream;
begin
  strstr := nil;
  try
    strstr := TStringStream.Create;
    NetHTTPRequest1.Get(aURL, strstr);
    // strstr.SaveToFile('c:\temp\_a.json')
    Result := strstr.DataString;
  finally
    strstr.Free;
  end;
end;

end.

Also:
jsonstr:= DMHTTP.GetRespString('http://192.168.1.91/v1/current_conditions/xxxx.json');
Dann den jsonstr mit TJSONObject bzw. TJSONArray, unit System.JSON, auswerten.

harfes 10. Jul 2023 12:28

AW: Wetterstation Daten auslesen/speichern
 
@Pfaffe: vielen Dank für den Sourcecode!!!!

Hartmut

mytbo 10. Jul 2023 16:37

AW: Wetterstation Daten auslesen/speichern
 
Bei Davis kannst du die Daten über die REST API wie folgt mit mORMot1 laden.
Delphi-Quellcode:
// USERNAME = '...';
// PASSWORD = '...';
// APITOKEN = '...';
procedure TDWSRestServer.DownloadDWData(pmSender: TSynBackgroundTimer; pmEvent: TWaitResult; const pmcMsg: RawUTF8);
const
  URL_TEMPLATE = 'https://api.weatherlink.com/v1/NoaaExt.json?user=%&pass=%&apiToken=%';
var
  log: ISynLog;
  url: SockString;
  content: SockString;
begin
  log := LogClass.Enter(Self, 'DownloadDWData');
  with FRestServiceSettings do
    url := StringToAnsi7(FormatString(URL_TEMPLATE, [DWUserName, DWUserPassword, DWUserAPIToken]));

  content := HttpGet(url);
  InitializeWeatherDataFields(content);
  ...
end;
Zum Bezug der Daten benötigst du nur die Funktion HttpGet. Wir laden im 60 Sekunden Rhythmus und blenden die Daten im Vereinsflieger ein. Die Flugleitung hat dann die aktuellen Werte unserer Wetterstation immer im Sichtfeld.

Bis bald...
Thomas

harfes 11. Jul 2023 16:28

AW: Wetterstation Daten auslesen/speichern
 
Hallo Thomas,

auch einen Dank an Dich für den Code. Ich meine aber gelesen zu haben, dass das Auslesen in so kurzen Abständen direkt von Davis nur möglich ist, mit einem bezahlten Vertrag - sonst wohl nur alle 15 Minuten (aber vielleicht hat sich da ja was geändert). Daher bevorzuge ich, die Daten direkt von meiner WeatherLink Live Box auszulesen und werde es erstmal mit dem Code von Pfaffe versuchen.

Hartmut


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:12 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz