Vistapool // Pool-Steuerung über IPS

Hi!

Hier findet ihr eine Pool-Steuerung, welche aktuell für diese beiden Systeme/Webseiten funktioniert:
>> Vistapool | Domotic for swimmingpools | Accede a tu cuenta
>> Naturally Salt | Pool-access | Accede a tu cuenta

<?
/********************************************************************************/
/***** VISTAPOOL CONTROL  v1.2 **************************************************/
/*                                                                              */
/*         by Bayaro   ( https://www.bayaro.net)                                */
/*                                                                              */
/* Release-Date: 2018-09-09                                                     */
/********************************************************************************/


$username = 'email@domain.de';			// Benutzername zur Anmeldung bei vistapool.es oder anderen kompatiblen Webseiten
$password = '*************';			// Passwort zur Anmeldung bei vistapool.es oder anderen kompatiblen Webseiten
$poolID = '1234';		// Steht in der URL am Ende, wenn man sich die Daten eines Pool im Browser anschaut
$ServerOS = 'linux';	// Betriebssystem von IP-Symcon -- "windows" oder "linux"  (notwendig für korrekten Cookie-Pfad)
$WebsiteURL = "http://vistapool.es";	// URL der Webseite mit Vistapool-Steuerung (aktuell bekannte sind: "http://vistapool.es" und "http://www.naturally-salt-poolaccess.de" 
/********************************************************************************/




/***** BEGINN DER DATENABFRAGE **************************************************/

$result = Vistapool_ReadData();
print_r($result); // Array mit ALLEN Daten die ein maximaler Ausbau enthalten kann - !!das können mehr sein als beim eigenen Pool verbaut!!
                
// Hier die ausgelesenen Daten in Variablen schreiben und/oder sonstiges damit anstellen
//echo PHP_EOL.PHP_EOL.PHP_EOL."Einzelne Werte vom Pool:".PHP_EOL.PHP_EOL;
//echo "Licht Status = ".$result["lightStat"]["status"]["status"];
//echo PHP_EOL;
//echo "Filter Status = ".$result["filtration_stat"];
//echo PHP_EOL;
//echo "Filter Mode = ".$result["filtration_mode"];
//echo PHP_EOL;
//echo "Temperatur = ".(float)$result["temp"];
//echo PHP_EOL;
//echo "pH Status = ".$result["PH_status"]["status"];
//echo PHP_EOL;
//echo "pH IST-Wert = ".(float)$result["PH"];
//echo PHP_EOL;
//echo "pH SOLL-Wert = ".(float)$result["PH_status"]["hi_value"];
//echo PHP_EOL;

//echo PHP_EOL.PHP_EOL.PHP_EOL."Status der AUX-Relais:".PHP_EOL.PHP_EOL;
//echo "AUX 1 - Manuell/Auto/Tempo = ".$result["aux"][0]["manAutoTemp"]; // 0 = Manuell, 1 = Auto, 2 = Tempo
//echo PHP_EOL;
//echo "AUX 1 - On/Off = ".$result["aux"][0]["onoff"]; // 0 = Off, 1 = On
//echo PHP_EOL;
//echo "AUX 2 - Manuell/Auto/Tempo = ".$result["aux"][1]["manAutoTemp"]; // 0 = Manuell, 1 = Auto, 2 = Tempo
//echo PHP_EOL;
//echo "AUX 2 - On/Off = ".$result["aux"][1]["onoff"]; // 0 = Off, 1 = On
//echo PHP_EOL;

// SetValue(12345, (float)$result["temp"]);
// SetValue(67890, (float)$result["PH"]);

/***** ENDE DER DATENABFRAGE ****************************************************/






/***** BEGINN DER STEUERUNG ****************************************************/

//// DATUM + UHRZEIT ////
//$CommandResult = Vistapool_Control("Datum-Uhrzeit", "25/06/2017 13:48");  // Setzt 25.06.2017 13:48 Uhr als aktuelles Datum/Uhrzeit


//// LICHT ////
//$CommandResult = Vistapool_Control("Licht", "ON");                               // Schaltet das Licht auf manuelle Steuerung und auf EIN
//$CommandResult = Vistapool_Control("Licht", "OFF");                              // Schaltet das Licht auf manuelle Steuerung und auf AUS
//$CommandResult = Vistapool_Control("Licht", "AUTO", "01:00", "14:45", 86400);    // Aktiviert die Licht-Automatik für jeden Tag von 1.00 Uhr bis 14.45 Uhr (Licht an in dieser Zeit)
// freq=86400 >> jeden Tag // freq=172800 >> jeden 2. Tag // freq=259200 >> jeden 3. Tag // freq=345600 >> jeden 4. Tag // freq=432000 >> jeden 5. Tag // freq=604800 >> jede woche // freq=1209600 >> jede 2. woche // freq=1814400 >> jede 3. woche // freq=2419200 >> jede 4. woche


//// CHLOR ////
//$CommandResult = Vistapool_Control("SOLL-Chlor", 5); // Setzt den SOLL-Wert vom Chlor auf 0,05


