{"id":133,"date":"2021-09-24T10:58:08","date_gmt":"2021-09-24T07:58:08","guid":{"rendered":"https:\/\/blogit.xamk.fi\/datalab\/?p=133"},"modified":"2021-10-08T16:26:19","modified_gmt":"2021-10-08T13:26:19","slug":"datan-kerays-raspberry-pin-avulla","status":"publish","type":"post","link":"https:\/\/blogit.xamk.fi\/datalab\/2021\/09\/24\/datan-kerays-raspberry-pin-avulla\/","title":{"rendered":"Datan ker\u00e4ys Raspberry Pi:n avulla"},"content":{"rendered":"\n<p>Viime blogissa kirjoitimme, kuinka saatiin k\u00e4ytt\u00f6\u00f6mme oma SQL-database. Seuraavaksi tuli aika hy\u00f6dynt\u00e4\u00e4 sit\u00e4 opetusk\u00e4ytt\u00f6\u00f6n. <\/p>\n\n\n\n<p>Projekti alkoi Raspberry Pi:n ja siihen kytkett\u00e4v\u00e4n sensorin tilaamisella. Pi:hin ladattiin oma Raspbian Os k\u00e4ytt\u00f6j\u00e4rjestelm\u00e4 ja varmistettiin, ett\u00e4 sensori toimii ja ker\u00e4\u00e4 dataa. Teht\u00e4v\u00e4n\u00e4 oli mitata l\u00e4mp\u00f6tilaa, ilmankosteutta ja ilmanpainetta. Pi kuitenkin l\u00e4mmitti sensoria, joten l\u00e4mp\u00f6tilan arvo v\u00e4\u00e4ristyi. Realistista arvoa varten tarvittiin johto, joka mahdollisti sensorin erille laittamisen Pi:st\u00e4. T\u00e4ss\u00e4 vaiheessa huomasimme, ett\u00e4 tarvitsemme ulkopuolisia palveluja datan ker\u00e4\u00e4mist\u00e4 varten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">NodeRed ja Azure IoT Central<\/h2>\n\n\n\n<p>Pi:lle ladattiin NodeRed lis\u00e4ohjelma. Ohjelmassa spesifioitiin Pi:n IP osoite ja Pi yhdistettiin verkkoon. NodeRedin selaimessa m\u00e4\u00e4riteltiin kytkent\u00e4kaavio. Kaavion tarkoituksena oli aluksi k\u00e4ynnist\u00e4\u00e4 SenseHat ja sen j\u00e4lkeen siirt\u00e4\u00e4 ker\u00e4tty data Azuren IoT Centraliin. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"726\" height=\"258\" src=\"https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/09\/NodeRed.png\" alt=\"\" class=\"wp-image-135\" srcset=\"https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/09\/NodeRed.png 726w, https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/09\/NodeRed-300x107.png 300w\" sizes=\"auto, (max-width: 726px) 100vw, 726px\" \/><\/figure>\n\n\n\n<p>Pian kuitenkin huomasimme, ett\u00e4 Noden ker\u00e4tty\u00e4 dataa ei IoT Centralista pystynyt viem\u00e4\u00e4n SQL palvelimelle. Toiveena oli, ett\u00e4 IoT Central p\u00e4ivitt\u00e4\u00e4 siirretyt datat samaan tiedostoon. Siirretty data loi kuitenkin jokaisen siirron j\u00e4lkeen uuden tiedoston, joten sen siirt\u00e4minen SQL palvelimelle ei ollut mahdollista. <\/p>\n\n\n\n<p>Seurauksena NodeRed ja IoT Central hyl\u00e4ttiin ja p\u00e4\u00e4tettiin siirty\u00e4 Azuren sis\u00e4isiin palveluihin.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Azuren palvelut datan ker\u00e4\u00e4miseksi<\/h2>\n\n\n\n<p>Pi:lle vaadittavien ohjelmien asentamista varten tarvittiin Windows k\u00e4ytt\u00f6j\u00e4rjestelm\u00e4ll\u00e4 toimiva kone. Koneella oli tarkoitus kirjoittaa koodi, jolla saataisiin Pi yhdist\u00e4m\u00e4\u00e4n Azuren IoT hubiin. Koodi my\u00f6s siirt\u00e4isi sensorin avulla ker\u00e4tty\u00e4 dataa Azureen.<\/p>\n\n\n\n<p>Ensimm\u00e4isen\u00e4 ohjelmana asennettiin Visual Studio Code. Studioon asennettiin vaaadittavat lis\u00e4osat. Seuraavaksi asennettiin DotNet Core, Node.js, Azure Functions Core Tools, Azure Storage Explorer ja Putty. <\/p>\n\n\n\n<p>K\u00e4ytt\u00f6\u00f6notto alkoi koodaamisella. Visual Studioon kirjoitettiin C# koodi. Koodiissa m\u00e4\u00e4riteltiin sensorin asetukset. Asetukset koskivat esimerkiksi l\u00e4mp\u00f6tilan yksikk\u00f6\u00e4 ja kuinka usein sensori ker\u00e4isi dataa. My\u00f6s kellonaika m\u00e4\u00e4riteltiin paikallisen kellonajan mukaiseksi. Jotta laite osaisi yhdist\u00e4\u00e4 Azure IoT hubiin, lis\u00e4ttiin sen avain.<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-1 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"248\" src=\"https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/09\/lab-1.1-image5-1024x248.png\" alt=\"\" data-id=\"138\" data-full-url=\"https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/09\/lab-1.1-image5.png\" data-link=\"https:\/\/blogit.xamk.fi\/datalab\/?attachment_id=138\" class=\"wp-image-138\" srcset=\"https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/09\/lab-1.1-image5-1024x248.png 1024w, https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/09\/lab-1.1-image5-300x73.png 300w, https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/09\/lab-1.1-image5-768x186.png 768w, https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/09\/lab-1.1-image5-1200x291.png 1200w, https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/09\/lab-1.1-image5.png 1352w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p>Asetuksien m\u00e4\u00e4ritt\u00e4misen j\u00e4lkeen oli aika siirt\u00e4\u00e4 koodi Pi:lle. Siirt\u00e4minen tapahtui Node.js ohjelman avulla. Aluksi m\u00e4\u00e4riteltiin siirett\u00e4v\u00e4n tiedoston parametrit. Tiedosto puhdistettiin ja varmistettiin sen moitteeton toimivuus. Mik\u00e4li tiedostossa olisi virheit\u00e4, ohjelma ilmoittaisi siit\u00e4 v\u00e4litt\u00f6m\u00e4sti.<\/p>\n\n\n\n<p>Toimivuuden varmistuksen j\u00e4lkeen aloitettiin tiedoston siirt\u00e4minen. Aluksi  Pi:lle luotiin uusi kansio, johon tiedostot asennettaisiin. Kansion nimeksi annettiin SenseHATDotNetCore. Nodeen sy\u00f6tettiin koodi, joka yhdist\u00e4isi Pi:hin ja siirt\u00e4isi haluamamme tiedostot siihen.  <\/p>\n\n\n\n<p> <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Projektin loppusuora<\/h2>\n\n\n\n<p>Pi:ll\u00e4 k\u00e4ynnistettiin sen oma Terminal. Terminaalissa k\u00e4ynnistettiin juuri siirt\u00e4m\u00e4mme tiedosto. T\u00e4m\u00e4 onnistui ensin navigoimalla juuri luotuun kansioon. Seuraavaksi ohjelma k\u00e4ynnistettiin<code>.\/SenseHATDotNetCore<\/code> komennolla.  <code> <\/code><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"479\" src=\"http:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/09\/Koodinsi-1024x479.png\" alt=\"\" class=\"wp-image-136\" srcset=\"https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/09\/Koodinsi-1024x479.png 1024w, https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/09\/Koodinsi-300x140.png 300w, https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/09\/Koodinsi-768x359.png 768w, https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/09\/Koodinsi.png 1042w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Juuri k\u00e4ynnistetty koodi toimi! Dataa siirtyi vartin v\u00e4lein IoT hubiin. Nyt ainoana tavoitteena oli datan siirt\u00e4minen meid\u00e4n SQL palvelimelle. T\u00e4m\u00e4n suoritimme Stream Analytics jobin avulla. Datan sis\u00e4tuloksi m\u00e4\u00e4ritettiin IoT hub ja ulostuloksi SQL-database.<\/p>\n\n\n\n<p>Pi saatiin toimimaan, joten se voidaan asentaa haluamamme luokkaan. Luokassa Pi mittaa vartin v\u00e4lein l\u00e4mp\u00f6tilan, ilmankosteuden ja ilmanpaineen. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/10\/IMG_20211001_170527-1024x1024.jpg\" alt=\"\" class=\"wp-image-143\" width=\"427\" height=\"427\" srcset=\"https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/10\/IMG_20211001_170527-1024x1024.jpg 1024w, https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/10\/IMG_20211001_170527-300x300.jpg 300w, https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/10\/IMG_20211001_170527-150x150.jpg 150w, https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/10\/IMG_20211001_170527-768x768.jpg 768w, https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/10\/IMG_20211001_170527-1536x1536.jpg 1536w, https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/10\/IMG_20211001_170527-2048x2048.jpg 2048w, https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/10\/IMG_20211001_170527-1200x1200.jpg 1200w, https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/10\/IMG_20211001_170527-1980x1980.jpg 1980w\" sizes=\"auto, (max-width: 427px) 100vw, 427px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Datan analysointi <\/h2>\n\n\n\n<p>Data oli siirretty onnistuneesti SQL palvelimelle. Voitiin siis aloittaa sen analysointi. PowerBi-ohjelma valikoitui analysoinnin ty\u00f6kaluksi. Sensorin data avattiin ohjelmassa. Seuraavana vuorossa oli datan puhdistaminen. Esimerkiksi, ilmankosteus muutettiin prosenteiksi, p\u00e4iv\u00e4m\u00e4\u00e4r\u00e4 ja aika yhdistettiin. Datan k\u00e4sittelyn j\u00e4lkeen rakennettiin visualisoinnit, joista ilmenee mm. t\u00e4m\u00e4nhetkinen l\u00e4mp\u00f6tila, p\u00e4ivitt\u00e4inen ilmankosteus ja ilmanpaine. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/10\/sensehatpowerbi-1024x687.jpg\" alt=\"\" class=\"wp-image-144\" width=\"707\" height=\"474\" srcset=\"https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/10\/sensehatpowerbi-1024x687.jpg 1024w, https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/10\/sensehatpowerbi-300x201.jpg 300w, https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/10\/sensehatpowerbi-768x515.jpg 768w, https:\/\/blogit.xamk.fi\/datalab\/wp-content\/uploads\/sites\/56\/2021\/10\/sensehatpowerbi.jpg 1105w\" sizes=\"auto, (max-width: 707px) 100vw, 707px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Mit\u00e4 jatkossa?<\/h2>\n\n\n\n<p>L\u00e4hes kaikki tavoitteet saatiin suoritettua. Dataa ker\u00e4\u00e4ntyy ja sit\u00e4 voidaan k\u00e4ytt\u00e4\u00e4 opetuksessa. Oppilaat voivat harjoitella esimerkiksi datan siivoamista ja analysointia. My\u00f6s koodaamisesta kiinnostuneet voivat Pi:ll\u00e4 testata osaamistaan. <\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Viime blogissa kirjoitimme, kuinka saatiin k\u00e4ytt\u00f6\u00f6mme oma SQL-database. Seuraavaksi tuli aika hy\u00f6dynt\u00e4\u00e4 sit\u00e4 opetusk\u00e4ytt\u00f6\u00f6n. Projekti alkoi Raspberry Pi:n ja siihen kytkett\u00e4v\u00e4n sensorin tilaamisella. Pi:hin ladattiin oma Raspbian Os k\u00e4ytt\u00f6j\u00e4rjestelm\u00e4 ja varmistettiin, ett\u00e4 sensori toimii ja ker\u00e4\u00e4 dataa. Teht\u00e4v\u00e4n\u00e4 oli mitata l\u00e4mp\u00f6tilaa, ilmankosteutta ja ilmanpainetta. Pi kuitenkin l\u00e4mmitti sensoria, joten l\u00e4mp\u00f6tilan arvo v\u00e4\u00e4ristyi. Realistista arvoa varten [&hellip;]<\/p>\n","protected":false},"author":277,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-133","post","type-post","status-publish","format-standard","hentry","category-yleinen"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/blogit.xamk.fi\/datalab\/wp-json\/wp\/v2\/posts\/133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogit.xamk.fi\/datalab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogit.xamk.fi\/datalab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogit.xamk.fi\/datalab\/wp-json\/wp\/v2\/users\/277"}],"replies":[{"embeddable":true,"href":"https:\/\/blogit.xamk.fi\/datalab\/wp-json\/wp\/v2\/comments?post=133"}],"version-history":[{"count":3,"href":"https:\/\/blogit.xamk.fi\/datalab\/wp-json\/wp\/v2\/posts\/133\/revisions"}],"predecessor-version":[{"id":145,"href":"https:\/\/blogit.xamk.fi\/datalab\/wp-json\/wp\/v2\/posts\/133\/revisions\/145"}],"wp:attachment":[{"href":"https:\/\/blogit.xamk.fi\/datalab\/wp-json\/wp\/v2\/media?parent=133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogit.xamk.fi\/datalab\/wp-json\/wp\/v2\/categories?post=133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogit.xamk.fi\/datalab\/wp-json\/wp\/v2\/tags?post=133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}