3korre.se

by ekorrar for ekorrar!

User Tools

Site Tools


raspberry_lcd_nexa

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
raspberry_lcd_nexa [2015/01/16 10:35]
ekorre [Fördberedelser]
raspberry_lcd_nexa [2015/01/16 12:04] (current)
ekorre [Fördberedelser]
Line 2: Line 2:
 //Av: Johan.S & Micke.K// //Av: Johan.S & Micke.K//
  
-Vi frånsäger oss allt ansvar och skador detta script kan ge.+//"Vi frånsäger oss allt ansvar och skador detta script kan ge.
 Har ingen support,och har ingen Garanti. men hjälper gärna till i mån av tid. Har ingen support,och har ingen Garanti. men hjälper gärna till i mån av tid.
 Detta script är fortfarande under utveckling och versionen idag är: **V.15.1.15** \\ Detta script är fortfarande under utveckling och versionen idag är: **V.15.1.15** \\
-Du får gärna dela med dig av scriptet om du hänvisar hit, modifiera det (dela gärna med dig av förbättringar). Men inte sälja det eller någon del av det. +Du får gärna dela med dig av scriptet om du hänvisar hit, modifiera det (dela gärna med dig av förbättringar). Men inte sälja det eller någon del av det. //
  
  
Line 53: Line 53:
 **Installera och konfigurera** **Installera och konfigurera**
   - Raspberry Pi installerad med Raspbian.   - Raspberry Pi installerad med Raspbian.
