Lämpötila-anturi skripti apua

Minulla on DS18B20 lämpötila-antureita, ja olen kirjoittamassa skriptiä niille joka tallentaa lämpötiloja antureiden nimeä vastaavaan tiedostoon.

Antureilla on omat kansionsta joka on muotoa 10-xxxxxxxx ja jokaisella anturilla on uniikki kansio, josta löytyy w1_slave niminen tiedosto joka sisältää tietoa ja lämpötilan. (Kansiot tulevat automaattisesti, ei itse luoda)

Tällä hetkellä skriptiin joutuu päivittämään manuaalisesti kunkin anturin kansion ja tallennustiedoston, ja jos anturin ottaa irti niin skripti silti hakee tiedostoa jota ei ole. Olen tällä hetkellä tehnyt muuttujan per anturi, johon tallennan lämpötilan ja josta sitten laitan tiedostoon lämpötilan.

Tämän hetken toiminta on hieman kömpelö:
-Antureiden tallennustiedostot luodaan itse kirjoitetun nimen mukaan.
-Lämpötila tallennetaan muuttujaan, joka hakee itse kirjoitetun polun mukaan lämpötilan anturista ja tallentaa sen aiemmin luotuun tiedostoon.
-Kun anturia ei ole, skripti ei ymmärrä miksi se ei löydä polkua...

Miten onnistuu tälläiset parannukset:
-Skripti osaa tunnistaa että montako anturia on liitetty (montako "10-" alkuista tiedostoa on kansiossa josta antureiden kansiot löytyvät)
-Käydä kunkin anturin nimen läpi, ja jos kyseiselle anturille ei löydy lämpötilan tallennustiedostoa, se luo sen tapaan 10-xxxxxxx_päivänmäärä
-Tallentaa lämpötilan (jatkaa saman tiedoston perälle) kyseiseen tiedostoon

Kiitokset niille jotka lukivat tämän pläjäyksen :)
588
Äänestä

Muut lukivat myös

Vastaukset 5

Vanhimmat

Mikset tallenna tiedot suoran tietokantaan? Esim mysql tai sqlite?

Äänestä
  • >> Skripti osaa tunnistaa että _montako_ anturia on liitetty eli
    montako "10-" alkuista tiedostoa on kansiossa josta antureiden kansiot löytyvät >>
    $ ls /jokin/hakemisto | grep "10-" | wc

    jos päätteessä toimaa niin sitten skriptissä käytettynä esmes näin:
    __________________________________

    #!/bin/bash
    LKM=$(ls /jokin/hakemisto | grep "10-" | wc)
    echo $LKM
    __________________________________

    Äänestä

  • >> Skripti osaa tunnistaa että _montako_ anturia on liitetty eli
    montako "10-" alkuista tiedostoa on kansiossa josta antureiden kansiot löytyvät >>

    Parempi versio ("10-" alkuisten _tiedostojen_ lukumäärälle):
    $ LKM=$(find /jokin/hakemisto/10-* -type f | wc -l)
    $ echo $LKM

    Vain yksi muutos (-type d) ja saadaan "10-" alkuisten _alihakemistojen_ lukumäärä:
    $ LKM=$(find /jokin/hakemisto/10-* -type d | wc -l)
    $echo $LKM

    (PS. enempään en "sokkona" pysty vastaamaan :)

    Äänestä

  • >> Mikset tallenna tiedot suoran tietokantaan? Esim mysql tai sqlite? >>

    Ehkä aloittaja tässä vaiheessä testaa skriptejään ja viilaa niitä kunnes data on ok. Datan tallennus- ja esitysmuoto tulee sitten myöhemmin. Jos tallennus tietokantaan niin SQLite lienee se helpompi tapa.

    Mutta mielestäni paras tapa tallentaa aloittajan data olisi Round Robin -kanta, josta on automaagisesti pyöräytettävissä PNG-kuva / anturi.
    http://aijaa.com/mHYUcz
    (Kateltavissa simppelinä HTLM-sivuna online tai offline)
    Round Robin kannan määrittely vei aikaa ja tupakkia, mutta kun se oli tehty niin pelaa takuuvarmasti kuin junan vessa....

    Ainoo mitä tarvi asentaa on paku nimeltään
    rrdtool

    Äänestä

>> Tallentaa lämpötilan (jatkaa saman tiedoston jatkoksi) kyseiseen tiedostoon >>

a) Kun data uudelleenohjataan suoraan tiedostoon _yhdellä_ kulmasulku-merkillä >
niin tiedoston vanha data katoaa sillä se _kirjoitetaan yli_

b) Jos data uudelleenohjataan suoraan tiedostoon _kahdella_ kulmasulku-merkillä
>>
niin uusi data lisätään siellä olevan vanhan datan _jatkoksi_

Näin täällä:
http://aijaa.com/45SBCg

Äänestä

Kommentoi aloitusta


Lämpötila vahti kirjoitti:

Minulla on DS18B20 lämpötila-antureita, ja olen kirjoittamassa skriptiä niille joka tallentaa lämpötiloja antureiden nimeä vastaavaan tiedostoon.

Antureilla on omat kansionsta joka on muotoa 10-xxxxxxxx ja jokaisella anturilla on uniikki kansio, josta löytyy w1_slave niminen tiedosto joka sisältää tietoa ja lämpötilan. (Kansiot tulevat automaattisesti, ei itse luoda)

Tällä hetkellä skriptiin joutuu päivittämään manuaalisesti kunkin anturin kansion ja tallennustiedoston, ja jos anturin ottaa irti niin skripti silti hakee tiedostoa jota ei ole. Olen tällä hetkellä tehnyt muuttujan per anturi, johon tallennan lämpötilan ja josta sitten laitan tiedostoon lämpötilan.

Tämän hetken toiminta on hieman kömpelö:
-Antureiden tallennustiedostot luodaan itse kirjoitetun nimen mukaan.
-Lämpötila tallennetaan muuttujaan, joka hakee itse kirjoitetun polun mukaan lämpötilan anturista ja tallentaa sen aiemmin luotuun tiedostoon.
-Kun anturia ei ole, skripti ei ymmärrä miksi se ei löydä polkua...

Miten onnistuu tälläiset parannukset:
-Skripti osaa tunnistaa että montako anturia on liitetty (montako "10-" alkuista tiedostoa on kansiossa josta antureiden kansiot löytyvät)
-Käydä kunkin anturin nimen läpi, ja jos kyseiselle anturille ei löydy lämpötilan tallennustiedostoa, se luo sen tapaan 10-xxxxxxx_päivänmäärä
-Tallentaa lämpötilan (jatkaa saman tiedoston perälle) kyseiseen tiedostoon

Kiitokset niille jotka lukivat tämän pläjäyksen :)

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu