![]() |
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 (
![]() 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 |
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 |
AW: Wetterstation Daten auslesen/speichern
Zitat:
Hier der ![]() |
AW: Wetterstation Daten auslesen/speichern
oder Download per Batch und lokale Datei verarbeiten:
wget URL curl URL |
AW: Wetterstation Daten auslesen/speichern
|
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 |
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. |
AW: Wetterstation Daten auslesen/speichern
@Pfaffe: vielen Dank für den Sourcecode!!!!
Hartmut |
AW: Wetterstation Daten auslesen/speichern
Bei Davis kannst du die Daten über die REST API wie folgt mit mORMot1 laden.
Delphi-Quellcode:
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.
// 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; Bis bald... Thomas |
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 04:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz