sureflap chatière connectée

On parle ici de l’utilisation de vos objets connectés avec eedomus

Re: sureflap chatière connectée

Messagepar gabvoir » 12 Jan 2024 09:48

Update :
https://www.diffchecker.com/Iej8vv2m/

Si tu utilises le "set" je serai intéressé de savoir si ca fonctionne toujours.

Code : Tout sélectionner
<?php

/*
indice 1.1 du 19 decembre 2019 par Merguez07
1.0 : Creation du plugin
1.1 : integration des chatieres de type door connect
      modification de la gestion du cache
1.2 : Correction d'un bug dans les led hub et changement d'icone
remerciements :
Bart de Eedomus pour le code de la gestion du cache
RAR69 pour les icones
eedomus.yves.delort pour les beta-tests
Kebiel pour l'integration du door connect(indice 1.1)
2.0 : Mise à jour vers la nouvelle API :
 - nouveau endpoint + header par défaut + suppression de sdk_logout
 - réorganisation du xml de sortie pour coller à l'API et limiter les appels :
   suppresion de sdk_getpetlocation et sdk_getCurfewStatus
*/

$mode           = getArg('mode',false); // mode=list pour la configuration du plugin

$device_id      = (string) sdk_genuuid();
$endpoint       = "https://app-api.production.surehub.io";
$url_logout      = "/api/auth/logout";
$url_login      = "/api/auth/login";
$url_household   = "/api/household";
$url_device      = "/api/device";
$url_pet         = "/api/pet";
$header_default = array(
            "Host: app.api.surehub.io",
            "Connection: keep-alive",
            "Accept: application/json, text/plain, */*",
            "Accept-Encoding: gzip, deflate",
            "Accept-Language: en-US,en-GB;q=0.9",
            "Content-Type: application/json",
            "Origin: https://surepetcare.io",
            "Referer: https://surepetcare.io",
            "X-Requested-With: com.sureflap.surepetcare",
            "X-Device-Id: ".$device_id
            );

//---------------------------config du plugin------------------------------------
if ($mode == 'list')  {
    if (isset($_POST['email'])&& isset($_POST['motdepasse'])){
        $email_address  = $_POST['email'];
        $password       = $_POST['motdepasse'];
        saveVariable("email",$email_address);
        saveVariable("password",$password );
        sdk_login();sdk_gethousehold(); sdk_getdevices();sdk_getpet();
        sdk_inithtml();
        echo utf8_encode($head.$html_hub.$html_flap.$html_pet.$html_script.$end);
        die();
    } else {
        sdk_inithtml();
        echo utf8_encode($head.$html_login.$end);
    }
    die;
}
//-------------------------------------------------------------------------------

$email_address  = loadVariable("email");
$password       = loadVariable("password");
$set            = getArg('set',false);    // ledbright/leddim/ledoff
                                          // lockin/lockout/lockboth/locknone
                                          // pos1/pos2
                                          // curfew

//---------------------------lumiere du Hub-------------------------------------
$test=sdk_Targ($set,'led');
if ($test[0]) {
    $hub_id= getArg('hubid',true);
    sdk_login();
    sdk_gethousehold();
    sdk_getdevices();
    sdk_sethubledbrightness($test[1],$hub_id) ;
    echo $xml;
    die;
}
//-------------------------------------------------------------------------------

//--------------------verrouillage de la chatiere--------------------------------
$test=sdk_Targ($set,'lock');
if ($test[0]) {
    $flap_id= getArg('flapid',true);
    sdk_login();
    sdk_gethousehold();
    sdk_getdevices();
    sdk_setlockmode ($test[1],$flap_id) ;
    echo $xml;
    die;
}
//-------------------------------------------------------------------------------

//---------------------------position de l'animal--------------------------------
$test=sdk_Targ($set,'pos');
if ($test[0]) {
    $pet_id= getArg('petid',true);
    sdk_login();
    sdk_setpetlocation($test[1],$pet_id) ;
    echo $xml;
    die;
}
//-------------------------------------------------------------------------------

//---------------------------reglage du couvre-feu-------------------------------
if ($set=="curfew") {
    $locktime          = getArg('locktime',false);
    $unlocktime        = getArg('unlocktime',false);
    $id                = getArg('id',true);
    sdk_login();
    sdk_setEnableCurfew($locktime,$unlocktime,$id) ;
    echo $xml;
    die;
}
//-------------------------------------------------------------------------------
$cache_duration = 1; // minutes
$time_last_xml  = loadVariable('time_last_xml');
if ((time() - $time_last_xml) / 60 < $cache_duration)
{
    sdk_header('text/xml');
    $cached_xml = loadVariable('cached_xml');
    echo $cached_xml;
    die();
}

