Fórum Root.cz

Hlavní témata => Software => Téma založeno: Ston3 26. 09. 2012, 10:34:52

Název: Raspberry Pi a logování teploměru
Přispěvatel: Ston3 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
Název: Re:Raspberry Pi a logování teploměru
Přispěvatel: jmeno je povinne 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
Název: Re:Raspberry Pi a logování teploměru
Přispěvatel: MiK 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)
Název: Re:Raspberry Pi a logování teploměru
Přispěvatel: mhepp 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
Název: Re:Raspberry Pi a logování teploměru
Přispěvatel: zapik 10. 10. 2012, 12:45:59
Mohu poprosit o nějaké detaily ohledně toho převodníku?

Díky
Název: Re:Raspberry Pi a logování teploměru
Přispěvatel: Soptadv 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
Název: Re:Raspberry Pi a logování teploměru
Přispěvatel: mhepp 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...

Název: Re:Raspberry Pi a logování teploměru
Přispěvatel: MichalS 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