Spis treści:
- Dla kogo dedykowany jest projekt
- Jak działa i z czego się składa projekt
- Instalacja systemu
- Demonstracja działającego systemu
Dla kogo dedykowany jest projekt.
Projekt przeznaczony jest dla osób posiadających w mieszkaniu elektryczne grzejniki konwektorowe do ogrzewania mieszkania i które chaciałyby w ciekawy sposób sterować nimi. Pozwala ograniczyć rachunki za energie elektryczną przez automatyczne wyłączenie grzejników w nocy lub w czasie wyjścia do pracy domowników w pomieszczeniach które nie są użytkowane.System monitoruje temperature w mieszkaniu, także nie jest to system typu wyłącz grzejnik o określonej porze, tylko pozwala utrzymać niższą zadaną temperature wtedy, gdy nie jesteśmy w domu, bądź śpimy. Także jeśli ktoś lubi mieć w miarę stałą temperature w mieszkaniu to jest to projekt dla niego.
Jak działa i z czego się składa projekt.
System składa się z następujących elementów:- termometrów Wi-Fi takich jak te;
- lub termometrów DS18B20 podpiętych do Raspberry PI. Przykład;
- smartplugów Tuya (muszą być obsługiwane przez aplikację Tinytuya w Python) lub TP LINK HS110 lub Edimax SP 1101w, na każdy termometr Wi-Fi przypada jeden smarplug;
- aplikacji Smarttemp odpalanej z Crona co minute, która odczytuje z termometrów wartości temperatur i w zależności od zdefiniowanego harmonogramu, włącza lub wyłącza grzejnik i zapisuje w bazie temerature jak i stan grzejników;
- aplikacji php do prezentacji zapisanych w bazie temperatur i ustawiania zadanych temperatur dla aplikacji Smarttemp;
- bazy danych Mariadb do przechowywania aktualnych temperatur, historycznych jak i harmonogramów.
Cały system działa na systemie operacyjnym Linux, preferowaną dystrybucją jest Debian lub jego klony. U mnie system działa na Debianie Bookworm.
Instalacja systemu.
Oto seria komend dla systemu Debian Bookworm tuż po instalacji, tzn po zainstalowaniu z obrazu netinst. Wszystkie komendy należy wykonać w konsoli terminala na maszynie gdzie będzie zainstalowany Cyfrowy Kontroler Temperatur.su -
Po tej komendzie należy podać hasło użytkownika root, które wybraliśmy przy instalacji systemu
apt-get install net-tools mc
apt-get install git gcc g++ mariadb-server libmicrohttpd-dev apache2 libxml2-dev
apt-get install libjson-c-dev python3-dev libapache2-mod-php8.2 php8.2 php8.2-mysql php8.2-xml
ap-get install libmariadb-dev make libcurl4-openssl-dev libconfuse-dev libboost-dev python3-pip curl
To Były komendy, które instalują niezbędne zależności do działania systemu
mkdir ROBOCZY
Polecenie tworzy katalog ROBOCZY w katalogu /root/
cd ROBOCZY
Zmieniamy katalog beżący na ROBOCZY
git clone https://github.com/kalamlacki/smarttemp.git
Pobieramy z githuba kod źródłowy aplikacji Smarttemp
cd smarttemp
make
Budujemy aplikację smarttemp
cp ./smarttemp /usr/local/bin
Kopiujemy aplikcaję smarttemp do katalogu binariów w /usr/local/bin
cp smarttemp.conf /etc
Kopiujemy plik konfiguracyjny aplikacji Smarttemp do katalogu /etc
pip3 install tinytuya --break-system-packages
To polecenie jest ważne w przypadku gdy naszym smartplugiem do włączania grzejnika będzie włącznik z rodziny Tuya
python3 -m tinytuya scan
Należy wyszukać smartplugi Tuya powyższym poleceniem. Ważne jest również zarejestrowanie naszego smartpluga wg instrukcji na stronie Tinytuya. Tam można znaleźć instrukcje w pdf co należy klikać na stronie Tuya. W tym miejscu należy podkreślić że aplikacji Smarttemp w spółpracuje z oryginalnym oprogramowaniem smartplugów Tuya, nie musimy instalować na smartplugu żadego oprogramowania open source takiego jak Tasmota etc. Po zaskanowaniu smartplugów tym poleceniem będziemy potrzebowali ID i PASSKEY, które wypluje nam scaner do użycia w poleceniu UPDATE użytym później
echo "ALTER USER root@localhost IDENTIFIED BY 'sezamxx';"|mysql
W tem sposób ustawiamy hasło dla użytkownika root@localhost dla bazy danych MariaDB. Waże jeśli zmienimy tutaj to hasło na co innego to później będziemu musieli zmienić hasło w /etc/smarttemp.conf i w /var/www/html/php-smarttemp/credentials.php jak i w komendach poniżej
cat meteo_station.sql | mysql -psezamxx
Powyższe polecenie utworzy skruktóre bazodanową na maszej bazie MariaDB
cat meteo_station_views.sql |mysql -psezamxx -D meteo_station
Powyższe polecenie utworzy brakujące widoki dla aplikacji
cd /var/www/html
Zmieniemy katalog bieżący na /var/www/html. Przechodzimy w ten sposób płynnie do instalacji aplikcaji webowej PHP
git clone https://github.com/kalamlacki/php-smarttemp.git
Pobieramy z githuba aplikację PHP php-smarttemp
crontab -e
Powyższe polecenie służy do edycji pliku konfiguracyjnego Crona, należy na końcu edytowanego pliku umeiścić linie poniżej, zapisać i zamknąć edytor
* * * * * /usr/local/bin/smarttemp > /dev/null
Powyższa linia to zawartość pliku crontab.
echo "INSERT INTO serial_numbers(sernum,url,enabled,smart_plug_type) VALUES ('sypialnia','http://192.168.0.3:4445/temp',1,'X');"|mysql -psezamxx -D meteo_station
Powyższa linia wpisze jeden rekord do tabeli serial_numbers, rejestrując w ten sposób pierwszy czujnik temperatury Wi-Fi lub Raspberry PI. Ważne jest również aby powyższą komende wpisać w jednej linijce w terminalu. Należy w powyższej komendzie podmienić adres termometru jaki używamy w naszej sieci, chodzi o 192.168.0.3 na taki jaki masz w swojej sieci nadany przez protokół DHCP. Ten adres termometru musi być stały, tzn. nie może się zmieniać w czasie bo inaczej w pewnym momencie aplikacja Smarttemp straci łączność z termometrem i całość przestanie działać. Sprawdź konfiguracje na swoim routerze i upewnij się że wszystko ustawione jest poprawnie. Kolumna smart_plug_type może przyjmować określone wartości:
X - to smartplug wyłączony i nasza aplikacja Smarttemp pracuje jako czytacz temperatur i oznacza to, że działa bez smartpluga;
L - to smartplug Tuya;
T - to smartplug TP-LINK HS110;
E - to smartplug Edimax SP 1101w
curl http://127.0.0.1/php-smarttemp/initdevices.php?sernum=sypialnia
Powyższa komenda instaluje domyślny harmonogram dla pierwszego termometru, który zainicjowaliśmy insertem komende wyżej. W tym momencie aplikacja php-smarttemp zacznie pokazywać pierwsze odczyty na stronie głównej. Adres strony to http://127.0.0.1/php-smarttemp/
echo "UPDATE serial_numbers SET smart_plug_url='192.168.0.4', smart_plug_user_pass='xxxxxxxxxxxxxxxxxxxxxx pppppppppppppppp', smart_plug_type='L' WHERE sernum='sypialnia';"|mysql -psezamxx -D meteo_station
Powyższa komenda służy do powiązania zainstalowanego już termometru ze smartplugiem Tuya. Należy w nim zmienić 192.168.0.4 na adres twojego smartpluga w twojej sieci. Zasada jest taka sama jak dla termometru W-Fi. Adres ten musi być niezmienny i dodany do statycznych w konfiguracji twojego routera. Komenda ta musi być wywołana w jednej linijce w terminalu. Ważne jest również aby podmienić xxxxxxx... i ppppp... w powyższej komendzie na prawdziwe dane ze skanera TinyTuya parę komend wyżej.
Demonstracja działającego systemu.
Po zainstalowaniu systemu strona startowa php-smarttemp wygląda mnie więcej tak:Na stronie startowej prezentowane są wyniki temperatur z czyujników z ostatnich 24h.
Po wejściu w historię temperatur najpierw mamy do wyboru na jaki dzień chcemy zobaczyć historię temperatur
Po wybraniu daty mamy wyświetloną historię na ten dzień, który wybraliśmy wyżej. Historia z 24h w danym dniu.
Tutaj ustawiamy zadaną temperature, która będzie utrzymywana przez grzejniki podpięte pod smartplugi. Aplikacja Smarttemp będzie włączać smartplugi jeśli temperatura spadnie poniżej zadaną temperaturę - przedział temperatury i będzie wyłączać smartpluga gdy temperatur osiągnie zadaną wartość + przedział temperatury. Ustawienia są robione per dzień tygodnia, tzn. w nieskończoność będzie utrzymywana taka temperatura w każdy dzień tygodnia. W rezultacie daje to wykres temperatur w kształcie piły i temperatura waha się między "- przedział" i "+ przedział" w okoła zadananej wartości. Mamy możliwość ustawień godzinowych, tzn. w każdy godzinę możemy sobie ustawić inną zadaną temperaturę z dokładnością do 0,1 stopnia C.
Tutaj ustawiamy temperaturę per jednorazowy dzień w roku. Wartości z tego harmonogramu mają pierwszeństwo przed temperaturami z harmonogramu tygodniowego ale ustawia się je jednorazowo pod konkretny dzień, np jeśli jesteśmy w święta w domu i chcemy w salonie przyjemną temperaturę a wypada to w poniedziałek gdzie z harmonogramu tygodniowego wynika niższa temperatura to ustawiamy ją tutaj. Harmonogram może być inny dla każdej godziny.