[BASH] Script tarif horaire fournisseur Elec'
Publié : 21 févr. 2025, 18:20
Salut à tous !
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
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
Avant 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
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