//$xml = '<root>' ."\n";

sdk_login();
sdk_gethousehold();
sdk_getdevices();
sdk_getpet();

//$xml .= '</root>' ."\n"; 

$cached_xml = '<root>';
$cached_xml .= '<cached>0</cached>';
$cached_xml .= $xml;
$cached_xml .= '</root>';

echo $cached_xml;

if ($xml != '') // non vide
{
    $cached_xml = str_replace('<cached>0</cached>', '<cached>1</cached>', $cached_xml);
    saveVariable('cached_xml', $cached_xml);
    saveVariable('time_last_xml', time());
}
                             
die;

function sdk_genuuid() {
    return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
        mt_rand( 0, 0xffff ),
        mt_rand( 0, 0x0fff ) | 0x4000,
        mt_rand( 0, 0x3fff ) | 0x8000,
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
    );
}

function sdk_headerTokened(){
   global $token,$header_default;
   return array_merge($header_default, array("Authorization: Bearer $token"));   
}

#---------------------------------------logout---------------------------------------------   
function sdk_logout(){
   global $oldtoken,$endpoint,$url_logout;
    $url    = $endpoint.$url_logout;
    $action = 'GET';
    $header = array("Content-Type: application/json",
                    "Authorization: Bearer $oldtoken");
    $result = sdk_curl($url,$action,null,$header);
}   
#------------------------------------------------------------------------------------------

#---------------------------------------login----------------------------------------------
function sdk_login(){
    global $oldtoken,$email_address,$password,$device_id,
           $endpoint,$url_login,$token,$xml,$header_default;
    if  ($oldtoken = loadVariable("token")) {
        //sdk_logout();
    }
    $url    = $endpoint.$url_login;
    $action = 'POST';
    $post   = '{"email_address":"'.$email_address.'",
                "password":"'     .$password.     '",
                "device_id":"'    .$device_id.    '"}';
    $result =sdk_curl($url,$action,$post,$header_default);
    if (array_key_exists(token,$result['data'])) {
        $token = $result['data']['token'];
        saveVariable("token",$token);
        $xml .= '<status>'   ."success!"                 .'</status>'."\n"; 
    } else {
        $xml .= '<status>'   ."Token Invalid/Expired!"   .'</status>'."\n";
        //$xml .= '</root>' ."\n"; 
        die("Login Failed!\n");
    }
}
#------------------------------------------------------------------------------------------

#-------------------------------------gethouseold------------------------------------------
function sdk_gethousehold() {
    global $endpoint,$url_household,$xml,$Thouses;
    $xml   .= '<Houses>'."\n";
    $Thouses = array();
    $url    = $endpoint.$url_household;
    $action = 'GET';
    $result = sdk_curl($url,$action,null,sdk_headerTokened());
    $houses = $result['data'];
    if($houses) {
        foreach($houses as $house){
            $Thouses += array($house['id']=>$house['name']);
            $xml .= '   <ID'.$house['id'].'>'  .$house['name']    .'</ID'.$house['id'].'>'."\n";
       }
       $xml .= '</Houses>'."\n";
    } else {
       $xml .= '   <House>'             ."No House!"                                .'</House>'."\n";
       $xml .= '</Houses>'."\n";
       die("No House!");
    }
}
#------------------------------------------------------------------------------------------

#---------------------------------------getpet---------------------------------------------
function sdk_getpet() {
    global $endpoint,$url_pet,$xml,$Thouses,$Tpets;
    $xml .= '<Pets>'."\n";
    $Tpets=array();

   $url = $endpoint.$url_pet;
   $action = 'GET';
   $result = sdk_curl($url,$action,null,sdk_headerTokened());
   $pets   = $result['data'];
   if($pets) {
      foreach ($pets as $pet) {
         $chien  = ($pet['gender']     === 0 )? "Chienne":"Chien";
         $chat   = ($pet['gender']     === 0 )? "Chatte":"Chat";
         $species= ($pet['species_id'] === 2 )? $chien:$chat;
         $Tpets += array($pet['id']=>$pet['name']);
         $xml .= '   <ID'.$pet['id'].'>'  ."\n";
         $xml .= '      <House>'         .$Thouses[$pet['household_id']]      .'</House>'."\n";
         $xml .= '      <Species>'     .$species       .'</Species>'."\n";
         $xml .= '      <Name>'        .$pet['name']   .'</Name>'."\n";
         if (array_key_exists(position,$pet)) {
            if($pet['position']['where'] == "1") {
               $xml .= '      <Location>' ."Inside" .'</Location>'."\n";
            } else {
               $xml .= '      <Location>' ."Outside".'</Location>'."\n";
            }
            $xml .= '      <LocationSince>'.$pet['position']['since'].'</LocationSince>'."\n";
         } else {
            $xml .= '      <Location>' ."No location!"    .'</Location>'."\n";
         }   
         $xml .= '   </ID'.$pet['id'].'>'  . "\n";
      }
   } else {
      $xml .= '       <Pet>'           ."No Pet!"          .'</Pet>'."\n";
   }
    $xml .= '</Pets>'."\n";
}
#------------------------------------------------------------------------------------------