//// PH ////
//$CommandResult = Vistapool_Control("SOLL-pH", 720);  // Setzt den SOLL-Wert vom pH auf 7,2
//$CommandResult = Vistapool_Control("SOLL-pH", 30);   // Setzt den SOLL-Wert vom pH auf 0,3


//// FILTERREINIGUNG ////
//$CommandResult = Vistapool_Control("Filter-Reinigung", "MAN", "ON", 60);                // Filter-Reinigung manuell mit einem Intervall von 60 Sekunden einschalten
//$CommandResult = Vistapool_Control("Filter-Reinigung", "MAN", "OFF");                   // Filter-Reinigung manuell ausschalten
//$CommandResult = Vistapool_Control("Filter-Reinigung", "AUTO", "03:00", 120, 172800);   // Automatische Filter-Reinigung jeden 2. Tag, ab 3 Uhr, in einem Intervall von 120 Sekunden aktivieren 
// freq=86400 >> jeden Tag // freq=172800 >> jeden 2. Tag // freq=259200 >> jeden 3. Tag  // freq=345600 >> jeden 4. Tag // freq=432000 >> jeden 5. Tag // freq=604800 >> jede woche // freq=1209600 >> jede 2. woche // freq=1814400 >> jede 3. woche // freq=2419200 >> jede 4. woche


//// FILTER ////
//$CommandResult = Vistapool_Control("Filter", "MAN", "ON");	// Filtration manuell einschalten
//$CommandResult = Vistapool_Control("Filter", "MAN", "ON", 0);	// Filtration manuell einschalten, Geschwindigkeit langsam (0 = langsam, 1 = medium, 2 = hoch)
//$CommandResult = Vistapool_Control("Filter", "MAN", "OFF");	// Filtration manuell ausschalten
//$CommandResult = Vistapool_Control("Filter", "AUTO", "01:00", "02:00", "12:00", "13:00", "17:00", "18:00");										// Filtration-AUTO in 3 Zeiträumen aktivieren (Intervall1 von 1Uhr bis 2Uhr, Intervall2 von 12Uhr bis 13Uhr, Intervall3 von 17Uhr bis 18Uhr)
//$CommandResult = Vistapool_Control("Filter", "AUTO", "01:00", "02:00", "12:00", "13:00", "17:00", "18:00", 0, 1, 2);								// Filtration-AUTO in 3 Zeiträumen aktivieren (Intervall1 von 1Uhr bis 2Uhr, Intervall2 von 12Uhr bis 13Uhr, Intervall3 von 17Uhr bis 18Uhr, Intervall 1 Geschwindigkeit langsam, Intervall 2 Geschwindigkeit medium, Intervall 3 Geschwindigkeit hoch)
//$CommandResult = Vistapool_Control("Filter", "HEAT", 25, "CLIMA-ON", "07:00", "10:00", "13:00", "15:00", "19:00", "21:00");						// Filtration-HEAT in 3 Zeiträumen aktivieren (Temperatur auf 25 Grad mit Klima ON, Intervall1 von 7Uhr bis 10Uhr, Intervall2 von 13Uhr bis 15Uhr, Intervall3 von 19Uhr bis 21Uhr)
//$CommandResult = Vistapool_Control("Filter", "HEAT", 25, "CLIMA-OFF", "07:00", "10:00", "13:00", "15:00", "19:00", "21:00");						// Filtration-HEAT in 3 Zeiträumen aktivieren (Temperatur auf 25 Grad mit Klima OFF, Intervall1 von 7Uhr bis 10Uhr, Intervall2 von 13Uhr bis 15Uhr, Intervall3 von 19Uhr bis 21Uhr)
//$CommandResult = Vistapool_Control("Filter", "SMART", 20, 25, "ANTIFROST-ON", "07:00", "10:00", "13:00", "15:00", "19:00", "21:00");				// Filtration-SMART in 3 Zeiträumen aktivieren (Temperatur auf min. 20 Grad und max. 25 Grad mit Antigefriermittel ON, Intervall1 von 7Uhr bis 10Uhr, Intervall2 von 13Uhr bis 15Uhr, Intervall3 von 19Uhr bis 21Uhr)
//$CommandResult = Vistapool_Control("Filter", "SMART", 20, 25, "ANTIFROST-OFF", "07:00", "10:00", "13:00", "15:00", "19:00", "21:00");				// Filtration-SMART in 3 Zeiträumen aktivieren (Temperatur auf min. 20 Grad und max. 25 Grad mit Antigefriermittel OFF, Intervall1 von 7Uhr bis 10Uhr, Intervall2 von 13Uhr bis 15Uhr, Intervall3 von 19Uhr bis 21Uhr)
//$CommandResult = Vistapool_Control("Filter", "SMART", 20, 25, "ANTIFROST-OFF", "07:00", "10:00", "13:00", "15:00", "19:00", "21:00", 0, 1 , 2);	// Filtration-SMART in 3 Zeiträumen aktivieren (Temperatur auf min. 20 Grad und max. 25 Grad mit Antigefriermittel OFF, Intervall1 von 7Uhr bis 10Uhr, Intervall2 von 13Uhr bis 15Uhr, Intervall3 von 19Uhr bis 21Uhr, Intervall 1 Geschwindigkeit langsam, Intervall 2 Geschwindigkeit medium, Intervall 3 Geschwindigkeit hoch)
//$CommandResult = Vistapool_Control("Filter", "INTEL", 25, 13);    // Filtration-INTEL mit einer Wunschtemperatur von 25 Grad für 13 Stunden aktivieren


