Automation och schemalagda aktiviteter

Berätta om dina pågående projekt.
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Automation och schemalagda aktiviteter

Inlägg av oJsan »

Bakgrund:
Jag har planer på att bygga någon form av lampstyrning för hemmet. Tanken var att bygga hårdvara kring en 433MHz-sändare och en microkontroller som i sin tur styrs via RS232 från min server. Projektet har stått stilla ett tag när det gäller det praktiska (tidsbrist). En alternativ lösning blev istället att använda mellanders programvara för att direkt kunna styra en AM-RF-modulator.
Hårdvaran fungerar prima och jag kan tända/släcka min lampor genom att köra programmet i konsollen.

Mitt nästa problem är användarinterfacet. Jag vill både ha möjlighet att styra till/från-slag manuellt via internet (html eller xhtml för mobilen) och automatiskt via en databas. Uppdatering av databasen ska också var möjlig via internet. Databasen ska alltså innehålla ett dygnsschema för varje lampa (eller en grupp av lampor).
Mina förutsättningar är (läs: behärskar):
*Debian linux
*PHP
*MySQL

Databasen ska innehålla 3 tabeller:
*lamps [lampID, namn, housecode, channel, currState]
*groups [groupID,lampID,currState]
*schema [groupID, time, ON_or_OFF, currState]

Tänkte mig att göra såhär:
Ett cron-jobb kör en applikation X som varje minut kollar tiderna i schemat. Om inte currentState stämmer med vad det borde vara (utifrån tiden) så tänds eller släcks de lampor som ingår i gruppen och currentState uppdateras.
Allt väl så långt. Att "ställa in" databasen via php är inte heller något problem. Manuella styrning (via internet) kommer att uppdatera currState för påverkade lampor, men inte schemats currState. Har inte kommit på någon bättre lösning än så för override.
Mitt största problem är applikationen X. Jag vet inte vad jag ska skriva den i för språk.Många skulle nog rösta på perl, men tyvärr så kan jag ingenting alls om perl.

Någon som har ett tips på hur jag bäst konstruerar mitt system för att få det flexibelt? Största problemet just nu är hur jag ska skriva applikationen X.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Du kan ju titta lite mer på mels projekt. T.ex Nivis Home Automation System (NHAS).
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

Hade inte sett NHAS förut.. verkar ju intressant men jag tänkte nog försöka hålla det på en lite enklare nivå.
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

Uppdatering!
Har ägnat dagen åt att programmera PHP och MySQL och det känns verkligen att det var ett tag sedan sist. Som tur är så finns ju google till min hjälp!
Jag har delat upp styrningen i tre delar. Dessa delar utgör var sin php-sida.
På den första sidan, "Enheter", kan jag lägga till och ta bort enheter. På den andra sidan, "Hantera grupper" kan jag skapa och redigera grupper.
Den sista sidan har jag ännu inte börjat på, men den kommer att innehålla en tabell med "actions" som ska ske vid vissa klockslag.
Databasförslaget i trådens första inlägg stämmer inge helt, jag var tvungen att göra några mindre korrigeringar.

Första sidan, Enheter.
Bild

Andra sidan, Grupper:
Bild

Med de gröna/röda knapparna i första bilden kan jag i nuläget ställa brytarna i önskat läge. Jag testade även AJAX, vilket gör att sidan inte behöver laddas. Tyvärr så var det första gången jag stötte på AJAX idag, så jag kom inte på hur jag skulle skicka och ta emot flera olika parametrar... så AJAX får vänta tills nästa version! :D

Kom på att den här tråden kanske platsar bättre under projekt istället, trots att det är mycket lite elektronik inblandat.. . Någon moderator får flytta tråden om det känns nödvändigt.
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

Vilken ego-tråd detta är! :lol: Med detta inlägg inräknat står jag för 80% av tråden! :D

Min gissning är att det är avsaknaden av elektronik som gör tråden mindre intressant. MEN.. *trumvirvel* ...låt mig nu stolt presentera mitt första avslutade projekt (etapp ett) på länge! "Home Automation v1.0"

