Skocz do zawartości

Podłączenie DHT22 do domoticza, Raspberry pi 3 model B


grniak

Pomocna odpowiedź

Nie jestem sobie w stanie poradzić z odczytywaniem danych z czujnika dh22 w domoticzu.

W konsoli odczytuje wartości za pomocą kodu:

# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT

import time
import board
import adafruit_dht

# Initial the dht device, with data pin connected to:
dhtDevice = adafruit_dht.DHT22(board.D4)

# you can pass DHT22 use_pulseio=False if you wouldn't like to use pulseio.
# This may be necessary on a Linux single board computer like the Raspberry Pi,
# but it will not work in CircuitPython.
# dhtDevice = adafruit_dht.DHT22(board.D18, use_pulseio=False)

while True:
    try:
        # Print the values to the serial port
        temperature_c = dhtDevice.temperature
        temperature_f = temperature_c * (9 / 5) + 32
        humidity = dhtDevice.humidity
        print(
            "Temp: {:.1f} F / {:.1f} C    Humidity: {}% ".format(
                temperature_f, temperature_c, humidity
            )
        )

    except RuntimeError as error:
        # Errors happen fairly often, DHT's are hard to read, just keep going
        print(error.args[0])
        time.sleep(2.0)
        continue
    except Exception as error:
        dhtDevice.exit()
        raise error

    time.sleep(2.0)


Po uruchomieniu programu otrzymuję:

domoticz@raspberrypi:~ $ python3 dht_simpletest.py
Temp: 87.1 F / 30.6 C    Humidity: 43.4% 
Temp: 87.1 F / 30.6 C    Humidity: 43.5% 

Chcąc przenieść wartości do domoticza skorzystałem ze skryptu:

#!/bin/sh
 
# Domoticz server
SERVER="192.168.xx.xx:xxxx"
# DHT IDX
DHTIDX="42"
 
# DHTPIN
DHTPIN="4"
 
sleep 5
 
sudo nice -20 python3 /home/domoticz/dht_simpletest.py 22 $DHTPIN > /var/tmp/te>
#TEMP=$(cat /var/tmp/temp.txt | grep "Temp" | awk '{ print $3 }')
#TEMP=$(cat /var/tmp/temp.txt | grep "Temp")
 
TEMP=$(awk ' /Temp/ {print substr ($0,6,4)}' /var/tmp/temp1.txt)
#HUM=$(awk ' /Hudmidity/ {print substr ($0,0)}' /var/tmp/temp.txt)
#HUM=$(awk ' /Humidity/ {print 1$}' /var/tmp/temp.txt)
HUM=$(awk ' /Humidity/ {print substr ($0,22,4)}' /var/tmp/temp1.txt)
echo $TEMP
echo $HUM
 
# Send data
curl -s -i -H "Accept: application/json" "http://$SERVER/json.htm?type=command&>
 
 
TEMP=""
HUM=""




I po uruchomieniu skryptu otrzymuję taki błąd:

domoticz@raspberrypi:~/domoticz/scripts $ ./dht22.sh
Traceback (most recent call last):
  File "/home/domoticz/dht_simpletest.py", line 5, in <module>
    import board
ModuleNotFoundError: No module named 'board'

Proszę o jakieś podpowiedzi 🙂 Przeszukałem forum ale nie znalazłem rozwiązania 😕 

Link do komentarza
Share on other sites

Podpowiedź
Masz problem ze ścieżkami systemowymi, w których python3 poszukuje niestandardowych modułów a do takich należy moduł board czymkolwiek on jest (w życiu nie dotykałem jeszcze RaspberryPi i nie mam pojęcia, co robisz).

Na potwierdzenie tej tezy dodaj sobie do skryptu dht_simpletest.py:
 

import sys

oraz na samo dzień dobry w tymże skrypcie wywołanie funkcji:
 

print(sys.path)

i porównaj to, co zobaczysz na konsoli, wywołując w/w skrypt w obydwu scenariuszach, które wymieniłeś:
- bezpośrednio z konsoli dht_simpletest.py 
- dht22.sh, który wewnątrz woła dht_simpletest.py 

Zobaczysz od razu róźnice w wartości zmiennej sys.path w obu przypadkach. Po szczegóły odsyłam do dokumentacji Pythona, Linuxa, Google, stackoverflow, inne ulubione😉 Chyba, że ktoś inny pamięta i poda Ci tu przepis, jak to szybko poprawić.

Uzupełnienie do podpowiedzi
Twój skrypt dht22.sh wywołuje dht_simpletest.py poprzez sudo, a więc chyba z innymi ustawieniami zmiennych środowiska (Bingo?) niż wywołanie z konta domoticz (??).

Edytowano przez ReniferRudolf
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.