-  - Ha helst en fast ip adress och systemet konfat som du vill ah det.+  - Ha helst en fast ip adress och systemet konfigurerat som du vill ha det.
   - Telldus-core (([[http://developer.telldus.se/doxygen/]])) [[http://elinux.org/R-Pi_Tellstick_core|installationsguide]]   - Telldus-core (([[http://developer.telldus.se/doxygen/]])) [[http://elinux.org/R-Pi_Tellstick_core|installationsguide]]
   - Konfigurera Telldus-core och lägg till alla enheter (([[http://developer.telldus.com/wiki/TellStick_conf]])) (([[http://developer.telldus.se/doxygen/]])).   - Konfigurera Telldus-core och lägg till alla enheter (([[http://developer.telldus.com/wiki/TellStick_conf]])) (([[http://developer.telldus.se/doxygen/]])).
Line 61: Line 61:
  
 ====Filerna==== ====Filerna====
 + 
 +Det är 5(4)st filer som behövs, den 5e är enbart för Kamran.
 +Har du inte tänkt använda den kan du skippa den filen.
 +Första 3st är från Adafruit och är för Lcd kitet. Har du kört deras tuturial har du säkert redan dom annar ladda ner dom här:
 +
 +  * [[http://3korre.se/download/Adafruit_CharLCDPlate.pyc|Adafruit_CharLCDPlate.pyc]]
 +  * [[http://3korre.se/download/Adafruit_I2C.pyc|Adafruit_I2C.pyc]]
 +  * [[http://3korre.se/download/Adafruit_MCP230xx.pyc|Adafruit_MCP230xx.pyc]]
 +
 +**Huvudscripet**
 +
 +Sök efter xx och byt ut värderna där.
 +Om jag inte missat nåt så är det 2 ställen:
 +  * Tempgivarna
 +  * Sökvägen till camera scriptet
 +
 +<file python lcdnexameny.py>
 +#!/usr/bin/python
 +
 +import subprocess
 +import smbus
 +import socket
 +import os
 +
 +from time import sleep, strftime
 +from Adafruit_I2C import Adafruit_I2C
 +from Adafruit_MCP230xx import Adafruit_MCP230XX
 +from Adafruit_CharLCDPlate import Adafruit_CharLCDPlate
 +from datetime import datetime
 +from subprocess import *
 +
 +
 +def run_cmd(cmd):
 +        p = Popen(cmd, shell=True, stdout=PIPE)
 +        output = p.communicate()[0]
 +        return output
 +
 +
 +#Definera temperatur sensorerm
 +otempid = "xx"
 +itempid = "xx"
 +
 +# use busnum = 0 for raspi version 1 (256MB) and busnum = 1 for version 2
 +lcd = Adafruit_CharLCDPlate(busnum = 1)
 +# clear display
 +lcd.clear()
 +
 +rakna = 0 #Variabel for halla reda pa tiden for backlight mm
 +huvudtid1 = 30 # =3 sekunder. Tiden hududmeny ska lysa och hur lange submenyerna ska visas.
 +huvudtid2 = 60 # tiden till huvudmeny slacks
 +hitta_ipadress_e = "ip addr show eth0 | grep inet | awk '{print $2}' | cut -d/ -f1" #kollar ipadressen
 +ipadress_e = run_cmd(hitta_ipadress_e) #kollar ip
 +hitta_ipadress_w = "ip addr show wlan0 | grep inet | awk '{print $2}' | cut -d/ -f1" #kollar ipadressen
 +ipadress_w = run_cmd(hitta_ipadress_w) #kollar ip
 +select_enabled = 0 # aktivera select valet for nexa menyn
 +select_lista = []
 +select_list_val = 0
 +
 +
 +#funktion for att lasa in data till selectmenyn:
 +def run_command(command):
 + p = subprocess.Popen(command,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
 + return iter(p.stdout.readline, b'')
 +
 +#kommando for att hamta listan fran tdtool
 +command = 'tdtool --list'
 +
 +#kor en for-loop for att skapa en lista
 +for line in run_command(command.split()):
 +
 + first = line.find('\t') + 1 #hitta forsta \t <- tab
 + second = line.rfind('\t') #hitta andra \t <- tab
 + #hoppa over allt som innehaller temperature
 + if(line.find("temperature",first,second) > -1 ):
 + continue
 + #hoppa over allt som innehaller MODEL 
 + if(line.find("MODEL",first,second) > -1 ):
 + continue
 +
 + if (first > 0):
 + select_lista.append(line[first:second]) #spara endast namnet i en lista
 +##AVSLUT
 +
 +
 +##HITTA ETT OBJEKT I LISTAN
 +print select_lista
 +print len(select_lista)
 +#SKRIV UT ETT NAMN UR LISTAN
 +
 +
 +while 1:
 + sleep(0.1)
 +
 +
 + #tar den till top sidan och lange top sidan i vilolaget
 + rakna = rakna + 1
 + if (rakna > huvudtid1 and rakna < huvudtid2):
 + lcd.clear()
 + lcd.message(datetime.now().strftime('%b %d  %H:%M:%S\n'))
 + if (rakna >= huvudtid2):
 + #lcd.backlight(lcd.OFF)
 + lcd.clear()
 + lcd.backlight(lcd.OFF)
 + lcd.message(datetime.now().strftime('%b %d  %H:%M:%S\n'))
 +
 +
 +
 +
 + # vanster knapp
 + if (lcd.buttonPressed(lcd.LEFT)):
 + lcd.clear()
 + lcd.message("SELFIE INC!")
 + command2 = "xx/sökväg/xxselfie.sh"
 + #testa run_cmd istallet
 + run_cmd(command2)
 + #run_command(command2.split())
 + lcd.backlight(lcd.ON)
 + rakna = 0
 + sleep(5)
 + # uppat knapp
 + if (lcd.buttonPressed(lcd.UP)):  
 + lcd.clear()
 + lcd.message(datetime.now().strftime('%b %d  %H:%M:%S\n'))
 + lcd.backlight(lcd.ON)
 + rakna = 0
 + # nerat knapp
 + if (lcd.buttonPressed(lcd.DOWN)):
 + lcd.clear()
 + lcd.message("UPPDATERAR")
 + indoor = "" #temperatur inne
 + outdoor = "" #temperatur ute
 +
 + for line in run_command(command.split()):
 + first = line.find('\t') + 1 #hitta forsta \t <- tab
 + second = line.rfind('\t') #hitta andra \t <- tab
 + #hoppa over allt som innehaller temperature
 + if(line.find("temperaturehumidity",first,second) > -1 ):
 + temp_variabel = line[first:second]
 + first = temp_variabel.find('\t') + 1 #hitta forsta \t <- tab
 + second = temp_variabel.rfind('\t') #hitta andra \t <- tab
 + temp_variabel = temp_variabel[first:(second-2)]
 +
 + if(temp_variabel.find(itempid) > -1 ):
 + first = temp_variabel.find('\t') + 1
 + indoor = temp_variabel[first:(len(temp_variabel))]
 + elif(temp_variabel.find(otempid) > -1 ):
 + first = temp_variabel.find('\t') + 1
 + outdoor = temp_variabel[first:(len(temp_variabel))]
 +
 + #continue
 + #hoppa over allt som innehaller MODEL 
 + #if (first > 0):
 + # select_lista.append(line[first:second]) #spara endast namnet i en lista
 + ##AVSLUT
 +
 + lcd.clear()
 + lcd.message("Indoor : " + indoor + "\noutdoor: " + outdoor)
 +
 + lcd.backlight(lcd.ON)
 + rakna = 0
 + # hoger knapp
 + if (lcd.buttonPressed(lcd.RIGHT)):
 + lcd.clear()
 + lcd.message('E' + ipadress_e + '\nW' + ipadress_w)
 + lcd.backlight(lcd.ON)
 + rakna = 0
 +
 + if (lcd.buttonPressed(lcd.SELECT)):
 + lcd.backlight(lcd.ON)
 + select_enabled = 1
 + select_list_val = 0
 + sleep (0.5)
 + lcd.clear()
 + lcd.message("Enhet: %s\n V=on H=off" %(select_lista[select_list_val]))
 + while select_enabled:
 + if (lcd.buttonPressed(lcd.SELECT)):
 + select_enabled = 0
 + lcd.clear()
 + lcd.message("Lamnar nu Nexa\nmenyn")
 + sleep(1)
 + sleep(0.15)
 + if (lcd.buttonPressed(lcd.UP)):
 + #print select_list_val #for debug
 + #print len(select_lista) #for debug
 + lcd.clear()
 + select_list_val = select_list_val - 1 #oka menyval med ett
 + #om listan e slut borja om fran borjan.
 + #print select_list_val
 + if(select_list_val < 0 ):
 + select_list_val = len(select_lista) - 1
 + #print "komhit"
 + lcd.message("Enhet: %s\n V=on H=Off" %(select_lista[select_list_val])) #valj menyitem
 + sleep(0.05)
 + if (lcd.buttonPressed(lcd.DOWN)):
 + print select_list_val
 + #print select_list_val #for debug
 + #print len(select_lista) #for debug
 + lcd.clear()
 + select_list_val = select_list_val + 1 #oka menyval med ett
 + #om listan e slut borja om fran borjan.
 + if(len(select_lista) < (select_list_val)+1):
 + select_list_val = 0
 + #print "komhit"
 + lcd.message("Enhet: %s\n V=on H=Off" %(select_lista[select_list_val])) #valj menyitem
 + sleep(0.05)
 +
 + if (lcd.buttonPressed(lcd.RIGHT)):
 + run_cmd("tdtool --off " + (select_lista[select_list_val]) )
 + if (lcd.buttonPressed(lcd.LEFT)):
 + run_cmd("tdtool --on " + (select_lista[select_list_val]) )
 +
 + rakna = 0
 +
 +
 +</file>
 +
 +**Kamera scriptet**
 +Det den gör är ta en bild med "raspistill" (alla variablar kan läsa i scriptet) och lägger bilden på en nätverks utdelning. Vill man så kan man ändra det till usbdisk, mapp etc. Sök efter xx och byt ut.
 +
 +<file python selfi.sh>
 +#!/bin/bash
 +
 +PICTURE=$(date +"%Y-%m-%d_%H%M").jpg
 +SOURCE=/tmp
 +DESTINATION=/mnt
 +
 +GETCOUNT=$(ps aux | grep raspistill | grep -v grep | wc -l)
 +
 +if [ "$GETCOUNT" -eq 0 ]
 +then
 + echo inga raspistill processer kors.. fortsatter...
 + raspistill -vf -hf -w 640 -h 480 -q 75 -o $SOURCE/$PICTURE
 + mount -t cifs -o "username=xx,password=xx" //xxdisk/xxshare $DESTINATION
 + cp $SOURCE/$PICTURE $DESTINATION/$PICTURE
 + rm $SOURCE/$PICTURE
 + sync;sync
 + umount /mnt
 + echo allt verkar i sin ordning...
 +else
 + echo RASPISTILL ALREADY RUNNING!
 +fi
 +</file>
 +
 +
 +====Problem====
 +Det största problemen vi stött på är att Kamerafunktionen hänger hela Raspberryn.\\
 +Men den senaste versionen v15.1.15 så har det inte uppstått än.\\
  
 +====Utveckling====
 +Inga större ändringar är planerade i dagsläget.\\
 +Det enda är att vi ska få den att köras som en service, just nu körs den manuellt med screen.\\
 +Göra någon form av larm finns i tankarna också, men blir nog separat projekt.
raspberry_lcd_nexa.1421400931.txt.gz · Last modified: 2015/01/16 10:35 by ekorre