Hallo,
Verfügen Sie über Informationen, um den Verbrauch des BWT AQA PERLA-Bluetooth auslesen zu können?
Ich danke Ihnen.
Hallo,
Verfügen Sie über Informationen, um den Verbrauch des BWT AQA PERLA-Bluetooth auslesen zu können?
Ich danke Ihnen.
Hallo oly,
vielen Dank für die Infos und das Script.
Ich habe heute meine PERLA One in Betrieb genommen.
Das Gerät hängt in meinem LAN und die Registrierung ist gelaufen.
Es kam auch ein Email von BWT, aber darin kein Login-Passwort, sondern nur ein achtstelliger (mittig mit einem -) Produkt-Code.
Wie ist der Login-Code aufgebaut?
Hat BWT vielleicht etwas geändert?
Hast Do noch einen Tipp bevor ich beim BWT-Support anrufe?
Viele Grüße aus dem Unterallgäu
Harry
Hallo,
heute habe ich nach einem Anruf beim BWT-Support eine Email mit meinem Login-Code bekommen.
Zuvor habe ich den Registrierungs-Vorgang an der Perla One gestartet. Wichtig ist es den Port 443 freizugeben.
Über den LAN-Anschluss hatte ich es nicht hinbekommen, aber über die WLAN-Verbindung hat es funktioniert.
Alles prima, das Skript funktioniert und ist sehr gut dokumentiert. Nochmals Danke dafür.
Viele Grüße aus dem Unterallgäu
Harry
ich erhalte beim Ausführen des Scriptes folgende Meldung:
BWT: Cookie holen
BWT: Daten auslesen
{„aktuellerDurchfluss“:„0“,„aktuellerDurchflussProzent“:„0“,„durchflussHeute“:„89“,„durchflussMonat“:„89“,„durchflussJahr“:„0“,„RegeneriemittelNachfuellenIn“:„68“,„RegeneriemittelVerbleibend“:„90“}
aktuellerDurchfluss -> 0Warning: Ident muss für jede Ebene eindeutig sein in /mnt/data/symcon/scripts/42495.ips.php on line 125
aktuellerDurchflussProzent -> 0Warning: Ident muss für jede Ebene eindeutig sein in /mnt/data/symcon/scripts/42495.ips.php on line 125
durchflussHeute -> 89Warning: Ident muss für jede Ebene eindeutig sein in /mnt/data/symcon/scripts/42495.ips.php on line 125
durchflussMonat -> 89Warning: Ident muss für jede Ebene eindeutig sein in /mnt/data/symcon/scripts/42495.ips.php on line 125
durchflussJahr -> 0Warning: Ident muss für jede Ebene eindeutig sein in /mnt/data/symcon/scripts/42495.ips.php on line 125
RegeneriemittelNachfuellenIn -> 68Warning: Ident muss für jede Ebene eindeutig sein in /mnt/data/symcon/scripts/42495.ips.php on line 125
RegeneriemittelVerbleibend -> 90Warning: Ident muss für jede Ebene eindeutig sein in /mnt/data/symcon/scripts/42495.ips.php on line 125
Symcon Variablen aktualisiert
Bei jedem Start des Scriptes werden alle Variablen neu angelegt.
jemad eine Idee, woran das liegt?
Danke.,
Loerdy
Hallo,
Ich habe eine AQA Perla 10, diese kommuniziert per Bluetooth.
Ich erhalte die folgenden Informationen:
Handle DATA
0001 => 01 18
0002 => 20 03 00 05 2a
0004 => 00 00
0005 => 00 18
0007 => 42 57 54 62 6c 75 65
0008 => 4e 09 00 01 2a
0009 => 00 00
000a => 02 0b 00 04 2a
000b => ff ff ff ff 00 00 ff ff
000c => 66 9a 0c 20 00 08 96 9e e2 11 9e b1 e0 f2 73 d9
000d => 10 0e 00 66 9a 0c 20 00 08 96 9e e2 11 9e b1 e1 f2 73 d9
0010 => 0c 11 00 66 9a 0c 20 00 08 96 9e e2 11 9e b1 e2 f2 73 d9
0012 => 02 13 00 66 9a 0c 20 00 08 96 9e e2 11 9e b1 e3 f2 73 d9
0013 => 00 7d 00 00 32 09 34 02 d0 07 3c 00 02 01 15 54 00 00 00 00
=> 00 7d 00 00 33 09 34 02 d0 07 3c 00 02 01 15 54 00 00 00 00
=> 00 7d 00 00 36 09 34 02 d0 07 3c 00 02 01 15 54 00 00 00 00
=> 00 7d 00 00 37 09 34 02 d0 07 3c 00 02 01 15 54 00 00 00 00
=> 30 75 00 00 6b 09 35 02 d0 07 3c 00 02 01 15 54 00 00 00 00
0014 => 02 15 00 66 9a 0c 20 00 08 96 9e e2 11 9e b1 e4 f2 73 d9
0015 => 5e 00 34 00 00 08 89 63 00 08 07 10 00 40 e2 01 00 01 00 00
=> 5e 00 34 00 00 08 00 00 3d 90 00 08 56 86 00 08 00 02 00 41
=> 5e 00 34 00 00 08 89 63 00 08 07 10 00 40 e2 01 00 01 00 00
=> 5e 00 34 00 00 00 00 00 f9 ff ff ff 00 00 00 00 70 05 00 20
Wie sind sie zu interpretieren?
Sorry, ich bin Franzose, ich benutze einen automatischen Übersetzer.
Danke schön
Hallo Loerdy,
sieht so aus als ob du die „ID einer Kategorie im Objektbaum unter dem die Variablen gespeichert werden (muss angelegt sein)“ nicht richtig eingetragen hast.
des Weiteren würde ich den Code so abändern:
$json = json_decode($response, true);
//var_dump($json);
//print_r($json);
foreach ($json as $name => $value) {
$type= gettype($value);
//echo ($name." -> ".$value."");
UpdateIPSvar ($name, $value, $type );
}
//echo "Symcon Variablen aktualisiert";
Dann wird auch der Typ der Variablen richtig gesetzt.
Hallo zusammen,
ich habe den Code mal so angepasst dass er die Daten der BWT Perla über die API bezieht.
Falls es jemand gebrauchen kann:
<?php
//Auslesen der BWT Perla über API https://bwt-real-smarthome-backend.azurewebsites.net
//ApiKey erstellen und eintragen, productcode eintragen, Kategorie erstellen und eintragen
############ hier bitte anpassen: #########################################################
$productCode = "XR9V-CL46";
$ApiKey = "M0aYaT8jQkfZGaKbGUjM9uyuYlyDlGhfKR1CKrerclkCeQZw6ETiNccTBNx1mH34TF0DfFFfMd6VZBZ5BWqoFkcIjpxvQj3vcYVMwGdlLGWLPl43xaSvZQ8ehVNUtKPOPk7lV2msx3nWBML8TSpqLmosHDQjpFM0dKzSCRxQV9VB";
$BWT_Vars = 25604; // ID einer Kategorie im Objektbaum unter dem die Variablen gespeichert werden (muss angelegt sein)
############ ab hier nicht ändern: #########################################################
$url = "https://bwt-real-smarthome-backend.azurewebsites.net/api/Perla/".$productCode;
$headers = array("accept: */*","ApiKey:" .$ApiKey,);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
$response = curl_exec($curl); // GET ausführen
curl_close($curl); // cURL Session beenden
unset($curl);
//echo $response."";
$json = json_decode($response, true);
//var_dump($json);
//print_r($json);
foreach ($json as $name => $value)
{
$type= gettype($value);
//echo ($name." -> ".$value."");
UpdateIPSvar ($name, $value, $type );
}
// -----------------------------------------------------
// Variablen anlegen und/oder aktualisierien
// -----------------------------------------------------
function UpdateIPSvar($name, $value, $type) {
Global $BWT_Vars;
$parent = $BWT_Vars;
$ident = str_replace(array("-", "/"), "_", $name);
switch ($type){
case "boolean":
$ips_type=0;
break;
case "integer":
$ips_type=1;
break;
case "float":
$ips_type=2;
break;
case "string":
$ips_type=3;
break;
default:
//echo "Unbekannter Datentyp: ".$type. " - Variable - ".$name.PHP_EOL;
$ips_type=3;
break;
}
$var_id = @IPS_GetObjectIDByIdent($ident, $parent);
if ($var_id === false){
$var_id = IPS_CreateVariable($ips_type);
IPS_SetName($var_id, $name);
IPS_SetIdent($var_id, $ident);
IPS_SetParent($var_id, $parent);
}
switch ($ips_type){
case 0:
if (GetValueBoolean($var_id) <> (bool)$value){
SetValueBoolean($var_id, (bool)$value);
}
break;
case 1:
if (GetValueInteger($var_id) <> (int)$value){
SetValueInteger($var_id, (int)$value);
}
break;
case 2:
if (GetValueFloat($var_id) <> round((float)$value,2)){
SetValueFloat($var_id, round((float)$value,2));
}
break;
case 3:
if (GetValueString($var_id) <> $value){
SetValueString($var_id, $value);
}
break;
}
}
(productCode und ApiKey habe ich natürlich geändert )
Hey Isi,
danke, klappt auf Anhieb.
Wie oft fragst Du ab?
Gruß,
Loerdy
Das freut mich!
Ich frage einmal am Tag.
Hallo oly,
Danke für dein Skript, aber beim Ausführen von diesen kommt
die Meldung
Warning: Invalid argument supplied for foreach() in /var/lib/symcon/scripts/52403.ips.php on line 88
sehe den Fehler nicht
Gruß Jürgen
<?php
// -----------------------------------------------------
// Auslesen einiger Informationen aus einem BWT Aqa Perla
// -----------------------------------------------------
// Ab hier individuelle Parameter
$BWT_Vars = 10545; // ID einer Kategorie im Objektbaum unter dem die Variablen gespeichert werden (muss angelegt sein)
define('LOGIN_URL', 'https://192.168.178.XXX/users/login'); // Das ist die URL bei der wir uns authentifizieren müssen
define('DATA_URL', 'https://192.168.178.XXX/home/actualizedata'); // Und hier gibt's die Daten
$post = http_build_query(array('STLoginPWField' => 'XXXXXX')); // Zugangsdaten
// (XXXXXX ersetzen durch den Login-Code den man nach der Produktaktivierung per Email erhält)
// Bis hier individuelle Parameter
// -----------------------------------------------------
define('COOKIE_FILE', 'BWT.cookie'); // Ablageort für Cookie-Informationen
define('USER_AGENT', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (K HTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
// Wir geben uns als "ordentlicher" Browser aus
// -----------------------------------------------------
// Ab hier nur noch Code
// -----------------------------------------------------
// Teil 1 Cookie holen
echo "BWT: Cookie holen
";
$curl = curl_init(); // los geht's
curl_setopt($curl, CURLOPT_URL, LOGIN_URL); // URL zum Loginformular
curl_setopt($curl, CURLOPT_POST, true); // Ein POST request soll es werden
curl_setopt($curl, CURLOPT_POSTFIELDS, $post); // Die Infos als URL-Codierten String schicken
curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT); // Hilft bei einer eventuellen Sessionvalidation auf Serverseite
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // keine Prüfung ob Hostname im Zertifikat
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // keine Überprüfung des Peerzertifikats
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); // Keinen redirects folgen
curl_setopt($curl, CURLOPT_COOKIEFILE, COOKIE_FILE); // Hier wird der Cookie für später gespeichert
//curl_setopt($curl, CURLOPT_COOKIESESSION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // Die Antwort bitte nicht an STDOUT
curl_exec($curl); // ok, jetzt ausführen
$curl_errno = curl_errno($curl);
if ($curl_errno > 0) {
$curl_error = curl_error($curl);
echo "BWT: cURL Error ($curl_errno): $curl_error
";
} else {
// keine Fehler - weiter geht's
// Teil 2 Daten holen
echo "BWT: Daten auslesen
";
curl_setopt($curl, CURLOPT_URL, DATA_URL); // Daten-URL abrufen
curl_setopt($curl, CURLOPT_POST, false); // Diesesmal kein POST request
curl_setopt($curl, CURLOPT_COOKIEFILE, COOKIE_FILE); // Cookie mitgeben
curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT); // Hilft bei einer eventuellen Sessionvalidation auf Serverseite
curl_setopt($curl, CURLOPT_REFERER, LOGIN_URL); // ist eigentlich nur Kür
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // keine Prüfung ob Hostname im Zertifikat
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // keine Überprüfung des Peerzertifikats
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); // Keinen redirects folgen
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // Die Antwort bitte als Rückgabewert von curl_exec
$response = curl_exec($curl); // GET ausführen
curl_close($curl); // cURL Session beenden
echo $response."
";
$json = json_decode($response, true);
//var_dump($json);
//print_r($json);
foreach ($json as $name => $value) {
$type= gettype($value);
//echo ($name." -> ".$value."");
UpdateIPSvar ($name, $value, $type );
}
echo "Symcon Variablen aktualisiert";
}
// -----------------------------------------------------
// Variablen anlegen und/oder aktualisierien
// -----------------------------------------------------
function UpdateIPSvar($name, $value, $type) {
Global $BWT_Vars;
$parent = $BWT_Vars;
$ident = str_replace(array("-", "/"), "_", $name);
switch ($type){
case "boolean":
$ips_type=0;
break;
case "integer":
$ips_type=1;
break;
case "float":
$ips_type=2;
break;
case "string":
$ips_type=3;
break;
default:
echo "Unbekannter Datentyp: ".$type.PHP_EOL;
$ips_type=3;
break;
}
$var_id = @IPS_GetObjectIDByIdent($ident, $parent);
if ($var_id === false){
$var_id = IPS_CreateVariable($ips_type);
IPS_SetName($var_id, $name);
IPS_SetIdent($var_id, $ident);
IPS_SetParent($var_id, $parent);
}
switch ($ips_type){
case 0:
if (GetValueBoolean($var_id) <> (bool)$value){
SetValueBoolean($var_id, (bool)$value);
}
break;
case 1:
if (GetValueInteger($var_id) <> (int)$value){
SetValueInteger($var_id, (int)$value);
}
break;
case 2:
if (GetValueFloat($var_id) <> round((float)$value,2)){
SetValueFloat($var_id, round((float)$value,2));
}
break;
case 3:
if (GetValueString($var_id) <> $value){
SetValueString($var_id, $value);
}
break;
}
}
Hallo oly,
läuft dein Skript noch für die BWT Anlage bei dir ?
Komme da nicht weiter, es werden einfach keine Variablen angelegt.
Der Fehler „Warning: Invalid argument supplied for foreach() in /var/lib/symcon/scripts/53597.ips.php on line 93“ kommt immer noch → selbst nach der Anpassung von Isi im Beitrag 35/40 .
Gruß Jürgen
nein, leider habe ich keine Infos bzgl. dem Zugriff per Bluetooth;
das Skript ist für den Zugriff per IP gedacht.
Hallo Jürgen,
sorry, ich wurde erst heute vom Forum informiert, dass mein Beitrag kommentiert wurde.
Ja, mein Script läuft bis heute alle 5 Minuten.
IPS Version 6.1
Zur Sicherheit hier der aktuelle Code
<?
// -----------------------------------------------------
// Auslesen einiger Informationen aus einem BWT Aqa Perla
// -----------------------------------------------------
// Ab hier individuelle Parameter
$BWT_Vars = 25370; // Kategorie im Objektbaum unter dem die Variablen gespeichert werden
define('LOGIN_URL', 'https://192.168.178.95/users/login'); // Das ist die URL bei der wir uns authentifizieren müssen
define('DATA1_URL', 'https://192.168.178.95/home/actualizedata'); // Und hier gibt's die Daten
define('DATA2_URL', 'https://192.168.178.95/info/updateDetails1');
define('DATA3_URL', 'https://192.168.178.95/home/actualizesignals');
$post = http_build_query(array('STLoginPWField' => 'XXXXXX')); // Zugangsdaten
// (XXXXXX ersetzen durch den Login-Code den man nach der Produktaktivierung per Email erhält)
// Bis hier individuelle Parameter
// -----------------------------------------------------
define('COOKIE_FILE', 'BWT.cookie'); // Ablageort für Cookie-Informationen
define('USER_AGENT', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (K HTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
// Wir geben uns als "ordentlicher" Browser aus
// -----------------------------------------------------
// Ab hier nur noch Code
// -----------------------------------------------------
// Teil 1 Cookie holen
echo "BWT: Cookie holen\n";
$curl = curl_init(); // los geht's
curl_setopt($curl, CURLOPT_URL, LOGIN_URL); // URL zum Loginformular
curl_setopt($curl, CURLOPT_POST, true); // Ein POST request soll es werden
curl_setopt($curl, CURLOPT_POSTFIELDS, $post); // Die Infos als URL-Codierten String schicken
curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT); // Hilft bei einer eventuellen Sessionvalidation auf Serverseite
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // keine Prüfung ob Hostname im Zertifikat
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // keine Überprüfung des Peerzertifikats
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); // Keinen redirects folgen
curl_setopt($curl, CURLOPT_COOKIEFILE, COOKIE_FILE); // Hier wird der Cookie für später gespeichert
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // Die Antwort bitte nicht an STDOUT
curl_exec($curl); // ok, jetzt ausführen
$curl_errno = curl_errno($curl);
if ($curl_errno > 0) {
$curl_error = curl_error($curl);
echo "BWT: cURL Error ($curl_errno): $curl_error\n";
} else {
// keine Fehler - weiter geht's
// Teil 2 Daten holen
echo "BWT: Daten auslesen\n";
curl_setopt($curl, CURLOPT_URL, DATA1_URL); // Daten-URL abrufen
curl_setopt($curl, CURLOPT_POST, false); // Diesesmal kein POST request
curl_setopt($curl, CURLOPT_COOKIEFILE, COOKIE_FILE); // Cookie mitgeben
curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT); // Hilft bei einer eventuellen Sessionvalidation auf Serverseite
curl_setopt($curl, CURLOPT_REFERER, LOGIN_URL); // ist eigentlich nur Kür
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // keine Prüfung ob Hostname im Zertifikat
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // keine Überprüfung des Peerzertifikats
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); // Keinen redirects folgen
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // Die Antwort bitte als Rückgabewert von curl_exec
$response = curl_exec($curl); // GET ausführen
// curl_close($curl); // cURL Session beenden
echo $response."\n";
$json = json_decode($response, true);
//var_dump($json);
//print_r($json);
foreach ($json as $name => $value) {
echo ($name." -> ".$value."\n");
UpdateIPSvar ($name, $value, "integer" );
}
echo "\nSymcon Variablen aktualisiert\n";
// Teil 2 Daten holen
echo "BWT: Daten auslesen\n";
curl_setopt($curl, CURLOPT_URL, DATA2_URL); // Daten-URL abrufen
curl_setopt($curl, CURLOPT_POST, false); // Diesesmal kein POST request
curl_setopt($curl, CURLOPT_COOKIEFILE, COOKIE_FILE); // Cookie mitgeben
curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT); // Hilft bei einer eventuellen Sessionvalidation auf Serverseite
curl_setopt($curl, CURLOPT_REFERER, LOGIN_URL); // ist eigentlich nur Kür
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // keine Prüfung ob Hostname im Zertifikat
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // keine Überprüfung des Peerzertifikats
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); // Keinen redirects folgen
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // Die Antwort bitte als Rückgabewert von curl_exec
$response = curl_exec($curl); // GET ausführen
echo $response."\n";
$json = json_decode($response, true);
//var_dump($json);
//print_r($json);
foreach ($json as $name => $value) {
echo ($name." -> ".$value."\n");
if ($name == 'step1'){
UpdateIPSvar ($name, $value, "string");
}else{
UpdateIPSvar ($name, $value, "integer");
}
}
echo "\nSymcon Variablen aktualisiert\n";
// Teil 3 Daten holen
echo "BWT: Daten auslesen\n";
curl_setopt($curl, CURLOPT_URL, DATA3_URL); // Daten-URL abrufen
curl_setopt($curl, CURLOPT_POST, false); // Diesesmal kein POST request
curl_setopt($curl, CURLOPT_COOKIEFILE, COOKIE_FILE); // Cookie mitgeben
curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT); // Hilft bei einer eventuellen Sessionvalidation auf Serverseite
curl_setopt($curl, CURLOPT_REFERER, LOGIN_URL); // ist eigentlich nur Kür
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // keine Prüfung ob Hostname im Zertifikat
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // keine Überprüfung des Peerzertifikats
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); // Keinen redirects folgen
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // Die Antwort bitte als Rückgabewert von curl_exec
$response = curl_exec($curl); // GET ausführen
curl_close($curl); // cURL Session beenden
echo $response."\n";
$json = json_decode($response, true);
//var_dump($json);
//print_r($json);
foreach ($json as $name => $value) {
echo ($name." -> ".$value."\n");
UpdateIPSvar ($name, $value, "integer");
}
echo "\nSymcon Variablen aktualisiert\n";
}
// -----------------------------------------------------
// Variablen anlegen und/oder aktualisieren
// -----------------------------------------------------
function UpdateIPSvar($name, $value, $type) {
Global $BWT_Vars;
$parent = $BWT_Vars;
$ident = str_replace(array("-", "/"), "_", $name);
switch ($type){
case "boolean":
$ips_type=0;
break;
case "integer":
$ips_type=1;
break;
case "float":
$ips_type=2;
break;
case "string":
$ips_type=3;
break;
default:
echo "Unbekannter Datentyp: ".$type.PHP_EOL;
$ips_type=3;
break;
}
$var_id = @IPS_GetObjectIDByIdent($ident, $parent);
if ($var_id === false){
$var_id = IPS_CreateVariable($ips_type);
IPS_SetName($var_id, $name);
IPS_SetIdent($var_id, $ident);
IPS_SetParent($var_id, $parent);
}
switch ($ips_type){
case 0:
if (GetValueBoolean($var_id) <> (bool)$value){
SetValueBoolean($var_id, (bool)$value);
}
break;
case 1:
if (GetValueInteger($var_id) <> (int)$value){
SetValueInteger($var_id, (int)$value);
}
break;
case 2:
if (GetValueFloat($var_id) <> round((float)$value,2)){
SetValueFloat($var_id, round((float)$value,2));
}
break;
case 3:
if (GetValueString($var_id) <> $value){
SetValueString($var_id, $value);
}
break;
}
}
?>
Grüße, oly
Hi @obi235 ,
hast du „von Hand“ eine Kategorie in deinem Objektbaum angelegt?
Und die ID hiervon in dem Skript eingetragen?
Weil alle Variablen werden unterhalb dieser ID angelegt.
Grüße, oly
Hallo oly,
vielen Dank für deine Rückmeldung !
Zur Info: IPS Version 6.1 Raspberry Pi 4 BWT Perla über LAN
Habe dein Script bei mir eingefügt und mit meinen Logindaten angepasst.
Die Kategorie im Objektbaum angelegt und die ID eingetragen.
Aber es werden keine Variablen angelegt ! → immer nur die Fehlermeldungen
Gruß Jürgen
hier mein Script wie von dir bekommen und an meine Daten angepasst
<?
// -----------------------------------------------------
// Auslesen einiger Informationen aus einem BWT Aqa Perla
// -----------------------------------------------------
// Ab hier individuelle Parameter
$BWT_Vars = 41619; // Kategorie im Objektbaum unter dem die Variablen gespeichert werden
define('LOGIN_URL', 'https://192.168.178.87/users/login'); // Das ist die URL bei der wir uns authentifizieren müssen
define('DATA1_URL', 'https://192.168.178.87/home/actualizedata'); // Und hier gibt's die Daten
define('DATA2_URL', 'https://192.168.178.87/info/updateDetails1');
define('DATA3_URL', 'https://192.168.178.87/home/actualizesignals');
$post = http_build_query(array('STLoginPWField' => 'XXXXXX')); // Zugangsdaten
// (XXXXXX ersetzen durch den Login-Code den man nach der Produktaktivierung per Email erhält)
// Bis hier individuelle Parameter
// -----------------------------------------------------
define('COOKIE_FILE', 'BWT.cookie'); // Ablageort für Cookie-Informationen
define('USER_AGENT', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (K HTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
// Wir geben uns als "ordentlicher" Browser aus
// -----------------------------------------------------
// Ab hier nur noch Code
// -----------------------------------------------------
// Teil 1 Cookie holen
echo "BWT: Cookie holen\n";
$curl = curl_init(); // los geht's
curl_setopt($curl, CURLOPT_URL, LOGIN_URL); // URL zum Loginformular
curl_setopt($curl, CURLOPT_POST, true); // Ein POST request soll es werden
curl_setopt($curl, CURLOPT_POSTFIELDS, $post); // Die Infos als URL-Codierten String schicken
curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT); // Hilft bei einer eventuellen Sessionvalidation auf Serverseite
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // keine Prüfung ob Hostname im Zertifikat
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // keine Überprüfung des Peerzertifikats
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); // Keinen redirects folgen
curl_setopt($curl, CURLOPT_COOKIEFILE, COOKIE_FILE); // Hier wird der Cookie für später gespeichert
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // Die Antwort bitte nicht an STDOUT
curl_exec($curl); // ok, jetzt ausführen
$curl_errno = curl_errno($curl);
if ($curl_errno > 0) {
$curl_error = curl_error($curl);
echo "BWT: cURL Error ($curl_errno): $curl_error\n";
} else {
// keine Fehler - weiter geht's
// Teil 2 Daten holen
echo "BWT: Daten auslesen\n";
curl_setopt($curl, CURLOPT_URL, DATA1_URL); // Daten-URL abrufen
curl_setopt($curl, CURLOPT_POST, false); // Diesesmal kein POST request
curl_setopt($curl, CURLOPT_COOKIEFILE, COOKIE_FILE); // Cookie mitgeben
curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT); // Hilft bei einer eventuellen Sessionvalidation auf Serverseite
curl_setopt($curl, CURLOPT_REFERER, LOGIN_URL); // ist eigentlich nur Kür
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // keine Prüfung ob Hostname im Zertifikat
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // keine Überprüfung des Peerzertifikats
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); // Keinen redirects folgen
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // Die Antwort bitte als Rückgabewert von curl_exec
$response = curl_exec($curl); // GET ausführen
// curl_close($curl); // cURL Session beenden
echo $response."\n";
$json = json_decode($response, true);
//var_dump($json);
//print_r($json);
foreach ($json as $name => $value) {
echo ($name." -> ".$value."\n");
UpdateIPSvar ($name, $value, "integer" );
}
echo "\nSymcon Variablen aktualisiert\n";
// Teil 2 Daten holen
echo "BWT: Daten auslesen\n";
curl_setopt($curl, CURLOPT_URL, DATA2_URL); // Daten-URL abrufen
curl_setopt($curl, CURLOPT_POST, false); // Diesesmal kein POST request
curl_setopt($curl, CURLOPT_COOKIEFILE, COOKIE_FILE); // Cookie mitgeben
curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT); // Hilft bei einer eventuellen Sessionvalidation auf Serverseite
curl_setopt($curl, CURLOPT_REFERER, LOGIN_URL); // ist eigentlich nur Kür
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // keine Prüfung ob Hostname im Zertifikat
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // keine Überprüfung des Peerzertifikats
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); // Keinen redirects folgen
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // Die Antwort bitte als Rückgabewert von curl_exec
$response = curl_exec($curl); // GET ausführen
echo $response."\n";
$json = json_decode($response, true);
//var_dump($json);
//print_r($json);
foreach ($json as $name => $value) {
echo ($name." -> ".$value."\n");
if ($name == 'step1'){
UpdateIPSvar ($name, $value, "string");
}else{
UpdateIPSvar ($name, $value, "integer");
}
}
echo "\nSymcon Variablen aktualisiert\n";
// Teil 3 Daten holen
echo "BWT: Daten auslesen\n";
curl_setopt($curl, CURLOPT_URL, DATA3_URL); // Daten-URL abrufen
curl_setopt($curl, CURLOPT_POST, false); // Diesesmal kein POST request
curl_setopt($curl, CURLOPT_COOKIEFILE, COOKIE_FILE); // Cookie mitgeben
curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT); // Hilft bei einer eventuellen Sessionvalidation auf Serverseite
curl_setopt($curl, CURLOPT_REFERER, LOGIN_URL); // ist eigentlich nur Kür
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // keine Prüfung ob Hostname im Zertifikat
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // keine Überprüfung des Peerzertifikats
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); // Keinen redirects folgen
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // Die Antwort bitte als Rückgabewert von curl_exec
$response = curl_exec($curl); // GET ausführen
curl_close($curl); // cURL Session beenden
echo $response."\n";
$json = json_decode($response, true);
//var_dump($json);
//print_r($json);
foreach ($json as $name => $value) {
echo ($name." -> ".$value."\n");
UpdateIPSvar ($name, $value, "integer");
}
echo "\nSymcon Variablen aktualisiert\n";
}
// -----------------------------------------------------
// Variablen anlegen und/oder aktualisieren
// -----------------------------------------------------
function UpdateIPSvar($name, $value, $type) {
Global $BWT_Vars;
$parent = $BWT_Vars;
$ident = str_replace(array("-", "/"), "_", $name);
switch ($type){
case "boolean":
$ips_type=0;
break;
case "integer":
$ips_type=1;
break;
case "float":
$ips_type=2;
break;
case "string":
$ips_type=3;
break;
default:
echo "Unbekannter Datentyp: ".$type.PHP_EOL;
$ips_type=3;
break;
}
$var_id = @IPS_GetObjectIDByIdent($ident, $parent);
if ($var_id === false){
$var_id = IPS_CreateVariable($ips_type);
IPS_SetName($var_id, $name);
IPS_SetIdent($var_id, $ident);
IPS_SetParent($var_id, $parent);
}
switch ($ips_type){
case 0:
if (GetValueBoolean($var_id) <> (bool)$value){
SetValueBoolean($var_id, (bool)$value);
}
break;
case 1:
if (GetValueInteger($var_id) <> (int)$value){
SetValueInteger($var_id, (int)$value);
}
break;
case 2:
if (GetValueFloat($var_id) <> round((float)$value,2)){
SetValueFloat($var_id, round((float)$value,2));
}
break;
case 3:
if (GetValueString($var_id) <> $value){
SetValueString($var_id, $value);
}
break;
}
}
?>
Hi,
liefert dein BWT Perla die Infos wenn du mit einem Browser direkt auf die IP-Adresse gehst?
https://192.168.178.87/ (bei dir)
Grüße, oly
Hi oly,
ja geht schon, aber sehr träge das Ganze Webinterfaces → das macht keinen Spass es zu bedienen.
schaut nach der Umleitung der IP-Adresse dann so aus (aus 192.168.178.87 wird dann http://192.168.178.87:6080/vnc.html?resize=scale&autoconnect=true&show_dot=true gemacht)
Gruß Jürgen
Hallo Jürgen,
was mir als erstes auffällt: Es ist keine https Verbindung; hmm.
Entferne bitte in dem Script mal die Kommentare um die zurückgelieferten JSON Daten auszugeben.
//var_dump($json);
//print_r($json);
Ich befürchte es kommt halt einfach nix vom BWT;-(
Grüße, oly
Hallo oly,
also wenn die Kommentare entferne, dann tut sich auch nichts anderes bzw. es wird „Null“ angezeigt.
Ja die Umleitung auf den kommischen VNC Server ist aussergewöhnlich !
Aber was sagt den der Fehler „Warning: Invalid argument supplied for foreach() in /var/lib/symcon/scripts/53597.ips.php on line 85“ genau aus ?
Gruß Jürgen
Halo Jürgen,
nur zur Sicherheit, in dieser Zeile
$post = http_build_query(array(‚STLoginPWField‘ => ‚XXXXXX‘));
hast die das XXXXX durch dein Kennwort ersetzt, oder?
Grüße, oly