Hitaskynjari kveikir á LED og sendir email við gildi ds18b20

Dallas DS18B20 er mjög góður til að nota við Raspberry PI og búa til hitaskynjara.

Hér er komin smá script'a bútuð saman úr fyrri verkefnum, sem les gildin af skynjara, ef gildið er of hátt þá er sendur póstur, einnig ef það er of lágt.

Kveikir síðan á LED.
Grænt þegar réttu hitastigi er náð, gult þegar það er komið út fyrir réttan hita, rautt þegar það er orðið of heitt og póstur sendur.

dallas ds hitanemi_raspberry

heitt 

Þessi scripta leyfir þér að hafa fleiri en einn Dallas DS18B20, bara raða þeim á línuna, led myndi þá t.d blika ef gult eða rautt eftir því hvaða skynjara hún er að lesa, einnig postur.
Ef ósk er að heiti skynjara komi fram þarf að bæta við device gildi í script'una ( lína 105)

 

print(device, temp)

dallas ds hitanemi_raspberry2

#!/usr/bin/python
# notandi hja gmail
notandi = 'jon(a)gmail.com'
lykilord = 'blabla'

# stilla fra hverjum postur kemur og hvert hann a ad fara
From = "jon(a)gmail.com"
To =  "jon(a)gmail.com"

Titill_heitt = "Of heitt"
Skilabod_heitt = "Thad er of heitt"

Titill_kalt = "Of kalt"
Skilabod_kalt = "Thad er of kalt"

import os, glob, sys, RPi.GPIO as GPIO
from time import sleep
import string
import smtplib

#of heitt eda of kalt.
def email(condition):
    print "Reyni ad senda post"
    if condition == 'heitt':
        Body = string.join((
        "From: %s" % From,
        "To: %s" % To,
        "Subject: %s" % Titill_heitt,
        "",
        Skilabod_heitt,
        ), "\r\n")
    if condition == 'kalt':
        Body = string.join((
            "From: %s" % From,
            "To: %s" % To,
            "Subject: %s" % Titill_kalt,
            "",
            Skilabod_kalt,
            ), "\r\n")

    server = smtplib.SMTP('smtp.gmail.com:587')
    server.starttls()
    print "Skra mig inn sem..."
    server.login(notandi,lykilord)
    print "Skra mig inn sem "+notandi+"."
    server.sendmail(From, [To], Body)
    server.quit()
    print "Postur sendur"

#setja upp one wire modules
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

# Stillingar hvar skynjarar eru
base_dir = '/sys/bus/w1/devices/'
devices = glob.glob(base_dir + '28*')
device_file = '/w1_slave'

#stilla gpio fyrir led
GPIO.setmode( GPIO.BCM )
GPIO.setwarnings( False )

# Of heitt adgerdir
def of_heitt():
    print("of heitt")
    email('heitt')

# of kalt adgerdir
def of_kalt():
    print("of kalt")
    email('kalt')

def ledMode( PiPin, mode ):
    GPIO.setup( PiPin, GPIO.OUT )
    GPIO.output( PiPin, mode )
    return

# les upp foldera og finna skynjara
def read_temp_file(device_file):
    f = open(device_file, 'r')
    lines = f.readlines()
    f.close()

#lista ut skynjara og fara i adgerdir
def read_all():
    for  device in devices:
        device_dir = device + device_file
        raw_data = read_temp_file(device_dir)

        while raw_data[0].find('YES') == -1:
            sleep(0.1)
            raw_data = read_temp_file(device_dir)

        t_pos = raw_data[1].find('t=')

        if t_pos != -1:
            temp = float(raw_data[1][t_pos+2:]) / 1000
            ledMode( 14, GPIO.HIGH if temp < 22 else GPIO.LOW )
            ledMode( 15, GPIO.HIGH if temp < 28 else GPIO.LOW )
            ledMode( 18, GPIO.HIGH if temp < 30 else GPIO.LOW )
            if (temp > 31):
                of_heitt()
            if (temp < 20):
                of_kalt()
            print(temp)

#setja oll led i on
ledMode( 14, GPIO.LOW )
ledMode( 15, GPIO.LOW )
ledMode( 18, GPIO.LOW )

#keyra endalaust
while True:
        read_all()
#       sys.exit()
        sleep(15)

Raspberry PI hurðaskynjari - Senda email

Hurðaskynjari með Reed Switch.

Reed Switch er nemi sem segull segir til um hvort hann sé off eða on.

Þegar segull fer frá rofa opnast snertur og samband slitnar, svo þegar segull kemur aftur að rofa lokast snertan.

