Väderkamera

picam

Raspberry Pi med PiCamera

Jag är, som kanske märkts, intresserad av väder och de fenomen som har med väder och klimat att göra. Under något år så har jag visat väderdata live här på sidan. Nu har jag även en väderkamera riktad mot söder som visar en bild av det aktuella väderläget. Den, liksom väderdatat, uppdateras en gång per minut. Som det ser ut nu så är kameran igång mellan 07.00 och 20.00.

Kvar att göra är att göra den lilla bilden klickbar och öppna ett fönster med en större bild i. Annat är att montera kameran fast, se till att bli av med reflexer från fönstret och lägga till funktioner för att kunna spara bilder och senare göra timelapsefilmer av dem.

Vidare vore det trevligt att ha kameror åt norr, väster och söder också.

Som synes ovan så består själva kameran av en Raspberry Pi samt en PiCamera. Dessa sitter monterade i en PiCe-låda som ör gjord speciellt för denna kombination.

Programmet för att ta en bild, skala om och ladda upp dem är skrivet i Python och är gjort för att köras i intervall med cron. Jag kör det, som sagt, en gång per minut.

Programmet kan ses härunder eller laddas hem här.

 

#! /usr/bin/python
# -*- coding: utf-8 -*-
 
# webcam.py - Göran Gustafsson 2015 http://gorgusgfx.se
#
# Program som hanterar bildtagning, skalning och uppladdning av bilder
# till en server. Programmet är tänkt att köras en gång per minut
# via cron.
#
 
import os
import time
import Image
import ImageOps
import paramiko
 
 
# Funktionen som laddar upp small.jpg och big.jpg till webbservern
 
def upload():
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect('ssh.address.com', username="username", password="password")
    sftp = ssh.open_sftp()
    localpath = '/home/pi/webcam/big.jpg'
    remotepath = 'wp-content/cam/big.jpg'
    sftp.put(localpath, remotepath)
    localpath = '/home/pi/webcam/small.jpg'
    remotepath = 'wp-content/cam/small.jpg'
    sftp.put(localpath, remotepath)
    sftp.close()
    ssh.close()
    return 0
 
 
# Här kollar vi om vi ligger inom tidsfönstret och beroende på om vi gör
# det eller inte så tas antingen en ny bild av kameran eller så laddas 
# offline-bilden upp.
 
localtime = time.localtime(time.time())
tm = "{0:0>2}".format(localtime.tm_hour)
if (int(tm)>6 and int(tm)<20):
    # Först tar vi bort flaggfilen om den finns och sen tas själva bilden
    # med maxupplösning. Därefter laddas bilden in, skalas om och sparas 
    # två gånger innan de bägge bilderna laddas upp till servern.
 
    if  os.path.exists('/home/pi/webcam/flag.txt'): os.remove('/home/pi/webcam/flag.txt')
    command = "raspistill -w 2592 -h 1944 -rot 270 -o /home/pi/webcam/bild.jpg"
    os.system(command)
    im = Image.open("/home/pi/webcam/bild.jpg")
    img = ImageOps.fit(im,(640,480))
    img.save("/home/pi/webcam/big.jpg",quality=60,optimize=True,progressive=True)
    img = ImageOps.fit(im,(178,134),Image.ANTIALIAS)
    img.save("/home/pi/webcam/small.jpg",quality=75,optimize=True,progressive=True)
    upload()
else:
    # Om flaggfilen inte finns så kopiera offline-bilden till big.jpg 
    # och small.jpg och ladda upp dem till servern. Skapa sen flaggfilen 
    # för att tala om att vi gjort detta. Då slipper vi slösa bandbredd 
    # på att ladda upp samma 2 bilder gång på gång på gång...
 
    if not os.path.exists('/home/pi/webcam/flag.txt'):
        im = Image.open("/home/pi/webcam/offline.jpg")
        im.save("/home/pi/webcam/small.jpg",quality=90,optimize=True,progressive=True)
        im.save("/home/pi/webcam/big.jpg")
        upload()
        fd=open("/home/pi/webcam/flag.txt",'w')
        fd.close()

 

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *

*

* Copy This Password *

* Type Or Paste Password Here *

6 123Spamkommentarer blockerade hittillsSpam Free Wordpress

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

Live data
Besökskarta
Login-box
  • Login
    Login

Ditt IP-nummer:
54.80.137.187