Webbaktiverade hem termostaten (och hemautomation Hub) (5 / 10 steg)
Steg 5: Installera databastabeller, Python servrar och webbsidor
Om du väljer att hämta och installera programvaran för denna termostat och du arbetar på Raspberry Pi distans med PuTTy, kanske du, som jag, undrar vad är det bästa sättet att flytta filer fram och tillbaka från din dator till din Raspberry Pi. Jag har hittat FileZilla att vara ett mycket lättanvänt program.
Du installerar databasen
Som nämnts i början, kunde databasen förmodligen lätt avlägsnas från detta projekt och ersättas med några textfiler om jag hade ingenting körs på detta system än Termostaterna jag beskriver här. Men jag har andra saker på det system som behöver databasen, så jag har tagit det i mitt system...
GitHub databasen innehåller en fil som heter thermostat_db.sql. Filen innehåller strukturen av MySQL tabeller behövs för termostaten. För att skapa dessa tabeller i en databas, skulle du loggar in MySQL som "root" och skapa en ny databas med hjälp av kommandot "skapa databas [database_name]," där [database_name] är vilket namn du vill använda för din databas. (exempel: "Skapa databas tstat_database;") Att importera tabellstrukturen i databasen, avsluta MySQL, gå till katalogen där du har sparat filen thermostat_db.sql och ange "mysql -u root -p [database_name] < thermostat_db.sql" och ange lösenordet för root-användaren när du uppmanas. (exempel: "mysql -u root -p tstat_database < thermostat_db.sql")
Nu, om du loggar in mysql med hjälp av kommandot "mysql -u root -p", kan du ange kommandot "användning [database_name];" för att markera den nya databasen och ange sedan "Visa tabeller." att se fyra bord upptagna där: termostater, thermostat_programs, thermostat_status och användare.
Tabellen "termostater" kommer att innehålla en post för varje termostat som du har inkluderat i ditt system och varje post innehåller tre fält:
- user_id – Välj bara ett användar-id som du vill använda för dig själv; Detta kommer att vara samma för alla termostater. (exempel: 1234)
- nod -varje termostat kommer att ha det egna unika "" nodvärde; Detta bör vara ett tal mellan 1 och 255. Den används av kommunikation programvaran för att identifiera varje termostat. (exempel: 122)
- namn – varje termostat kommer att ha sitt eget namn, och detta är hur termostaten kommer att visas på webbsidor. Detta namn kan vara upp till 45 tecken. (exempel: övervåningen sovrum)
När du har valt dessa värden, måste du infoga en post i databasen för varje termostat med kommandot "Infoga i termostater värden ([user_id], [nod], [namn]);" (exempel: "Infoga i termostater värden (1234, 122, 'På övervåningen sovrum');").
Nu, bara för att se till att allt gick som väntat, ange "Välj * från termostater;" och du bör se de poster som du just lade till.
Därefter måste du infoga ett användarnamn och lösenord i tabellen "användare". Det första du vill behov till gör är välja ett användarnamn (e.g. "dittnamn"), ett lösenord (t.ex. ' yourpassword') och två salter, som bör vara slumpmässiga strängar av tecken, kanske fyra till sex tecken (e.g. salt1 = "& 7: e$ #" och salt 2 = ' (oJ då, ska du infoga en post i tabellen användare med kommandot "INSERT INTO användare värden ([user_id] md5 ("[salt1passwordsalt2]"), "[användarnamn]"); " (exempel: "Infoga i användare värden (1234, md5 (" & 7: e$ #yourpassword(oJ 'yourname'); ").
Sedan kan du "Välj * från användare;" att se denna post i tabellen. Observera att lösenordet har kodats med funktionen md5() (som inte kanske är det bästa alternativet ute vid denna punkt).
Slutligen, infoga en post i tabellen thermostat_status för varje termostaten visar att termostaten är inledningsvis avstängd med hjälp av kommandot "Infoga i thermostat_status värden ([user_id], [nod], now(), 0, 1, 0, NULL, NULL);" (exempel: "Infoga i thermostat_status värden (1234, 122, now(), 0, 1, 0, NULL, NULL);"). Webbsidan måste denna inledande post för varje termostat för att fungera från början.
De andra tabellerna fylls senare när webbsidor är igång.
Installera Python servrar
GitHub databasen bör också omfatta tre filer kallas TstatMaster.py, TstatLogger.py och Thermostat.py. Gå vidare och kopiera dessa till någon katalog på Raspberry Pi. Om du inte redan har Python installerade på din Raspberry Pi, bör du installera det nu (gott om platser på nätet som kan gå igenom som. Jag använder Python 2.7.3).
Om du är inloggad på Raspberry Pi distans från en annan dator med spackel, och om du har installerat Xming på datorn, kan du köra Xming och skriv "idle" i PuTTy fönster att köra tomgång redaktör på din Raspberry Pi och se det på din dator. Detta är ett bra verktyg för visning och redigering Python koden. Annars finns det olika andra textredigerare som du kan använda i Linux som vim eller nano.
Thermostat.py är en modul som innehåller kod för en termostat klass. TstatMaster.py kontrollerar Termostaterna, och TstatLogger.py tar emot loggmeddelanden från Termostaterna och skriver dem till en loggfil. Dessa senare två kommer att kräva vissa uppdateringar som markeras i början av varje fil-fälten är tydligt markerade.
Du måste också skapa en/home/pi/Tstat_Data/katalog på din Raspberry Pi för loggfilerna att skrivas, annars ändra filerna TstatMaster.py och TstatLogger.py så att logFilePrefix refererar till en annan katalog.
Om du vill köra servrar, gå till katalogen där serverfiler sparades, skriv "python TstatMaster.py" och "python TstatLogger.py" och se till att de startar korrekt (inga fel). Men, finns det två problem med detta.
- Om du gör detta genom ett terminalprogram som kitt, att programmen sluta så snart du avsluta sessionen. Och du kommer inte att kunna göra något annat på Raspberry Pi medan dessa servrar kör. För att åtgärda detta, kommer du vill köra dessa i skärmar. För att köra program i en skärm, måste du starta en skärm först med det befalla "skärm -S", till exempel: "skärm -S TstatMaster". Det här fönstret finns nu kvar även när du stänger fönstret kitt. Det finns gott om dokumentation på kommandot skärmen tillgängliga, inklusive alternativ för att växla mellan skärmar, listan aktiva skärmar, och öppna en befintlig skärm.
- Även om du kör servrarna i skärmar, om du förlorar makt till din Raspberry Pi och startas om, kommer det inte längre att köra dina servrar. För att fixa detta, kommer att du behöva berätta Raspberry Pi att skapa skärmar och köra dessa servrar när det omstarter.
För att göra detta, du kan lägga till följande rader till filen rc.local (mer information här):
skärm -dm -S TstatLogger python //home/pi/ www/LCLogger.py
sömn 2s
skärm -dm -S TstatMaster python //home/pi/ www/LCMaster.py
sömn 3s
Installation av webbsidor
När du installerade lighttpd, bör det har ställt in en www broschyren för dig, förmodligen var/www /. GitHub databasen bör även några PHP filer för web-sida, och du bör sätta dessa i följande kataloger under/var/www / (eller andra webbkatalog till vilka lighttpd är ute). Skapa dessa underkataloger om det behövs.
- /Public/ – tstat_index.php, tstat_login.php, tstat_logout.php, tstat_ProgTstat.php, tstat_SetThermostat.php och tstat_Status.php.
- / public/omfattar / - tstat_MainHeader.php
- /Private/ - tstat_ConnDb.php
Följande ändringar kommer att behöva göras för att dessa filer:
tstat_ConnDb.php – ändras värdena för DB_USER, DB_PASSWORD och DB_NAME till de du använder för ditt MySQL login och databas namn.
tstat_login.php – ändra värden för $salt1 och $salt2 vara strängar du använde när du sparar din termostat lösenord i MySQL-databasen.
tstat_ProgTstat.php – ändra $service_port för att numrera av hamnen som kontrollerar servern körs. Ändra $CommPwd för att vara lösenord du väljer att använda för RFX kommunikation. Ändra standardtidszonen till din prioriterad tidszon.
tstat_SetTstat.php – ändra $service_port för att numrera av hamnen som kontrollerar servern körs. Ändra $CommPwd för att vara lösenord du väljer att använda för RFX kommunikation. Ändra standardtidszonen till din prioriterad tidszon.
tstat_Status.php – ändra $service_port för att numrera av hamnen som kontrollerar servern körs. Ändra $CommPwd för att vara lösenord du väljer att använda för RFX kommunikation. Ändra standardtidszonen till din prioriterad tidszon. Ändra $thermostats för att vara en lista över noder som du använder för din termostater.
Nu, testa den ut – i webbläsaren, ange IP-adressen för din Raspberry Pi följt av /tstat_index.php (exempel 192.168.1.75/tstat_index.php). Du bör se en inloggningssida som frågar efter ett användarnamn och lösenord. Ange användarnamn och lösenord som du sparat i användarna tabellen ovan (inga salter runt lösenordet, bara lösenordet). Som bör ta dig till en välkomstsida med 4 länkar överst: ställa in termostaten där du kommer att kunna ställa din termostater, aktuell Status där du kan se aktuell status för varje termostaten, programmering där du kan programmera scheman för din termostater och logga ut (förhoppningsvis att en är självförklarande). Naturligtvis, eftersom du inte har programmerat Termostaterna ännu, dessa sidor är inte fullt ut funktionell, så vidare till nästa steg. (Obs: om du byter namn på filen "tstat_index.php" för att helt enkelt "index.php" så bör du kunna få till det genom att skriva i bara IP-adressen för Raspberry Pi utan att inkludera filnamnet i URL-adressen.)