Þetta er einfaldasta leiðinn til að setja skynjara við hurð eða glugga.

Þessir skynjarar eru til í mörgum útgáfum, eftir hvaða hlutverk þeir eiga fara í.

Hér er ég með skynjara sem er ætlaður fyrir hurðir.

Þegar segull fer frá rofa fæ ég email um að hurða sé opin, fæ síðan aftur email þegar hurð er lokuð.

hurdsk2 hurdsk3 hurdsk1 hurdsk4

Hægt er fá email sem sms, en þá þarftu að stilla símanr að það taki við email sem sms, þetta þarf að gera á þjónustu síðum símafyrirtækis og það kostar.

Hér er kóðin sem settur var saman til að framkvæma þessa aðgerð. 

#!/usr/bin/python

# notandi hja gmail
notandi = 'jon'
lykilord = 'jonjon'

# stilla fra hverjum postur kemur og hvert hann a ad fara
From = "hindberid(a)gmail.com"
To =  "einhver(at)gmail.com"

Titill_opin = "Hurd er opin"
Skilabod_opin = "Hurdin inn i herbergi er opin "

Titill_lokud = "hurd er lokud"
Skilabod_lokud = "buid er ad loka hurd"


import time
import RPi.GPIO as io
io.setmode(io.BCM)
import string
import smtplib

#Hurd er "opin" eda "lokud".
def email(condition):
    print "Reyni ad senda post"
    if condition == 'opin':
        Body = string.join((
        "From: %s" % From,
        "To: %s" % To,
        "Subject: %s" % Titill_opin,
        "",
        Skilabod_opin,
        ), "\r\n")
    if condition == 'lokud':
        Body = string.join((
            "From: %s" % From,
            "To: %s" % To,
            "Subject: %s" % Titill_lokud,
            "",
            Skilabod_lokud,
            ), "\r\n")

    server = smtplib.SMTP('smtp.gmail.com:587')
    server.starttls()
    print "Skra mig inn sem..."
    server.login(notandi,lykilord)
    print "Skra mig inn sem "+notandi+"."
    server.sendmail(From, [To], Body)
    server.quit()
    print "Postur sendur"


#stilla raspberry ad nota GPIO 18
hurdar_skynjun = 18
skynjun = True

# nota innbyggt vidnam i raspberry sem pull_up
io.setup(hurdar_skynjun, io.IN, pull_up_down=io.PUD_UP)

# Hurd opin adgerdir
def hurd_opin():
    print("Hurd opin")
    email('opin')

# Hurd lokud adgerdir
def hurd_lokud():
    print("Hurd lokud")
    email('lokud')

while True:
    time.sleep(5) # Bid i 5 sek
    if io.input(hurdar_skynjun): # ef hurd opin
        if (skynjun):
            hurd_opin() # fara i def hurd_opin og framkvaema
            skynjun  = False # stilla skynjun i = astand til ad fa ekki annad email
    if not io.input(hurdar_skynjun): # ef hurd er lokud
        if not (skynjun):
            hurd_lokud() # fara i def hurd_lokud og framkvaema
            skynjun = True # stilla skynjun i = astand til ad fa ekki annad email

 

 

Skynjun,Reykskynjari og 12V Relay við Raspberry PI

Kveikja á vælu í reykskynjara þegar einn inngangur á Raspberry PI verður HIGH

Hér er notaður hnappur en gæti verið kopar eins og í fyrra verkefni skynjun þar sem vatn var notað.
Einnig er sama forrit notað og í skynjun

Fyrst var búið til bretti með relay til að tengja við breadboard. Gott að hafa þetta borð til reiðu í stað þess að víra það alltaf upp á breadbord.

relay pcb relay2 pcb

Tengja inn á test rofan í reykskynjara, þannig hann vælir meðan rofinn er í on.
Þetta skemmir ekki reykskynjarann og hann virkar áfram sem reykskynjari. 

reyk1 reyk2 reyk3 

Tengja allt saman á breadboard, rofi við reykskynjara ekki tengdur alveg strax til að forðast leiðinda hávaða.
Relay er tengt við sama útgang þar sem led var í verkefni skynjun

reyk4

 Síðan prufa virkni.

 

{fcomment}

Skynjun með Raspberry og senda mail

Skynjun með Raspberry Pi

Vatn,hiti,reykur,hurð senda mail og kveikja á viðvörun.

Skemmtileg verkefni.

Hér er mynd af vatnskynjara, sem fyrsta prufun, næst er fá sér reykskynara og tengja inn á flautuna í honum.

 vatnskynjari 1

vatnskynjari 2

Hér er svo rásin komin með vörn á innganga með Zener díóðu 3.3v. GPIO eru viðkvæmir fyrir mistökum. ( lærði það af reynslunni )

Hægt er að setja t.d flautu í stað Led, eða relay o.s.fr. einnig rofa í staðinn fyrir kopar.

Python scripta sem gerir þetta kleyft, bútað saman héðan og þaðan.

Notað er gmail til að senda póstinn, einfalt að búa til reikninga þar.

Skrá sig inn á Raspberry PI

búa til skrá.

pi@raspberrypi ~ $ nano -w skynjun

Afrita textann hér að neðan inn í skránna. og svo crtl+x og yes til að vista.

gera síðan skrá keyrslu hæfa

pi@raspberrypi ~ $ chomd +x skynjun

virkja skránna.

pi@raspberrypi ~ $ ./skynjun

Svo er bara prufa setja víra saman eða vatn á þá, passa bara hafa þá mjög nálægt ef vatn er notað.

gmail

mail 

Ef þú vilt síðan að þessi litla scripta fari í gang við endurræsingu þá er þetta einföld leið.

pi@raspberrypi ~ $ sudo su - ( gera þessar breytingar sem root því hann þarf að keyra skránna )

pi@raspberrypi ~ $ export EDITOR=nano ( ég nota nano svo.. )

pi@raspberrypi ~ $ crontab -e

pi@raspberrypi ~ $ bæta þessum streng inn í crontab
@reboot /home/pi/skynjun
ctrl+x svo yes til að vista

pi@raspberrypi ~ $ update-rc.d cron defaults

pi@raspberrypi ~ $ reboot

Síðan til að athuga hvort scriptan hafi farið í gang við reboot þá gefuru skipuna top

pi@raspberrypi ~ $ top 

Þá sést að scriptan keyrir.

skynjun

 {fcomment}

#!/usr/bin/python
 
notandi = 'jonjon' 
lykilord = 'jonjon'
 
From = "jonjon(hja)gmail.com"
To =  "jonjon2(hja)gmail.com"
 
Titill_blautt = "Skynja vatn"
Skilabod_blautt = "Einn skynjari er blautur"
 
Titill_thurrt = "skynja ekki vatn"
Skilabod_thurrt = " Engin skynjari er blautur"
 
import smtplib
from email.mime.text import MIMEText
import RPi.GPIO as GPIO
import string
import time
 
#Umhverfid annad hvort "blautt" eda "thurrt".
def email(condition):
    print "Reyni ad senda post"
    if condition == 'blautt':
        Body = string.join((
        "From: %s" % From,
        "To: %s" % To,
        "Subject: %s" % Titill_blautt,
        "",
        Skilabod_blautt,
        ), "\r\n")
    if condition == 'thurrt':        
        Body = string.join((
            "From: %s" % From,
            "To: %s" % To,
            "Subject: %s" % Titill_thurrt,
            "",
            Skilabod_thurrt,
            ), "\r\n")
    
    server = smtplib.SMTP('smtp.gmail.com:587')
    server.starttls()
    print "Skra mig inn sem..."
    server.login(notandi,lykilord)
    print "Skra mig inn sem "+notandi+"."
    server.sendmail(From, [To], Body)
    server.quit()
    print "Postur sendur"
 
def RCtime (RCpin):
    reading = 0
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(RCpin, GPIO.OUT)
    GPIO.output(RCpin, GPIO.LOW)
    time.sleep(0.1) 
    GPIO.setup(RCpin, GPIO.IN)
    while True:
        if (GPIO.input(RCpin) == GPIO.LOW):
            reading += 1
        if reading >= 1000:
            return 0
        if (GPIO.input(RCpin) != GPIO.LOW):
            return 1
 
def led_a (pin):
 
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(pin, GPIO.OUT)
    GPIO.output(pin, GPIO.HIGH)
 
def led_af(pin):
 
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(pin, GPIO.OUT)
    GPIO.output(pin, GPIO.LOW)
 
# Gengur i hringi
 
print 'Bid eftir breytingum'
while True:
    time.sleep(5) # Bid i 5 sek
    if RCtime(18) == 1:
        led_a(17)
        print "Skynjari er blautur"
        email('blautt')
        print "Thad er blautt"
        while True:
            time.sleep(5) # Bid i 5 sek
            if RCtime(18) == 0:
                led_af(17)
                print "Thad er thurt"
                email('thurrt')
                print "Bid eftir breytingum"
                break

 

 

 

 

Þráðlaust netkort Raspberry Pi

Setja upp þráðlaust net á Raspberry Pi

usb-wifi

USB wifi dongle með RTL8188CUS kubbasettinu, erum með nokkra til sölu hér.

 

(Ef wlan0 kemur ekki strax fram við pi@raspberrypi ~$ ifconfig

Þá  pi@raspberrypi ~$ lsusb og þú sérð kóðan á kortinu.. " Bus 001 Device 004: ID 0bda:0179 Realtek Semiconductor Corp."
Og síðan leiðbeiningar héðan til að lagfæra OS http://www.raspberrypi.org/forums/viewtopic.php?p=462982#p462982 )

apt-get update

apt-get upgrade

síðan 

sudo wget https://github.com/lwfinger/rtl8188eu/raw/c83976d1dfb4793893158461430261562b3a5bf0/rtl8188eufw.bin -O /lib/firmware/rtlwifi/rtl8188eufw.bin

Þá er fw komið inn fyrir þennan kubb.

1 Til að tengjast þráðlausu neti

Byrjað á setja upp nýjasta Wheezy image inn á pi og uppfæra það. Ef þú þarft að vita hvernig það er gert þá eru upplýsingar hér.

Slökkva á vélinni og tengja wifi dongle.

Kveikja á vélini aftur og tengjast með putty og sjá hvort wlan0 sé komið.

Wheezy fann hann strax og kom með wlan0

sem sést með skipunni

pi@raspberrypi ~$ ifconfig

Þá að virkja þráðlaust net.

pi@raspberrypi ~ $ sudo nano -w /etc/wpa_supplicant/wpa_supplicant.conf

Afrita þennan hluta þangað inn. Passa setja kenni og lykilorð


ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev

update_config=1
 
network={
ssid="Kenni"
psk="pass"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
}
 

Svo endurræsa vélina

pi@raspberrypi ~ $ sudo reboot. 

Þá ætti vélin að vera komin með þráðlaust net.
wifi01 

Ef Pi vill ekki tengjast er hægt að athuga hvort wifi net sjáist með þessari skipun.

wpa_cli scan && sleep 5 && wpa_cli scan_results

 

2 Til að vera access punktur fyrir fleiri tölvur. ( passa taka út fikt að ofan. )

Setja inn hugbúnað
pi@raspberrypi ~ $ sudo apt-get install bridge-utils iw

Stilla netkort, hér eru stillingar án DHCP server á RaspBerry pi, heldur er hann á netinu.

pi@raspberrypi ~ $ sudo nano -w /etc/network/interfaces
afrita stillingar hér að neðan inn.


auto lo
auto br0
iface lo inet loopback
iface br0 inet dhcp
bridge_fd 1
bridge_hello 3
bridge_maxage 10
bridge_stp off
bridge_ports eth0 wlan0
allow-hotplug eth0
iface eth0 inet manual
allow-hotplug wlan0
iface wlan0 inet manual


ctrl+x og svo y til að vista

næst er að búa til hostapd
pi@raspberrypi ~ $ wget http://hindberid.is/gogn/RLR_v1.1.tar.gz
pi@raspberrypi ~ $ tar -zxvf RLR_v1.1.tar.gz
pi@raspberrypi ~ $ cd RTL8188-hostapd-1.1/hostapd/
pi@raspberrypi ~ $ sudo make
smá bið þangað til skel verður aðgengileg á ný
pi@raspberrypi ~ $ sudo make install

Setja inn rétt config í skránna
pi@raspberrypi ~ $ sudo nano -w /etc/hostapd/hostapd.conf

Breyta ssid í það sem hentar.
og setja lykilorð.


# Basic configuration

interface=wlan0
ssid=wifi
channel=1
bridge=br0

# WPA and WPA2 configuration

macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=3
wpa_passphrase=hindberid
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

# Hardware configuration

driver=rtl871xdrv
ieee80211n=1
hw_mode=g
device_name=RTL8192CU
manufacturer=Realtek
wme_enabled=1
ht_capab=[HT40+][SHORT-GI-40][DSSS_CCK-40][SHORT-GI-20][MAX-AMSDU-7935]


ctrl+x og y til vista.

pi@raspberrypi ~ $ sudo update-rc.d hostapd defaults

svo er að endurræsa
pi@raspberrypi ~ $ sudo reboot

Eftir endurræsingu
pi@raspberrypi ~ $ ifconfig
ifconfig
Síðan sjá hvort access punktur sé ekki réttur
pi@raspberrypi ~ $ iwconfig
iwconfig
Volla komin með Raspberry pi sem access punkt og núna áttu að geta tengst frá vélinni þinni.
tenging