API Abfrage. Einzelne Werte auswerten.

Hallo zusammen,
ich möchte über API gewisse Sensorwert auslesen und diese dann in eine Variable Schrieben.
Die API Abfrage geht ohne Probleme. Es wird alles angezeigt.

Nur krieg ich es nicht hin einzelne Werte weiterzuverarbeiten.


$cont = file_get_contents("http://192.168.75.171/api/circuit/all?apiKey={fdd12b52-8c7a-4b17-928c-4b7a5ab9c2a5}");
$info_con = json_decode($cont);

echo "
";

//var_dump($info_con);


$content = Sys_GetURLContent("http://192.168.75.171/api/circuit/all?apiKey={fdd12b52-8c7a-4b17-928c-4b7a5ab9c2a5}");
$json = json_decode($content);
//echo "wert".$json->id->parmams; // Geht nicht --> Notice:  Trying to get property 'parmams' of non-object in /var/lib/symcon/scripts/40281.ips.php on line 41
echo "wert".$json->id;  // Geht -- > Output: Wert0
echo "
";

print_r($json); //Es wird alles angezeigt



Ich würde gern mal folgenden Wert dann in eine Variable schreiben.
Krieg es aber nicht hin diesen anzuzeigen.
[type] => moisture
[value] => 59

Der ganze Output liegt als Datei bei, da dieser doch einige Zeilen hat.
API_01.txt ist komplett und wurde mit file_get_contents ausgelesen.
API_02.txt ist nur der Anfang und wurde mit Sys_GetURLContent ausgelesen.

Wie im Script erläutert.
//echo „wert“.$json->id->parmams; // Geht nicht --> Notice: Trying to get property ‚parmams‘ of non-object in /var/lib/symcon/scripts/40281.ips.php on line 41

echo „wert“.$json->id; // Geht – > Output: Wert0

Weiter komme ich nicht.
Hat jemand eine Idee wie ich das genau machen müsste.

Danke
Roland

API_01.txt (12.3 KB)

API_02.txt (2.93 KB)

Hab mir das jetzt nicht genau angeguckt, aber steht da nicht „params“?
Du schreibst „parmams“

Grüße,
Kai

Wenn man Dir bei so großen JSON helfen soll dann am besten


var_export($data);

nutzen, und die Ausgabe in ein txt posten. Ansonsten sieht man zwar die Struktur, kann aber nicht einfach mit den Daten arbeiten um das zu testen.

der Tippfehler sollte schon einiges an Erhellung liefern :wink:

Am Tipfehler lag es leider nicht.

echo „wert“.$json->id->params;

Fehlermeldung
Notice: Trying to get property ‚params‘ of non-object in /var/lib/symcon/scripts/40281.ips.php on line 41
Meldung hilft mit jetzt gerade nicht viel.

Anbei noch der var_export

Ich denke irgendwie muss ich von oben nach unten in der Struktur damit ich den Wert auslesen kann.
Hab schon einiges versucht. Geht aber nicht.

var_export.txt (9.06 KB)

Nach meinem Verständnis beim schnellen Überfliegen müsstest Du über


$json->params

oder


$json['params']

auf die Werte zugreifen können, je nachdem wie das gecastet ist.

Stimmt, er hat ja ID noch in der Abfrage mit drin, aber die liegt auf der selben Ebene wie params


$json = file_get_contents("http://192.168.75.171/api/circuit/all?apiKey={fdd12b52-8c7a-4b17-928c-4b7a5ab9c2a5}"); 
$data = json_decode($json, true);
$moisture = $data['params']['circuits']['{7dbf7a96-2d89a8c59b5c}']['sensorData']['stateTypes'][0]['value'];
var_dump($moisture); 
SetValue(12345, $moisture); // write to variable with Object ID 12345

@Fonzo: Danke. Funktioniert.
Ich kann den Wert nun in eine Variable schreiben.
Auch verstehe langsam wir ich solch Abfragen erstellen muss.
Wieder was gelernt.:slight_smile:

Hallo. Ich habe die HUUM Sauna in gemeinsamer Arbeit mit meinem Nachbarn in der IP Symcon zum laufen gebracht. Hier die Skripte, die ihr dafür braucht:

Status-Abfrage

<?php

include("23592.ips.php"); // Zugangsdaten

error_reporting(E_ALL);

$url = 'https://api.huum.eu/action/home/status';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, "$HUUM_User:$HUUM_Password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1);

$result = curl_exec($ch);
$info = curl_getinfo($ch);
$nhl=json_decode($result);//,true);
curl_close($ch);

$STATUS = $nhl->{"statusCode"};
$DOOR   = $nhl->{"door"};
$TEMP   = (int)$nhl->{"temperature"};

SetValueInteger(13977,$STATUS);
SetValueBoolean(29505,$DOOR);
SetValueInteger(22920,$TEMP);

if ($STATUS==231){
    SetValueBoolean(22556,true);
    $TargetTemp = (int)$nhl->{"targetTemperature"};
    SetValueInteger(58504,$TargetTemp);
}else{
    SetValueBoolean(22556,false);
}

?>

Sauna Anschalten

<?php

include("23592.ips.php"); // Zugangsdaten

error_reporting(E_ALL);

$url    = 'https://api.huum.eu/action/home/start';
$TagetTemp  = GetValueInteger(58504);
$hTime      = GetValueInteger(14037);
echo $hTime ."\n";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array("targetTemperature"=>$TagetTemp)); // {"statusCode": 232, "door": true, "temperature": "23", "targetTemperature": "50", "startDate": 1507184846, "endDate": 1507184846, "duration": 0, "config": 2, "steamerError": 0, "paymentEndDate" : SOMEDATE}
curl_setopt($ch, CURLOPT_USERPWD, "$HUUM_User:$HUUM_Password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1);

$result = curl_exec($ch);
$info = curl_getinfo($ch);
$nhl=json_decode($result,true);
curl_close($ch);

//var_dump($nhl);

?>

Sauna Ausschalten

<?php

include("23592.ips.php"); // Zugangsdaten

error_reporting(E_ALL);

$url    = 'https://api.huum.eu/action/home/stop';
$TagetTemp  = GetValueInteger(58504);
$hTime      = GetValueInteger(14037);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, "$HUUM_User:$HUUM_Password");
curl_setopt($ch, CURLOPT_POSTFIELDS, array("targetTemperature"=>$TagetTemp));
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1);

$result = curl_exec($ch);
$info = curl_getinfo($ch);
$nhl=json_decode($result,true);
curl_close($ch);

//var_dump($nhl);

?>

Ich habe dann 3 Variablen in der Sauna-Kategorie angelegt, die sich dann alle paar Sekunden aktualisieren, oder wenn eines der Skripte ausgeführt wird. Damit habe ich dann die Info über den Status der Sauna in der WebFront. Ich hoffe, es hilft irgendjemandem weiter…

1 „Gefällt mir“