#-------------------------------------getdevices-------------------------------------------
function sdk_getdevices() {
    global $endpoint,$url_device,$xml,$Tflaps,$Thubs, $Thouses, $Trepeaters,$Tfeeder_connects,$Tprogrammers  ;
    $xml .= '<Devices>'."\n";
    $Tflaps = array();$Thubs  = array();$Trepeaters= array() ;
    $Tfeeder_connects= array();$Tprogrammers= array();

   $url    = $endpoint.$url_device;
   $action = 'GET';
   $result = sdk_curl($url,$action,null,sdk_headerTokened());
   $devices= $result['data'];
   if ($devices) {
      foreach ($devices as $device) {
         switch($device['product_id']) {
            case 1:
               $Thubs += array($device['id']=>$device['name']);
               $DeviceType = "Hub";
               break;
            case 2:
               $Trepeaters  += array($device['id']=>$device['name']);
               $DeviceType = "Repeater";
               break;
            case 3:
               $Tflaps += array($device['id']=>$device['name']);
               $DeviceType = "Pet Door Connect";
                break;
            case 4:
               $Tfeeder_connects += array($device['id']=>$device['name']);
               $DeviceType = "Pet Feeder Connect";
               break;
            case 5:
               $Tprogrammers += array($device['id']=>$device['name']);
               $DeviceType = "Programmer";
                break;
            case 6:
               $Tflaps += array($device['id']=>$device['name']);
               $DeviceType = "DualScan Cat Flap Connect";
               break;
         }
         if (array_key_exists(serial_number,$device)) $DeviceSN = $device['serial_number']; else $DeviceSN   = "";
         $xml .= '   <ID'.$device['id'].">\n";
         $xml .= '      <House>'         .$Thouses[$device['household_id']]      .'</House>'."\n";
         $xml .= '      <Type>'         .$DeviceType                          .'</Type>'."\n";
         $xml .= '      <Name>'         .$device['name']                      .'</Name>'."\n";
         $xml .= '      <Mac>'          .$device['mac_address']               .'</Mac>' ."\n";
         $xml .= '      <SN>'           .$DeviceSN                            .'</SN>'  ."\n";
         if (array_key_exists(status,$device)) {
            if (array_key_exists(battery,$device['status'])) {
               $xml .= '      <Battery>'   .$device['status']['battery']      .'</Battery>'  ."\n";
            }
            if (array_key_exists(locking,$device['status'])) {
               if (array_key_exists(mode,$device['status']['locking'])) {
                  $Tlock=array(2=>"In", 1=>"Out", 3=>"Both",0=>"None");
                  $xml .= '      <Lock>'   .$Tlock[$device['status']['locking']['mode']]   .'</Lock>'  ."\n";
               }
            }
            if (array_key_exists(led_mode,$device['status'])) {
               $Tled=array(1=>"Bright", 4=>"Dim", 0=>"Off");
               $xml .= '      <Led>'   .$Tled[$device['status']['led_mode']]   .'</Led>'  ."\n";
            }
         }
         if (array_key_exists(control,$device)) {
            if (array_key_exists(curfew,$device['control'])) {
               if (array_key_exists(0,$device['control']['curfew'])) {
                  for ($i = 0; $i < count($device['control']['curfew']); $i++) {
                     $etat= ($device['control']['curfew'][$i]['enabled'])? "Enabled":"Disabled";
                     $xml .= '           <curfew'.($i+1).'>'     .$etat             .'</curfew'.($i+1).'>'  ."\n";
                     if ($etat=="Enabled") {
                        $Curfew_LockTime   = $device['control']['curfew'][$i]['lock_time'];
                        $Curfew_UnlockTime = $device['control']['curfew'][$i]['unlock_time'];
                        $xml .= '               <LockTime>'     .$Curfew_LockTime             .'</LockTime>'  ."\n";   
                        $xml .= '               <UnLockTime>'     .$Curfew_UnlockTime             .'</UnLockTime>'  ."\n";
                     }
                  }
               } else {
                     $etat= ($device['control']['curfew']['enabled'])? "Enabled":"Disabled";
                     $xml .= '           <curfew'.($i+1).'>'     .$etat             .'</curfew'.($i+1).'>'  ."\n";
                     if ($etat=="Enabled") {
                        $Curfew_LockTime   = $device['control']['curfew']['lock_time'];
                        $Curfew_UnlockTime = $device['control']['curfew']['unlock_time'];
                        $xml .= '               <LockTime>'     .$Curfew_LockTime             .'</LockTime>'  ."\n";   
                        $xml .= '               <UnLockTime>'     .$Curfew_UnlockTime             .'</UnLockTime>'  ."\n";
                     }
               }
            }
         }
         $xml .= '   </ID'.$device['id'].'>' ."\n";
      }
   } else {
      $xml .= '   <Device>'           ."No Device!"          .'</Device>'."\n";
   }
    $xml .= '</Devices>'."\n";
}
#------------------------------------------------------------------------------------------

