BWT Aqa Perla goes IP-Symcon

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

1 „Gefällt mir“

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 -> 0

Warning: Ident muss für jede Ebene eindeutig sein in /mnt/data/symcon/scripts/42495.ips.php on line 125
aktuellerDurchflussProzent -> 0

Warning: Ident muss für jede Ebene eindeutig sein in /mnt/data/symcon/scripts/42495.ips.php on line 125
durchflussHeute -> 89

Warning: Ident muss für jede Ebene eindeutig sein in /mnt/data/symcon/scripts/42495.ips.php on line 125
durchflussMonat -> 89

Warning: Ident muss für jede Ebene eindeutig sein in /mnt/data/symcon/scripts/42495.ips.php on line 125
durchflussJahr -> 0

Warning: Ident muss für jede Ebene eindeutig sein in /mnt/data/symcon/scripts/42495.ips.php on line 125
RegeneriemittelNachfuellenIn -> 68

Warning: Ident muss für jede Ebene eindeutig sein in /mnt/data/symcon/scripts/42495.ips.php on line 125
RegeneriemittelVerbleibend -> 90

Warning: 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 :slight_smile: )

1 „Gefällt mir“

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