Page 1 sur 1

[BASH] Script tarif horaire fournisseur Elec'

Publié : 21 févr. 2025, 18:20
par Guigui
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
  • 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
Points forts
  • 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.
Utilisation
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.1740

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

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