sigfox support
sigfox slack community
  • Spaces
    • SIGFOX Ready Certification
    • Sens'it
    • Help
    • Sigfox Radio Specifications
    • Tutorial
    • Topics
    • Questions
  • Sign in
  • Home /
  • Help /
avatar image
Question by benoitpw · Jan 31 at 10:16 AM · phpdecodedecoderdata decoding

Probleme with the function for decode data in php

Bonjour,

j'ai fait une fonction pour décoder les data en retour d'api. Pour les coordonnées GPS je n'ai pas toujours des coordonnées correct. Voici mon code en php avez vous une idée ou une lib pour faire ce travaille correctement ?

Hello,

I did a function to decode the data back from API. For GPS coordinates I do not always have correct coordinates. Here is my code in php do you have an idea or a lib to do this works correctly ?

function convertGPS($degres , $minutes , $secondes ){
    return $degres + ($minutes / 60) + ( $secondes / 60 )  ;
 }
function decode($code){ $result = array(); if(strlen($code) == 24){ $s1 = substr($code, 2 , 4 ); if($s1 == '0101' ){

         $result['type'] = 'GPS';
         $code = substr($code, 6 );
         $s2 = substr($code, 0 , 1 );
         if($s2 == '0'){
             $result['precision'] = 'XYZ SV HDOP';
             $code = substr($code, 1 );
             $s3 = substr($code, 0 , 12 );
             $s3 = hexdec($s3) / 10000000 ;
             $s3 = explode('.',$s3);
             $s3[0] = $s3[0] / 1000000 ;
             $s3[1] = $s3[1] / 1000 ;
             $s3[0] = convertGPS( substr($s3[0], 0 , 1 )  , substr($s3[0], 1 , 2 ) , ( substr($s3[0], 3 , 4 ) * 1 )  ) ;
             $s3[1] = convertGPS( substr($s3[1], 0 , 2 )  , substr($s3[1], 2 , 3 ) , ( substr($s3[1], 4 , 4 ) * 1 )  ) ;
             $result['longitude'] = $s3[0] / 100 ;
             $result['latitude'] = $s3[1] ;
             $code = substr($code, 12 );
             $s4 = substr($code, 0 , 3 );
             $result['altitude'] = hexdec($s4) * 2 ;
            
             $code = base_convert( 11 , 16 , 2);
             $code = sprintf("%08d", $code); 
             $s5 = substr($code, 0 , 1 );
             if($s5 == 1 ) $result['longitude'] * -1 ;
             $s6 = substr($code, 1 , 1 );
             if($s6 == 1 ) $result['latitude'] * -1 ;
             $s7 = substr($code, 2 , 1 );
             if($s7 == 1 ) $result['altitude'] * -1 ;
             $s8 = substr($code, 3 , 4 );
             $result['nbsSat'] = base_convert( $s8 , 2 , 10);
             $s9 = substr($code, 7 , 1 );
             $result['qualite'] = base_convert( $s9 , 2 , 10);
         }
     }else if( $s1 == '010102'){
       $result['type'] = 'MESSAGE';
       $code = substr($code, 6 );
       $result['message'] = pack('H*', $code);
     }
   
 }else if(strlen($code) == 22){
   $result['type'] = 'MESSAGE';
   $code = substr($code, 6 );
   $result['message'] = pack('H*', $code);
   if($result['message'] == 'DebutMES'){
     $result['type'] = 'VGP';
   }else if( substr($result['message'], 0 , 2 ) ==  '#S'){
     $indice = substr($result['message'], 2 );
     $indice = substr($indice, 0 , -1 );
     $result['type'] = 'TENSION';
     $result['mV'] = $indice ;
     if($indice < 2607 ){
       $result['Seuil'] = 'critique';
     }else if($indice < 3229  ){
       $result['Seuil'] = 'bas';
     }else{
       $result['Seuil'] = 'normal';
     }

   }
 }else if( strlen($code) == 8  ){
   $result['type'] = 'UTILISATION';
   $result['message'] = hexdec($code) ;
   $result['nbHeure'] = hexdec($code) ;
 }
  return($result);

}

Comment

People who like this

0 Show 0
100 |1010 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

  • Sort: 
avatar image

Answer by benoitpw · Jan 31 at 01:28 PM

J'ai trouvé !!!!

function convertGPS($degres , $minutes , $secondes ){
    return $degres + ($minutes / 60) + ( ( $secondes / 16.666667 ) / 3600 )  ;
 }
