Compare commits

...

22 Commits

Author SHA1 Message Date
Joachim Hummel 48b0eac841 Update Readme 2017-07-12 15:59:19 +02:00
Joachim Hummel 04c312d549 Added Scripts for MQTT 2017-01-06 15:42:05 +01:00
Joachim Hummel 25c6442bb4 Added Scripts for MQTT 2017-01-06 15:36:16 +01:00
Joachim Hummel 0a52df619c Correct variables 2017-01-06 15:27:00 +01:00
Joachim Hummel 6c25a1f986 Added new functions 2017-01-06 15:22:17 +01:00
Joachim Hummel 5567c8c144 Add Screenshot 2017-01-06 14:02:51 +01:00
Joachim Hummel b460257f33 Modify release-notes
modified:   release-notes.txt
2017-01-06 13:58:10 +01:00
Joachim Hummel 3d34fa312f Update README.md
Installation Instruction added
2017-01-06 12:08:07 +01:00
Joachim Hummel 4ee1f53275 Update README.md 2017-01-06 11:57:59 +01:00
Joachim Hummel 2734ae9a85 Update README.md
Formating
2017-01-06 11:56:23 +01:00
Joachim Hummel 2265cc26b8 Update README.md
Installation Instruction added
2017-01-06 11:54:32 +01:00
unixweb 4957c9e4e1 Clean Code and rounding values
Rounding errors eliminated
2015-06-19 21:11:39 +02:00
unixweb d5862b1296 New Templates
New functions and new templates
2015-06-19 21:06:17 +02:00
unixweb e2b10ec310 Added 4 Sensors
New release 1.2
2015-06-05 22:44:20 +02:00
unixweb 5b7d526b82 Add WordPress Plugin
Version 1.2
2015-06-05 22:34:16 +02:00
unixweb 5a89574737 Add release notes 2015-05-21 19:23:23 +02:00
unixweb 30d55ba1b5 Update new Version
New createTable.sql with new rows for more sensors.
New scheduler.py put more sensor data into the new database design.
Update weather.py for import data into scheduler.py
2015-05-21 19:14:11 +02:00
Joachim Hummel 4392f8f185 Update README.md 2015-05-08 10:03:38 +02:00
Joachim Hummel db7e309f0f Update README.md 2015-05-08 09:59:33 +02:00
Joachim Hummel 039ae879ac Update README.md 2015-05-08 09:52:09 +02:00
Joachim Hummel 07c35ef6e0 Update README.md 2015-05-08 09:51:45 +02:00
Joachim Hummel 3aab0dcf9a Update README.md 2015-05-08 09:51:08 +02:00
10 changed files with 383 additions and 76 deletions

View File

@ -1,2 +1,33 @@
# myweather
My Weather for Raspberry Pi with BMP180 / BMP085
My Weather for Raspberry Pi with BMP180 / BMP085 / DS18B20<br/>
<img src="http://blog.unixweb.de/wp-content/uploads/2015/05/bmp180.jpg">
<img src="http://blog.unixweb.de/wp-content/uploads/2015/05/BMP085.jpg"><br/>
<img src="http://blog.unixweb.de/wp-content/uploads/2015/05/ds18b20-pinout.jpg">
<img src="http://blog.unixweb.de/wp-content/uploads/2015/05/DS18B20-e1431072161767.png"><br/>
<img src="https://raw.githubusercontent.com/unixweb/myweather/master/weather-app.png"><br/>
Installation for Adafruit Python-Modules needed:<br/>
<br/>
sudo apt-get update<br/>
sudo apt-get install git build-essential python-dev python-smbus<br/>
git clone https://github.com/adafruit/Adafruit_Python_BMP.git<br/>
cd Adafruit_Python_BMP<br/>
sudo python setup.py install<br/>
<br/>
sudo apt-get install python-mysqldb<br/>
<br/>
<br/>
Insert the required database parameter in "scheduler.py" for WordPress Plugin <br/>
databaseUsername="XXXXX"<br/>
databasePassword="XXXXX"<br/>
databaseName="XXXXX" #do not change unless you named the Wordpress database with some other name<br/>
databaseHost="www.xxx.de"<br/>
Install the WordPress Plugin <br/>
<br/>
Start "./scheduler.py" manually and check if there any errors.<br/>
<br/>
vi /etc/cron.d/weather <br/>
*/15 * * * * pi /home/pi/myweather/scheduler.py > /dev/null<br/>
<br/>
Demo: http://blog.joachimhummel.de/category/wetter<br/>

View File