#-----------------------------sethubledbrightness  bright|dim|off-----------------------------
function sdk_sethubledbrightness($led,$hub_id) {
    global $endpoint,$Thubs,$xml ;
    $xml = '<root>' ."\n";
    switch($led) {
       case "bright":
          $ledN = 1;
          break;
       case "dim":
          $ledN = 4;
          break;
       case "off":
          $ledN = 0;
          break;
       default:
           $ledN = null;
    }
    if (isset($ledN)) {
        $post   = "{\"led_mode\":$ledN}";
        $url    = $endpoint."/api/device/$hub_id/control";
        $action ='PUT';
        $result = sdk_curl($url,$action,$post,sdk_headerTokened());
        if($result['data']['led_mode']==$ledN) {
            $hubname=$Thubs[$hub_id];
           $xml .= sdk_framed('<action>' ."Successfully Set \"$hubname\" LED Brightness! \"$led\"" .'</action>');
        } else {
            $xml .= sdk_framed('<action>' ."LED Brightness Change Failed!" .'</action>');
        }   
    } else {
        $xml .= sdk_framed('<action>' ."wrong parameter \"$led\"==> reminder: &ledbright ou &leddim ou &ledoff" .'</action>');
    }
    $xml .= '</root>' ."\n"; 
}
#---------------------------------------------------------------------------------------------

#------------------------------setlockmode(in|out|both|none,$flap_id)-------------------------
function sdk_setlockmode ($lock,$flap_id) {
    global $endpoint,$Tflaps,$xml ;
    $xml = '<root>' ."\n";
    switch($lock) {
       case "in":
          $lockN = 2;
          break;
       case "out":
          $lockN = 1;
          break;
       case "both":
          $lockN = 3;
          break;
       case "none":
          $lockN = 0;
          break;   
       default:
           $lockN = -1;
    }
    if (!($lockN==-1)) {
        $post   = "{\"locking\":\"$lockN\"}";
        $url    = $endpoint."/api/device/$flap_id/control";
        $action = 'PUT';
        $result =sdk_curl($url,$action,$post,sdk_headerTokened());
        if($result['data']['locking']==$lockN) {
            $flap_name = $Tflaps[$flap_id];
           $xml .= sdk_framed('<action>' ."Successfully Set \"$flap_name\" Lock Mode! \"$lock\"" .'</action>');
        } else {
            $xml .= sdk_framed('<action>' ."Lock Mode Change Failed!"                  .'</action>');
        }   
    } else {
        $xml .= sdk_framed('<action>' ."wrong parameter \"$lock\"==> reminder: &set=lockin|&set=lockout|&set=lockboth|&set=locknone" .'</action>');
    }
    $xml .= '</root>' ."\n"; 
}
#---------------------------------------------------------------------------------------------