//// HYDROLYSE ////
//$CommandResult = Vistapool_Control("Hydrolyse", 29, "Cover-ON", 10, 0);	// Hydrolyse mit 29%, Abdeckung um 10% reduziert und Chlor-Schock OFF
//$CommandResult = Vistapool_Control("Hydrolyse", 29, "Cover-ON", 10, 1);	// Hydrolyse mit 29%, Abdeckung um 10% reduziert und Chlor-Schock ON
//$CommandResult = Vistapool_Control("Hydrolyse", 28, "Cover-OFF", 0, 0);	// Hydrolyse mit 28%, Abdeckung OFF und Chlor-Schock OFF
//$CommandResult = Vistapool_Control("Hydrolyse", 28, "Cover-OFF", 0, 1);	// Hydrolyse mit 28%, Abdeckung OFF und Chlor-Schock ON

//// AUX RELAIS ////
//$CommandResult = Vistapool_Control("Relais", 1, "ON");								// Schaltet Relais 1 auf manuelle Steuerung und auf EIN
//$CommandResult = Vistapool_Control("Relais", 1, "OFF");								// Schaltet Relais 1 auf manuelle Steuerung und auf AUS
//$CommandResult = Vistapool_Control("Relais", 1, "AUTO", "21:00", "23:45", 86400);		// Aktiviert die Automatik von Relais 1 für jeden Tag von 21.00 Uhr bis 23.45 Uhr (Relais AN in dieser Zeit)
// freq=86400 >> jeden Tag // freq=172800 >> jeden 2. Tag // freq=259200 >> jeden 3. Tag // freq=345600 >> jeden 4. Tag // freq=432000 >> jeden 5. Tag // freq=604800 >> jede woche // freq=1209600 >> jede 2. woche // freq=1814400 >> jede 3. woche // freq=2419200 >> jede 4. woche

//echo PHP_EOL.PHP_EOL.PHP_EOL.PHP_EOL;
//echo $CommandResult;  // $CommandResult kann jeweils "OK" oder "ERROR" zurückgeben.

/***** ENDE DER STEUERUNG ******************************************************/