Det mesta hackades färdigt i helgen och tyvärr så har jag inte skrivit någon löpande projektlogg. Istället får ni som är intresserade läsa på min hemsida istället, där beskrivs hela systemet lite mer detaljerat (än vad någon på detta forumet skulle orka läsa ;) ):
http://jojjas.mine.nu/index.php?page=pr ... automation

För er som skiter i HUR det fungerar och bara vill veta ATT det fungerar, ja ni kan kika på ett demo som jag satt upp:
http://jojjas.mine.nu/rfdemo/index.php
Demot ser ur precis som den skarpa versionen men ändringarna görs bara i databasen och inte i verkligheten (bäst så, vill inte ha disco här hemma...)
Ta bort/lägga funktioner är också begränsade i demot. Hoppas ändå att allt framgår!

Jag har nu alltså kommit till den punkten då allt fungerar enligt min förska spec. Men som det heter, "mycket vill ha mer"... min nästa idé är att ha dynamiska till/från-slagstider som exempelvis beror på solens upp/ned-gång eller t.ex. en givare i ytterdörrens lås. Man brukar ju säga att det bara är fantasin som begränsar. Men när det gäller implementering så blir det ju även en begränsning.
Har någon programmerat en PLC i ett grafiskt windowsprogram? SÅ skulle jag vilja styra MITT system... men jag är tveksam att det finns färdigt. Men finns det då ingen halvfärdig modul/databassystem för "logiska funktioner" i komplexa nät? ...någon som är haj på detta område får gärna leda mig vidare!
Användarvisningsbild
JimmyAndersson
Inlägg: 26308
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Det här projektet hade jag missat totalt.

Snygg layout i programmet. Rent och logiskt, precis som det ska vara. :)

Tänkte på det här med att hela sidan laddas om: Lager/layers fungerar väl i PHP? Använd det så slipper hela sidan laddas om.
I vanlig html gör man såhär: (om du inte redan vet det)
<div id="Layer1" style="position:absolute; left:67px; top:54px; width:100px; height:79px; z-index:1"></div>

Gjorde ett litet snabbt exempel på vad man kan göra med enbart html-kod med layers och javascript.
("Racket" styr man genom att flytta musen uppåt eller neråt.)


Det ska bli kul att följa det här projektet! :)
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

Tack Jimmy, kul att du gillar layouten!
Men jag förstår inte hur jag ska kunna dra nytta av layers? Jag förstår hur det fungerar, men sen då? För varje ändring man gör så _måste_ ju data skickas till servern och sidan måste laddas om och visa nya värden ur databasen. I ditt exempel körs ju all kod (javascript) lokalt på användarens dator.
Nu innehåller ju inte min sida några bilder, men OM den skulle göra det och OM webläsaren INTE har cache.. ja då vore det ju bra att slippa posta om hela sidan för varje ändring. Problemet är emellertid litet eftersom det bara handlar om text.
Vill man ha en sida i riktigt web 2.0-stil så är det nog AJAX som gäller. Jag gjorde ett försök med Ajax men eftersom jag knappt vet något alls om det så gav jag upp rätt snabbt... Jag ville hellre få resultat och "komma framåt" i ren html först. Men jag lovar, Ajax finns med i nästa spec! :D
neezzen
Inlägg: 313
Blev medlem: 6 december 2005, 15:30:35
Ort: Vimmerby

Inlägg av neezzen »

-->Har någon programmerat en PLC i ett grafiskt windowsprogram?

Förstod inte riktigt hur du menar. Menar du om det finns nåt program för att programmera PLC som fungerar i windows-miljö? Eller menar du att du vill köra ett PLC lite flashigt med ett sånt script du har gjort som i sin tur styr PLC:et?
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Jag tror att oJsan var ute efter hur ett sånt t.ex windowsbaserat PLC-programmeringsverktyg ser ut grafiskt för att kunna implementera något liknande. Är själv lite intresserad av detta.

Sedan är ju naturligtvis även kopplingar till riktiga PLC också intressanta även om vi här tenderar att bygga egna prylar.
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

Byt ut "SÅ skulle jag vilja styra MITT system" till "SÅ skulle jag vilja konfigurera MITT system".
Jag är alltså ute efter ett enkelt sätt att konfigurera mitt system. Bäst av allt vore ett program som ser ut som de windowsprogram man programmerar PLC´s med.
Man skulle kunna dela upp mitt system i två typer av enheter; in- och utdataenheter. För tillfället är det en klocka som är indata och fjärrströmbrytare som är "utdata". Utifrån dessa enheter skulle jag vilja bygga ett logiskt nät med diverse AND/OR osv... problemet är att implemetera det i php på ett överskådligt sätt. Det är _detta_ jag skulle behöva idéer kring!

edit: vfr: Ungefär så.. men kanske inte rent grafiskt, men jag är intresserad av att veta hur PLC-konfigureringsprogram är uppbyggda. Oftast drar och släpper man olika "block" som sedan kopplas ihop. Av detta genereras sedan någon form av kod för PLC-maskinen.
Användarvisningsbild
BEEP
EF Sponsor
Inlägg: 1593
Blev medlem: 21 januari 2006, 16:57:56
Ort: Mölndal

Inlägg av BEEP »

Intressant... Vet inte hur det fungerar med ditt programspråk men i C++ så kan man ju börja med att skapa en klass och så fyller man på med funktioner, medlemar och vad det nu heter tills att det fungerar :)

När det gäller klossarna så tror jag att man skapar en ny tråd för varje kloss och att man hanterar dom som klienter som är kopplad till en server :?:
Användarvisningsbild
JimmyAndersson
Inlägg: 26308
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

oJsan:
"För varje ändring man gör så _måste_ ju data skickas till servern och sidan måste laddas om och visa nya värden ur databasen."

Du kan göra på ungefär samma sätt som du gör nu, med den lilla ändringen att man använder lager för att t.ex växla mellan vad som ska synas i webbläsaren. Ajax påminner egentligen ganska mycket om vad man kan göra med lager, javascript och något serverbaserat språk. I mitt fall brukar jag använda perl för att sköta trafiken till/från servern. Javascript blir då en form av tolk som kollar vad som ska ändras på sidan.

Jag håller på med en liten grejj som visar temperaturer på detta sätt. Tyvärr är det inte riktigt klart än, men om det blir aktuellt så kan jag visa vid ett annat tillfälle. Men annars är ju helt klart Ajax något att satsa på. Åtminstone till nästa version. :)

Jag har inte riktigt satt mig in i Ajax än. Problemet brukar vara att man hittar så många roliga sidor som är gjorda med Ajax att man glömmer bort vad man egentligen skulle göra. :oops:
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

Måste tyvärr säga att jag ändå inte förstår hur jag ska använda layers? Om jag t.ex. ska använda layers för att visa/dölja de tre delsidorna (enheter, grupper, schema) så innebär det ju MER data vid varje hämtning eftersom 2 av 3 sidor måste hämtas även fast de inte visas!

Hehe, håller med, ajax är så snyggt att man lätt tappar koncentrationen på den egentliga uppgiften! :D

BEEP: Ja precis, jag har varit inne på objektorientering där varje in- eller utdataenhet är en instans av en viss klass.
Användarvisningsbild
JimmyAndersson
Inlägg: 26308
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Nu är det min tur att inte förstå. :) Varför måste du hämta 2 av 3 sidor? Det enda som skiljer den befintliga koden mot idén med layers är hur grafiken uppdateras.
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

Ok, då har jag fortfarande inte förstått hur du menar alltså... :( glöm det där med 2 av 3.
"Det enda som skiljer... ...är hur grafiken uppdateras".
Men jag har ju ingen grafik (bilder) på sidan ju?! Vilken grafik menar du?

Layers är användbart då det ska göras ändringar _enbart_ i browsern och _inte_ på servern. Men så är ju inte fallet för mig...

Däremot skulle jag tjäna på att använda Ajax eftersom Ajax _bara_ hanterar en dataström. När sidan ändrar utseende skickas bara det nya tabellinnehållet och ett javascript sköter uppdateringen av sidans innehåll (i browsern).
Skriv svar