@ -1,8 +1,15 @@
CREATE TABLE IF NOT EXISTS `temperatures` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`temperature` double NOT NULL,
`humidity` varchar(20) NOT NULL,
`dateMeasured` date NOT NULL,
`hourMeasured` int(128) NOT NULL,
`temperature_1` double NOT NULL,
`temperature_2` double NOT NULL,
`temperature_3` double NOT NULL,
`temperature_4` double NOT NULL,
`pressure` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`pressure_sea` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`humidity` varchar(20) NOT NULL,
`altitude` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

37
release-notes.txt Normal file
View File

@ -0,0 +1,37 @@
+++++++++++++++++++++++
Version 1.3 January 2017
Added Locale Altitude for display correct Sea-Pressure and Barometric Altitude
+++++++++++++++++++++++
Version 1.2 June 5 2015
Support now 1 * BMP180 Sensors
Support now 3 * DS18B20 Sensors
+++++++++++++++++++++++
Version 1.1 May 21 2015
Update for scheduler.py, createTable.sql , weather.py
Changes for scheduler.py:
Update new database design for input temp1,temp2,temp3,temp4,humidity,pressure,pressure_sea,altitude
Changes for createTabe.sql:
New database design for input temperature_11,temperature_12,temperature_13,temperature_14,humidity,pressure,pressure_sea,altitude
Changes for weather.py:
Remove print for new import with scheduler.py
++++++++++++++++++++++++
Version 1.0 May 5 2015
Upload basic files
scheduler.py
createTable.sql
weather.py
status.py

134
scheduler.py Normal file → Executable file
View File

@ -7,83 +7,85 @@ import sys
import time
import MySQLdb as mdb
import datetime
from weather import *
databaseUsername="XXXX"
databasePassword="XXXX"
databaseName="XXXX" #do not change unless you named the Wordpress database with some other name
databaseUsername="XXXXX"
databasePassword="XXXXX"
databaseName="XXXXX" #do not change unless you named the Wordpress database with some other name
databaseHost="www.xxx.de"
def saveToDatabase(temperature,humidity):
con=mdb.connect("localhost", databaseUsername, databasePassword, databaseName)
currentDate=datetime.datetime.now().date()
now=datetime.datetime.now()
midnight=datetime.datetime.combine(now.date(),datetime.time())
minutes=((now-midnight).seconds)/60 #minutes after midnight, use datead$
with con:
cur=con.cursor()
cur.execute("INSERT INTO temperatures (temperature,humidity, dateMeasured, hourMeasured) VALUES (%s,%s,%s,%s)",(temperature,humidity,currentDate, minutes))
print "Saved temperature"
return "true"
def readInfo():
temperatureSaved="false" #keep on reading till you get the info
while(temperatureSaved=="false"):
# Run the DHT program to get the humidity and temperature readings!
output = subprocess.check_output(["/home/pi/myweather/wetter.py"]);
print output
matches = re.search("Temp =\s+([-]?[0-9.]+)", output)
if (not matches):
time.sleep(3)
continue
temp = float(matches.group(1))
# search for humidity printout
matches = re.search("Press =\s+([0-9.]+)", output)
if (not matches):
time.sleep(3)
continue
humidity = float(matches.group(1))
#humidity=str(humidity)+"%"
print "Temperature: %.1f C" % temp
print "Pressure: %s %%" % humidity
return saveToDatabase(temp,humidity)
#check if table is created or if we need to create one
try:
queryFile=file("createTable.sql","r")
queryFile=file("createTable.sql","r")
con=mdb.connect("localhost", databaseUsername,databasePassword,databaseName)
currentDate=datetime.datetime.now().date()
con=mdb.connect(databaseHost,databaseUsername,databasePassword,databaseName)
currentDate=datetime.datetime.now().date()
with con:
line=queryFile.readline()
query=""
while(line!=""):
query+=line
line=queryFile.readline()
with con:
line=queryFile.readline()
query=""
while(line!=""):
query+=line
line=queryFile.readline()
cur=con.cursor()
cur.execute(query)
cur=con.cursor()
cur.execute(query)
#now rename the file, because we do not need to recreate the table everytime this script is run
queryFile.close()
os.rename("createTable.sql","createTable.sql.bkp")
#now rename the file, because we do not need to recreate the table everytime this script is run
queryFile.close()
os.rename("createTable.sql","createTable.sql.bkp")
except IOError:
pass #table has already been created
pass #table has already been created
def saveToDatabase(temp1, temp2, temp3, temp4, humidity, pressure, sea_pressure, altitude):
#print "SaveToDatabase Hit"
con=mdb.connect(databaseHost, databaseUsername, databasePassword, databaseName)
currentDate=datetime.datetime.now().date()
print currentDate
now=datetime.datetime.now()
midnight=datetime.datetime.combine(now.date(),datetime.time())
minutes=((now-midnight).seconds)/60 #minutes after midnight, use datead$
print "Minutes",minutes
with con:
cur=con.cursor()
query = ("INSERT INTO `temperatures`(`temperature_1`, `temperature_2`, `temperature_3`, `temperature_4`, `humidity`, `dateMeasured`, `hourMeasured`, `pressure`, `pressure_sea`, `altitude`)"
"VALUES (%s,%s,%s,%s,%s,'%s',%s,%s,%s,%s)"% (temp1, temp2, temp3, temp4, humidity, currentDate, minutes, pressure, sea_pressure, altitude))
cur.execute(query)
print "Saved temperature"
return "false"
def readInfo():
#print "ReadInfo Hit"
temperatureSaved="false"
while(temperatureSaved=="false"):
temp1 = Temp1
temp2 = Temp2
temp3 = Temp3
temp4 = Temp4
humidity=Humidity
altitude = Altitude
pressure = Pressure
sea_pressure = Sea_pressure
print "Temp1 : ",temp1
print "Temp2 : ",temp2
print "Temp3 : ",temp3
print "Temp4 : ",temp4
print "Humidity : ",humidity
print "Altitude : ",altitude
print "Pressure : ",pressure
print "Sea Pressure : ",sea_pressure
#return "false"
#temperatureSaved="true"
return saveToDatabase(temp1, temp2, temp3, temp4, humidity, pressure, sea_pressure, altitude)
status=readInfo()
status="false"
while(status!="true"):
status=readInfo()