#-------------------------setpetlocation(1(inside)|2(outside),$pet_id)------------------------
function sdk_setpetlocation($position,$pet_id){
    global $endpoint,$xml ;
    $xml = '<root>' ."\n";
    $date= date("Y-m-d H:i");
    $post   = "{\"where\":\"$position\",\"since\":\"$date\"}";
    $url    = $endpoint."/api/pet/$pet_id/position";
    $action = 'POST';
    $result =sdk_curl($url,$action,$post,sdk_headerTokened());
    if(!$result['error']){
        if($result['data']['where']==$position) {
            $Tposition=($position==1)? "inside":"outside";
            $xml .= sdk_framed('<action>' ."Successfully Set \"$pet_id\" location \"$Tposition\"!" .'</action>');
        } else {
            $xml .= sdk_framed('<action>' ."Set Location Failed"                  .'</action>');
       }
    } else {
        $xml .= sdk_framed('<action>' ."pet not found"                  .'</action>');
    }
   $xml .= '</root>' ."\n";
}
#---------------------------------------------------------------------------------------------

#-----------------------setEnableCurfew("18:00", "06:00",$device_id)--------------------------------------------   
function sdk_setEnableCurfew($locktime, $unlocktime,$device_id) {
    global $endpoint,$xml ;
    $xml = '<root>' ."\n";
    $set = (($locktime)&&($unlocktime));
    $set1= ($set)?"true":"false";
    $post   = "{\"curfew\":[{\"enabled\":$set1,\"lock_time\":\"$locktime\",\"unlock_time\":\"$unlocktime\"},[],[]]}" ;   
    $url    = $endpoint."/api/device/$device_id/control";
    $action = 'PUT';
    $result =sdk_curl($url,$action,$post,sdk_headerTokened(),$set);
    if($result['data']['curfew'][0]['enabled']==true) {
       $xml .= sdk_framed('<action>' ."Successfully Enabled Curfew For \"$DeviceName\" Between $locktime & $unlocktime" .'</action>');
    } else {
       $xml .= sdk_framed('<action>' ."Successfully disabled Curfew!" .'</action>');
    }
    $xml .= '</root>' ."\n";
}
#---------------------------------------------------------------------------------------------

function sdk_Targ($arg,$text){
    #$arg='pos1' et $text='pos' --> array(true,1)
    $Targ[0] = (substr($arg,0,strlen($text))==$text);
    $Targ[1] = substr($arg,-(strlen($arg)-strlen($text)));
    return $Targ;
}

function sdk_Utf8_ansi($text) {
    #remet en forme $text pour voir les accents
    $text  = str_replace('\u','u',$text);
    $text  = preg_replace('/u([\da-fA-F]{4})/', '&#x\1;', $text);
    $text  = sdk_json_decode($text);
    return $text;     
}

function sdk_since($time){
    #donne le temps ecoule depuis $time
    $duration = strtotime(date("Y-m-d H:i:s", time()))-strtotime($time);
    switch (true) {
        case $duration < 60:
            return $duration." s";
        case $duration < 3600:
            return floor($duration/60)." min";
        case $duration < 86400:
            return floor($duration/3600)." h";
        case $duration < 172800:
            return "1 jour";
        case $duration < 2592000:
            return floor($duration/86400)." jours";
        case $duration < 5184000:
            return "1 mois";
        case $duration < 31536000:
            return floor($duration/2592000)." mois";
        case $duration < 63072000:
            return "1 an";
        case $duration > 63071999:
            return floor($duration/31536000)." annees";
        default:
    }
}

function sdk_only_letters($text){
    #ne garde que les lettres du debut de $text
    $text = substr($text,0,sdk_getPosInteger($text));
    $text = preg_replace('`[0-9. ]`sm', '', $text);
    return $text;
}

function sdk_getPosInteger($text) {
    #donne la position du premier chiffre dans $text
    $i = 0;
    $nLen = strlen($text);
    while ($i<$nLen) {
        if ( is_numeric( $text[$i] ) ) break;
        $i++;
    }
    return $i;
}

function sdk_curl($url,$action,$post,$header){
    $response = httpQuery(  $url            = $url,
                            $action         = $action,
                            $post           = $post,
                            $oauth_token    = null,
                            $header         = $header,
                            $use_cookies    = false,
                            $ignore_errors  = false,
                            $info           = null);
    $result = sdk_Utf8_ansi($response);
    return $result;
}

function sdk_framed($text){
    $text="#".$text."#";
    $nLen = strlen($text);
    $text="\n".str_repeat("#", $nLen)."\n".$text."\n".str_repeat("#", $nLen)."\n"."\n";
    return $text;
}

