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 :)
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 :)
Vastaukset 5
Vanhimmat
Mikset tallenna tiedot suoran tietokantaan? Esim mysql tai sqlite?
>> 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
__________________________________
>> 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 :)
>> 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
>> 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