/**** AB HIER NICHTS MEHR ÄNDERN ***********************************************/
function Vistapool_Control($command, $value1, $value2 = NULL, $value3 = NULL, $value4 = NULL, $value5 = NULL, $value6 = NULL, $value7 = NULL, $value8 = NULL, $value9 = NULL, $value10 = NULL, $value11 = NULL, $value12 = NULL, $value13 = NULL)
{
    Global $poolID;
    Global $password;
    Global $username;
	Global $ServerOS;
	Global $WebsiteURL;
    
    
    // Mapping der PHP-Befehle in eine Command-URL für die Poolsteuerung
	$command = strtolower($command);
    switch ($command)
    {
        case "datum-uhrzeit":
            if (is_string($value1) === true)
            {
                $datetime = urlencode($value1);
                $CommandURL = $WebsiteURL."/de/pool/settimevalue?id=".$poolID."&time=".$datetime;
            }
            else
            {
                IPS_LogMessage("VISTAPOOL", 'Datum-Uhrzeit // Ungültiger Wert! Value muss String sein! --- Datum und Uhrzeit müssen im folgenden Format angegeben werden:  "23/07/2017 13:48"');
                return "ERROR";
            } 
        break;
        
        case "licht":
            if ($value1 === "ON")
            {            
                $CommandURL = $WebsiteURL."/de/pool/setlightvalues?id=".$poolID."&type=0&status=1";
            }
            elseif ($value1 === "OFF")
            {
                $CommandURL = $WebsiteURL."/de/pool/setlightvalues?id=".$poolID."&type=0&status=0";
            }        
            elseif ($value1 === "AUTO")
            {
                if ((is_string($value1) === true) AND (is_string($value2) === true) AND (is_string($value3) === true) AND (is_int($value4) === true))
                {
                    $CommandURL = $WebsiteURL."/de/pool/setlightvalues?id=".$poolID."&type=1&status=1&freq=".$value4."&start=".$value2."&end=".$value3;
                }
                else
                {
                    IPS_LogMessage("VISTAPOOL", 'Licht-Automatik // Ungültiger Wert! Value muss String sein! --- Datum und Uhrzeit müssen im folgenden Format angegeben werden:  "23/07/2017 13:48"');
                    return "ERROR";
                }
            }
            else
            {
                IPS_LogMessage("VISTAPOOL", "Licht // Irgendwas stimmt bei den verwendeten Values nicht!");
                return "ERROR";
            }   
        break;
        
        case "soll-ph":
            if (is_int($value1) === true)
            {
                $CommandURL = $WebsiteURL."/de/pool/setphvalue?id=".$poolID."&acid=".$value1."&base=NaN&type=ACID";
            }
            else
            {
                IPS_LogMessage("VISTAPOOL", "SOLL-Chlor // Ungültiger Wert! Value muss Integer sein! --- Für einen Chlor-Wert von 0,05 muss als Value 5 verwendet werden!");
                return "ERROR";
            }
        break;
        
        case "soll-chlor":
            if (is_int($value1) === true)
            {
                $CommandURL = $WebsiteURL."/de/pool/setclvalue?id=".$poolID."&val=".$value1;
            }
            else
            {
                IPS_LogMessage("VISTAPOOL", "SOLL-pH // Ungültiger Wert! Value muss Integer sein! --- Für einen pH-Wert von 7,2 muss als Value 720 verwendet werden!");
                return "ERROR";
            }
        break;
        
        case "filter-reinigung":
            if ($value1 === "MAN")
            {            
                if ($value2 === "ON")
                {            
                    $CommandURL = $WebsiteURL."/de/pool/setbackwashvalues?id=".$poolID."&mode=0&onoff=1&interval=".$value3;
                }
                elseif ($value2 === "OFF")
                {
                    $CommandURL = $WebsiteURL."/de/pool/setbackwashvalues?id=".$poolID."&mode=0&onoff=0&interval=".$value3;
                }
            }
            elseif ($value1 === "AUTO")
            {
                $CommandURL = $WebsiteURL."/de/pool/setbackwashvalues?id=".$poolID."&mode=1&onoff=1&freq=".$value4."&start=".$value2."&interval=".$value3;
            }        
            else
            {
                IPS_LogMessage("VISTAPOOL", "Filter-Reinigung // Irgendwas stimmt bei den verwendeten Values nicht!");
                return "ERROR";
            }   
        break;
        
        case "hydrolyse":
            if ($value2 === "Cover-ON")
            {
                $CommandURL = $WebsiteURL."/de/pool/sethidrovalue?id=".$poolID."&level=".$value1."&cover=1&reduction=".$value3."&cloration=".$value4;
            }
            elseif ($value2 === "Cover-OFF")
            {
                $CommandURL = $WebsiteURL."/de/pool/sethidrovalue?id=".$poolID."&level=".$value1."&cover=0&reduction=".$value3."&cloration=".$value4;
            }
            else
            {
                IPS_LogMessage("VISTAPOOL", "Hydrolyse // Irgendwas stimmt bei den verwendeten Values nicht!");
                return "ERROR";
            }
        break;
        
        case "filter":
            if ($value1 === "MAN")
            {            
                if ($value2 === "ON")
                {
                    if ($value3 !== NULL)
					{
						$CommandURL = $WebsiteURL.'/de/pool/setfiltrationvalues?id='.$poolID.'&data={"type":0,"mode":1,"vel":'.$value3.'}';
					}
					else
					{
						$CommandURL = $WebsiteURL.'/de/pool/setfiltrationvalues?id='.$poolID.'&data={"type":0,"mode":1}';
					}
                }
                elseif ($value2 === "OFF")
                {
                    $CommandURL = $WebsiteURL.'/de/pool/setfiltrationvalues?id='.$poolID.'&data={"type":0,"mode":0}';
                }
            }
            elseif ($value1 === "AUTO")
            {
                if (($value8 !== NULL) AND ($value9 !== NULL) AND ($value10 !== NULL))
				{
					$CommandURL = $WebsiteURL.'/de/pool/setfiltrationvalues?id='.$poolID.'&data={"type":1}&int={"inter1":"'.$value2.'-'.$value3.'","inter2":"'.$value4.'-'.$value5.'","inter3":"'.$value6.'-'.$value7.'"}&vel={"vel1":"'.$value8.'","vel2":"'.$value9.'","vel3":"'.$value10.'"}';
				}
				else
				{
					$CommandURL = $WebsiteURL.'/de/pool/setfiltrationvalues?id='.$poolID.'&data={"type":1}&int={"inter1":"'.$value2.'-'.$value3.'","inter2":"'.$value4.'-'.$value5.'","inter3":"'.$value6.'-'.$value7.'"}&vel={}';
				}
            }        
            elseif ($value1 === "HEAT")
            {
                if ($value3 === "CLIMA-ON")
                {
                    $CommandURL = $WebsiteURL.'/de/pool/setfiltrationvalues?id='.$poolID.'&data={"type":2,"temp":"'.$value2.'","clima":1}&int={"inter1":"'.$value4.'-'.$value5.'","inter2":"'.$value6.'-'.$value7.'","inter3":"'.$value8.'-'.$value9.'"}&vel={}';
                }
                elseif ($value3 === "CLIMA-OFF")
                {
                    $CommandURL = $WebsiteURL.'/de/pool/setfiltrationvalues?id='.$poolID.'&data={"type":2,"temp":"'.$value2.'","clima":0}&int={"inter1":"'.$value4.'-'.$value5.'","inter2":"'.$value6.'-'.$value7.'","inter3":"'.$value8.'-'.$value9.'"}&vel={}';
                }
            }
            elseif ($value1 === "SMART")
            {
                if ($value4 === "ANTIFROST-ON")
                {
                    $freeze = "1";
                }
                elseif ($value4 === "ANTIFROST-OFF")
                {
                    $freeze = "0";
                }
				
				if (($value11 !== NULL) AND ($value12 !== NULL) AND ($value13 !== NULL))
				{
					$CommandURL = $WebsiteURL.'/de/pool/setfiltrationvalues?id='.$poolID.'&data={"type":3,"tempMin":'.$value2.',"tempMax":'.$value3.',"freeze":'.$freeze.'}&int={"inter1":"'.$value5.'-'.$value6.'","inter2":"'.$value7.'-'.$value8.'","inter3":"'.$value9.'-'.$value10.'"}&vel={"vel1":"'.$value11.'","vel2":"'.$value12.'","vel3":"'.$value13.'"}';
				}
				else
				{
					$CommandURL = $WebsiteURL.'/de/pool/setfiltrationvalues?id='.$poolID.'&data={"type":3,"tempMin":'.$value2.',"tempMax":'.$value3.',"freeze":'.$freeze.'}&int={"inter1":"'.$value5.'-'.$value6.'","inter2":"'.$value7.'-'.$value8.'","inter3":"'.$value9.'-'.$value10.'"}&vel={}';
				}
            }
            elseif ($value1 === "INTEL")
            {
                if (($value3 < 2) OR ($value3 > 23))
                {
                    IPS_LogMessage("VISTAPOOL", "Filter - INTEL // Der Zeitraum kann minimal 2 und maximal 23 Stunden sein!");
                    return "ERROR";
                }
                else
                {
                    $inteltimeMIN = $value3 * 60;
                    $CommandURL = $WebsiteURL.'/de/pool/setfiltrationvalues?id='.$poolID.'&data={"type":4,"temp":"'.$value2.'","time":'.$inteltimeMIN.'}&int=[]&vel=[]';
                }
            }
            else
            {
                IPS_LogMessage("VISTAPOOL", "Filter // Etwas stimmt bei den verwendeten Values nicht!");
                return "ERROR";
            }    
        break;
		
		case "relais":
            if ($value2 === "ON")
            {            
				$CommandURL = $WebsiteURL."/de/pool/setauxvalues?id=".$poolID.'&rel='.$value1.'&data={"mode":0,"onoff":1}';
            }
            elseif ($value2 === "OFF")
            {
				$CommandURL = $WebsiteURL."/de/pool/setauxvalues?id=".$poolID.'&rel='.$value1.'&data={"mode":0,"onoff":0}';
            }        
            elseif ($value2 === "AUTO")
            {
                if ((is_string($value3) === true) AND (is_string($value4) === true))
                {
                    $CommandURL = $WebsiteURL."/de/pool/setauxvalues?id=".$poolID.'&rel='.$value1.'&data={"mode":1,"from":"'.$value3.'","to":"'.$value4.'","freq":"'.$value5.'"}';
                }
                else
                {
                    IPS_LogMessage("VISTAPOOL", 'Relais-Automatik // Ungültiger Wert! Value muss String sein! --- Datum und Uhrzeit müssen im folgenden Format angegeben werden:  "23/07/2017 13:48"');
                    return "ERROR";
                }
            }
            else
            {
                IPS_LogMessage("VISTAPOOL", "Relais // Irgendwas stimmt bei den verwendeten Values nicht!");
                return "ERROR";
            }   
        break;
		
		default:
			IPS_LogMessage("VISTAPOOL", "ERROR // Der Befehl '".$command."' konnte nicht verarbeitet werden!");
            return "ERROR";
		break;
    }
    
    
    
    // Versuch sich mit Cookie an der Webseite anzumelden
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    if (strtolower($ServerOS) == "windows")
	{
		curl_setopt($ch, CURLOPT_COOKIEFILE, 'C:\Windows\Temp\vistapool_cookie');
	}
	else
	{
		curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/vistapool_cookie');
	}
    curl_setopt($ch, CURLOPT_POST, 0);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $WebsiteURL.'/de/pool/list');
    $curlData = curl_exec($ch);
    
    
    // Prüfen, ob die Anmeldung mit Cookie erfolgreich war, wenn nicht, dann wird ein normaler Login durchgeführt
    preg_match("|(Passwort wiederherstellen)|", $curlData, $LoginFALSE);
    if ($LoginFALSE)
    {
        echo "Anmeldung mit Cookie war nicht erfolgreich - normaler Login wird durchgeführt!".PHP_EOL;
        
        $fields = array(
            'user'=>urlencode($username),
            'pass'=>urlencode($password),
            'remember_password'=>'0',
            'entrar'=>'Eingabe',
        );
         
        $fields_string = '';
        foreach($fields as $key=>$value) { 
            $fields_string .= $key.'='.$value.'&'; 
        }
         
        $fields_string = substr($fields_string,0,-1);
        $postfields = $fields_string;
    
        ini_set("max_execution_time", 60);    
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        if (strtolower($ServerOS) == "windows")
		{
			curl_setopt($ch, CURLOPT_COOKIEFILE, 'C:\Windows\Temp\vistapool_cookie');
			curl_setopt($ch, CURLOPT_COOKIEJAR, 'C:\Windows\Temp\vistapool_cookie');
		}
		else
		{
			curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/vistapool_cookie');
			curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/vistapool_cookie');
		}
        curl_setopt($ch, CURLOPT_COOKIE, session_name().'='.session_id());
        curl_setopt($ch, CURLOPT_COOKIESESSION, true);
        curl_setopt($ch, CURLOPT_URL, $WebsiteURL.'/de/login/login');
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, "$postfields");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $curlData = curl_exec($ch);
    }
    
    // Befehl an Poolsteuerung senden
    curl_setopt($ch, CURLOPT_POST, 0);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $CommandURL);
    $curlData = curl_exec($ch);
    
    
    if ($curlData == '"not connected"')
    {
        // Poolsteuerung ist offline - Befehl kann nicht gesendet werden
        echo "POOLSTEUERUNG IST NICHT VERBUNDEN! - Steuerung nicht möglich!".PHP_EOL;
        IPS_LogMessage("VISTAPOOL", "POOLSTEUERUNG IST NICHT VERBUNDEN! - Steuerung nicht möglich!");
    }
    else
    {
        // Poolsteuerung ist online - Befehl kann gesendet werden
        $result = json_decode($curlData);
        if ($result == true)
            return "OK";
        else
            return "ERROR";
    }
    
    // cURL Sitzung beenden
    curl_close($ch);
}