function sdk_inithtml() {
    global $head,$html_login,$html_hub,$html_flap,$html_pet,$html_script,$end,$Thubs,$Tflaps,$Tpets;

    $head = "<html>".
                "<head>".
                    "<meta charset='UTF-8'>".
                    "<link href='https://fonts.googleapis.com/css?family=Roboto' rel='stylesheet'>".
                    "<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>".
                    "<style>".
                        "body {font-size: 14px;font-family: 'Roboto', sans-serif;width:50%;}".
                        "body {font-size: 14px;font-family: 'Roboto', sans-serif;width:50%;}".
                        "input[type='text'] {font-family: 'Roboto', sans-serif;}".
                        "ul {list-style: symbols;}".
                    "</style>".
                "</head>".
                "<body>".
                    "<img src='https://www.surepetcare.io/assets/images/onboarding/Sure_Petcare_Logo.png' alt='sure petcare' style='width:50%;' /><br />";
   
    $html_login =   "<p> Veuillez taper vos identifiants Sure Petcare</p>".
                    "<form action='/script/?exec=sureflap.php&mode=list' method='post'>".
                        "<p>";
                            $email   =(loadVariable('email'))?loadVariable('email'):"";
                            $password=(loadVariable('password'))?loadVariable('password'):"";
    $html_login .=          "<input type='text'  size='60' placeholder='votre email' name='email' value='$email'  /><br /><br />".
                            "<input type='password' size='20' placeholder='votre mot de passe' name='motdepasse' value='$password' /><br /><br />".
                            "<input type='submit' value='Valider' />".
                        "</p>".
                    "</form>";
   

    $html_hub =     "<div class='wrapper'>".
                        "<p>identifiant de votre Hub : ".
                            "<input id='hub_id' type='text' size='20' name='device_list' class='inputChoice' value='' onclick='this.select();' >".
                            "<ul class='elements'>";
                                foreach ($Thubs as $hubid=>$hubname){
    $html_hub.=                     "<li><input type='radio' name='hub_list' class='inputRadio' value='$hubid' id=''>".$hubid."-".$hubname."<br /></li>"; 
                                }
    $html_hub.=             "</ul>".
                        "</p>".
                    "</div>";
   
    $html_flap=     "<div class='wrapper'>".
                        "<p>identifiant de votre chatiere : ".
                            "<input id='flap_id' type='text' size='20' name='device_list' class='inputChoice' value='' onclick='this.select();' >".
                            "<ul class='elements'>";
                                foreach ($Tflaps as $flapid=>$flapname){
                                    $html_flap .="<li><input type='radio' name='flap_list' class='inputRadio' value='$flapid' id=''>".$flapid."-".$flapname."<br /></li>"; 
                                }
    $html_flap.=            "</ul>".
                        "</p>".
                    "</div>";
   
    $html_pet  =    "<div class='wrapper'>".
                        "<p>identifiant de votre animal : ".
                            "<input id='pet_id' type='text' size='20' name='device_list' class='inputChoice' value='' onclick='this.select();' >".
                            "<ul class='elements'>";
                                foreach ($Tpets as $petid=>$petname){
                                    $html_pet .="<li><input type='radio' name='pet_list' class='inputRadio' value='$petid' id=''>".$petid."-".$petname."<br /></li>"; 
                                }
    $html_pet.=             "</ul>".
                        "</p>".
                    "</div>";
   
    $html_script=   "<script type='text/javascript'>".
                        "$('html').on('click','.inputRadio', function(e) {".
                           
                            "$(this).closest('.wrapper').find('.inputChoice').val($(this).val());".
                        "});".
                    "</script>";
   
    $end =      "</body>".
            "</html>";
return;
}
gabvoir
 
Messages : 184
Inscription : 24 Juin 2015

Re: sureflap chatière connectée

Messagepar leraystep95 » 05 Mars 2024 19:52

Merci gabvoir pour ce correctif !
Il faudrait mettre à jour le script sur le store ;)
leraystep95
 
Messages : 12
Inscription : 23 Avr 2023
Localisation : Val D'Oise

Re: sureflap chatière connectée

Messagepar dommarion » 09 Mars 2024 16:27

Bonjour,
Version 1.3 publiée sur le store eedomus.
dommarion
OpenWeather|Phases soleil|HeatzyV2|Concaténateur|HP Yamaha|SomfyV3|Epson|Seuils n étages|Baie 2 vantaux|Deezer|Intégrale|HTTP Auth. Digest|TV Philips|SmartThings|fonctions PHP|Tuya Smartlife|CozyTouch2|mySMS|TV Sony
dommarion
 
Messages : 630
Inscription : 28 Déc 2020

Re: sureflap chatière connectée