function decode($code){ $result = array(); $result['data'] = $code ; if(strlen($code) == 24){ $s1 = substr($code, 2 , 4 ); if($s1 == '0101' ){

         $result['type'] = 'GPS';
         $code = substr($code, 6 );
         $s2 = substr($code, 0 , 1 );
         if($s2 == '0'){
             $result['precision'] = 'XYZ SV HDOP';
             $code = substr($code, 1 );
             $s3 = substr($code, 0 , 12 );
             $s3 = hexdec($s3) / 10000000 ; // 10 000 000
             $s3 = explode('.',$s3);
             $s3[0] = sprintf("%06d", $s3[0] ) ;
             $s3[1] = sprintf("%06d", $s3[1] ) ;

             $s3[0] = $s3[0] / 1000 ;
             $s3[1] = $s3[1] / 1000 ;

             $temp1 = (int)$s3[0] ;
             $s = $s3[0] - $temp1 ;
             $temp1 = $temp1 / 100;
             $deg = (int) $temp1 ;
             $m = $temp1 - $deg ;
             $m = $m * 100;
             $s = $s * 1000;

             $s3[0] = convertGPS( $deg  ,$m , $s  ) ;

             $temp1 = (int)$s3[1] ;
             $s = $s3[1] - $temp1 ;
             $temp1 = $temp1 / 100;
             $deg = (int) $temp1 ;
             $m = $temp1 - $deg ;
             $m = $m * 100;
             $s = $s * 1000;

             $s3[1] = convertGPS( $deg  ,$m , $s  ) ;

             $result['longitude'] = $s3[0] ;

             $result['latitude'] = $s3[1] ;
             $code = substr($code, 12 );
             $s4 = substr($code, 0 , 3 );
             $result['altitude'] = hexdec($s4) * 2 ;
            
             $code = base_convert( 11 , 16 , 2);
             $code = sprintf("%08d", $code); 
             $s5 = substr($code, 0 , 1 );
             if($s5 == 1 )$result['longitude'] =  $result['longitude'] * -1 ;
             $s6 = substr($code, 1 , 1 );
             if($s6 == 1 ) $result['latitude'] = $result['latitude'] * -1 ;
             $s7 = substr($code, 2 , 1 );
             if($s7 == 1 ) $result['altitude'] = $result['altitude'] * -1 ;
             $s8 = substr($code, 3 , 4 );
             $result['nbsSat'] = base_convert( $s8 , 2 , 10);
             $s9 = substr($code, 7 , 1 );
             $result['qualite'] = base_convert( $s9 , 2 , 10);
         }
     }else if( $s1 == '010102'){
       $result['type'] = 'MESSAGE';
       $code = substr($code, 6 );
       $result['message'] = pack('H*', $code);
     }
   
 }else if(strlen($code) == 22){
   $result['type'] = 'MESSAGE';
   $code = substr($code, 6 );
   $result['message'] = pack('H*', $code);
   if($result['message'] == 'DebutMES'){
     $result['type'] = 'VGP';
   }else if( substr($result['message'], 0 , 2 ) ==  '#S'){
     $indice = substr($result['message'], 2 );
     $indice = substr($indice, 0 , -1 );
     $result['type'] = 'TENSION';
     $result['mV'] = $indice ;
     if($indice < 2607 ){
       $result['Seuil'] = 'critique';
     }else if($indice < 3229  ){
       $result['Seuil'] = 'bas';
     }else{
       $result['Seuil'] = 'normal';
     }

   }
 }else if( strlen($code) == 8  ){
   $result['type'] = 'UTILISATION';
   $result['message'] = hexdec($code) ;
   $result['nbHeure'] = hexdec($code) ;
 }

  return($result);

}

Comment

People who like this

0 Show 0 · Share
100 |1010 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Follow this Question

Answers Answers and Comments

3 People are following this question.

avatar image avatar image avatar image

Related Questions

Best way to receive binary data in callback from Sigfox backend? 1 Answer

Downlink Payload configuration problems 1 Answer

Callback successfully but URL(PHP) didnt receive the message 2 Answers

url query not fetching data from sigfox callback : Undefined index error 3 Answers

¿Alguien tiene código php para convertir los datos de ubicación hexadecimal a flotante? 0 Answers

  • About
  • Terms & Condition
  • Privacy
  • Answerhub FAQ


Enterprise
Social Q&A

  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • SIGFOX Ready Certification
  • Sens'it
  • Help
  • Sigfox Radio Specifications
  • Tutorial
  • Explore
  • Topics
  • Questions