3
scripts/pressure.sh Executable file
View File

@ -0,0 +1,3 @@
PRESS1=`python /home/pi/myweather/pressure.py`
mosquitto_pub -h mqtt.unixweb.de -p 1883 -t abcde/p1 -m $PRESS1

3
scripts/temperature.sh Executable file
View File

@ -0,0 +1,3 @@
TEMP=`python /home/pi/myweather/temperature.py |head -1`
mosquitto_pub -h mqtt.unixweb.de -p 1883 -t abcde/temp1 -m $TEMP

View File

@ -10,7 +10,7 @@ import Adafruit_BMP.BMP085 as BMP085
#
# For the Beaglebone Black the library will assume bus 1 by default, which is
# exposed with SCL = P9_19 and SDA = P9_20.
sensor = BMP085.BMP085()
#sensor = BMP085.BMP085()
# Optionally you can override the bus number:
#sensor = BMP085.BMP085(busnum=2)
@ -19,9 +19,19 @@ sensor = BMP085.BMP085()
# BMP085_STANDARD, BMP085_HIGHRES, or BMP085_ULTRAHIGHRES. See the BMP085
# datasheet for more details on the meanings of each mode (accuracy and power
# consumption are primarily the differences). The default mode is STANDARD.
#sensor = BMP085.BMP085(mode=BMP085.BMP085_ULTRAHIGHRES)
sensor = BMP085.BMP085(mode=BMP085.BMP085_ULTRAHIGHRES)
# Please set your locale altitude
# http://www.latlong.net/ Helps to find your Langitude and Latitude
# http://www.mapcoordinates.net/ Helps to Find the Data in Meter
locale_altitude = 570
seapFloat = sensor.read_sealevel_pressure(locale_altitude)
pressure = sensor.read_pressure()
psea = pressure / pow(1.0 - locale_altitude/44330.0, 5.255)
print 'Temp = {0:0.2f} *C'.format(sensor.read_temperature())
print 'Altitude = {0:0.2f} m'.format(sensor.read_altitude())
print 'Altitude = {0:0.2f} m'.format(sensor.read_altitude(seapFloat))
print 'Pressure = {0:0.2f} hPa'.format(sensor.read_pressure()/100)
print 'Pressure NN = {0:0.2f} hPa'.format(sensor.read_sealevel_pressure()/100)
print "Pressure NN =%8.2f hPa" % (psea / 100.0)

57
temperature.py Executable file
View File

@ -0,0 +1,57 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Creation: 02.01.2013
# Last Update: 07.04.2015
#
# Copyright (c) 2013-2015 by Georg Kainzbauer <http://www.gtkdb.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# import sys module
import sys
# open 1-wire slaves list for reading
file = open('/sys/devices/w1_bus_master1/w1_master_slaves')
# read 1-wire slaves list
w1_slaves = file.readlines()
# close 1-wire slaves list
file.close()
# print header for results table
# repeat following steps with each 1-wire slave
for line in w1_slaves:
# extract 1-wire slave
w1_slave = line.split("\n")[0]
# open 1-wire slave file
file = open('/sys/bus/w1/devices/' + str(w1_slave) + '/w1_slave')
# read content from 1-wire slave file
filecontent = file.read()
# close 1-wire slave file
file.close()
# extract temperature string
stringvalue = filecontent.split("\n")[1].split(" ")[9]
# convert temperature value
temperature = float(stringvalue[2:]) / 1000
# print temperature
print(str() + "%.1f" % temperature)
#print temperature
# quit python script
sys.exit(0)