Messagepar leraystep95 » 25 Mars 2024 21:32

Petite info qui n'est pas des moindres !
Les informations d'Eedomus vers le hub Sureflap fonctionne très bien.
Par contre, les informations ne vont pas du hub vers Eedomus... Par exemple la position de l'animal.
Ce qui ne m'arrange pas de ne pas savoir si mon animal est à l'intérieur ou à l'extérieur de chez moi dans Eedomus.
leraystep95
 
Messages : 12
Inscription : 23 Avr 2023
Localisation : Val D'Oise

Re: sureflap chatière connectée

Messagepar gabvoir » 25 Mars 2024 21:57

Bizarre car dans mon cas, tout fonctionne correctement, cf PJ.
Par contre, j'ai reçu un mail des équipes Sure Petcare comme quoi une panne était survenu ce week-end, cf PJ.
Peut être est ce la cause de ta perte d'information.
Pièces jointes
Sure petcare.jpg
Sure petcare.jpg (128.91 Kio) Consulté 3885 fois
sureflap.png
sureflap.png (97.39 Kio) Consulté 3885 fois
gabvoir
 
Messages : 184
Inscription : 24 Juin 2015

Re: sureflap chatière connectée

Messagepar leraystep95 » 26 Mars 2024 06:29

J'ai trouvé mon problème !
En faite, c'était mon lien Xpath qui n'était plus correct...
Nouveau
///ID[VAR1]/Location
Anciennement
//PetLocation/ID[VAR1]
leraystep95
 
Messages : 12
Inscription : 23 Avr 2023
Localisation : Val D'Oise

Re: sureflap chatière connectée

Messagepar gabvoir » 26 Mars 2024 07:17

Ha oui désolé de ne pas y avoir pensé. Comme indiqué dans ma release j'ai réorganise la sortie.
@dommarion : a ce propos as tu mis à jour le xpath dans le json du plugin du store ?
gabvoir
 
Messages : 184
Inscription : 24 Juin 2015

Re: sureflap chatière connectée

Messagepar leraystep95 » 26 Mars 2024 07:27

Non désolé !
Mes compétences sont limitées... Je ne sais pas faire ! Je ne suis qu'un bidouilleur. Mais pas encore assez pour modifier le plugin :p
D'ailleurs j'essaie aussi de récupérer la valeur de la batterie et ce n'est pas encore au point ;)
leraystep95
 
Messages : 12
Inscription : 23 Avr 2023
Localisation : Val D'Oise

Re: sureflap chatière connectée

Messagepar gabvoir » 26 Mars 2024 08:01

Je parlais à @dommarion
Pour la batterie copie le periph de la chatière et change le xpath
Pièces jointes
Screenshot_20240326_074428_Chrome.jpg
Screenshot_20240326_074428_Chrome.jpg (121.33 Kio) Consulté 3875 fois
gabvoir
 
Messages : 184
Inscription : 24 Juin 2015

Re: sureflap chatière connectée

Messagepar leraystep95 » 26 Mars 2024 08:30

Pas l'opposition compteur électrique en copiant le périph de la chatière...
Donc, J'ai réussi en créant un capteur http ;)
Merci !
leraystep95
 
Messages : 12
Inscription : 23 Avr 2023
Localisation : Val D'Oise

Re: sureflap chatière connectée

Messagepar dommarion » 26 Mars 2024 14:40

Bonjour à toutes et tous,
V1.4 publiée avec modif du XPATH et ajout du périphérique batterie.
Merci de tester si besoin j'adapte.
dommarion
OpenWeather|Phases soleil|HeatzyV2|Concaténateur|HP Yamaha|SomfyV3|Epson|Seuils n étages|Baie 2 vantaux|Deezer|Intégrale|HTTP Auth. Digest|TV Philips|SmartThings|fonctions PHP|Tuya Smartlife|CozyTouch2|mySMS|TV Sony
dommarion
 
Messages : 630
Inscription : 28 Déc 2020

Re: sureflap chatière connectée

Messagepar gabvoir » 26 Avr 2024 15:36

Pour les personnes qui en on également ras le bol de devoir changer/recharger les piles, un petit tuto pour brancher la chatière au secteur :
https://fr.ifixit.com/Tutoriel/Remplace ... eur/171299
gabvoir
 
Messages : 184
Inscription : 24 Juin 2015

Re: sureflap chatière connectée

Messagepar leraystep95 » 26 Avr 2024 15:44

