Merk: Python.

Maling av barometertrykk med BMP180 og bestemmelse av omgivelsestemperatur ved korrelasjon.

V rstasjonene kan normalt male barometertrykket og gi deg en v r trend basert pa barometertrykket i lopet av de siste par timene.

For a male barometertrykket med min Raspberry Pi, bruker jeg Bosch BMP180 trykksensor. Et veldig godt Python-bibliotek og en veiledning for bruk av Bosch BMP180 (som er programvare kompatibel med den eldre BMP085) sammen med Raspberry Pi leveres av Adafruit.

Det eneste du ma v re oppmerksom pa, hvis du skal male barometertrykket, er at sensoren gir deg absolutte verdier, men siden trykket endrer seg ogsa over hoyde, og du vil kunne sammenligne verdiene av forskjellig plassering, normaliseres barometertrykket normalt til havniva.

For a beregne det normaliserte havnivaet barometertrykk, ma du vite hoyden over havnivaet pa stedet, hvor du maler barometertrykket. Denne beregningen er inkludert i Python-skriptet pa slutten av denne siden. Jeg bruker den til a lese og lagre ogsa de barometriske trykkverdiene i en RRDtool-database og lage grafer, derfor gjor jeg for utetemperatur og fuktighet.

BMP180 maler ikke bare trykket, det maler ogsa temperaturen. Forst og fremst ville jeg ikke bruke temperaturverdiene fra sensoren og sa legger jeg den direkte inn i Raspberry Pi-saken, slik at det ikke er noen ekstra kabler rundt Raspberry Pi og at sensoren selv er beskyttet mot stov.

Men da syntes jeg det ville v rt fint a ha bade indre temperaturer, den ene fra underetasjen (fra FRITZ! Dect200) og den fra overetasjen i et diagram, men likevel onsket jeg a holde sensoren inne i sak, pa grunn av arsakene jeg har nevnt tidligere.

Selvfolgelig er temperaturavlesningene fra BMP180 mye til hoye i tilfelle av Raspberry Pi. Men det som ogsa er sant, er at den malte temperaturen er en sammenheng mellom den utvendige omgivelsestemperaturen og CPU-temperaturen. Og den senere kan du ogsa male enkelt.

Sa, du har to kjente og en ukjent variabler. Det eneste du har a gjore na er a finne en ligning, sa kan du bruke de kjente variablene til a beregne verdien av den ukjente variabelen. Minst en rimelig tiln rming bor v re mulig. Siden det finnes forskjellige tilleggskort tilgjengelig for Raspberry Pi som ogsa inneholder temperaturfolere, var jeg overbevist om at noen burde ha mott samme situasjon allerede. Heldigvis var dette tilfellet, og et lignende prosjekt fant en veldig god tiln rming.

For endelig a bruke tiln rming ma du male omgivelsestemperaturen med et ekstra termometer, lese gjeldende CPU-temperatur og temperaturen fra sensoren, og deretter beregne verdien av FACTOR. Hvis du gjor dette flere ganger og beregner et gjennomsnitt, bor du fa en ganske god verdi som skal gi en tilfredsstillende tiln rming. Fra min erfaring skal lesingene v re rundt +/- 0,5 ° C rundt den virkelige temperaturen.

Du kan tydelig se korrelasjonen mellom CPU-temperaturen og den beregnede omgivelsestemperaturen. Dessverre er CPU-temperaturen ganske stoyende, og denne stoyen vises ogsa pa omgivelsestemperaturen. Selvfolgelig kan du gjore en enkel lavpassfiltrering av resultatene, men da ma du male temperaturene ganske ofte for a unnga en lengre forsinkelse mellom den siste lesingen og naverdien. Jeg bestemte meg for a forlate det uten a filtrere og male temperaturene bare hvert femte minutt.

Nedenfor finner du mitt Python-skript, som inkluderer lesingen fra BMP180 (eller den eldre BMP085), normaliseringen av trykk til havniva, temperaturkorreksjon og skriving til databasen.

rtl_433 pa en Raspberry Pi gjort kuldebestandig.

Som jeg har nevnt for, bruker jeg rtl_433 pa min Raspberry Pi for a motta utetemperaturen og fuktigheten fra sensoren til min lille v rstasjon og lagre verdiene i en RRDtool-database. Etterpa bruker jeg de samlede dataene til a lage noen grafer for forskjellige perioder i fortiden.

Generelt fungerer dette veldig bra, men etter hvert, etter en eller flere maneder, begynner noe i RTL-SDR a henges, antagelig USB-kontrolleren selv, og du kan bare fa det til a lope igjen ved a koble fra og kopiere stokken pa nytt fysisk. Minst a si at jeg ikke var veldig fornoyd med denne situasjonen, spesielt siden jeg har provd forskjellige pinner, alltid med det samme skuffende resultatet. Men som alltid var det i hvert fall noen som hadde a gjore med denne typen problem for og heldigvis allerede funnet en losning for det. Navnet pa losningen er usbreset.c, et lite C-program som kan bygges og brukes pa bare noen fa minutter.

