Raspberry Pi a logování teploměru

Ston3

Raspberry Pi a logování teploměru
« kdy: 26. 09. 2012, 10:34:52 »
Zdravim, zprovoznil jsem si na Rapsberry PI teplotní čidlo DS18B20. Podle návodu na http://www.astromik.org/raspi/15.htm
Chtěl jsem si k tomu napsat něco jako logování do souboru, ale zasekl jsem se snad na syntaxi nebo tomu spíš vůbec nerozumím.
Snad podle toho již napsaného kódu pochopíte o co mi šlo.

Udělal jsem si soubor s obsahem:
Kód: [Vybrat]
#!/bind/sh
if [ cat /sys/bus/w1/devices/28-000001b4374e/w1_slave | grep YES| cut -f 12 -d\ = "YES"]
then
date "+%Y%m%d-%X" cat /sys/bus/w1/devices/28-000001b4374e/w1_slave | grep t=*| cut -f 10 -d\ >> /data/logovani.log
else
echo neco je spatne
fi
pak jsem ho změnil na spustitelný a spustil.

Vystup z toho cidla je na dvou radcich na prvnim bych chtel napred overit jestli souhlasi kontrolni soucet (| grep YES| cut -f 12 -d\ = "YES")
Pokud ano, tak bych chtel zapsat datum a čas + ten druhý řádek pouze tu teplotu (grep t=*| cut -f 10 -d\ )

V prvé řadě bych chtěl pomoci s tou syntaxí, vyzkoušet to stejně budu moci až večer.
Zatím děkuji za pomoc
« Poslední změna: 26. 09. 2012, 11:07:58 od Petr Krčmář »


jmeno je povinne

Re:Raspberry Pi a logování teploměru
« Odpověď #1 kdy: 26. 09. 2012, 20:27:36 »
Zkusil bych to nejak takto:
Kód: [Vybrat]
(first=true; while read l; do
  [ "$first" ] && if echo "$l" | grep YES >/dev/null; then
    first=
    continue
  else
    exit
  fi

  (date "+%Y%m%d-%X"; echo "$l" | cut -d= -f 2) >> /data/logovani.log; done
) < /sys/bus/w1/devices/28-000001b4374e/w1_slave

MiK

Re:Raspberry Pi a logování teploměru
« Odpověď #2 kdy: 26. 09. 2012, 20:33:34 »
Já to dělám v Pythonu:

Soubor /home/pi/teplomer.py :

Kód: [Vybrat]
#!/usr/bin/python
import os
import datetime


# prvni cidlo
kontrola="NO"
while kontrola != "YES":
  soubor=file('/sys/bus/w1/devices/28-000002da7fc9/w1_slave','r') # tady samozrejme tvuj unikatni kod teplomeru
  celydata=soubor.read()
  soubor.close()
  print celydata     # jen pro kontrolu zobrazeni dat v terminalu
  zacatekcrc =celydata.find ( 'crc=' ) + 7
  kontrola = celydata[zacatekcrc:]
  kontrola = kontrola[:3]
  zacatek = celydata.find ( 't=' ) + 2
  teplota1 = round(float(celydata[zacatek:]) / 1000,1)



# tady je to ukladani dat do souboru "teplodata.txt"

aktualnicas = datetime.datetime.now()

soubor=file("/home/pi/teplodata.txt",'a')
soubor.write(aktualnicas.strftime("%Y-%m-%d %H:%M") + "    Teplota1:" + str(teplota1)  + "\n")
soubor.close()



Spouštění jednoho měření je pak příkazem:
sudo python /home/pi/teplomer.py


Asi by to chtělo dodělat i nějakou podmínku na utržené čidlo (například když se nepodaří po 10 pokusech získat správný kontrolní součet, tak zahlásit problém a ukončit smyčku)

mhepp

