#!/bin/bash hexa(){ #Fonction qui converti l'hexa en Décimal a=10 b=11 c=12 d=13 e=14 f=15 bit0=${1:3:1} bit1=${1:2:1} bit2=${1:1:1} bit3=${1:0:1} decimal=$(($bit0+($bit1*16)+($bit2*(16**2))+($bit3*(16**3)))) } decoup(){ #Fonction qui découpe un mot écrit en little endian en big endian mot=$1 MSB=${mot:2:2} LSB=${mot:0:2} mot=$MSB$LSB } temperature(){ #Transforme un mot ecrit en big endian en valeur lisible par un utilisateur # (Température en degrès) temp=$(echo "scale=2;$decimal*175.72"|bc) temp=$(echo "scale=2;$temp/65536"|bc) temp=$(echo "scale=2;$temp-46.85"|bc) } hygrometrie(){ #Transforme un mot ecrit en big endian en valeur lisible par un utilisateur # (Hygrometrie en pourcentage) RH=$(echo "scale=2;$decimal*125"|bc) RH=$(echo "scale=2;$RH/65536"|bc) RH=$(echo "scale=2;$RH-6"|bc) } #Récupère les valeurs d'une liaison i2c(comande i2cdump option w pour avoir des mots) tp=$(i2cdump -y -f 1 0x40 w|grep ^e0:) #grep permet de récupérer la ligne qui nous interesse tp=${tp:18:5} #Découpe la ligne pour avoir les valeur qui nous interresse decoup $tp #on applique la fonction decoup avec en parametre le mots ecrit en little endian hexa $mot #Convertie le mot ecrit en big endian en decimal temperature #aplique les calculs pour avoir une valeur en degrès #--------------------------------------------------------------------- # même étapes mais pour l'humidité hygro=$(i2cdump -y -f 1 0x40 w|grep ^e0:) hygro=${hygro:28:5} decoup $hygro hexa $mot hygrometrie if [ $temp == -46.85 ] #Condition Pour corriger les problèmes électronique then hygro=$(i2cdump -y -f 1 0x40 w|grep ^e0:) hygro=${hygro:28:5} decoup $hygro hexa $mot hygrometrie #------------------------------------------------------------------------------------------------------ tp=$(i2cdump -y -f 1 0x40 w|grep ^e0:) #grep permet de récupérer la ligne qui nous interesse tp=${tp:18:5} #Découpe la ligne pour avoir les valeur qui nous interresse decoup $tp #on applique la fonction decoup avec en parametre le mots ecrit en little endian hexa $mot #Convertie le mot ecrit en big endian en decimal temperature echo "$temp:$RH" #On renvoie en sortie du script les valeur en premier la température en second l'hygrometrie else echo "$temp:$RH" fi