function Vistapool_ReadData()
{
    Global $poolID;
    Global $password;
    Global $username;
	Global $ServerOS;
	Global $WebsiteURL;
    
    // Versuch sich mit Cookie an der Webseite anzumelden
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	if (strtolower($ServerOS) == "windows")
	{
		curl_setopt($ch, CURLOPT_COOKIEFILE, 'C:\Windows\Temp\vistapool_cookie');
	}
	else
	{
		curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/vistapool_cookie');
	}
    curl_setopt($ch, CURLOPT_POST, 0);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $WebsiteURL.'/de/pool/list');
    $curlData = curl_exec($ch);
    
    
    // Prüfen, ob die Anmeldung mit Cookie erfolgreich war, wenn nicht, dann wird ein normaler Login durchgeführt
    preg_match("|(Passwort wiederherstellen)|", $curlData, $LoginFALSE);
    if ($LoginFALSE)
    {
        echo "Anmeldung mit Cookie war nicht erfolgreich - normaler Login wird durchgeführt!".PHP_EOL;
        
        $fields = array(
            'user'=>urlencode($username),
            'pass'=>urlencode($password),
            'remember_password'=>'0',
            'entrar'=>'Eingabe',
        );
         
        $fields_string = '';
        foreach($fields as $key=>$value) { 
            $fields_string .= $key.'='.$value.'&'; 
        }
         
        $fields_string = substr($fields_string,0,-1);
        $postfields = $fields_string;
    
        ini_set("max_execution_time", 60);    
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		if (strtolower($ServerOS) == "windows")
		{
			curl_setopt($ch, CURLOPT_COOKIEFILE, 'C:\Windows\Temp\vistapool_cookie');
			curl_setopt($ch, CURLOPT_COOKIEJAR, 'C:\Windows\Temp\vistapool_cookie');
		}
		else
		{
			curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/vistapool_cookie');
			curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/vistapool_cookie');
		}
        curl_setopt($ch, CURLOPT_COOKIE, session_name().'='.session_id());
        curl_setopt($ch, CURLOPT_COOKIESESSION, true);
		curl_setopt($ch, CURLOPT_URL, $WebsiteURL.'/de/login/login');
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, "$postfields");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $curlData = curl_exec($ch);
    }
    
    
    // Abfragen der Pool-Daten
    curl_setopt($ch, CURLOPT_POST, 0);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $WebsiteURL.'/de/pool/getmainvalues?id='.$poolID.'&hasPH=true&hasRX=true&hasCL=true&hasCD=true&config=1&hasHidro=true&hasLight=true&hasRelays=true&numRelays=1%2C2%2C3%2C4&hasFiltration=true&hasBackwash=true&hasIO=true&hasUV=true&needsTimeBesgoRemaining=false');
    $curlData = curl_exec($ch);
    
    
    // Ausgabe der ausgelesenen Daten
    if ($curlData == '"not connected"')
    {
        // Poolsteuerung ist offline - Daten können nicht ausgelesen werden
        echo "POOLSTEUERUNG IST NICHT VERBUNDEN!".PHP_EOL;
        IPS_LogMessage("VISTAPOOL", "POOLSTEUERUNG IST NICHT VERBUNDEN!");
    }
    else
    {
        // Poolsteuerung ist online - Daten können ausgelesen werden
        $PoolData_Array = json_decode($curlData, true);
        return $PoolData_Array;        
    }
    
    
    // cURL Sitzung beenden
    curl_close($ch);
}