Re:Raspberry Pi a logování teploměru
« Odpověď #3 kdy: 09. 10. 2012, 22:28:08 »
Při načítání teploty z DS18B20 připojeného přímo na 1-wire sběrnici RPi jsem se setkal s velkou nespolehlivostí -- teploty skákaly, čidla se občas ztratila a tak. Měl jsem připojená čtyři čidla dohromady na cca 6m drátu a bylo to dost hraniční. Nakonec jsem vytvořil dost obskurní skript v AWK, který nejen, že kontroluje CRC, ale i rozsah teplot a načítá opakovaně. Zjistil jsem totiž, že se občas stalo, že v souboru bylo napsáno, že kontrolní součet sedí, ale očividně se lišily a teploty skákaly o cca 8°C proti skutečnosti. Takže se vyplatí kontrolovat i ten součet.

Výsledek je ten, že jsem si pořídil převodník i2c na 1-wire, čidla pripojuji na něj a teploty vyčítám přes owfs. Je to spolehlivější, pokud potřebuješ připojit víc čidel na delší vzdálenost.

Skript je bez komentářů, páč jsem byl líný, obsahuje pár zbytečností zapomenutých díky jeho postupnému vývoji, ale fungoval spolehlivě. Na rozdíl od 1-wire implementace v jádře. Ke stažení je zde: http://95.140.247.68:8088/nacti_teplotu.awk

Také bych Ti doporučil, abys neukládal hodnoty do plaintextu, ale použij třeba oblíbené RRD -- přidá Ti časové značky a grafy v ceně: http://95.140.247.68:8088/cgi-bin/gen_stranku.cgi

zapik

Re:Raspberry Pi a logování teploměru
« Odpověď #4 kdy: 10. 10. 2012, 12:45:59 »
Mohu poprosit o nějaké detaily ohledně toho převodníku?

Díky


Soptadv

Re:Raspberry Pi a logování teploměru
« Odpověď #5 kdy: 10. 10. 2012, 15:29:40 »
Ahoj,

existuje projekt Digitemp jehož výstupem je binárka digitemp, která třeba v Debianu dostupná přes standartní repozitáře.
Já pomocí Digitempu na staré plečce x68 sbírám přes sériový port a převodník (home made) teploty ze čtyřech čidel 1-wire.
Tyhle čidla mám po domě, délka kabelů je cca 30m. Používám ethernetové kabely ale ty čidla nesmí být zapojeny "vedle sebe" ale "za sebou". To znamená že mi kabel od převodníku nejdříve vede k prvnímu čidlu a odsud ke druhému a tak dále. Pokud jsem to měl spojené v jednom místě "paralerně" tak mi nefungovalo vyhledávání zařízení na sběrnici a její procházení.
Jen nevím jestli tenhle SW je zkompilován pro Raspberry.
Více tady: http://www.digitemp.com/

Petr

mhepp

Re:Raspberry Pi a logování teploměru
« Odpověď #6 kdy: 11. 10. 2012, 10:51:55 »
Zapik:

http://www.maximintegrated.com/datasheet/index.mvp/id/4338

To je ten převodník i2c -> 1-wire. Má 8 nezávislých 1-wire sběrnic, takže můžeš mít 8 větví se spoustou čidel...

Tlak mi zase měří toto:

http://dx.com/p/bmp085-barometric-digital-pressure-sensor-module-board-for-arduino-blue-147261?item=4

Potom jsem našel ještě převodník 3V logiky na 5V -- TCA9406. Takže mám i2c jak 3V, tak 5V...


MichalS

Re:Raspberry Pi a logování teploměru
« Odpověď #7 kdy: 19. 02. 2013, 22:31:10 »
Zdravím, zkoušel jsem udělat vše podle návodu na raspi.cz. Ale nedaří se mi nic detekovat pomocí i2c-detect. Níže jsou odkazy naobrázky, jak je udělaný ten převodník. Bohužel jsem to dělal ve škole a nakreslili jsme to obráceně, takže je tam čip s ohnutýma nožkama + drátek. Uměl by někdo poradit? Několikrát jsem to ve škole konzultoval a napájené by to mělo být dobře. Čidlo ds18b20 je v pořádku.

http://oi45.tinypic.com/vyawb6.jpg
http://oi50.tinypic.com/2eb48kp.jpg