Pour ma part cela fait un moment que ma chatière est sur secteur... Mais toujours intéressant de voir une autre méthode ;)
leraystep95
 
Messages : 12
Inscription : 23 Avr 2023
Localisation : Val D'Oise

Re: sureflap chatière connectée

Messagepar leraystep95 » 06 Juin 2024 17:32

Bonsoir à tous,
L'application officiel va bientôt bénéficier d'un nouvel interface et je pense qu'ils en ont profité pour modifié de nouveau l'API en fonction...
J'ai un message d'erreur sur la batterie et je ne contrôle plus apparemment le verrouillage de la chatière à partir d'eedomus. :x
leraystep95
 
Messages : 12
Inscription : 23 Avr 2023
Localisation : Val D'Oise

Re: sureflap chatière connectée

Messagepar dommarion » 07 Juin 2024 07:55

Bonjour à tous,
Si vous voulez bien faire un point des éléments qui ne fonctionnent plus et peut être qq copies écrans de la page XML quand vous êtes en test.
Merci
bonne journée
dommarion
OpenWeather|Phases soleil|HeatzyV2|Concaténateur|HP Yamaha|SomfyV3|Epson|Seuils n étages|Baie 2 vantaux|Deezer|Intégrale|HTTP Auth. Digest|TV Philips|SmartThings|fonctions PHP|Tuya Smartlife|CozyTouch2|mySMS|TV Sony
dommarion
 
Messages : 630
Inscription : 28 Déc 2020

Re: sureflap chatière connectée

Messagepar gabvoir » 07 Juin 2024 08:23

Bonjour,
De mon côté tout semble encore fonctionnel :
Code : Tout sélectionner
<root><cached>1</cached><status>success!</status>
<Houses>
   <IDXXXXX>Maison</IDXXXXX>
</Houses>
<Devices>
   <IDXXXXX>
      <House>Maison</House>
      <Type>Hub</Type>
      <Name>Hub maison</Name>
      <Mac></Mac>
      <SN></SN>
      <Led>Off</Led>
   </IDXXXXX>
   <IDXXXXX>
      <House>Maison</House>
      <Type>Pet Door Connect</Type>
      <Name>Garage</Name>
      <Mac>XXXXXXXXXXXX</Mac>
      <SN></SN>
      <Battery>5.437</Battery>
      <Lock>None</Lock>
           <curfew1>Disabled</curfew1>
   </IDXXXXX>
</Devices>
<Pets>
   <IDXXXXX>
      <House>Maison</House>
      <Species>Chat</Species>
      <Name>Pikou</Name>
      <Location>Inside</Location>
      <LocationSince>2024-06-07T03:38:16+00:00</LocationSince>
   </IDXXXXX>
</Pets>
</root>
gabvoir
 
Messages : 184
Inscription : 24 Juin 2015

Re: sureflap chatière connectée

Messagepar leraystep95 » 07 Juin 2024 12:42

Désolé, c'est une fausse alerte ! Ça fonctionne de nouveau...

Code : Tout sélectionner
<root><cached>0</cached><status>success!</status>
<Houses>
   <ID000000>St-Px</ID000000>
</Houses>
<Devices>
   <ID000000>
      <House>St-Px</House>
      <Type>Hub</Type>
      <Name>Chatière</Name>
      <Mac>IJKLMNOP</Mac>
      <SN>H000-0000000</SN>
      <Led>Dim</Led>
   </ID000000>
   <ID000000>
      <House>St-Px</House>
      <Type>DualScan Cat Flap Connect</Type>
      <Name>Chatière</Name>
      <Mac>ABCDEFGH</Mac>
      <SN>N000-0000000</SN>
      <Battery>5.992</Battery>
      <Lock>None</Lock>
           <curfew1>Disabled</curfew1>
   </ID000000>
</Devices>
<Pets>
   <ID000000>
      <House>St-Px</House>
      <Species>Chatte</Species>
      <Name>Zoé</Name>
      <Location>Outside</Location>
      <LocationSince>2024-06-07T10:54:00+00:00</LocationSince>
   </ID000000>
   <ID000000>
      <House>Saint-Prix</House>
      <Species>Chat</Species>
      <Name> Cat 0113a972ba</Name>
      <Location>Inside</Location>
      <LocationSince>2024-06-06T18:17:00+00:00</LocationSince>
   </ID000000>
</Pets>
</root>
leraystep95
 
Messages : 12
Inscription : 23 Avr 2023
Localisation : Val D'Oise

Précédent

Retour vers Objets connectés

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 4 invité(s)