?>

Im Skript enthalten ist auch eine Anmeldung bei einer Webseite mittels Cookie…kann man immer mal brauchen :wink:

Leider unterstützen sowohl vistapool.es als auch naturally-salt-poolaccess.de nach wie vor keine Anmeldung über HTTPS :frowning:
Eventuell kann sich ja mal ein Besitzer einer solchen Steuerung mal mit denen in Verbindung setzen und um Aktivierung von HTTPS bitten.

Falls ihr euch auch so eine Pool-Steuerung kaufen wollt >> Keine Ahnung wie der verwendete Kram heißt :smiley: Ich habe nur das Script dazu geschrieben…
Auch habe ich selbst keinen Zugriff auf eine solche Pool-Steuerung. Solltet ihr also eine Erweiterung/Ergänzung wünschen, benötige ich einen temporären Zugang zu eurer Pool-Steuerung.

Viel Spaß damit und beste Grüße,
Chris

CHANGELOG:
Version 1.2
>> Datenabfrage erweitert, so dass ALLE Informationen ausgelesen werden die ein mir bekannter maximaler Ausbau hat (kann deshalb mehr anzeigen als der eigene Pool kann bzw. verbaut hat)
>> Webseite der Pool-Steuerung anpassbar gemacht - Variable $WebsiteURL
>> Steuerung der AUX-Relais
>> Filter-Geschwindigkeit kann jetzt auch in den Funktionen verwendet werden (0 = langsam, 1 = medium, 2 = hoch)