Jeg bruker et lite Bash-skript for a bestemme hvor RTL-USB er plassert pa bussen ved hjelp av lsusb og til a ringe kjorbar av usbreset.

Nedenfor er Python-skriptet som jeg bruker til a ringe rtl_433. Hvis alt gikk bra med samtalen, skriver jeg de mottatte verdiene til databasen, ellers kaller jeg Bash-skriptet ovenfra for a tvinge en USB-tilbakestilling av RTL-SDR (i stedet for en fysisk tilbakekobling).

En enkel vifteregulering uten PWM.

Hvis du vil kontrollere en vifte som ikke stotter PWM (for a kontrollere viftehastigheten), ved a bruke bare GPIO-ene fra Raspberry Pi (og en transistor og et rele selvfolgelig), kan du i utgangspunktet ikke gjore noe mer enn a sla det pa og av. Hvis du bruker et skript som slar pa viften i en viss tid og det gar jevnlig, kan det enkelt skje at viften gar altfor kort, eller altfor lenge, avhengig av omgivelsestemperaturen. Vi kan minimere denne effekten ved a legge til litt logikk pa skriptet og legge til noe jeg liker a ringe & # 8216; PWM i stor skala & # 8217 ;.

Du kontrollerer bare vilkarene som utloser viften flere ganger i lopet av tidsluke du har tildelt for a kjore skriptet. Du kan legge til sa mye sjekker om du vil, eller til og med legge til forskjellige terskler, til du er fornoyd med systemets oppforsel.

Nedenfor er et skript som skal lope hvert 10. minutt som forsoker a holde CPU-temperaturen i gjennomsnitt pa 46 ° C, ved hjelp av tre kontroller, en lengre hoveddriftstid for viften og to ytterligere kortere.

Leser temperaturen fra FRITZ! DECT-enheter.

Hvis du eier en FRITZ! -bokser fra det tyske firmaet AVM som har en integrert DECT-basestasjon, kan du koble til enheter fra deres FRITZ! DECT-tilbehorslinje, som byttekontakter og radiatorstyrer via DECT.

FRITZ! DECT 200, 210 og 300 er ogsa utstyrt med en temperatursensor. Med en nylig fastvare for FRITZ! Box-ruteren viser AVM na et temperaturdiagram for de siste 24 timene. Dessverre virker det bare for informasjonsformal, og det er ikke mulig a laste ned temperaturdata fra ruteren. Ogsa dataene vil ga tapt etter at du har startet ruteren din pa nytt.

Men det som ikke er veldig kjent er at AVM gir tilgang til de tilkoblede enhetene via eget HTTP-grensesnitt for hjemmevirksomhet. Nar du logger inn pa FRITZ! Box, bruker du en sesjon-ID, kan du bruke det nevnte HTTP-grensesnittet. Ved a bruke dette grensesnittet, kan du ikke bare lese temperaturen fra FRITZ! DECT-enhetene, du kan ogsa lese en rekke andre opplysninger, og du kan sla strommen til stromuttakene av og pa og kontrollere temperaturen pa stralekontrolleren. Sa, faktisk kunne du designe ditt eget personlige hjemmautomatiseringssystem, ved hjelp av grensesnittet pa Raspberry Pi hvis du vil. Siden jeg bruker MyFRITZ! App levert av AVM for a kontrollere enhetene, er jeg hovedsakelig interessert i a bare lese temperaturen. Med folgende Bash-skript er det veldig enkelt a regelmessig lese temperaturen fra en tilkoblet FRITZ! DECT-enhet. Du ma bare fylle ut passordet til FRITZ! Box og den unike AIN-enheten din, som vises i & # 8216; Smart Home & # 8217; menyen i FRITZ! -boksen.

Det er ogsa relativt enkelt a ringe manuset i et python-skript. Anta at du har lagret bash-skriptet under navnet & # 8216; fritztemp.sh & # 8217;, du kan bruke folgende python-kode som en innpakning som du kan inkludere i dine egne skript.

Jeg bruker koden som vises her for a lese temperaturen fra en av mine FRITZ! DECT200 enheter i underetasjen i leiligheten min, lagre den i en RRDtool database og generere en graf, sammen med temperaturen i overetasjen som males av en Bosch BMP180 trykksensor.

Du kan enkelt se at trenden i grafen er noyaktig den samme som den er i diagrammet som vises av FRITZ! Box-ruteren selv.

Laster inn v rmeldingen til Weather Underground.

Weather Underground er et registrert varemerke for The Weather Channel, LLC. bade i USA og internasjonalt. Weather Underground Logo er et varemerke for Weather Underground, LLC.

