Bedriftspraksis Høgskolen i Østfold, ITD35014 01.12.2014 Halden Nicklas Alexander Gresholdt Eltvik
Innhold Tiny-mesh... 4 Oppgave i faget bedriftspraksis... 5 Bedriftsoppgave... 5 Kravspesifikasjon... 5 Kravspesifikasjon web GUI... 6 Tidslinje... 7 Arbeidsoppgaver... 8 Hva som har blitt gjort... 10 Refleksjon... 11 Bilder av GUI... 12 Figur 1... 12 Figur 2... 13 Figur 3... 14 Figur 4... 15 Figur 5... 16 Figur 6... 17 Figur 7... 18 Figur 8... 18 Api funksjoner i dag:... 19 Vedlegg 1... 20 Vedlegg 2... 21 2
Prosjektrapport bedriftspraksis Student: Nicklas Alexander Gresholdt Eltvik Mobil:41206449 E-post:nage1992@gmail.com Firma: Tiny Mesh AS, Moss Stilling: Utvikler Mentor: Olav Frengstad Kontaktperson: Rolv Møll Nilsen Mobil:93216714 E-post:mn@tiny-mesh.com 3
Tiny-mesh Tiny mesh jobber med mesh nettverk, det unike med tiny mesh nettverk er at de er enkle å sette opp, og de skalere veldig bra etter behov. Tiny mesh befinner seg nå i Moss Norge. Deres lokale tilstedeværelse har ikke vært et hinder for internasjonal utvikling, de har kunder i India og andre steder i verden. Produktet de tilbyr er små tinymesh noder som lager et nettverk dynamisk, ett self healing network. Disse nodene kan rapportere lys,lyd,støy, temperatur, osv. Denne sanntidsdata-en som nettverket rapporterer kan brukes til feks å endre arbeidsmønsteret til ansatte. Et slikt system kan endre en arbeidsdag fra plandrevet til tilstandsdrevet, evnt en hybrid. Et eksempel hvor det er nyttig å ha tilstandsdrevet arbeid er på hoteller. Slik det er på noen hoteller i dag må de ansatte sjekke hver enkelt minibar om de har vært i bruk, og dette tar tid. En løsning er å sette en tinymesh sensor i hver minibar som sjekker om de har blitt åpnet eller ikke. Denne løsningen vil redusere antall arbeidstimer til de ansatte betraktelig og spare hotellet for penger. Et tinymesh nettverk kan brukes til å overvåke energibruk, eller sjekke at et gatelys fungerer slik som det skal. Man kan se på hvert enkelt lys isteden for et helt området i sanntid og dette gjør at man slipper kontrollører som kjører faste ruter, de kjører heller dit det trengs å bytte lyspære. Bedriften består av 3 kjernepersoner med noen deltidsarbeidende rundt. I tillegg så har de x antall innleide konsulenter. Du kan lese mer her http://tiny-mesh.com/mesh-network/about-us.html 4
Oppgave i faget bedriftspraksis Oppgaven jeg har fått tildelt av skolen lyder slik : Du skal arbeide med et prosjekt/oppgave i en bedrift - ok Innholdet defineres av bedriften og deg i samarbeid med veileder fra høyskolen - ok Kurset skal gi deg erfaring med hvordan det jobbes IT i "den virkelige" verden - ok Valget av bedrift gjøres i samråd med veileder, og må være gjort senest 5. september - ok Ut i fra disse kravene skal jeg gjennomføre en oppgave definert i samarbeid med bedriften hvor jeg har fått tildelt praksisplass. Underveis i prosessen må rapportere inn hvordan det går og til slutt presentere hva jeg har gjort(se arbeidsoppgaver). Denne presentasjonen vil være mitt vurderingsgrunnlag på om faget blir bestått eller ikke bestått. Hensikten med faget er at jeg skal lære hvordan det er å jobbe i næringslivet fra erfarende mennesker. I tillegg til det skal jeg være med å utvikle ett produkt. Bedriftsoppgave Oppgaven som jeg har blitt tildelt av bedriften lyder slik: Tiny Mesh har plassert ut sensorer hos høgsskolen i Østfold og disse sensorene rapporterer data tilbake til Tiny Mesh clouden, som er en nettsky hvor du kan benytte tiny mesh api for å hente ut data. Disse dataene skal jeg hente ut og legge inn i mitt eget api hvor jeg mellom lagrer kun de nødvendigste dataene (målinger gjort per dag og de dataene som blir spurt om ofte). Det vil også bli min oppgave å sette opp databasen på mellomlaget, legge inn logikken i apiet og lage webgrensesnittet som presenterer dataene. Presentasjonen av dataene skal vise kvaliteten på rommet ut ifra x antall parametere som sensorene rapporterer. Hensikten med dette er å få en sanntidsvurdering av rommet slik at både elever, lektorer og driftpersonell kan utbedre hvis det oppstår ubehagligheter i rommene. I første omgang skal vi hente ut data fra en enhet med flere sensorer som vil bli plassert hos HIOF avdeling Fredrikstad. Hvis det blir tilstrekkelig med tid så vil det også bli min oppgave å lage en android applikasjon som presenterer dataene. En annen oppgave som muligens kan bli gjort innen for tidsrammene er å implementere en applikasjon i systemet hvor elevene melder tilbake hva de synes kvaliteten på rommet er. Med rangering ala dårlig, ok og bra. Hvor denne rangering skal bli sammenlignet med hva de tekniske dataene rapporterer. Kravspesifikasjon Applikasjonslaget skal overføre via http Det skal være en Database som inneholder dataene som trengs. Skal utvikle applikasjonen etter mvc prinsippet Skal benytte en database kalt RavenDB Det skal være ett brukervennlig og grafisk grensesnitt 5
Dataene skal være tilgjenglig på flere plattformer Det skal være mulig å hente historikk Det skal være mulig å få en feil logg Kravspesifikasjon web GUI Web GUI skal ha 2 portaler, en for brukere og 1 for administratorer Administratorgrensesnittet o Skal tilby CRUD funksjonalitet o Skal vise nettverkene o Skal vise Sensorer o Skal vise historikk over sensordata o Skal vise enkel oversikt over bruk av rommet o Skal vise når sensordata er utenfor anbefalt grense med en innlagt feilmargin o Skal vise alle rommene o Skal vise i hvilket rom den enkelte sensoren befinner seg i. o Skal gi mulighet til å endre navn på sensoren Brukergrensesnittet o Skal gi oversikt over alle rommene o Gi en vurdering av alle rommene o Si i fra om det er bevegelse i rommet o Gi utvidet informasjon om rommet ved søk 6
Tidslinje Avtale med bedrift 2t Sette opp kommunik asjon mellom mellomlag et og tiny mesh api 10t Lage min egen logikk API 60t Kommunik asjon mellom mitt api og web 15t Testing av systemet 30t Innlvering av rapport prosjektplan 2t Ferdig prosjektplan 10t Legge data inn i temp DB 10t midtveisrapport 20t Design av web 10t Android prototype 10t Presentasjon 15t (forberedelse) 7
Totalt antall timer 194t, en del av estimeringen vil være unøyaktig mtp. at det er en del momenter hvor jeg må lese, eller skaffe info for å oppnå delmålet. Arbeidsoppgaver * 5/9: Avtale med bedrift Ferdig * 12/9: Ferdig prosjektplan Ferdig Sette opp kommunikasjon mellom mellomlaget Ferdig og tiny mesh api Legge data inn i temp DB Ferdig Lage min egen logikk (API) Ferdig Kommunikasjon mellom mitt api og web view Ferdig Designe webview brukervenlig Ferdig * 24/10: Midtveisrapport Ferdig * 5/12: Innlevering av rapport Ferdig * Uke 50: Presentasjon påbegynt 8
Prosjekt Inneklima APP Leveranser Data / tid Beskrivelse WP 1 Spesifikasjon Funksjonsbeskrivelse Dokument Dato: 12.09.2014 Ett dokument som beskriver oppgaven Arkitektur beskrivelse WP 2 API Prototype på API og datamodell Prototype Dato: 21.10.2014 Prototyper med ulike API funksjoner. Wp 3 Applikasjon Etablering av DB DB med et enkelt applikasjonslag Dato: 28.10.2014 Prototyper på ulike funksjonsmoduler. WP 4 Visualisering /GUI Webgui for online visualisering av målerdata Dato: 04.11.2014 Hovedleveranse WP 5 APP Androidapp forenkel visualisering Brukertilbakemelding. Dato Gjøres om det er igjen tidsressurser. Rakk ikke. 9
Hva som har blitt gjort De første dagene brukte jeg på å definere omfanget av oppgaven som skulle utføres. Hva som ble bestemt kan du se i tabellen over. Etter at selve oppgaven var bestemt, så var det tid for å velge utviklingsmiljø og språk. Etter en samtale med Olav Frengstad om ulike språk som muligens kunne løse oppgaven, valgte jeg.net c# og visual studio. Hovedgrunnen til at jeg valgte.net c# isteden for Java var at det er et populært språk blant mange bedrifter og jeg ønsket å lære meg.net c# bedre. De neste dagene begynte jeg å undersøke hvordan jeg skulle løse oppgaven i.net C#. Jeg fant fort ut at jeg ønsket å bruke en ORM løsning for å forenkle database integrasjonen med applikasjonen. Første hadde jeg tenkt til å velge Entity framework og MSSQL/mySQL løsning, men Olav Frengstad tipset meg om en documentstore database som heter RavenDB. De neste dagene ble brukt på å lese om ravendb og dokument databaser. Dette var veldig lærerik prosess hvor jeg lærte at dokumentdatabaser var godt egnet for store mengder data. RavenDB hadde også andre fordeler som json lagring, sharding og ikke minst enkelt å bruke. I teorien så skulle oppsettet være enkelt, men det ble noen problemer ved at Nugetsene i.net ikke var oppdaterte. Dette problemet ble løst etter mye googling og feilsøking. Videre så hadde jeg importert to forskjellige namespaces som benyttet seg av samme namespace, men hadde forskjellig implementasjon av det, og dette førte til enda en feil. Før jeg satt opp databasen i prosjektet mitt, tegnet jeg i samarbeid med Olav Frengstad en ønske databasemodell, slik at vi med sikkerhet oppfylte kravene stilt i kravspesifikasjonen. Med denne datamodellen som grunnlag var det bare å programmer opp strukturen til programmet. Deretter koble seg opp mot tinymesh api hvor alle sensor dataene blir hentet fra. Disse dataene blir prosessert og lagret inn i min egen database. På dette punktet hadde fått et fungerende server lag og et fungerende database lag. Neste steg i prosessen var å begynne på presentasjonen. Som presentasjonsmåte ønsket jeg å bruke.net asp web API 2, noe som igjen førte til at jeg brukte en god del timer på å lese om hvordan man setter opp en slikt web api. Selve prosessen med å sette opp web api 2 gikk greit, men det var rutingen av data som tok tid å lære seg. Jeg estimerer cirka 16 timer som jeg brukt kun på å forstå hvordan ruting i.net asp fungerer. Etter at presentasjonslaget var satt opp uten design, så begynte jeg å hente ut data fra database-laget. Denne prosessen gikk ikke feilfritt. Etter at dataene hadde blitt lagt inn i databasen, så fant jeg ut at det ble veldig tungt å hente ut data om tilstanden akkurat nå. Dette løste jeg ved å lage en ny property til rom-objektet som holder på sist sendt data. Dette reduserte overheaden på spørringen dramatisk og dermed bedre ytelse. Videre fortsatte jeg med å implementere CRUD operasjoner i web apiet. Da jeg implementerte read funksjonen i APIet møtte jeg et nytt problem, dette problemet var at som default har ravendb en grense på 128 objekter som kan hentes ut per spørring, dette er slik pga sikkerhet. Jeg endret grensen med objekter til 1024 som er max grensen, med mindre man endrer på koden til databasen. Når jeg trenger flere objekter så bruker jeg en løkke og en counter for å kjører flere spørringer. Under utviklingen av presentasjonslaget måtte jeg lære meg Jquery og javascript bedre. På slutten av prosjektet har jeg brukt mye tid på å debugg, teste og unntakshåndtering. Det har blitt brukt veldig mye tid på debugging. 10
Refleksjon Faget bedriftspraksis har vært en unik opplevelse og jeg har lært utrolig mye. I min periode i Tinymesh har jeg fått god oppfølgning og følt på hvordan det er å utvikle et prosjekt fra bunnen og lage rammebetingelsene til et prosjekt som ikke er helt fastsatt ennå. I min oppgave har jeg fått prøve meg som applikasjonsutvikler. I løpet av dette prosjektet har jeg lært NoSQL database,ravendb,microsoft team fundation, boolskalgebra, selvstendig utvikling, hvordan håndtere big data, og lært mer om.net/c#, visual studio, JSON, Unit testing, Jquery, ASP web api 2, URI og routing i ASP. Vil spesielt takke Olav Frengstad som har lært nye måter å tenke på når det kommer til programutvikling. Noe av det viktigste jeg har lært av Olav, er hvordan man skal tenke som system ansvarlig. Gjøre vurderinger rundt valg av programmeringsspråk, valg av database, valg av server, valg av programmeringsstruktur, valg av testcaser, valg av løsning for kunden, osv. Videre vil jeg takke Rolv Nilsen som har vært med på å utforme oppgaven og sette grenser til hva som skal gjøres. Tror ikke jeg ville endret noe på hvordan oppgaven ble gjennomført. Er veldig fornøyd med hva jeg har fått ut av samarbeidet med Tinymesh og håper at jeg kan fortsette samarbeidet. Bedriften i seg selv har veldig hyggelige ansatte og lett å snakke med. 11
Bilder av GUI Figur 1 12
Figur 2 13
Figur 3 14
Figur 4 15
Figur 5 16
Figur 6 17
Figur 7 Figur 8 18
Api funksjoner i dag: Legge til et rom i DB Slette et rom Flytte sensor til et annet rom Hente ut data fra dagen i går Hente data fra forrige måned Hente data fra valgt startdato til valgt sluttdato Vise tilstanden til et rom akkurat nå Gi en vurdering av oppholdskvaliteten til et rom Avvikstimer Vise gjennomsnittsdata 19
Vedlegg 1 20
Vedlegg 2 21
Moss 28. 11.2014 ATTEST Nicklas Alexander Gresholdt Eltvik, 18.11.1992 har vært ansatt som programerer hos oss fra september 2014 til og med november 2014. I tiden hos oss arbeidet Nicklas Alexander Gresholdt Eltvik med å utvikle en prototype av en applikasjon som viser Tinymesh sensorer i et webgrensesnitt. Hensikten med denne applikasjonen er å vise data som sensorene fanger opp på en enkel og brukervennlig måte. Vi gir Nicklas Alexander Gresholdt Eltvik, våre anbefalinger og ønsker lykke til videre. Rolv Møll Nilsen Tiny Mesh AS
Dato jobb transport Grunn 25.08.2014 4 2 Planlegge 30.08.2014 6 Android oppfriskning 04.09.2014 8 3.net C# oppsett 09.09.2014 4 JSObjects 11.09.2014 8 2 Database 18.09.2014 8 2 Database(optimalisering av database) 02.10.2014 8 2 Database optimalisering 04.10.2014 8 2 Sette opp web api 06.10.2014 5 Designe web GUI 07.10.2014 3 Design web GUI 09.10.2014 3 Sette opp backup og forbedre web GUI 11.10.2014 1 testing av db 16.10.2014 8 2 funksjonalitet web api 17.10.2014 4 funksjonalitet web api 21.10.2014 3 funksjonalitet web api 22.10.2014 3 funksjonalitet web api 23.10.2014 9 2 endre backend til å støtte streaming 24.10.2014 4 2 testing av db 27.10.2014 4 funksjonalitet web api 29.10.2014 4 funksjonalitet web api 29.10.2014 4 testing 30.10.2014 8 backend 08.11.2014 8 backend 12.11.2014 8 fikse visual studio 13.11.2014 8 fikse visual studio 14.11.2014 9 frontend 16.11.2014 8 debugg/testing 20.11.2014 8 debugg/testing Totalt 166
Dato jobb Grunn 08.09.2014 8 Rapport skriving 11.10.2014 12 Rapport skriving 24.11.2014 4 Rapport skriving 26.11.2014 8 Rapport skriving 28.11.2014 2 Totalt 34 Dato jobb Grunn 04.09.2014 8 Lesing.net/C# 05.09.2014 8 Lesing.net/C# 11.09.2014 5 Lesing RavenDB 12.09.2014 6 Lesing RavenDB 11.10.2014 8 Lesing web api 23.10.2014 6 Lesing testing 28.10.2014 8 Lesing web api Totalt 49 Totalt på alt 249