Version 1.1
>> Schockchlorung als Parameter hinzugefügt (siehe Beispiele unter „HYDROLYSE“)
>> Cookie Anmeldung für Linux und Windows über Variable $ServerOS anpassbar

Version 1.0
>> Erster Release

Der link läuft nur auf eine passwortgeschütze Webseite…Das ist wohl deren „Cloud“…
Hier ist ein link zum Handbuch des (vermutlichen) Geräts: http://www.vandous.de/out/media/Handbuch-WIFI-modul-salzelektrolyse.pdf

Moin!

Wie gesagt, ich habe keine Ahnung welche Technik dahinter steckt. Aber wer es bereits hat, der kennt den Namen „Vistapool“ und hat jetzt auch ein passendes Skript…und wer es will, der findet es schon irgendwie :slight_smile:

Und alle anderen „klauen“ sich einfach nur die Anmeldung an einer Webseite mit einem Cookie :slight_smile:

Grüße,
Chris

Hallo zusammen,
Es gibt mehrere Geräte die sich mit „Vistapool.es“ verbinden und ihre Daten abgleichen.
Vistapool stellt dann eine Webseite und eine App zur Verfügung.
Mit dem Skript werden die Daten von Vistapool.es ausgetauscht, was bedeutet, dass es HW-Unabhängig ist.
Jede HW die sich mit Vistapool verbinden lässt kann auf diese Art angesteuert werden.
(Je nach Geräteart könnten noch andere Daten zur Verfügung stehen)
In meinem Fall ist es ein Elektrolysegerät mit Branding von Dryden Aqua (Da-Gen).

Danke Chris für die super Arbeit!

Isi

Hallo!

Ich habe eine Infinity Hidrolife und die kommt auch aus dem Hause Vistapool.
Ich habe auch bereits das WLan modul installiert und das PHPSkript am laufen, die Werte kommen zwar hinein aber ich bekomme dauernt fehler, woran kann das Liegen?

Fatal error:  Call to undefined function IPS_SetValue() in C:\IP-Symcon\scripts\30417.ips.php on line 42
Abort Processing during Fatal-Error: Call to undefined function IPS_SetValue()
   Error in Script C:\IP-Symcon\scripts\30417.ips.php on Line 42

Danke für die Hilfe

OK die Ersten Fehler hab ich gelöst … nur der Fehler Zeile99 den verstehe ich nicht :frowning:

Welche Fehler hast du denn noch?

Viele Grüße,
Chris

Notice: Undefined variable: CommandResult in C:\IP-Symcon\scripts\30417.ips.php on line 104

dies ist die Zeile

echo $CommandResult; // $CommandResult kann jeweils „OK“ oder „ERROR“ zurückgeben.

noch eine andere Frage

meine Abdeckung hängt an der Homematic, kann ich die mit dem IPS zusammenschalten sprich wenn meine Abdeckung geschlossen ist das dann die Hydrolyse auf z.b. 29 geht anhand der Variable und wenn Sie offen ist auf einen gewünschten werden umgestellt wird?

//// HYDROLYSE ////
//$CommandResult = Vistapool_Control(„Hydrolyse“, 29, „Cover-ON“, 10); // Hydrolyse mit 29%, Abdeckung um 10% reduziert und Chlor-Schock OFF
//$CommandResult = Vistapool_Control(„Hydrolyse“, 28, „Cover-OFF“); // Hydrolyse mit 28%, Abdeckung OFF und Chlor-Schock OFF

Die Zeile mit „echo $CommandResult; // $CommandResult kann jeweils „OK“ oder „ERROR“ zurückgeben.“ kannst du einfach mit „//“ davor auskommentieren.
Darin steht ja nur ein Wert, wenn du eine der oberen Funktionen ausführst. Da aber wohl alle auskommentiert sind bei dir, kann da in der Variable $CommandResult nichts stehen und deshalb die Fehlermeldung :wink:

Wenn du den HomeMatic Aktor mit im IP-Symcon eingebunden hast, dann kannst du natürlich, abhängig von der Variable vom HomeMatic Aktor, das Verhalten der Pool-Steuerung beeinflussen/steuern.

Beispiel:

