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);
}
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);
}
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