Seite 1 von 1

Daten per GET an openHAB senden?

Verfasst: 7. Mai 2022 14:38
von dirkabel
Hallo,

meine http Portierung zu OH3 ist vollbracht!
Ein Thema noch:
Ich habe eine Wetterstation WH-2650A, die schickt Daten u.a. an Weather Underground, man kann aber auch einen freien Server für die Übertragung einstellen.
Dazu läuft auf dem NAS ein PHP Script, welches die Daten im Wheather Underground Format annimmt und an die passenden Items über die Classic UI per GET weiterleitet.
Da geht ja nun nicht mehr.
Gibt es noch eine ähnliche Möglichkeit?
Ich könnte natürlich das WU Binding verwenden, aber warum außen rum, wenn es intern geht?

Hier das Skipt:

Code: Alles auswählen

<?php

$inQuery = $_SERVER['QUERY_STRING'];

//$handle = fopen ("/var/www/html/weatherstation/query.txt", "w");
//fwrite ($handle, $inQuery);
//fclose ($handle);

$tempO = $_GET['tempf'];
$humidityO = $_GET['humidity'];
$dewpt = $_GET['dewptf'];
$windChill = $_GET['windchillf'];
$windDir2 = $_GET['winddir'];
$windSpeed = $_GET['windspeedmph'];
$windGustSpeed = $_GET['windgustmph'];
$rain = $_GET['rainin'];
$dailyRain = $_GET['dailyrainin'];
$weeklyRain = $_GET['weeklyrainin'];
$monthlyRain = $_GET['monthlyrainin'];
$yearlyRain = $_GET['yearlyrainin'];
$solar = $_GET['solarradiation'];
$UV = $_GET['UV'];
$tempI = $_GET['indoortempf'];
$humidityI = $_GET['indoorhumidity'];
$baroMin = $_GET['baromin'];
$lowBatt = $_GET['lowbatt'];

$outQuery  = "WS_TempOut="    . $tempO;
$outQuery .= "&WS_TempIn="    . $tempI;
$outQuery .= "&WS_DewPt="     . $dewpt;
$outQuery .= "&WS_WindChill=" . $windChill;
$outQuery .= "&WS_HumiIn="    . $humidityI;
$outQuery .= "&WS_HumiOut="   . $humidityO;
$outQuery .= "&WS_WindSpeed=" . $windSpeed;
$outQuery .= "&WS_WindGust="  . $windGustSpeed;
$outQuery .= "&WS_WindDir="   . $windDir2;
$outQuery .= "&WS_BaroRel="   . $baroMin;
$outQuery .= "&WS_Rain="      . $rain;
$outQuery .= "&WS_RainDay="   . $dailyRain;
$outQuery .= "&WS_RainWeek="  . $weeklyRain;
$outQuery .= "&WS_RainMonth=" . $monthlyRain;
$outQuery .= "&WS_RainYear="  . $yearlyRain;
$outQuery .= "&WS_Solar="     . $solar;
$outQuery .= "&WS_UV="        . $UV;
$outQuery .= "&WS_LowBattery=". $lowBatt;

$strURL = "http://192.168.0.138:8080/classicui/CMD?";
//$strURL .= $_SERVER['QUERY_STRING'];
$strURL .= $outQuery;

file_get_contents ($strURL);

echo "success";
//echo "\r\nOUT: " . $strURL;
?>

Re: Daten per GET an openHAB senden?

Verfasst: 7. Mai 2022 15:05
von udo1toni
Über die openHAB API musst Du PUT verwenden (oder alternativ POST). PUT entspricht dabei dem postUpdate, POST entspricht sendCommand.

Von php hab ich so gar keine Ahnung... Aber vielleicht reicht es schon, das Script dahingehend abzuändern, dass es PUT verwendet (und natürlich eine angepasste URL, schon weil für den API Zugriff gewöhnlich ein Token gebraucht wird).

Alternativ: ich habe in FreePBX Kommunikation mittels mqtt nachgerüstet (nur für die Rufnummernanzeige...), das war eigentlich schmerzfrei, nur ein vorhandenes Modul anpassen, und das php Script sendet mittels mosquitto_pub die Nachricht an den Broker. Es bietet sich dann an, JSON zu verwenden. In welchem Format liegen die Daten in /var/www/html/weatherstation/query.txt vor?

Re: Daten per GET an openHAB senden?

Verfasst: 8. Mai 2022 15:41
von dirkabel
In welchem Format liegen die Daten in /var/www/html/weatherstation/query.txt vor?
Die Frage verstehe ich nicht.

Hatte Du vielleicht für das"normale," PUT oder POST an die API ein Beispiel?

Re: Daten per GET an openHAB senden?

Verfasst: 8. Mai 2022 18:16
von udo1toni
Wenn Du in Main UI->Administration auf Entwickler Tools gesht und dort in die API wechselst, kannst Du Dir die notwendigen Codeschnipsel selbst zusammenklicken :) Inklusive direkt ausprobieren...

Mein Frage bezüglich der Daten: Dein php Script liest aus dieser Datei die Daten ein,welche es dann entsprechend weiter schickt. Jetzt wäre halt die Frage, wie der Inhalt dieser Datei aussieht, denn es gibt ja Datenformate, die man sehr elegant auswerten kann.

Re: Daten per GET an openHAB senden?

Verfasst: 8. Mai 2022 22:27
von dirkabel
Ach so, nein, das ist im Prinzip auch ein GET nur mit anderen Namen. Die Wetterstation schickt

Code: Alles auswählen

?ID=STATIONID&PASSWORD=**********&indoortempf=69.8&tempf=62.2&dewptf=51.6&windchillf=62.2&indoorhumidity=43&humidity=68&windspeedmph=1.8&windgustmph=2.2&winddir=206&absbaromin=28.61&baromin=29.47&rainin=0.00&dailyrainin=0.00&weeklyrainin=0.01&monthlyrainin=0.03&yearlyrainin=-9999&solarradiation=110.10&UV=1&dateutc=2019-4-8%2012:16:55&softwaretype=EasyWeatherV1.1.4&action=updateraw&realtime=1&rtfreq=5 
Irgendwer muss ihr zuhören.
Habe es erst mal über das Weather Company Binding eingebaut, alles andere werde ich mir mal noch ansehen. Habe das PHP auch größtenteils kopiert. Habe ich auch keine Ahnung von.
Vielleicht baue ich das mit in mein Web-CAN Gateway ein, da weiß ich wenigstens, was ich tue. :lol: