Sähkönkulutuksen ohjaus

Tekninen määrittely

Raspberry Pi

Laitteisto

Ohjauslaitteen alustana on Raspberry Pi 2 Model B V1.1. Ohjelman pitäisi olla yhteensopiva myös Raspberry Pi:n uudempien versioiden kanssa. (Ei ole testattu.)

Vanhempiin, 26-pinnisellä GPIO-liittimellä varustettuihin, Raspberry Pi-versioihin asennettaessa ainakin ohjelman lähtöpinnimäärittelyt pitää tarkistaa.

Käyttöjärjestelmä

Ohjauslaitteen käyttöjärjestelmäksi asennetaan Raspberry Pi OS Lite 32-bit. Sen asentaminen microSD-kortille onnistuu helpoiten ohjelmalla Raspberry Pi Imager.

Raspberry Pi Imager-ohjelman valinnat asennuksessa:

  • Operating system:
    • Raspberry Pi OS (other)
      • Raspberry Pi OS Lite (32 bit)
  • Storage: (SD-kortti)
  • Advanced options (Ratas)
    • X Enable SSH
      • X Use password authentication
    • X Set username and password
      • Username: [Raspberrylle tuleva käyttäjätunnus]
      • Password: [Raspberrylle tuleva salasana]
    • Configure wireless LAN (tarvittessa)
      • SSID: [Verkon nimi]
      • Password: [Verkon salasana]
      • Wireless LAN country: FI
    • X Set locale settings
      • Time zone: Europe, Helsinki
      • (Keyboard layout: fi)
    • Save
  • Write

RAM-levy

SD-kortin säästämiseksi tehdään pieni RAM-levy usein muuttuvia ja väliaikaisia tiedostoja varten. Otetaan SSH-yhteys Raspberryyn.

ssh -l [user] [IP-osoite]

Tehdään työhakemistoon (kotihakemistoon) alihakemisto temp.

cd
mkdir temp

Määritetään tehty hakemisto RAM-levyksi, jonka koko on 10MB. Määritys lisätään tiedostoon /etc/fstab, että RAM-levy tehdään automaattisesti käynnistyksessä. Otetaan tiedosto /etc/fstab muokattavaksi.

sudo nano /etc/fstab

Lisätään tiedostoon rivi:

tmpfs /home/[user]/temp tmpfs defaults,size=10M 0 0

Tallennetaan muutokset.

Cntr-x, Y, Enter

Uudelleenkäynnistetään Raspberry, jolloin tehdyt muutokset tulevat voimaan.

sudo shutdown -r now

Ohjelma

Ohjauslaitteen ohjelma koostuu kahdesta päämoduulista:

  • Ohjausohjelma, joka tehdään C++:lla ja
  • web-käyttöliittymä, joka tehdään Python Flaskilla.

Ohjausohjelma

Ohjausohjelmassa on kaksi toimintatilaa: käynnissä ja pysähdyksissä.

Käynnissä-toiminta:

  • Lukee sähkön hintatiedot API-rajapinnasta (https://porssisahko.net/),
  • tallentaa sähkön hintatiedot historiatiedoksi,
  • ohjaa lähtöjä asetusarvojen ja sähkön hinnan mukaan sekä
  • "syöttää" vahtikoiraa 5s välein.
Pysähdyksissä-toiminta:
  • "Syöttää" vahtikoiraa 5s välein.

Web-käyttöliittymä

Web-käyttöliittymässä on kolme sivua:

  • Ohjauksen toiminnan seuranta,
  • ohjelman tilan ja asetusten muuttaminen sekä
  • tietojen näyttö.

Tiedonvälitys

Tiedonvälitykseen ohjausohjelman ja käyttöliittymän välillä käytetään levyjärjestelmän tiedostoja:

  • Ohjauksen asetukset (settings.json)
    • Käynnistyksessä ohjausohjelma lukee asetukset tiedostosta ja ohjaa lähtöjen tilaa niiden mukaan.
    • Käyttöliittymän "Asetusten muutos"-sivulla voidaan muuttaa asetuksia. Käyttöliittymä lukee ensin vanhat asetukset tiedostosta ja täyttää ne oletusarvoiksi taulukkoon, jossa niitä voidaan muuttaa. Muutetut arvot tallennetaan tiedostoon, jonka jälkeen työhakemistoon kirjoitetaan tiedosto "update". Kun ohjausohjelma löytää työhakemistosta tiedoston "update", se lukee muuttuneet asetukset ohjelmaan ja poistaa "update"-tiedoston.
  • Ohjauksen lähdöt (./temp/outputs.json)
    • Ohjausohjelma kirjoittaa lähtöjen tilan tiedostoon.
    • Käyttöliittymä lukee lähtöjen tilan tiedostosta ja näyttää ne samassa tilanäytön taulukossa voimassa olevien asetusarvojen kanssa.
  • Ohjauksen tila (./temp/controlOn)
    • Ohjausohjelma kirjoittaa tiedoston, kun ohjaus on käynnissä ja poistaa sen, kun ohjaus on pysähdyksissä.
    • Käyttöliittymä näyttää ohjauksen tilan tilanäytöllä ja "Asetusten muutos"-näytöllä.
      "Asetusten muutos"-näytön napilla voidaan ohjaus käynnistää / pysäyttää. Valinnan mukaan käyttöliittymä kirjoittaa työhakemistoon joko tiedoston "start" tai "stop". Kun ohjausohjelma löytää työhakemistosta em. tiedoston, se toteuttaa toiminnon ja poistaa tiedoston.
  • Lokitiedosto (log.txt)
    • Ohjausohjelma kirjoittaa lokitiedostoa.
    • Käyttöliittymän tilanäytössä näkyy lokitiedosto järjestyksessä, jossa uusimmat tapahtumat ovat ylimpänä.

Web-palvelin

HTTP-palvelimena käytetään Gunicorn'ia, joka on Python WSGI-palvelin. Käyttö on kevyttä ja toimii vain paikallisessa verkossa, joten yleensä Gunicorn'in kaverina olevaa Nginx-palvelinta ei tarvita verkon suuntaan.
Palvelin kuuntelee porttia 8000, eikä normaalia http-porttia 80. Tästä syystä selaimen IP-osoitteen loppuun on kirjoitettava ":8000".

Web-käyttöliittymä tarvitsee Python Flask-laajennuksen ja gunicorn-palvelimen.

sudo apt-get install -y python3-flask gunicorn

Apuohjelmat

  • Ohjelmien käynnistys: startup.sh
  • Lokitiedoston lyhennys: logcut.sh

Aputoimintojen automatisointi

Aputoiminnot voidaan ajastaa toimimaan automaattisesti lisäämällä niiden komentorivit crontab'iin.

Ohjelmien automaattikäynnistys Raspberry'n (uudelleen)käynnistyksessä.
Otetaan crontab muokattavaksi:

crontab -e
Lisätään sinne rivi:
@reboot sleep 60 && /home/[workdir]/startup.sh
Tallennetaan muutokset:
cntr-x, y, [enter]

Lokitiedoston lyhennys (kerran viikossa).
Lisätään crontab'iin rivi:

30 00 * * 1 /home/[workdir]/logcut.sh