Avainsana-arkisto: GITHub

Köyhän miehen DOORIS

Piiitkän tauon jälkeen tännekin jotain. SOK on kehittänyt DOORIS nimisen järjestelmän, jonka kautta olisi minunkin mahdollista saada työvuorot sähköiseen kalenteriin. Paino sanalla mahdollista, en siis saa, koska HOK-Elanto ei ole tehnyt päätöstä ottaa DOORISta käyttöön.  Perustelut mitä olen kuullut ovat suurimmaksi osaksi täyttä tuubaa, yksi vähän asiallinen perustelu on “antaa pienempien osuuskauppojen tehdä beta-testaus. Tosin tämä perustelu vesittyy aika hyvin, kun katsoo whois dataa sokdooris.fi osoitteesta. Se on hankittu 2010.  Samoin s-kanavan artikkelissa puhutaan vuodesta 2012 käyttöönottovuotena. Pitkä beta-testaus vaihe….

Seuraava ei taida kenellekään olla yllätys, se maksaa liikaa. No hei haloo!? Miten niillä pienemmillä osuuskaupoilla on varaa DOORIS:kseen, jos isoimmalla ei ole?  Lisäksi yleensä perään tulee pitkä lista sinällään kyllä hyviä asioita joita  HOK-Elanto tarjoaa työntekijöilleen. Minusta on kuitenkin aika naurettavaa verrata esimerkiksi lintsi päivää ja DOORISta , ne ovat aivan eri asioita.  Konttorin logiikka ei (tässäkään) asiassa käy järkeen. Vai onko HOK-elanto köyhempi kuin luulin? Vetääkö joku välistä?

Tilanne ei hirveästi kiitosta meikältä saa, vetkuteltu ja venytelty aika pitkään.  Pieniä lupauksia on, että DOORIS tai vastaava tulee jossain vaiheessa, mutta varmaa tietoa ei ole ja milloin se jossain vaiheessa on?

No näistä johtuen sitten päätein tehdä asian itse. Enhän mä toki voi tehdä koko DOORISta, mutta en minä toisaalta siitä ole kaivannutkaan kuin yhtä ominaisuutta, saada työvuorot helposti sähköiseen kalenteriin. Enkä myöskään ole koodari, mutta jotain saan koodillakin aikaiseksi. Lähinnä copy pasteamalla toisten koodia ja siitä muokkaamalla, mutta niin kai kaikki tekee (joskus).

Alunperin oli tarkoitus tehdä systeemi, joka olisi suoraan maraplanin tulosteesta (tai siis sen sähköisestä tulosteesta) siirtänyt työvuorot googlen kalenteriin, mutta johtuen useammastakin syystä (osa jo tässä aiemmin mainittu) päätin tehdä vain apusovelluksen, johon pitää itse syöttää vuorot ja skripti sylkäisee  .CSV muodossa vuorot ulos ja sitä kautta ne saa nätisti googlen kalenteriin. Jos haluat kokeilla skriptiä, se löytyy osoitteesta rahikkala.net/kalenteri ja koodi itsessään löytyy githubista. 

Kieli valinta osui tällä kertaa PERLiin. En ole koskaan mitään tuolla kielellä kirjoittanut, mutta vaikuttaa varsin helpolta kieleltä, vaikkakin paikoitellen helpottavat asiat tekevätkin siitä itseasiassa vaikeamman. Esimerkiksi käytin hyvän hetken ihmettelyyn, koska en ollut huomannut että vaikka $string1 == $string2 on täysin validi vertailu, se ei tee sitä mitä halusin. Oikea muoto on $string1 eq $string2. No nytpä tiedän tuonkin tärkeän eron, joka oli mennyt tyystin minulta ohi netin ohjepalstoja lukiessa.

