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)