
Tämä ohje kattaa EnergyHub-konfiguraatioiden automaattisen varmuuskopioinnin Google Driveen rclone-työkalulla.
Mitä varmuuskopioidaan
EnergyHubin tärkeimmät tiedostot ovat konfiguraatioita — ne ovat pieniä mutta korvaamattomia. Data (InfluxDB) kasvaa nopeasti ja voidaan jättää varmuuskopioinnin ulkopuolelle alkuvaiheessa — historiadata kertyy uudelleen ajan myötä, kun taas konfiguraatiot ja automaatiot ovat vaikeammin korvattavia.
| Kansio | Sisältö | Koko |
|---|---|---|
homeassistant/ | HA-konfiguraatio, packages, secrets | ~150 MB |
nodered/ | Node-RED flowt | ~6 MB |
mosquitto/config/ | MQTT-konfiguraatio | <1 MB |
grafana/data/ | Grafana-dashboardit | ~20 MB |
docker-compose.yml | Konttien konfiguraatio | <1 KB |
.storage sisällytetään oletuksena. Vaikka EnergyHub-konfiguraatio on pääosin YAML-pohjainen ja palautettavissa lähdekoodista, .storage-kansio sisältää HA:n entiteettirekisterin, laiterekisterin ja UI:n kautta tehdyt asetukset. Entiteettirekisterin menetys tarkoittaisi kaikkien vahvistettujen entity_id:iden (Shelly-releet, P1-mittari, Netatmo-anturit) uudelleenmäppäystä käsin — juuri se kallis oppi, jonka varmuuskopioinnilla halutaan välttää. Kansio jätetään pois vain jos sinulla on erityinen syy (esim. se halutaan rakentaa puhtaalta pöydältä uudelleen).
rclone-asennus
bash
curl https://rclone.org/install.sh | sudo bash
Tämä on rclonen virallinen asennusskripti, mutta
curl | sudo bashajaa ladatun skriptin suoraan root-oikeuksilla. Jos haluat tarkistaa skriptin ennen ajoa tai välttää pipe-bash-kuvion, voit käyttää paketinhallintaa:sudo apt install rclone. Paketinhallinnan versio voi olla hieman vanhempi mutta on jakelun allekirjoittama.
Google Drive -konfiguraatio
bash
rclone config
Vastaa kysymyksiin:
n— uusi remote- Nimi:
gdrive - Storage:
drive(Google Drive, numero listasta) - Client id: tyhjä (Enter)
- Client secret: tyhjä (Enter)
- Scope:
1(full access) - Root folder: tyhjä
- Service account: tyhjä
- Advanced:
n - Auto config:
n— koska palvelimella ei ole selainta
Kohdassa 10 tulostetaan komento joka ajetaan toisella koneella jossa on selain:
rclone authorize "drive" "eyJ..."
Aja tämä Windows/Mac-koneella (rclone asennettuna) → selain avautuu → kirjaudu Google-tilille → kopioi token takaisin palvelimen terminaaliin.
Testaa yhteys:
bash
rclone lsd gdrive:
Huomio: Google Drive suojaa levyvioilta ja palvelinvioilta, mutta ei yksinään korvaa hyvää varmuuskopiointistrategiaa. Tärkeille järjestelmille suositellaan vähintään kahta kopiota eri sijainneissa.
Varmuuskopiointiskripti
Korvaa polku /home/xxxx/energyhub/ omalla asennuspolullasi, jos se eroaa.
bash
cat > /home/xxxx/backup_energyhub.sh << 'EOF'
#!/bin/bash
set -euo pipefail
DATE=$(date +%Y-%m-%d)
BASE=/home/xxxx/energyhub
BACKUP_DIR="/tmp/energyhub_backup_$DATE"
mkdir -p "$BACKUP_DIR"
# Konfiguraatiotiedostot
cp "$BASE/docker-compose.yml" "$BACKUP_DIR/"
# Home Assistant — .storage MUKANA, vain lokit ja tietokanta pois
tar -czf "$BACKUP_DIR/homeassistant.tar.gz" \
-C "$BASE" \
--exclude='homeassistant/home-assistant.log*' \
--exclude='homeassistant/home-assistant_v2.db*' \
homeassistant
tar -czf "$BACKUP_DIR/nodered.tar.gz" \
-C "$BASE" nodered
tar -czf "$BACKUP_DIR/mosquitto.tar.gz" \
-C "$BASE" mosquitto/config
# Grafana-data on UID 472:n omistama — tar tarvitsee sudon.
# Asetetaan arkiston omistus takaisin käyttäjälle, jotta rm ja rclone toimivat ilman sudoa.
sudo tar -czf "$BACKUP_DIR/grafana.tar.gz" \
-C "$BASE" grafana/data
sudo chown "$(id -u):$(id -g)" "$BACKUP_DIR/grafana.tar.gz"
# Lähetä Google Driveen — poista vanhat kopiot VAIN jos sync onnistui
if rclone sync "$BACKUP_DIR" "gdrive:energyhub-backup/$DATE/" --log-level INFO; then
echo "Sync onnistui: $DATE"
rclone delete gdrive:energyhub-backup --min-age 30d
rclone rmdirs gdrive:energyhub-backup --leave-root
else
echo "VAROITUS: sync epäonnistui — vanhoja kopioita EI poistettu"
rm -rf "$BACKUP_DIR"
exit 1
fi
# Siivoa paikallinen temp
rm -rf "$BACKUP_DIR"
echo "Varmuuskopiointi valmis: $DATE"
EOF
chmod +x /home/xxxx/backup_energyhub.sh
Skriptin keskeiset turvaominaisuudet:
set -euo pipefail — skripti pysähtyy heti virheeseen, määrittelemättömään muuttujaan tai putken epäonnistumiseen. Yksikään vaihe ei jatka hiljaa virheen jälkeen.
Poisto vain onnistuneen synkronoinnin jälkeen — jos rclone sync epäonnistuu (Drive-kiintiö täynnä, verkkokatkos), vanhoja varmuuskopioita ei poisteta. Tämä on sama periaate kuin deployment-skriptien sys.exit(1)-turvatarkistuksissa: tuhoavaan operaatioon ei edetä jos edellinen vaihe epäonnistui.
Grafana-arkiston omistus palautetaan käyttäjälle heti sudo tar:n jälkeen, jotta myöhempi rm ja rclone toimivat ilman root-oikeuksia.
Testaa manuaalisesti:
bash
/home/xxxx/backup_energyhub.sh
Automaattinen ajastus — cron
Ajastetaan varmuuskopio joka yö klo 3:00:
bash
(crontab -l 2>/dev/null; echo "0 3 * * * /home/käyttäjä/backup_energyhub.sh >> /home/käyttäjä/backup.log 2>&1") | crontab -
Tarkista ajastus:
bash
crontab -l
Lokin tarkistus:
bash
cat /home/xxxx/backup.log
Cron ja sudo: skripti käyttää
sudo tar:ia Grafana-kansiolle. Jotta cron-ajo ei jää odottamaan salasanaa, lisää käyttäjälle NOPASSWD-oikeus juuri tähän komentoonsudoers-tiedostoon (visudo), tai aja koko varmuuskopiointi root-cronista. Vaihtoehtoisesti, jos Grafana-tiedostot ovat luettavissa käyttäjän ryhmälle,sudovoidaan poistaa kokonaan.
Palautus
Jos konfiguraatio pitää palauttaa:
bash
# Lataa haluttu varmuuskopio (vaihda päivämäärä)
rclone copy gdrive:energyhub-backup/2026-06-02/ /tmp/restore/
# Pura
cd /tmp/restore
tar -xzf homeassistant.tar.gz -C /home/xxxx/energyhub
tar -xzf nodered.tar.gz -C /home/xxxx/energyhub
sudo tar -xzf grafana.tar.gz -C /home/xxxx/energyhub
# Palauta Grafana-datan omistus kontille
sudo chown -R 472:472 /home/xxxx/energyhub/grafana/data
# Käynnistä uudelleen
cd /home/xxxx/energyhub
docker compose restart
Turvallisuushuomio
Home Assistantin secrets.yaml sisältyy varmuuskopioon — se sisältää API-avaimet, salasanat ja tokeneja. Myös .storage voi sisältää arkaluonteisia tunnisteita. Google Drive -tilin suojaus on siksi erityisen tärkeää: käytä vahvaa salasanaa ja aktivoi kaksivaiheinen tunnistautuminen. Harkitse arkistojen salausta (esim. rclonen crypt-remote) jos Drive-tili on jaettu tai sen suojaukseen ei voi täysin luottaa.
Säilytysaika
Skripti säilyttää varmuuskopioita 30 päivää (--min-age 30d). Konfiguraatioille tämä on perusteltua — ne muuttuvat usein, eikä kuukautta vanhempi snapshot yleensä ole tarpeen. Jos haluat pidemmän historian, voit säilyttää erikseen esimerkiksi kuukausittaisen snapshotin omaan kansioonsa, jota retention-poisto ei kosketa. Huomaa että tämä eroaa InfluxDB-datan suosituksesta (1–2 vuotta) — siellä kyse on mittaushistoriasta, tässä konfiguraatioista.
Yleisimmät ongelmat
rclone: Permission denied (grafana) Grafana-kansio on UID 472:n omistama — skripti käyttää sudo tar:ia ja palauttaa arkiston omistuksen käyttäjälle. Varmista että cron-ajossa sudo toimii ilman salasanaa (ks. cron ja sudo yllä).
rclone authorize ei avaa selainta palvelimella Normaalia — aja rclone authorize toisella koneella jossa on selain. Kopioi token takaisin SSH-sessioon.
Cron ei aja skriptiä Tarkista että skriptissä on suoritusoikeus (chmod +x) ja että polku on absoluuttinen. Tarkista myös backup.log virheiden varalta.
Sync poistaa kopioita vaikka uutta ei syntynyt Ei pitäisi enää tapahtua — poisto on ehdollistettu sync-komennon onnistumiselle. Jos näin käy, tarkista että set -euo pipefail ja if rclone sync ... -rakenne ovat ennallaan.