Hvis du bruker Raspberry Pi som v rstasjon, kan du v re interessert i a dele dataene dine med et slags v rnett. Weather Underground er et av disse nettverkene. De gir en API for bade opplasting og nedlasting av v rdata til og fra nettverket.

For interesserte personer utenfor USA, kan det v re litt vanskelig a bruke APi, siden de mest sannsynlig ikke er veldig kjent med USAs vanlige enheter. Temperaturen ma leveres i Fahrenheit, og det atmosf riske trykket ma leveres i tommer kvikksolv. Videre, for a gi dagens duggpunkt, ma man bruke en viss ligning for a fa en tiln rming som er tilstrekkelig nok.

Jeg lagrer de malte verdiene pa v rstasjonen min i en RRDtool-database og laster den opp etterpa til Weather Underground, ved hjelp av folgende skript. Du bor enkelt kunne tilpasse skriptet slik at det passer til datakilden din (v r [2] [0] [0] er temperaturen i ° C, v ret [2] [0] [1] er fuktighet i% og trykk [2] [0] [1] er atmosf retrykket i hPa). I tillegg ma du spesifisere DESTINASJONSIDEN og DOBBELORDET ditt ved a bruke din personlige Weather Underground-kontoinformasjon.

En enkel GUI for rtl_433 med Python og Qt.

Pa min Raspberry Pi bruker jeg rtl_433 til a lese temperaturen og fuktigheten fra utendorssensoren til v rstasjonen, lagre dem i en database og generere noen grafer for de siste 24 timer, syv dager, 30 dager og 365 dager.

Det er ogsa en versjon av rtl_433 tilgjengelig her, som er kompilert for Windows, og jeg onsket a bygge en enkel GUI for det, sa jeg kan bruke en annen RTL-SDR-pinne som jeg hadde ligget rundt, for a overvake dataene fra sensoren i i sanntid og pa en fin og anstendig mate pa min Windows-PC.

Nar det gjelder programmering av noen GUI-baserte applikasjoner for Windows, blir det ofte sv rt tidkrevende og frustrerende, spesielt hvis du bruker C ++, slik at du lurer pa om det er verdt innsatsen for ideen din.

Etter a ha kikket en stund, provde a finne en enklere mate a innse hva jeg hadde i tankene, kom jeg over denne oppl ringen. Siden jeg hadde stort sett all funksjonalitet som allerede ble implementert i Python pa Raspberry Pi, trodde jeg det ville v re en god ide a bruke Python og Qt for dette. Sa jeg lastet ned og installerte Anaconda.

Etter noen sliter, fordi eksemplet i oppl ringen bruker PyQt4 og Anaconda kom sammen med PyQt5, hadde jeg endelig en forste fungerende versjon av programmet mitt. GUI selv ble enkelt opprettet med Qt Designer, som allerede kommer sammen med Anaconda.

Men snart la jeg merke til hva jeg allerede mistenkte for a v re et potensielt problem, faktisk oppsto som et reelt problem. Siden ringer rtl_433 og venter pa at det returnerer et resultat i samme trad som brukes til GUI, reagerte GUI ikke mens rtl_433 var fortsatt aktiv. GUI reagerte ikke i lopet av denne tiden.

Jeg kom rundt et annet eksempel som viser deg hvordan du bruker trader for a unnga akkurat dette problemet. Igjen, det eksemplet bruker ogsa PyQt4 i stedet for PyQt5, sa litt mer forskning og innsats var nodvendig for a fa det til a lope, men da var det, min egen sote lille GUI for rtl_433!

Pa min Raspberry Pi, legger jeg ogsa opp de nav rende malte verdiene for temperatur, fuktighet og trykk til Weather Underground. A gjore det krever en API-nokkel, og siden jeg allerede har en, syntes jeg det ville v re fint a bruke det igjen for a lese det opplastede trykket tilbake og vise det sammen med sanntidsverdiene fra rtl_433 for a vise visning av den lille v rstasjonen fullstendig. For API-anropet bruker jeg ogsa en egen trad pa samme mate som jeg gjor for a ringe rtl_433. Nedenfor finner du den endelige koden, som bare krever at du erstatter DERAPYYERE og DESTINASJONER.

Hvis du vil bygge en kjorbar og dermed kunne kjore den pa en datamaskin som ikke har installert Anaconda, kan du i tillegg bruke PyInstaller til a pakke alle nodvendige runtime-biblioteker sammen i en kjorbar fil.

Til slutt brukte jeg Resource Hacker til a endre ikonet for den genererte kjorbarheten, slik at den er den samme som jeg bruker i GUI.

Som du kan se, er den endelige kjoringen ganske stor, siden hele runtime-miljoet for Python og Qt er inkludert. Men siden innsatsen for a lage programmet var ganske akseptabelt, og jeg er veldig fornoyd med resultatet, ser jeg ikke dette som en ekte ulempe.