Comparer un compteur et son index

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Comparer un compteur et son index

Message par papoo »

Bonjour,
je test un damoclès 1208 en SNMP et j'ai fais un script sh pour remonter entre autre les compteurs
(test et explication ici)
j'aimerai améliorer mon script pour comparer le compteur avec l'index dans domoticz car après une coupure de courant le compteur repart à zéro (sur le damoclès)
mon script
DAMOCLES_IP="192.168.1.220" # IP Address damocles
PASSWORD="public" # SNMP Password
DOMO_IP="192.168.1.224" # Domoticz IP Address
DOMO_PORT="8080" # Domoticz Port

DAMOCLES_IDX="150" # DAMOCLES Switch IDX
DOMOTICZ_CPT_1_IDX="154" # IDX DOMOTICZ CPT 1
DOMOTICZ_CPT_2_IDX="155" # IDX DOMOTICZ CPT 2
DOMOTICZ_CPT_3_IDX="156" # IDX DOMOTICZ CPT 3
DOMOTICZ_CPT_4_IDX="197" # IDX DOMOTICZ CPT 4
DOMOTICZ_CPT_5_IDX="198" # IDX DOMOTICZ CPT 5
DOMOTICZ_CPT_6_IDX="199" # IDX DOMOTICZ CPT 6


DOMOTICZ_INT_1_IDX="157" # DOMOTICZ IDX interrupteur1
DAMOCLES_OUT_1_IDX="158" # DAMOCLES IDX Sortie1
#DOMOTICZ_INT_2_IDX="159" # DOMOTICZ IDX interrupteur2
#DAMOCLES_OUT_2_IDX="158" # DAMOCLES IDX Sortie2

# Contrôle si DAMOCLES est online

PINGTIME=`ping -c 1 -q $DAMOCLES_IP | awk -F"/" '{print $5}' | xargs`

OUT_1=`snmpget -c $PASSWORD -v1 -O qv $DAMOCLES_IP .1.3.6.1.4.1.21796.3.4.2.1.2.1` # Etat Sortie 1

IN_1=`snmpget -c $PASSWORD -v1 -O qv $DAMOCLES_IP .1.3.6.1.4.1.21796.3.4.1.1.6.1` # Etat Compteur 1
IN_2=`snmpget -c $PASSWORD -v1 -O qv $DAMOCLES_IP .1.3.6.1.4.1.21796.3.4.2.1.6.2` # Etat Compteur 2
IN_3=`snmpget -c $PASSWORD -v1 -O qv $DAMOCLES_IP .1.3.6.1.4.1.21796.3.4.2.1.6.3` # Etat Compteur 3
IN_4=`snmpget -c $PASSWORD -v1 -O qv $DAMOCLES_IP .1.3.6.1.4.1.21796.3.4.2.1.6.4` # Etat Compteur 4
IN_5=`snmpget -c $PASSWORD -v1 -O qv $DAMOCLES_IP .1.3.6.1.4.1.21796.3.4.2.1.6.5` # Etat Compteur 5
IN_6=`snmpget -c $PASSWORD -v1 -O qv $DAMOCLES_IP .1.3.6.1.4.1.21796.3.4.2.1.6.6` # Etat Compteur 6

IND_CPT_1=$(curl -s "http://$DOMO_IP:$DOMO_PORT/json.htm?type=devices&rid=$DOMOTICZ_CPT_1_IDX"| jq -r .result[].Counter) # Index Domoticz Compteur 1
IND_CPT_2=$(curl -s "http://$DOMO_IP:$DOMO_PORT/json.htm?type=devices&rid=$DOMOTICZ_CPT_2_IDX"| jq -r .result[].Counter) # Index Domoticz Compteur 2
IND_CPT_3=$(curl -s "http://$DOMO_IP:$DOMO_PORT/json.htm?type=devices&rid=$DOMOTICZ_CPT_3_IDX"| jq -r .result[].Counter) # Index Domoticz Compteur 3
IND_CPT_4=$(curl -s "http://$DOMO_IP:$DOMO_PORT/json.htm?type=devices&rid=$DOMOTICZ_CPT_4_IDX"| jq -r .result[].Counter) # Index Domoticz Compteur 4
IND_CPT_5=$(curl -s "http://$DOMO_IP:$DOMO_PORT/json.htm?type=devices&rid=$DOMOTICZ_CPT_5_IDX"| jq -r .result[].Counter) # Index Domoticz Compteur 5
IND_CPT_6=$(curl -s "http://$DOMO_IP:$DOMO_PORT/json.htm?type=devices&rid=$DOMOTICZ_CPT_6_IDX"| jq -r .result[].Counter) # Index Domoticz Compteur 6