if (GetValue($VariableHomeMaticAktor) == true)  // wenn das eine Bool-Variable ist bei deinem HM-Aktor
{
    $CommandResult = Vistapool_Control("Hydrolyse", 29, "Cover-ON", 10); // Hydrolyse mit 29%, Abdeckung um 10% reduziert und Chlor-Schock OFF
}
else
{
    $CommandResult = Vistapool_Control("Hydrolyse", 28, "Cover-OFF"); // Hydrolyse mit 28%, Abdeckung OFF und Chlor-Schock OFF
}

Viele Grüße,
Chris

Super Danke! funktioniert schon :slight_smile:

noch eine Frage wie kann ich das Schockchloren einschalten ?

und kann ich den Status der schockchlorierung auch abfragen?

Wenn du dir das Script mal angeschaut hättest, dann hättest du sicher im Abschnitt unterhalb von „case „Hydrolyse“:“ gesehen, dass da etwas von „&cloration=0“ steht :wink:

Da das Script aber eh ein klein wenig optimiert werden konnte - hab ich das eben gemacht und auch die Funktion „Vistapool_Control“ um das Schockchloren erweitert. Einmal bitte das neue Script v1.1 (siehe 1. Post in diesem Thread) verwenden und dort deine Anpassungen eintragen, danach funktionieren diese Beispiele (der letzte Parameter in diesen Beispielen ist die Schockchlorung):

//$CommandResult = Vistapool_Control("Hydrolyse", 29, "Cover-ON", 10, 0);	// Hydrolyse mit 29%, Abdeckung um 10% reduziert und Chlor-Schock OFF
//$CommandResult = Vistapool_Control("Hydrolyse", 29, "Cover-ON", 10, 1);	// Hydrolyse mit 29%, Abdeckung um 10% reduziert und Chlor-Schock ON
//$CommandResult = Vistapool_Control("Hydrolyse", 28, "Cover-OFF", 0, 0);	// Hydrolyse mit 28%, Abdeckung OFF und Chlor-Schock OFF
//$CommandResult = Vistapool_Control("Hydrolyse", 28, "Cover-OFF", 0, 1);	// Hydrolyse mit 28%, Abdeckung OFF und Chlor-Schock ON

Bzgl. Status der Schockchlorung abfragen - geht bestimmt, nur da ich selbst keine solche Pool-Steuerung habe, kann ich das nicht so einfach noch einbauen.

Viele Grüße,
Chris

Vielen Dank!

ich werde versuchen den Status abzufragen, sollte das mir gelingen melde ich mich …. dann könnte man das Skript noch anpassen.

Vielen Dank!

LG
Christian

Ach noch etwas!

Ich hab das Skript zwei mal laufen … einmal für die Datenabfrage und das andere mal für die Abdeckung (Ereignissauslösend) denn wenn er in der Abfrage immer die Abdeckung dabei hat schalte die Anlage die Chlorproduktion bei jeder Abfrage auf 0 und dann wieder auf den gewünschten wert ….

Frage: wir kann ich im Skript die Statusabfrage abschalten?

LG
Christian

Hallo Christian
Habe seit kurzem auch eine Infinity Hidrolife 16ph Anlage und würde sie gerne um ein WIFI-Modul erweitern. Dazu meine Fragen: Welches Modul verwendest du? Es gibt anscheinend verschiedene Versionen. Und wo hast du dein WIFI-Modul bekommen?

Danke im Voraus
Werner

Hi Christian!

Irgendwie habe ich die Frage übersehen - sorry :slight_smile:

Dein „Problem“ hat nichts mit dem Script zu tun, sondern wie du es verwendest :wink:
Eine mögliche Lösung wäre >> Script durch 2 Timer starten lassen und im Script dann folgendes machen >> „if script gestartet durch timer1 - mach dies“ und „if script gestartet durch timer2 - mach jenes“.
Geht z.B. über „if ($_IPS[„EVENT“] == 12345)“ … wobei 12345 die Objekt-ID vom Timer ist.

Viele Grüße,
Chris

Hallo,

Ich habe das Script erfolgreich zu laufen gebracht (Bayrol Salt Relax Pro) und kann nun die Werte in meine Homematic übertragen und von dort auch ansteuern.
Vielen dank für das Script.
Kann mann irgendwie den Status der Relays (4 Stück) und die Geschwindigkeit der Filterpumpe (Die Salt Relax Pro kann die Filterpumpe mit 3 unterschiedlichen Geschwindigkeiten ansteuern) auslesen und Steuern?
Meine Programmierkenntnisse befinden sich leider im Stand Anfänger. Ich bin schon stolz auf mich dass ich die Werte in meine Homematic reingebracht habe.

Vielen Dank
Langgi

Hi Langgi!

Das geht bestimmt. Nur ohne Zugriff auf das Webinterface, um die notwendigen Datenpunkte zu ermitteln, klappt das nicht.
Ich selbst habe, wie erwähnt, kein entsprechendes Gerät im Zugriff.

Viele Grüße,
Chris

Hallo Chris,

Vielen Dank für die schnelle Antwort.
Würde es helfen wenn ich die die befristeten Zugriff auf meine Account geben würde?

Gruß
Langgi