163
weather.py Normal file → Executable file
View File

@ -14,7 +14,16 @@ import Adafruit_BMP.BMP085 as BMP085
#
# For the Beaglebone Black the library will assume bus 1 by default, which is
# exposed with SCL = P9_19 and SDA = P9_20.
sensor = BMP085.BMP085()
sensor1 = BMP085.BMP085()
sensor2 = "/sys/bus/w1/devices/w1_bus_master1/28-041470306aff/w1_slave"
sensor3 = "/sys/bus/w1/devices/w1_bus_master1/28-0414709c63ff/w1_slave"
sensor4 = ""
# Please set your locale altitude
# http://www.latlong.net/ Helps to find your Langitude and Latitude
# http://www.mapcoordinates.net/ Helps to Find the Data in Meter
locale_altitude = 570
# Optionally you can override the bus number:
#sensor = BMP085.BMP085(busnum=2)
@ -25,5 +34,153 @@ sensor = BMP085.BMP085()
# consumption are primarily the differences). The default mode is STANDARD.
#sensor = BMP085.BMP085(mode=BMP085.BMP085_ULTRAHIGHRES)
print 'Temp = {0:0.2f} *C'.format(sensor.read_temperature())
print 'Press = {0:0.2f} hPa'.format(sensor.read_pressure()/100)
# getSeaLelvelPres
# Sensor = BMP180
# Output = SeaPresFloat
SeaPresFlot = sensor1.read_sealevel_pressure(locale_altitude)
# getTemp1() method
# Sensor1 = BMP085
# Output= Temp1
def getTemp1():
temperature1 = format(sensor1.read_temperature())
if(temperature1==0):
return 0
else:
return temperature1
# getTemp2() method
# Sensor2 = DS18B20
# Output= Temp2
def getTemp2():
while 1:
if sensor2:
tempfile=open(sensor2)
thetext=tempfile.read()
tempfile.close()
tempdata=thetext.split("\n")[1].split(" ")[9]
temperature2=float(tempdata[2:])
temperature2=temperature2/1000
temperature2=round(temperature2, 1)
else:
temperature2=0
if(temperature2==0):
return 0
else:
return temperature2
# getTemp3() method
# Sensor3 = DS18B20
# Output= Temp3
def getTemp3():
while 1:
if sensor3:
tempfile=open(sensor3)
thetext=tempfile.read()
tempfile.close()
tempdata=thetext.split("\n")[1].split(" ")[9]
temperature3=float(tempdata[2:])
temperature3=temperature3/1000
temperature3=round(temperature3, 1)
else:
temperature3=0
if(temperature3==0):
return 0
else:
return temperature3
# getTemp4() method
# Sensor4 = DS18B20
# Output = Temp4
def getTemp4():
while 1:
if sensor4:
tempfile=open(sensor4)
thetext=tempfile.read()
tempfile.close()
tempdata=thetext.split("\n")[1].split(" ")[9]
temperature4=float(tempdata[2:])
temperature4=temperature4/1000
temperature4=round(temperature4, 1)
else:
temperature4=0
if(temperature4==0):
return 0
else:
return temperature4
# getPressure() method
# Sensor1 = BMP085
# Output = Pressure
def getPressure():
pressure=format(sensor1.read_pressure()/100)
pressure = round((sensor1.read_pressure()/100))
if(pressure==0):
return 0
else:
return pressure
# getSeaPressure() method
# Sensor1 = BMP085
def getSeaPressure():
#sea_pressure = format(sensor1.read_sealevel_pressure()/100)
#sea_pressure = round((sensor1.read_sealevel_pressure()/100))
pressure = round((sensor1.read_pressure()/100))
sea_pressure = round(pressure / pow(1.0 - locale_altitude/44330.0, 5.255))
if(sea_pressure==0):
return 0
else:
return sea_pressure
# getAltitude() method
# Sensor1 = BMP085
# Output = Altitude
def getAltitude():
#altitude = format(sensor1.read_altitude())
altitude = round((sensor1.read_altitude(SeaPresFlot)))
if(altitude==0):
return 0
else:
return altitude
# getHumidity() method
# Sensor1 = BMP085
# Output = Humidity
def getHumidity():
humidity= 57
if(humidity==0):
return 0
else:
return humidity
Temp1=getTemp1()
print Temp1
Temp2=getTemp2()
print Temp2
Temp3=getTemp3()
print Temp3
Temp4=getTemp4()
print Temp4
Pressure=getPressure()
print Pressure
Sea_pressure=getSeaPressure()
print Sea_pressure
Altitude =getAltitude()
print Altitude
Humidity=getHumidity()
print Humidity

Binary file not shown.