Jeedom et pergola zenisun

Bonjour,
Grâce aux infos d’un vieux post trouver sur l’ancien forum Intégration de ma pergola via son API!Merci à l’auteur au passage mikebzh44.

Difficile pour moi de comprendre mon problème, malgré la création de mes script Infos, lames et éclairage, j’ai bien sur modifier dans son fichier script PHP zenisun.php l’adresse ip de ma pergola.
La partie remontée des informations fonctionnent, mais aucune de mes actions n’aboutissent.
pergola|590x268

Je ne suis pas programmeur,et comme souvent, je n’ai fait que reprendre les explications trouvées sur ce forum.
Si quelqu’un à une piste, je suis preneur.
Merci

1 « J'aime »

Bonsoir,

Il faudrait surtout que tu regardes et post les logs du script

#!/usr/bin/php
<?php
    //Recuperation de la commande passee en 1er argument
    $cmd = $argv[1];

    // On recupere soit all soit le nom du gpo en 2eme argument
    if ($cmd == 'state')
        $id = $argv[2];

    // On recupere l id et la valeur (plage0-100) a affecter
    if ($cmd == 'setWhiteDimmer' || $cmd == 'setRGBDimmer')
    {
        $id = $argv[2];
        $dimmer = $argv[3];
    }

    // On recupere la couleur format ffffff ou #ffffff
    if ($cmd == 'setRGBColor')
    {
        $color = $argv[2];
    }

    // On recupere l id du GPO a traiter
    if ($cmd == 'getWatt')
    {
        $id = $argv[2];
    }

    // On recupere l id (0=Mot0 / 1=Mot1) du moteur
    if ($cmd == 'getMotorPos')
    {
        $id = $argv[2];
    }

    // On recupere l id (0=Mot0 / 1=Mot1) du moteur et l ouverture (plage 0-100%)
    if ($cmd == 'setMotorPos')
    {
        $id = $argv[2];
        $pos = $argv[3];
    }

    // Passage du bit de controle en valeur 1 ou 0
    if ($cmd == 'setRainMode' || $cmd == 'setSunTrackOnOff' ||  $cmd == 'setSunTrackMode' )
    {
        $bit = $argv[2];
    }

    // Adresse IP interne de la pergola
    $ip = '192.168.1.47';
    
    // Interrogation la pergola ou execution d un ordre
    function getURL($url)
    {
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        $result = simplexml_load_string(curl_exec($curl));
        return $result;
    }
    
    // Passage d une plage 0-255 a 0-100 et inversement
    function changeBase($base, $value)
    {
        if ($base == '255')
        {
            $new_value = $value * 100 / 255;
        }
        if ($base == '100')
        {
            $new_value = $value * 255 / 100;
        }
        if ($new_value < 0)
            $new_value = 0;
        return floor($new_value);
    }
    
    // Recuperation de la couleur au format #ffffff a partir des 3 composantes
    function fromRGB($red, $green, $blue)
    {
        $hexa = sprintf("#%02x%02x%02x", $red, $green, $blue);;
        return $hexa;
    }

    // Recuperation de la valeur de chaque composante (plage 0-255) a partir du format #ffffff
    function toRGB($hexa)
    {
        if (substr($hexa,0,1) == "#")
            $hexa = substr($hexa,1);

        $RGB['R'] = hexdec(substr($hexa,0,2));
        $RGB['G'] = hexdec(substr($hexa,2,2));
        $RGB['B'] = hexdec(substr($hexa,4,2));
        
        return $RGB;
    }

    // Retour de l etat de la pergola (id='all') ou d un gpo en particulier (id='gpo.')
    function state()
    {
        global $ip, $id;
        
        $url = "http://".$ip."/zns.cgi?cmd=d&p=os";
        $pergola = getURL($url);
        if ($id == 'all')
        {
            header('Content-type: text/xml');
            print("<?xml version='1.0' encoding='utf-8'?><root>");
            $rgb_power1 = explode(";", $pergola->xpath('gpo4')[0])[0]; 
            $rgb_power1 = changeBase('255', $rgb_power1);
            print("<rgb_power1>".$rgb_power1."</rgb_power1>");
            $rgb_power2 = explode(";", $pergola->xpath('gpo5')[0])[0]; 
            $rgb_power2 = changeBase('255', $rgb_power2);
            print("<rgb_power2>".$rgb_power2."</rgb_power2>");
            $white_dimmer1 = explode(";", $pergola->xpath('gpo6')[0])[0]; 
            $white_dimmer1 = changeBase('255', $white_dimmer1);
            print("<white_dimmer1>".$white_dimmer1."</white_dimmer1>");
            $white_dimmer2 = explode(";", $pergola->xpath('gpo7')[0])[0]; 
            $white_dimmer2 = changeBase('255', $white_dimmer2);
            print("<white_dimmer2>".$white_dimmer2."</white_dimmer2>");
            $rgb_red = explode(";", $pergola->xpath('gpo8')[0])[0]; 
            $rgb_green = explode(";", $pergola->xpath('gpo9')[0])[0]; 
            $rgb_blue = explode(";", $pergola->xpath('gpo10')[0])[0];
            $rgb = fromRGB($rgb_red, $rgb_green, $rgb_blue);    
            print("<rgb_hexa>".$rgb."</rgb_hexa>");
            $rgb_dimmer = explode(";", $pergola->xpath('gpo7')[0])[0]; 
            $rgb_dimmer = changeBase('255', $rgb_dimmer);
            print("<rgb_dimmer>".$rgb_dimmer."</rgb_dimmer>");
            $motor1 = explode(";", $pergola->xpath('Mot0')[0])[0]; 
            $motor1 = changeBase('255', $motor1);
            print("<motor1>".$motor1."</motor1>");
            $motor2 = explode(";", $pergola->xpath('Mot1')[0])[0]; 
            $motor2 = changeBase('255', $motor2);
            print("<motor2>".$motor2."</motor2>");
            print("</root>");
        }
        else
        {
            $valeur = explode(";", $pergola->xpath($id)[0])[0];
            $valeur = changeBase('255', $valeur);
            print($valeur);
        }
    }
    
    // Recuperation de l option Fermeture si pluie
    function getRainMode()
    {
        global $ip;
        
        $url = "http://".$ip."/zns.cgi?cmd=d&p=s";
        $pergola = getURL($url);
        //print_r($pergola);
        $user = $pergola->xpath('user')[0];
        print(intval($user&1?1:0));
    }
    
    // Ecriture l option Fermeture si pluie
    function setRainMode()
    {
        global $ip, $bit;
        
        $url = "http://".$ip."/zns.cgi?cmd=d&p=s";
        $pergola = getURL($url);
        //print_r($pergola);
        $user = $pergola->xpath('user')[0];
        $rain_mode = $bit;
        $sun_tracking = intval($user&2?1:0);
        $shadow_mode = intval($user&4?1:0);
        $wintering = intval($user&8?1:0);
        $user = ($rain_mode * 1) + ($sun_tracking * 2) + ($shadow_mode * 4) + ($wintering * 8);
        $url = "http://".$ip."/zns.cgi?cmd=u&p=3&v=".$user;
        $pergola = getURL($url);
    }
    
    // Recuperation de l option Suivi du soleil
    function getSunTrackOnOff()
    {
        global $ip;
        
        $url = "http://".$ip."/zns.cgi?cmd=d&p=s";
        $pergola = getURL($url);
        //print_r($pergola);
        $user = $pergola->xpath('user')[0];
        print(intval($user&2?1:0));
    }
    
    // Ecriture l option Fermeture si pluie
    function setSunTrackOnOff()
    {
        global $ip, $bit;
        
        $url = "http://".$ip."/zns.cgi?cmd=d&p=s";
        $pergola = getURL($url);
        //print_r($pergola);
        $user = $pergola->xpath('user')[0];
        $rain_mode = intval($user&1?1:0);
        $sun_tracking = $bit;
        $shadow_mode = intval($user&4?1:0);
        $wintering = intval($user&8?1:0);
        $user = ($rain_mode * 1) + ($sun_tracking * 2) + ($shadow_mode * 4) + ($wintering * 8);
        $url = "http://".$ip."/zns.cgi?cmd=u&p=3&v=".$user;
        $pergola = getURL($url);
    }
    
    // Recuperation de l option Ombrage minimal
    function getSunTrackMode()
    {
        global $ip;
        
        $url = "http://".$ip."/zns.cgi?cmd=d&p=s";
        $pergola = getURL($url);
        //print_r($pergola);
        $user = $pergola->xpath('user')[0];
        print(intval($user&4?1:0));
    }
    
    // Ecriture l option Fermeture si pluie
    function setSunTrackMode()
    {
        global $ip, $bit;
        
        $url = "http://".$ip."/zns.cgi?cmd=d&p=s";
        $pergola = getURL($url);
        //print_r($pergola);
        $user = $pergola->xpath('user')[0];
        $rain_mode = intval($user&1?1:0);
        $sun_tracking = intval($user&2?1:0);
        $shadow_mode = $bit;
        $wintering = intval($user&8?1:0);
        $user = ($rain_mode * 1) + ($sun_tracking * 2) + ($shadow_mode * 4) + ($wintering * 8);
        $url = "http://".$ip."/zns.cgi?cmd=u&p=3&v=".$user;
        $pergola = getURL($url);
    }
    
    // Recuperation de la position (plage 0-100) des lames
    function getMotorPos()
    {
        global $ip, $id;
        
        $url = "http://".$ip."/zns.cgi?cmd=d&p=s";
        $pergola = getURL($url);
        // Recuperation position actuelle et maximale du moteur
        $cur_pos = explode(";", $pergola->xpath('Mot'.$id)[0])[0]; 
        $max_pos = explode(";", $pergola->xpath('Mot'.$id)[0])[1];
        // Calcul du porcentage d ouverture
        $valeur = max(0, $cur_pos * 100 / $max_pos);
        print($valeur);
    }
    
    // Positionnement (plage 0-100) les lames
    function setMotorPos()
    {
        global $ip, $id, $pos;
        
        $url = "http://".$ip."/zns.cgi?cmd=d&p=s";
        $pergola = getURL($url);
        // Calcul du nombre de pas correspondant au pourcentage demande
        $max_pos = explode(";", $pergola->xpath('Mot'.$id)[0])[1];
        $valeur = floor($pos * $max_pos / 100);
        $url = "http://".$ip."/zns.cgi?cmd=m&m=".($id + 1)."&p=".$valeur;
        $result = getURL($url);
    }

    // Recuperation de la T° interne de la carte
    function getHWTemp()
    {
        global $ip;
        
        $url = "http://".$ip."/zns.cgi?cmd=d&p=s";
        $pergola = getURL($url);
        $temp = ($pergola->xpath('Temp')[0])/10; 
        print($temp." °");
    }

    // Recuperation de la conso en W du GPO id
    function getWatt()
    {
        global $ip, $id;
        
        $url = "http://".$ip."/zns.cgi?cmd=d&p=os";
        $pergola = getURL($url);
        $v = ($pergola->xpath('VDC2')[0])/1000; 
        $i = (explode(";", $pergola->xpath($id)[0])[1])/1000;
        $p = floor($v * $i);
        print($p." W");
    }

    // Allumage des bandeaux Blanc
    function setWhiteDimmer()
    {
        global $ip, $id, $dimmer;
        if ($id=1)
            $mask = 64;
        else
            $mask = 128;
        $value = changeBase('100', $dimmer);
        $url = "http://".$ip."/zns.cgi?cmd=l&o=".$mask."&p=".$value;
        $result = getURL($url);
    }
    
    // Allumage des bandeaux RGB
    function setRGBDimmer()
    {
        global $ip, $id, $dimmer;
        if ($id=1)
            $mask = 16;
        else
            $mask = 32;
        $value = changeBase('100', $dimmer);
        // Extinction / allumage du GPO4 ou GPO5 avant le GPO11
        if ($value == 0)
        {
            $url = "http://".$ip."/zns.cgi?cmd=l&o=".$mask."&p=0";
            $result = getURL($url);
        }
        else
        {
            $url = "http://".$ip."/zns.cgi?cmd=l&o=".$mask."&p=255";
            $result = getURL($url);
        }
        // Envoi de la valeur au GPO11
        $url = "http://".$ip."/zns.cgi?cmd=l&o=2048&p=".$value;
        $result = getURL($url);
    }

    // Envoi des 3 composantes de couleur
    function setRGBColor()
    {
        global $ip, $color;
        $rgb = toRGB($color);
        $url = "http://".$ip."/zns.cgi?cmd=l&o=256&p=".$rgb['R'];
        $result = getURL($url);
        $url = "http://".$ip."/zns.cgi?cmd=l&o=512&p=".$rgb['G'];
        $result = getURL($url);
        $url = "http://".$ip."/zns.cgi?cmd=l&o=1024&p=".$rgb['B'];
        $result = getURL($url);
    }

    // Execution de la fonction demandee selon la commande passee en parametre
    switch ($cmd) {
        case 'state':
            state();
            break;
        case 'setWhiteDimmer':
            setWhiteDimmer();
            break;
        case 'setRGBDimmer':
            setRGBDimmer();
            break;
        case 'setRGBColor':
            setRGBColor();
            break;
        case 'getWatt':
            getWatt();
            break;
        case 'getHWTemp':
            getHWTemp();
            break;
        case 'getMotorPos':
            getMotorPos();
            break;
        case 'setMotorPos':
            setMotorPos();
            break;
        case 'getRainMode':
            getRainMode();
            break;
        case 'setRainMode':
            setRainMode();
            break;
        case 'getSunTrackOnOff':
            getSunTrackOnOff();
            break;
        case 'setSunTrackOnOff':
            setSunTrackOnOff();
            break;
        case 'getSunTrackMode':
            getSunTrackMode();
            break;
        case 'setSunTrackMode':
            setSunTrackMode();
            break;
    }
?>

Voici le scipt

Et les logs ?