BWT Aqa Perla goes IP-Symcon

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.
grafik

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.
grafik
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

ja das Passwort habe ich angepasst.
Mein BWT Pera ist vom Jahr 2022 und hat folgende Software im Bauch
01abcda7-7e1e-48d0-a9cb-da5c57f4dc9e-grafik.png
diese Firmware ist mit einen noVNC Server ausgerüstet und man wird immer auf diesen umgeleitet, egal was man für eine Adresse im Browser eingibt
Habe schon was im IOBrocker Forum gefunden

aber da geht es immer um die alte Software (V1.8x) wo man ganz einfach die Daten auslesen kann.
Da gibt es auchen einen Testadapter → muss ich mal genauer anschauen

Gruß Jürgen

Moin Jürgen,

sieht so aus dass man ab der Firmware 2.xxx nicht mehr lokal an die Daten kommt.
Schade, war für mich auch ein Kaufgrund.
Bleibt nur der Umweg über die Cloud.
Ich habe mal das Script von @Isi erweitert. Um den Wasserverbrauchswert. Da dieser aber scheinbar nur 1x täglich in der Cloud aktualisiert wird, reicht es auch nur 1x täglich das Script zu starten.

<?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    =   "XXXX-XXXX";
$ApiKey         =   "XXXXXX";
$today          =   urlencode(date("Y-m-d")."T00:00:00");
$yearbegin      =   urlencode(date("Y")."-01-01T00:00:00");

$BWT_Vars = 12345;                                                  // ID einer Kategorie im Objektbaum unter dem die Variablen gespeichert werden (muss angelegt sein)

############ ab hier nicht ändern: #########################################################
// waterconsumtion
$url        =   "https://bwt-real-smarthome-backend.azurewebsites.net/api/Perla/" . $productCode . "/waterconsumption?since=" . $yearbegin . "&until=" . $today;
$headers    = array("accept: */*","ApiKey:" .$ApiKey,);
GetBWTValues($url,$headers);

// other values
IPS_Sleep(1000);
$url        =   "https://bwt-real-smarthome-backend.azurewebsites.net/api/Perla/".$productCode;
GetBWTValues($url,$headers);

function GetBWTValues($url,$headers) {
    $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." ".$type);
            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 "double":
        $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;
    }
}

Muss man damit rechnen, das einem die aktuelle Firmware übergebügelt wird?

Loerdy

Hallo Attain,

habe dein angepasstes Script gleich umgesetzt → läuft ! DANKE

Aber wo ist der unterschied zwischen totalWaterConsumption
und waterTreatedTotal ? kann den Wert von totalWaterConsumption
nirgens im Display von meiner Anlage finden.
Sind eigentlich noch mehr Werte aus der Anlage zubekommen ? (z.B. Hauptventil usw.)

Im IO Broker Forum hat einer ein Script geschrieben, wo die VNC Eingabe simuliert wird
und dann die Werte ausgelesen werden (leider in der Programmiersprache Phyton).

@loerdy kann mir eigentlich nicht Vorstellen, dass BWT freiwillig ein Firmwareupdate macht

Gruß Jürgen

Ja, damit habe ich gestern auch kurz rumgespielt und es mal auf einem Pi laufen lassen. Da fehlen aber noch weitere Bibliotheken, die ich auf die schnelle nicht hatte.
Ich habe im Keller noch einen freien Pi rumliegen, mal sehen ob ich das irgendwann ans laufen bekomme. Aber mit dem SSH Komadozeilengedöns stehe ich echt auf Kriegsfuss. Ich werde damit nicht warm.

Das Ist der Verbrauch seit 1.1. des Jahres. Ich logge diesen Wert bei mir als Zähler.
Im Display siehst Du ja den Tagesverbrauch. Das sind halt alle Werte des Jahres zusammengezählt.
Alternative wäre auch der Tageswert möglich, dann müsstest Du folgendes ändern:
$yearbegin = urlencode(date("Y-m-d",time()-86400) . "T00:00:00");
(YearBegin ist dann eigentlich der falsche Ausdruck. Was solls)

bei mir war es letzte Woche soweit…
(Firmware-Update drübergebügelt bekommen, jetzt auch nur noch VNC…)

Jetzt kann ich die Probleme von @obi235 nachvollziehen :frowning:
Danke an @lsi für das API-Skript :wink:

Einfach so, ohne Rückfrage?

Loerdy

@loerdy, ja - einfach so von einem Tag auf den anderen hat mein Skript nicht mehr funktioniert ;-(

Hallo BWT Perla Besitzer,

habe das zufällig in einen anderen Forum gefunden.
Die API local soll wieder zurückkommen (Firmware Version 2.0203).

https://www.loxforum.com/forum/projektforen/loxberry/plugins/278330-plugin-bwt-aqua-anbindung-wasserenthärter/page4

Gruß Jürgen

1 „Gefällt mir“

Ich habe den Werkskundendienst mal angeschrieben, folgende Antwort bekam ich:

Sehr geehrter Herr …,

gerne können wir bei Ihnen die Software aufspielen. Bitte beachten Sie, dass es sich noch um eine nicht ausführlich getestete Software-Version handelt. Bisher sind noch keine Probleme bekannt. Jedoch erfolgt ein Update einer nicht freigegebenen Version auf eigenes Risiko.

Bitte teilen Sie uns hierzu Ihre Entscheidung mit, ob wir die neue Software aufspielen sollen oder ob Sie ca. 2 Monate waren möchte, bis diese Software offiziell freigegeben ist.

Ich habe mich fürs Warten entschieden, ist ja auch nicht mehr so lange …

Gruß,
Loerdy

1 „Gefällt mir“