INT_1=$(curl -s "http://$DOMO_IP:$DOMO_PORT/json.htm?type=devices&rid=$DOMOTICZ_INT_1_IDX"| jq -r .result[].Status)

echo $PINGTIME
if expr "$PINGTIME" '>' 0
then
echo "DAMOCLES ON"
# Envoi état damoclès
curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=switchlight&idx=$DAMOCLES_IDX&switchcmd=On"

# Index Compteur 1
CPT_1=`snmpget -c $PASSWORD -v1 -O qv $DAMOCLES_IP .1.3.6.1.4.1.21796.3.4.1.1.6.1`

# Envoi index Compteur 1 vers domoticz
curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=udevice&idx=$DOMOTICZ_CPT_1_IDX&nvalue=0&svalue=$CPT_1"

# Index Compteur 2 vers domoticz
CPT_2=`snmpget -c $PASSWORD -v1 -O qv $DAMOCLES_IP .1.3.6.1.4.1.21796.3.4.1.1.6.2`
# Send data
curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=udevice&idx=$DOMOTICZ_CPT_2_IDX&nvalue=0&svalue=$CPT_2"

# Index Compteur 3 vers domoticz
CPT_3=`snmpget -c $PASSWORD -v1 -O qv $DAMOCLES_IP .1.3.6.1.4.1.21796.3.4.1.1.6.3`
# Send data
curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=udevice&idx=$DOMOTICZ_CPT_3_IDX&nvalue=0&svalue=$CPT_3"

# comparaison état interrupteur domoticz et Sortie 1 en cas de coupure de courant
if [ $INT_1 = "On" ] && [ $OUT_1 = 0 ]
then
DAMOCLES_CMD_1=`snmpset -c $PASSWORD -v1 -O qv $DAMOCLES_IP .1.3.6.1.4.1.21796.3.4.2.1.2.1 i 1`
fi
else
echo "DAMOCLES OFF"

#Envoi état damoclès
curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=switchlight&idx=$DAMOCLES_IDX&switchcmd=Off"

fi
j'essai donc de convertir mes variables string en entier pour pouvoir les comparer :
le compteur d'eau comptabilisant en m3 je supprime m3 avec
IND_CPT_1=${IND_CPT_1:0:6} # supprime les unités du compteur 1
ensuite j'essai de transformer ma variable en entier avec un fonction trouvée sur le net et légèrement modifiée:
function string_to_int ()
{
LANG=C
d=${1##*.} # partie décimale
e=${1%.*} # partie entière
e=${e//,/}
printf %.3f "$e.$d" 2>/dev/null
}
CPT1=$(string_to_int $IND_CPT_1)

j'ai donc transformé ma variable $IND_CPT_1 qui est égale à 0.007 m3 en $CPT1 qui est égale à 0.007
mais j'ai pas l'impression que ma variable n'est toujours pas un entier car je ne peux pas multiplier le résultat par 1000 pour obtenir des litres, mon compteur lui comptant en litres et sa variable $IND_CPT_1 étant égale à 7(avant coupure de courant)
comment feriez vous pour comparer ces deux variables ?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Comparer un compteur et son index

Message par patrice »

Bonjour
A mon avis (mais je n'ai pas depioté le script) tu as une des 2 variables en string malgré ta fonction de conversion
ou sinon le 0 preliminaire est considere par le shell comme de l'octal

Pour la multiplication passe tes varaibles dans un pipe bc (echo $a * 1000 | bc) pour voir
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Comparer un compteur et son index

Message par papoo »

patrice a écrit :Bonjour
A mon avis (mais je n'ai pas depioté le script) tu as une des 2 variables en string malgré ta fonction de conversion
ou sinon le 0 preliminaire est considere par le shell comme de l'octal

Pour la multiplication passe tes varaibles dans un pipe bc (echo $a * 1000 | bc) pour voir
Je viens d'essayer avec la commande

Code : Tout sélectionner

IND_CPT_1=$(echo "$IND_CPT_1*1000" |bc)
cela fonctionne parfaitement
Merci patrice
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Répondre