#!/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