Koodi on melkoinen purkkapallo, eikä siinä ole juurikaan suojauksia käyttäjän idioottimaisuuksia vastaan. Käytä sitä siis omalla vastuulla! Suosittelen tekemään erillisen kalenterin, johon tulee pelkästään työvuorot. Kalenteriin on helppo lisätä kerralla monta tapahtumaa tällä skriptillä , mutta ne joutuu poistamaan sieltä yksitellen, jos vaikka sattuu lipsahtamaan väärä kuukausi. Maksimi määrä mitä tapahtumia (tai oikeastaan päiviä) voi kerralla lisätä on 32.

Joku voisi sanoa, että ammutaan tykillä hyttystä tässä, mutta päätin käyttää käyttäjä seurantaan google analyticsiä. Seuranta skripti kuitenkin on vain aloitus sivulla, ainakin tällä hetkellä.

 

Edit: 29.9. Muutettu muutamaa kohtaa saadun palautteen perusteella.

Omia ja muiden virheitä, mutta toimiva sarastevalo silti.

Joulu meni ja samoin uusivuosi. Edessä siis uudet kujeet, mutta jatketaan hetki viellä vanhoilla kuitenkin. Itead studiosilta tilatut piirilevyt saapuivat “joululoman” aikana.  Itead on erittäin edullinen piirilevyvalmistaja, tekee kuitenkin ihan kohtuullista jälkeä. Välistä kuitenkin on pieniä ongelmia. Kuvassa on lähikuva yhdestä toimitetusta piirilevystä, vihreässä juotteenestopinnoitteessa on ilmeisesti routterin tekemä jälki. Hassua sinällään, että itead toimitti tuon “rikkinäisenkin” levyn, koska pienin tilausmäärä heiltä on kymmenen levyä ja tuo rikkinäinen on yhdestoista.

Tinailin kytkennän kasaan ja poltin koodin atmega328p mikrocontrolleriin ja kas kummaa laite ei toimi! Ei muuta kuin tutkimaan missä vika on. Yllätys ei liene, että se löytyi penkin ja näppäimistön välistä.

Etukäteen oli jo tiedossa, että shift registerit on kytketty väärään järjestykseen piirilevylle, mutta muita yhtä alkeellisia virheitä löytyi levyltä lisääkin. Ts. A7D kytkimiin asetettu aika tulee väärin luettua. (03:45 tulee luettua 45:03) Onneksi kaikki “isot” virheet olivat sellaisia, että ne pystyi koodissa korjaamaan.

Ensimmäinen ongelma oli rotary encoderin kanssa, joka ei toiminut. Syyksi paljastui koodi ja fuse-bittien asettelu. Levylle laitettu pari vastusta ja kondensaattori per encoderin pinni estämään kytkinvärähtelyä, en kuitenkaan aikonut luottaa pelkästään tuohon kytkentään, joten koodissakin oli kytkinvärähtelyjä varten rivi. Kokeilin erillaisia viiveitä ja kaikilla viiveillä tilanne oli että, encoderi ei toiminut. Tilanne korjautui, kun jätti koko viive rivin pois koodista. Myöhemmin huomasin, että viiveet olivat kaiken kaikkiaan liian pitkiä ja syy siihen oli fuse-bittien tila. Koska käytin arduinon IDEä tähän projektiin luulin, että se asettaa fuse-bitit automaattisesti. Näköjään niitä ei aseteta automaattisesti ja mikrocontrolleri toimikin tehdasasetuksilla eli 1MHz taajuudella eikä 16MHz taajuudella niin kuin minä ja koodi olettivat. Kaikki delay-käskyt kestivät siis 16 kertaa pidempään kuin oli tarkoitus.

Seuraava ongelma oli, että sarastuksen asetus ei toiminut. Ongelman ratkaisemiseksi jouduin tekemään koodin, jolla asetettu aika välkyteltiin ledillä, koska systeemissä ei ole muuta näyttöä.  Levylle on kyllä suunniteltu I2C liitäntä näyttöä varten, mutta posti ei ole viellä tuonut tilaamaani I2C-kytkentäistä näyttöä Suomeen asti. Näillä näkymin kuitenkin jätän näytön kokonaan pois.

Ongelmaksi selvisi virhe piirilevyssä. IMG_20150109_233454  Kuvassa näkyy kytkimen kyljessä  numerot 1,2,4 ja 8, jotka kertovat bittien järjestyksen kytkintä luettaessa. Piirilevyllä vedot menevät päinvastaisessa järjestyksessä. Kytkimeen asetettu ykkönen (0b0001) siis tuli luettua numerona kahdeksan (0b1000). Yksi funktio koodiin lisää ja ongelma oli ratkaistu.

Kuvassa näkyy myös seuraava ongelma. Kissa pääsi leikkimään kytkimellä ja testasin vain mekaanisen toiminnan kytkimestä ennen kuin tinasin sen paikoilleen. Olisi kannattanut testata myös sähköinen toiminta. Kissan hammas oli sen verran painassut kytkimen sisuskaluja, että kytkin ei toiminut kunnolla ja jouduin tinaamaan sen irti. Onneksi olin tilannut yhden ylimääräisen, vaikka suhteellisen kalliita mokomat ovat!wpid-wp-1420882629588.jpeg

Kuva ei ole mitenkään selvä, mutta tarkkaan katsomalla siitä näkee, että alhaalta laskien toinen “liuku” on taipunut. Ehkä sen olisi saanut toimimaan, mutta kun oli toimiva kappalekin niin laitoin sen.

 

Koodissa on vielä tekemistä ja RTC-moduli IMG_20150112_012817(kuvassa keltainen) on kotelointia ajatellen aika hankalasti 90 asteen kulmassa alaspäin. Moduli on tinattu noin, koska etupuolelle tinattuna se olisi ollut ICSP liittimen tiellä. Tässä versiossa taidan vain vaihtaa/suoristaa pinnit ja asentaa modulin varsinaisen piirilevyn alle, mutta kaikkien virheiden takia taidan tehdä levystä version kaksi, jossa lisään RTC-modulin piirit suoraan pääpiirilevylle. Tällä hetkellä käytössä ds1307 piiriin prustuva RTC-moduli. Levyltä pitää lisäksi siirtää muutamia komponentteja hiukan, koska nyt ne ovat liian ahtaasti.

Laite siis kuitenkin toimii tällä hetkellä ja jo useampana aamuna olen herännyt helposti. RTC- moduli ei tosin tunnu olevan kovin tarkka, melkein minuutin per päivä heittää kello. Tarkemmin ajatellen itseasiassa kide taitaa olla suurin syyllinen kellon heittoon.

Pieniä harmaita aivosoluja sai kyllä koodatessa käyttää, kuten esimerkiksi miten asettaa RTC-kellon aika, kun laitteessa ei ole yhtään ainutta nappia? Vain A7D-kytkimet ja encoderi. Ratkaisu oli sitten kuitenkin aika yksinkertainen. Mikä tahansa ei kellon ajaksi sopiva asetus A7D kytkimissä, asettaa laitteen tilaan, jossa  kellonajan voi asettaa. A7D-kytkimiin laitetaan kellonaika ja encoderia pyöräyttämällä se siirretään RTC-chippiin. Muitakin asetuksia voinee laittaa vastaavalla menetelmällä, mutta katsotaan.

Lisäksi nälkä kasvaa syödessä! Alunperin oli tarkoitus tehdä valosta ihan oma yksikseen toimiva, mutta nyt mielessä on netin yli ohjauksen lisääminen masiinaan.  Samalla voisi käyttää NTP:tä hyväksi ja pitää sillä kellonaika oikeana.

Voin lähettää koodin ja eagle tiedostot sähköpostilla, jos joku niitä kaipaa. Tänne en niitä (viellä) laita, koska molemmissa on viellä tekemistä aika paljon.  edit: whatta heck!! laitetaan kuitenkin tarjolle vaan. Tuleepahan samalla opeteltua tuota GITHubin käyttöä. Lisäksi noita piirilevyjä on enemmän kuin minä tarvitsen, että niistäkin voidaan päästä sopuratkaisuun. Sarastevalo siis sinällään toimii, mutta en voi sanoa olevani viellä täysin tyytyväinen siihen.