Mikael63 Postad Oktober 21, 2022 Dela Postad Oktober 21, 2022 (redigerade) Sökte på ordet Python och fick träffar som är 12 år gamla, eller mer men gör ett försök ändå. (Har ställt samma fråga i annat forum som hade en forumkategori för just programmering.) Jag har denna kod: # 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.D4, 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) Jag skulle vilja peta in rader som påverkar ett usbrelä vid ett visst gradtal. Om jag manuellt triggar reläet gör jag det i ett terminalfönster med usbrelay HW348_1=1 Någon som kan hjälpa mig med detta? Redigerad Oktober 21, 2022 av Mikael63 Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Lösning _.M Postad Oktober 21, 2022 Lösning Dela Postad Oktober 21, 2022 För det första, är du medveten om att adafruit verkar ha lagt ned supporten på pyton biblioteket du använder? Bara så du vet. Kanske något I stil med det här fungerar Quote if temperature_c == 10: os.system("usbrelay osv etc") Jag är osäker på hur du tar hand om eventuellt svar från usbrelay programmet dock. Och dessa rader bör kluddas, strax under där du tilldelar temperature_c variabeln. 1 Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Mikael63 Postad Oktober 21, 2022 Författare Dela Postad Oktober 21, 2022 2 timmar sedan, _.M sade: För det första, är du medveten om att adafruit verkar ha lagt ned supporten på pyton biblioteket du använder? Bara så du vet. Ja, det tog rätt länge innan jag insåg detta. Hittade koden här: https://learn.adafruit.com/dht-humidity-sensing-on-raspberry-pi-with-gdocs-logging/python-setup och där är det då CircuitPython libraries som används. 2 timmar sedan, _.M sade: Kanske något I stil med det här fungerar Ja det gör det! Jag fick lägga till import os först. 2 timmar sedan, _.M sade: eventuellt svar från usbrelay Ja det poppar upp en massa rader... Citat Orig: HW348, Serial: HW348, Relay: 1 State: ff Device Found type: 16c0 05df path: /dev/hidraw0 serial_number: Manufacturer: www.dcttech.com Product: USBRelay1 Release: 100 Interface: 0 Number of Relays = 1 Serial: HW348, Relay: 1 State: ff 1 HID Serial: HW348 Serial: HW348, Relay: 1 State: ff Serial: HW348, Relay: 1 State: ff --- Found Temp: 76.8 F / 24.9 C Humidity: 42.4% När jag testade så använde jag if temperature_c > 24.4: os.system("usbrelay HW348_1=1") if temperature_c < 24.4: os.system("usbrelay HW348_1=0") Samplar jag på en sekund får jag ju en väldigt exakt "termostat" Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Mikael63 Postad Oktober 21, 2022 Författare Dela Postad Oktober 21, 2022 (redigerade) Jag lägger in hela "min" kod här: (där är det dock 10 sekunder mellan varje koll av temperaturen) # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries # SPDX-License-Identifier: MIT import time import board import adafruit_dht import os # 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.D4, use_pulseio=False) while True: try: # Print the values to the serial port temperature_c = dhtDevice.temperature setpoint = 22.6 if temperature_c > setpoint: os.system("usbrelay HW348_1=1") if temperature_c < setpoint: os.system("usbrelay HW348_1=0") print( "{:.1f}".format( temperature_c ) ) 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) Redigerad Oktober 22, 2022 av Mikael63 rensat koden för mitt behov 1 Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Mikael63 Postad Oktober 22, 2022 Författare Dela Postad Oktober 22, 2022 Jag kan ju fylla på med denna bild.. som jag har tagit härifrån https://www.researchgate.net/figure/Wiring-diagram-for-connecting-the-DHT22-sensor-to-the-RPi_fig3_335740857 *** USB-reläet då? Ja jag vet inte när jag fick den idén. På chans skaffade jag ett av de billigaste hos Jeff B,s svenska webbshop. Hade inte några större förhoppningar att mitt tålamod skulle räcka för att få liv i det men där tog jag faktiskt fel (men säg inte det till nån). I åtminstone Linux Mint och i Raspberry Pi OS "finns" paketet usbrelay. Installeras snabbt med sudo apt install usbrelay vad reläet heter får man fram genom att skriva usbrelay i terminalen: Citat Device Found type: 16c0 05df path: /dev/hidraw2 serial_number: Manufacturer: www.dcttech.com Product: USBRelay1 Release: 100 Interface: 0 Number of Relays = 1 HW348_1=0 I mitt fall heter det då HW341_1 och nu har det statusen 0 dvs AV Jag har "snyggat" till koden lite, byter ut den ovan.. Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Mikael63 Postad December 11, 2022 Författare Dela Postad December 11, 2022 (redigerade) Nu har jag hittat ett annat användningsområde Koden ser nu ut så här: # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries # SPDX-License-Identifier: MIT import time import board import adafruit_dht import os import requests # 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.D4, use_pulseio=False) temperature_d = 20 #init value while True: try: # Print the values to the serial port temperature_c = dhtDevice.temperature temperature_a = temperature_c - 1.8 temperature_b = str("{:.1f}".format (temperature_a)) humidity = dhtDevice.humidity fukt = str("{} %".format (humidity)) result = "Temp " + str(temperature_b) + " °C Fukt " + str(fukt) if temperature_a < temperature_d - 1: requests.post("https://ntfy.sh/xxxxtemp",data=result.encode(encoding='utf-8')) temperature_d = temperature_a if temperature_a > temperature_d + 1: requests.post("https://ntfy.sh/xxxxtemp",data=result.encode(encoding='utf-8')) temperature_d = temperature_a print( "{:.1f} {:.1f} {:.1f} {} % ".format( temperature_c, temperature_a, temperature_d, 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(600.0) Vad gör då detta? Jo, var 10:e minut görs en kontroll av yttertemperaturen. Är avvikelsen mer än en (1) °C från föregående mätning skickas ett pushmeddelande till min surfplatta. Meddelandet skickas med hjälp av ntfy.sh och tas emot av den appen i surfplattan. Vill jag kolla hur många grader det är öppnar jag appen och kollar. Väderappar i all ära men de visar i regel den temperatur som prognosen, någon gång längre tillbaks i tid, trodde det skulle bli. Ja, undantaget https://rl.se då förstås. (-1,8 i koden är för att "kalibrera" temperaturen) Redigerad December 13, 2022 av Mikael63 lite uppfixad kod Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Mikael63 Postad Januari 18 Författare Dela Postad Januari 18 (redigerade) Får skämmas lite. Skulle ha uppdaterat denna tråd för mer än ett år sedan! Det blev inget av med projektet ovan. Det gick inte att hantera minusgrader och då blir det en rätt kass utomhustermometer. Sensorn i sig klarar minus men inte "biblioteket". *** Nu har dock projektet återupptagits och nu med en annan sensor. Jag snodde hela upplägget härifrån: https://raspberrypi-guide.github.io/electronics/temperature-monitoring Modifierade koden så att jag får notis i telefonen: #!/usr/bin/env python import os import glob import time import datetime import requests def read_temp(decimals = 1, sleeptime = 600): """Reads the temperature from a 1-wire device""" device = glob.glob("/sys/bus/w1/devices/" + "28*")[0] + "/w1_slave" lasttemp = 20 #init value while True: try: timepoint = datetime.datetime.now() with open(device, "r") as f: lines = f.readlines() while lines[0].strip()[-3:] != "YES": time.sleep(0.2) lines = read_temp_raw() timepassed = (datetime.datetime.now() - timepoint).total_seconds() equals_pos = lines[1].find("t=") if equals_pos != -1: temp_string = lines[1][equals_pos+2:] temp = round(float(temp_string) / 1000.0, decimals) print(time.strftime("%d/%m/%y@%H:%M:%S - ")+str(temp)+" C") if temp > lasttemp + 1: requests.post("https://ntfy.sh/minprenumeration_hos_ntfy",data=str(temp)+" C") lasttemp = temp if temp < lasttemp - 1: requests.post("https://ntfy.sh/minprenumeration_hos_ntfy",data=str(temp)+" C") lasttemp = temp time.sleep(sleeptime-timepassed) timepoint = datetime.datetime.now() except KeyboardInterrupt: break if __name__ == "__main__": read_temp() Redigerad Januari 18 av Mikael63 2 Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Recommended Posts
Delta i dialogen
Du kan skriva svaret nu och registrera dig senare, Om du har ett konto, logga in nu för att svara på inlägget.