This is an old revision of the document!
Av: Johan.S & Micke.K
“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.
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.
Vi sökte efter en basstation för Nexa enheterna och något som skulle vara den centrala styrenheten. Även om primära funktionen med Rasberry Pi'n och Tellstick duo'n är att den ska styras via mobilen så eftersöktes en basstation som kan släcka / tända allt utan behov av wifi som mobilen är i behov av för kommunicera med Raspberryn. Även ha en enhet i hallen som visade tid, datum, temperatur, mm.
Detta är ett skript som främsta egenskap är ett meny system för styra nexa eneheter med 4st knappar. Vi har använt oss av Adafruit lcd kit med 5st knappar. Vi har även lagt in lite fler funktioner.
Scriptet söker igenom tillagda enheter och sorterar bort temperaturgivare mm. För att få in temperatur givarna måste man lägga till id på dom (mer om det nedan).
Knappar i grund menyn
| Viloläge: | Displayen visar datum & tid med bakgrundsbelysning av. |
| Knapp upp: | Displayen visar datum & tid med bakgrundsbelysning på. |
| Knapp höger: | Displayen visar Ip adress etho och wifi om det finns. |
| Knapp ner: | Dispalayen visar Data från 2st temperatur sensorer (ute&inne). |
| Knapp vänster: | Tar en bild med Rasberri Pi Camera |
| Knapp vänster2: | Tar en in i Nexa meny för styra nexa enheterna. |
Knappar i nexa menyn
| Upp & ner | Bläddrar bland enheterna |
| Höger | Stänger av |
| Vänster | Startar |
| Vänster2 | Går ur nexa menyn |
Bonus funktioner När vi endå hade en enhet på väggen valde vi lägga till några funktioner:
Hårdvara
Installera och konfigurera
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:
Huvudscripet
#!/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