11/11/2020

Linux ile evi ısıtmak

ev bana hep soğuk gelmeye başlamıştı. Neyse benim hanımda soğuğu sever bana hep ev iyi sen üşüyorsun diyordu.En sonunda bir sabah boğazımda kötü kalkınca ya korona oldum yada üşüttüm dedim 🙂

Boğazda kötü olunca bu konuya bir el atmak gerekti. Evde ki raspberry 3B yi termometre yapmalıydım. Hemen araştırdım ve DTH11 in uygun olduğna karar verdim. Sonra birde temel elektronik kiti aldım ki breadboard,dirençler ve kablolar vs olsun elimde diye.

Önce raspbianı sitesinden indirdiğim programla kurdum tabii önce mevcut kartı windows yüklü laptopımda aşağıda ki şekilde temizledim.

Connect the corrupted pen drive or SD card to your computer.
Hover your mouse on the Start button and Right Click.
Click Command Prompt (Admin). A CMD window will open.

Type diskpart and press Enter.
Type list disk and press Enter. 

A list of all the storage devices connected to your computer will be displayed.
Type select disk <the number of your disk> and press Enter. (Example: select disk 1). 

Important: Make sure you enter the number correctly. Otherwise, you may format your internal hard drive. You can type list disk again to check whether you are going correctly. There will be a star (asterisk symbol) before the name of the selected disk.

Type clean and press Enter.
Type create partition primary and hit Enter.
Type active.
Type select partition 1.
Type format fs=fat32 and press Enter. The format process will finish in a few minutes. You can write ntfs instead of fat32 if you want to carry files larger than 4 gigabytes. Don’t close the CMD

Sonra raspbian kurdum (https://www.raspberrypi.org/downloads/) . Ancak SSH maalesef default olarak aktif değildi. O nedenle köke “ssh” adında boş bir dosya oluşturdum. Sonra elimde ki patch kablosunu direk laptop a ve raspi ye bağladım. Wireshark ile “promiscuous” modda dinlemeye başladım. Böylece raspinin APIPA IP sini tespit ettim. “169.254.155.119” hemen kendime benzeri bir IP yi atadım “169.254.155.120”. vee

ssh pi@169.254.155.119 password raspberry(default başkada olabilir) ile bağlandım.

hemen “sudo su -” ile root olup

  • pi userini sildim
  • /etc/ssh/sshd_config i editleyip public key authentication ve root login i enable ettim.
  • Kendi public keylerimi yerleştirdim.
apt-get install git -y
apt-get install python -y
git clone https://github.com/szazo/DHT11_Python.git
apt-get install nginx -y
timedatectl set-timezone Europe/Berlin

Sonra ayrıca wireless’ı da aktif etmemiz gerekiyor. Burada olmayan satırları eklememiz gerekiyor.

# nano /etc/wpa_supplicant/wpa_supplicant.conf:
EDITLIYORUZ

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=DE
network={
        ssid="Access Point Name"
        psk=******
}

SSID : bizim evin Wireless adı ve şifresi.

Sonra IP yi sabitliyoruz. Editleyin

nano /etc/dhcpcd.conf
# Example static IP configuration:
interface wlan0
static ip_address=192.168.0.190/24
static routers=192.168.0.1
static domain_name_servers=8.8.8.8

Sonra network ü vsyi restart etmemiz gerekiyor.

systemctl restart networking
systemctl restart sshd

Artık root@192.168.0.190 ile ssh yapıp sistemi istediğimiz yere koyabiliriz (wireless kaplama alanında)

daha sonra download ettiğim scripti biraz editledim. Bu konu ile ilgili aşağıda ki sayfadan faydalandım.
https://www.instructables.com/DHT11-Raspberry-Pi/

import RPi.GPIO as GPIO
import dht11
import time
import datetime

# initialize GPIO
GPIO.setwarnings(True)
GPIO.setmode(GPIO.BCM)

# read data using pin 17
instance = dht11.DHT11(pin=17)
#try:
#       while True:
result = instance.read()
if result.is_valid():
    print("Last input: " + str(datetime.datetime.now()))
    print("Temperature: %-3.1f C" % result.temperature)
    print("Humidity: %-3.1f %%" % result.humidity)
#           time.sleep(6)
#except KeyboardInterrupt:
#    print("Cleanup")
GPIO.cleanup()

Daha sonra bunu çalıştıracak ve istediğim sonucu oluşturacak Bash scriptini oluşturdum. Not: <sehir> yazan yere kendi sehrinizi yazın.

#harici sicakligi okuyorum
oat=`curl -s wttr.in/<sehir>|grep -A3 "Weather report: <sehir>"|grep "°C"|awk '{print $5}'`
#ancak bu maalesef renk kodlu olarak geliyor. Ayiklamak lazim
t=`echo $oat|sed -r 's/\x1B\[[0-9;]*[JKmsu]//g'`
#simdi editledigim scripti calistiriyorum.output.txt ye yazdiriyorum
python /root/DHT11_Python/can_dht11.py > /root/output.txt
#zamani alip zaman degiskenine kaydediyorum
zaman=`date +"%d.%m.%Y %T"`
#Nem oranini output.txt den okuyorum. Ayikliyorum humidity ye kaydediyorum.
humidity=`cat /root/output.txt|grep umid|cut -d: -f2|tr -d " "|cut -d% -f1`
#Sicakligi output.txt den okuyorum. Ayikliyorum humidity ye kaydediyorum.
temperature=`cat /root/output.txt|grep emp|cut -d: -f2|tr -d " "|cut -dC -f1`
# index html yazdiriyorum
echo "<tr><td>$zaman</td><td>$temperature</td><td>$humidity</td><td>$t</td></tr>" >> /var/www/html/index.html

Crontab i ekledim her 15 dakika için

*/15 * * * * /bin/bash /root/komutlar.txt

ve index HTML i oluşturdum.

root@piblack:~# cat /var/www/html/index.html
<!DOCTYPE html>
<html>
 <table style="width:50%">
<tr><td>Time</td><td>temperature C</td><td>humidity % </td><td>Outside</td></tr>

Artık ev ağı içinde her 15 dakikada bir odanın sıcaklık ve nemini kaydedebiliyorum.

Ayrıca dış sıcaklığıda aşağıdaki şekilde alıyorum.

Ayrıca aşağıda ki donanım aşağıda ki gibi oldu

CLI üzerinde meteoroloji için: https://linuxconfig.org/get-your-weather-forecast-from-the-linux-cli

Neyse sonunda hanıma gösterip

  • “üşüyorum yaw ev buz gibi” diyebileceğim teknik veri olacak elimde oda kabul edip arttıracak sıcaklığı teşekkürler linux 😀

Not: Maalesef DHT11 çok kötü bir sensör sanırım değiştirmek gerekecek.

Leave a Reply