Je partage ce script qui vous permet d'obtenir rapidement et facilement le prix du kWh en fonction de votre contrat et de l'heure.
Fonctionnalités principales
- Compatible avec les contrats TEMPO, BASE et HPHC (Heures Pleines/Heures Creuses)
- Intégration de l'API Tempo pour obtenir la couleur du jour en temps réel
- Prise en compte des jours fériés pour le contrat TEMPO
- Gestion des plages horaires personnalisables pour le contrat HPHC
- Utilisation simple en ligne de commande
- API Tempo intégrée : Le script fait un appel à l'API officielle pour récupérer la couleur du jour Tempo. Plus besoin de mettre à jour manuellement !
- Flexibilité : Vous pouvez obtenir le tarif pour l'instant présent ou pour une heure spécifique.
- Facilement intégrable : Le format de sortie simple permet une intégration facile dans vos systèmes domotiques existants.
bash ./nom_du_script.sh <CONTRAT> <HEURE>
CONTRAT : TEMPO, BASE ou HPHC
HEURE : 'now' pour l'heure actuelle, ou au format HH:MM ou HHhMM
Exemple :
bash tarif_elec.sh HPHC 23:10
Code : Tout sélectionner
CONTRAT:HPHC
HC:0.1740Avant d'utiliser le script, assurez-vous de :
- Mettre à jour les tarifs dans les constantes au début du script selon votre contrat actuel.
- Ajuster les plages horaires HPHC (variable PLAGES_HC_HPHC) en fonction de votre configuration spécifique.
N'hésitez pas si vous avez des questions, et bonne exploitation
Code : Tout sélectionner
#!/bin/bash
# Constantes pour les tarifs (en euros par kWh)
TEMPO_BLEU_HC=0.1288
TEMPO_BLEU_HP=0.1552
TEMPO_BLANC_HC=0.1445
TEMPO_BLANC_HP=0.1849
TEMPO_ROUGE_HC=0.1616
TEMPO_ROUGE_HP=0.7324
BASE=0.2062
HPHC_HC=0.1740
HPHC_HP=0.2140
# Plages horaires HPHC (format: "DEBUT1-FIN1;DEBUT2-FIN2;...")
PLAGES_HC_HPHC="02:00-06:30;14:30-16:00;21:30-23:30"
# Fonction pour vérifier si une date est un jour férié
est_jour_ferie() {
local date_check=$(date -d "$1" +%Y-%m-%d)
local annee=$(date -d "$date_check" +%Y)
local jours_feries=(
"$annee-01-01" "$annee-05-01" "$annee-05-08" "$annee-07-14"
"$annee-08-15" "$annee-11-01" "$annee-11-11" "$annee-12-25"
)
for jour in "${jours_feries[@]}"; do
if [ "$date_check" = "$jour" ]; then
return 0
fi
done
return 1
}
# Fonction pour obtenir la couleur Tempo du jour
get_tempo_color() {
local color=$(curl -s -X 'GET' 'https://www.api-couleur-tempo.fr/api/jourTempo/today' -H 'accept: application/json' | jq -r '.codeJour')
case "$couleur" in
1) echo "bleu" ;;
2) echo "blanc" ;;
3) echo "rouge" ;;
*) echo "inconnu" ;; # Pour gérer le cas où codeJour est 0 ou autre
esac
}
# Fonction pour déterminer si c'est l'heure creuse pour Tempo
est_heure_creuse_tempo() {
local heure=$(date -d "$1" +%H%M)
if [ $heure -ge 2200 ] || [ $heure -lt 0600 ]; then
return 0
else
return 1
fi
}
# Fonction pour déterminer si c'est l'heure creuse pour HPHC
est_heure_creuse_hphc() {
local heure_check=$(date -d "$1" +%H:%M)
IFS=';' read -ra plages <<< "$PLAGES_HC_HPHC"
for plage in "${plages[@]}"; do
IFS='-' read debut fin <<< "$plage"
if [[ "$heure_check" > "$debut" && "$heure_check" < "$fin" ]]; then
return 0
fi
done
return 1
}
# Fonction principale
main() {
local contrat=$1
local time_arg=$2
local date_time
if [ "$time_arg" = "now" ]; then
date_time=$(date +"%Y-%m-%d %H:%M")
else
time_arg=$(echo $time_arg | sed 's/h/:/g')
date_time=$(date -d "$(date +%Y-%m-%d) $time_arg" +"%Y-%m-%d %H:%M" 2>/dev/null)
if [ $? -ne 0 ]; then
echo "Format d'heure invalide. Utilisez HH:MM ou HHhMM."
exit 1
fi
fi
echo "CONTRAT:$contrat"
case $contrat in
TEMPO)
local color=$(get_tempo_color)
if est_jour_ferie "$date_time"; then
color="bleu"
fi
if est_heure_creuse_tempo "$date_time"; then
case $color in
bleu) echo "HC_BLEU:$TEMPO_BLEU_HC" ;;
blanc) echo "HC_BLANC:$TEMPO_BLANC_HC" ;;
rouge) echo "HC_ROUGE:$TEMPO_ROUGE_HC" ;;
esac
else
case $color in
bleu) echo "HP_BLEU:$TEMPO_BLEU_HP" ;;
blanc) echo "HP_BLANC:$TEMPO_BLANC_HP" ;;
rouge) echo "HP_ROUGE:$TEMPO_ROUGE_HP" ;;
esac
fi
;;
BASE)
echo "BASE:$BASE"
;;
HPHC)
if est_heure_creuse_hphc "$date_time"; then
echo "HC:$HPHC_HC"
else
echo "HP:$HPHC_HP"
fi
;;
*)
echo "Contrat non reconnu. Utilisez TEMPO, BASE ou HPHC."
exit 1
;;
esac
}
# Vérification des arguments
if [ $# -lt 2 ]; then
echo "Usage: $0 <CONTRAT> <HEURE>"
echo "CONTRAT: TEMPO, BASE, ou HPHC"
echo "HEURE: 'now' ou au format HH:MM ou HHhMM"
exit 1
fi
main "$@"
exit 0