Arduino weerstation bouwen en verwerken data

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • T.Kreeftmeijer
  • Registratie: December 2015
  • Laatst online: 19:17

T.Kreeftmeijer

Thomas Kreeftmeijer

Topicstarter
Nieuwe code in deze post: T.Kreeftmeijer in "Arduino weerstation bouwen en verwerken data"

Introductie

Met deze warme dagen de Arduino dozen er maar eens bij gepakt. Ik heb al best lang het idee om een eigen weerstation te gaan bouwen. Voordat het zover is, eerst de basis. In dit topic wil ik de voortgang laten zien en de problemen en oplossingen bespreken. Uiteindelijk zal ik alle code openbaar maken, maar zover is het nog niet.

Ik gebruik nu als basis een Arduino Mega2560 R3 van Elegoo. Daarnaast heb ik nog beschikking over de 37 sensor kit en wat losse dingen (Arduino Nano).

Eerste stappen

Om tot het daadwerkelijke station te komen, begin ik klein op mijn bureau met de losse componenten. Eerst het uitlezen van de sensor zelf, uitvoer op als Serial over de USB.
Uitlezen sensor
Ik begin het begin en dat het uitlezen van de 18B20 sensor. Daarnaast heb ik nog wel een DHT11 of BMP280 sensor die ik gebruiken. Dat maakt ook niet bijzonder veel uit. Stukje voorbeeldcode om de 18B20 sensor uit te lezen.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//Include benodigde libraries
#include <DallasTemperature.h>
#include <OneWire.h>

//Defineer pin waarop de sensor zit
#define ONE_WIRE_BUS 10 //In mijn geval 10
//Activeer het oneWire protocol op deze pin
OneWire oneWire(ONE_WIRE_BUS);
//Geef de waardes van de oneWire door aan de DallasTemperature library, zo kan je die uitlezen. De naam is sensors.
DallasTemperature sensors(&oneWire);

void setup(void)
{
  //Start serial port
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");
  //Start de library
  sensors.begin();
}
void loop(void)
{
  //Vraag alle temperaturen van sensors die aangesloten zitten. Dit komt in sensors te zitten.
  Serial.print("Vraag temperatuur... ");
  sensors.requestTemperatures();
  Serial.println("KLAAR!");

  //Geef temperatuur van eerste sensor weer. In dit geval de enige.
  Serial.print("Temperatuur van sensor 1 (index 0) is: ");
  Serial.println(sensors.getTempCByIndex(0));
}

Code gebaseerd op meegeleverde code van de Elegoo set.

Als het goed is werkt dit. Bij mij in ieder geval wel.
Gegevens opslaan
Nu kan je de Arduino alleen uitlezen als je deze aan de computer hangt, dat is niet handig. Je wil juist de metingen kunnen opslaan. Hiervoor maak ik gebruik van hetzelfde systeem als @ThinkPad gebruikte voor zijn slimme meter. Die uitleg is hier te lezen: ThinkPad's Tweakblog: Uitlezen van de slimme meter P1-poort met een Arduino e...

Ik heb een ethernet ENC28J60 module. Hoe je die moet gebruiken, lees je hier: https://www.tweaking4all....rduino-enc28j60-ethernet/

Ik heb alle code gecombineerd tot het onderstaande.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//Include benodigde libraries
#include <UIPEthernet.h> // Voor Ethernet
#include <DallasTemperature.h>
#include <OneWire.h>

//Defineer pin waarop de sensor zit
#define ONE_WIRE_BUS 10 //In mijn geval 10
//Activeer het oneWire protocol op deze pin
OneWire oneWire(ONE_WIRE_BUS);
//Geef de waardes van de oneWire door aan de DallasTemperature library, zo kan je die uitlezen. De naam is sensors.
DallasTemperature sensors(&oneWire);

// **** ETHERNET INSTELLINGEN ****
byte mac[] = { 0x54, 0x44, 0x41, 0x31, 0x30, 0x36 };                                       
IPAddress ip(10, 0, 1, 200); 
IPAddress server(10,0,1,15);                    
EthernetClient client;

void setup(void)
{
  //Start serial port
  Serial.begin(9600);
  
   // start de Ethernet verbinding:
  Ethernet.begin(mac, ip);

  Serial.print("IP Adres: ");
  Serial.println(Ethernet.localIP());
  Serial.print("IP Adres server: ");
  Serial.println(server);

  //Start de library
  Serial.println("Dallas Temperature IC Control Library Demo");
  sensors.begin();
}
void loop(void)
{
  //Vraag alle temperaturen van sensors die aangesloten zitten. Dit komt in sensors te zitten.
  Serial.print("Vraag temperatuur... ");
  sensors.requestTemperatures();
  Serial.println("KLAAR!");

  //Geef temperatuur van eerste sensor weer. In dit geval de enige.
  Serial.print("Temperatuur van sensor 1 (index 0) is: ");
  double temp = sensors.getTempCByIndex(0); //Sla de temperatuur op
  Serial.println(String(temp)); //Geen de temperatuur weer over de Serial verbinding
  httpRequest(temp); //Stuur de temperatuur door naar de httpRequest functie. Die roept een webpagina aan en stuurt de waardes door.
  delay(500); //Wacht tot de volgende waarde, dit is 1.5 seconde, veel te kort dus. Om te testen wel ideaal.
}

//httpRequest code
void httpRequest(double temp) {
  Serial.println("Probeer verbinding te maken.");
  if (client.connect(server, 8091)) { //Wanneer de verbinding gelegd kan worden, dan deze code.
    Serial.println("Open verbinding");
    client.print("GET http://10.0.1.15:8091/?temperature=");
    client.print(temp);
    client.println(" HTTP/1.1");
    client.println("Host: 10.0.1.200");
    client.println("User-Agent: arduino-ethernet");
    client.println("Connection: close");
    client.println();
    Serial.println("Einde verbinding");
    //Request complete; empty recieve buffer
    while (client.available()) { //data available
      char c = client.read(); //gets byte from ethernet buffer
    }
    client.println();
  } 
  else { //Anders stoppen
    Serial.println("Geen verbinding mogelijk");
    client.stop();
    return;
  }
}


Die webpagina moeten we nog maken. Ook hier gebruik ik het voorbeeld van de slimme meter voor.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
error_reporting(E_ALL);

//Connect to database
$MyUsername = "temperaturelog";  // enter your username for mysql
$MyPassword = "Kreeft100.";  // enter your password for mysql
$MyHostname = "10.0.1.15:3306";      // this is usually "localhost" unless your database resides on a different server

$dbh = mysql_pconnect($MyHostname , $MyUsername, $MyPassword);
$selected = mysql_select_db("temperature",$dbh);

//GET variabelen naar andere variabele schrijven
$temperature = $_GET["temperature"];

//GET variabelen op 'double' zetten
settype($temperature, "double");


//Checken of binnengekomen temperatuur ingevuld is, dan invullen in database
if ($temperature != 0)
{
    $SQL = "INSERT INTO temperature.readings (temp) VALUES ($temperature)";
    mysql_query($SQL);
    echo "Gelukt!";
}
else {
  echo "Dit ging niet goed.";
}?>

Dit draait op mijn Qnap TS453A en de database ook. Ik gebruik de interne services. De database heeft twee kolommen, een time (TIMESTAMP, autofill) en een temp (double). Die zou je vanuit de browser kunnen aanroepen op deze manier:
http://10.0.1.15:8091/?temperature=
met hierachter de waarde, bijvoorbeeld 30.25. Dus zo:
http://10.0.1.15:8091/?temperature=30.25


Nu dit werkt, kan je dus verder gaan met andere metingen. Zelf merkte ik dat de Ethernetmodule niet altijd goed werkte, soms wilde hij geen verbinding maken en dat loopt alles vast. Waar dat precies aan ligt, weet ik niet, het zouden ook zomaar de daadjes kunnen zijn.

En nu?

Ik ben benieuwd of er meer Tweakers zijn die zoiets hebben gedaan. Hoe heb je dat dan aangepakt, waar liep te tegen aan, wat deed je wel in een keer goed.

Daarnaast misschien hoe heb je het gebouwd, wat meet je en waarom? Hoe verwerk je je data?

En misschien niet geheel onbelangrijk, hoe zorg je voor betrouwbare waardes?

Verder hoop ik een beetje te kunnen doorwerken snel een werkend systeem te hebben. Hoe ik dat ga doen, weet ik nog niet.

Kortom, wordt vervolgd. :)

13 000 Zeemijl - documentaire - Soms maakt al die keus het er niet makkelijker op.


Acties:
  • 0 Henk 'm!

  • DennusB
  • Registratie: Mei 2006
  • Niet online
Interessant. Ik zou de data alleen nooit MySQL inschieten maar eerder een timeseries database, InfluxDB bijvoorbeeld.

Owner of DBIT Consultancy


Acties:
  • +4 Henk 'm!

  • ThinkPad
  • Registratie: Juni 2005
  • Laatst online: 03:23
Ik doe iets soortgelijks maar dan met ESP8266 (Tasmota firmware), Node-RED om data van de ESP8266 binnen te halen, die zet het door naar InfluxDB en Grafana maakt daar weer grafiekjes van.

Acties:
  • 0 Henk 'm!

  • chaoscontrol
  • Registratie: Juli 2005
  • Laatst online: 22:58
DennusB schreef op donderdag 25 juli 2019 @ 11:45:
Interessant. Ik zou de data alleen nooit MySQL inschieten maar eerder een timeseries database, InfluxDB bijvoorbeeld.
InfluxDB werkt super ruk met veel historische data i.v.m. de onhandige manier van retentie policies en de dikke performance hits. Voor simpele time data werkt mysql perfect en is ook een veel volwassener product.

Inventaris - Koop mijn meuk!


Acties:
  • +1 Henk 'm!

  • DennusB
  • Registratie: Mei 2006
  • Niet online
chaoscontrol schreef op donderdag 25 juli 2019 @ 11:51:
[...]

InfluxDB werkt super ruk met veel historische data i.v.m. de onhandige manier van retentie policies en de dikke performance hits. Voor simpele time data werkt mysql perfect en is ook een veel volwassener product.
Is maar net wat je gewend bent denk ik. MySQL is inderdaad volwassen, maar niet meer als je er elke seconde een bak metrics heen gaat gooien. Dat gaat een maand goed en dan is het zo traag als stront door een trechter...

Owner of DBIT Consultancy


Acties:
  • +1 Henk 'm!

  • chaoscontrol
  • Registratie: Juli 2005
  • Laatst online: 22:58
DennusB schreef op donderdag 25 juli 2019 @ 11:52:
[...]


Is maar net wat je gewend bent denk ik. MySQL is inderdaad volwassen, maar niet meer als je er elke seconde een bak metrics heen gaat gooien. Dat gaat een maand goed en dan is het zo traag als stront door een trechter...
Juist niet want je kan er veel makkelijker indexen op aanmaken e.d. Mijn ervaring is juist dat InfluxDB, vooral als je veel data en tags hebt, na een maand al nauwelijks meer werkt. Of je moet hem 100GB ram geven. (Was dan ook wel wat meer data dan een temp sensortje.) Mysql (of in mijn geval MS SQL) geeft geen centje pijn met dezelfde dataset.

Influx is leuk als je weinig live data wil voeren aan een grafana dashboard maar niet als je historisch wil gaan berwaren.

Inventaris - Koop mijn meuk!


Acties:
  • +1 Henk 'm!

  • Springuin
  • Registratie: Juli 2002
  • Laatst online: 14-07 15:59
code:
1
$SQL = "INSERT INTO temperature.readings (temp) VALUES ($temperature)";

Dat is een schoolvoorbeeld van een SQL injectie gat.

Leesvoer: https://www.acunetix.com/...ties-in-php-applications/

Acties:
  • 0 Henk 'm!

  • Rannasha
  • Registratie: Januari 2002
  • Laatst online: 22:34

Rannasha

Does not compute.

Ik gebruik zelf een ESP8266, een kleine microcontroller met ingebouwde wifi. Deze kun je programmeren met de Arduino IDE. Ik heb zelf een kleine sketch geschreven die het ding iedere minuut een DHT22 laat uitlezen en de waarde via een PHP script op een lokale webserver rapporteert.

Op de webserver draait een MySQL DB en ik gebruik een zelf gemaakt PHP script voor grafiekjes e.d.

Het voordeel van deze oplossing is dat het spotgoedkoop is. Een ESP8266 + DHT22 heb je samen voor een euro of 5 bij een willekeurige Chinese rommel-website (Aliexpress e.d.). Nog een micro-USB lader voor de stroom en je bent klaar. Ik heb op die manier 5 sensoren hangen in en om het huis. Dankzij de ingebouwde wifi heb je veel vrijheid om dat ding overal en nergens te gebruiken.

Ik heb tevens een klein OLED display gescored (kost ook een paar euro voor een klein monochroom exemplaar) en die aan een ESP8266 gehangen. Hier een programmaatje opgezet dat in een lus de temperatuur van alle sensoren laat zien. Helaas is het display niet helemaal goed meer, dus ik moet een nieuwe bestellen. Maar het principe werkte erg goed.

[ Voor 4% gewijzigd door Rannasha op 25-07-2019 12:01 ]

|| Vierkant voor Wiskunde ||


Acties:
  • 0 Henk 'm!

  • Jazsie
  • Registratie: Juni 2006
  • Laatst online: 00:00
Interessant!

Ga ik in de gaten houden.

Ik zat zelf te kijken naar een bestaande goedkope 433mhz variant. Deze dan uit te lezen of geheel ombouwen naar MySensors.

3600 Wp op 0° (vrijwel plat) | 3900Wp op 10°


Acties:
  • +1 Henk 'm!

  • T.Kreeftmeijer
  • Registratie: December 2015
  • Laatst online: 19:17

T.Kreeftmeijer

Thomas Kreeftmeijer

Topicstarter
Springuin schreef op donderdag 25 juli 2019 @ 11:55:
code:
1
$SQL = "INSERT INTO temperature.readings (temp) VALUES ($temperature)";

Dat is een schoolvoorbeeld van een SQL injectie gat.

Leesvoer: https://www.acunetix.com/...ties-in-php-applications/
Ik hoop dat ik het nu heb verholpen door middel van deze uitleg, zie code hieronder.
Verder draait alles alleen intern, dus dat zou volgens mij al het risico sterk moeten verminderen. Ook heeft inmiddels de gebruiker ook alleen maar INSERT rechten op deze specifieke tabel. Lijkt mij veilig genoeg nu.


Inmiddels gebruik een W5100 shield op de mega2560. De 18B20 gebruik ik nog steeds.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
//Include benodigde libraries
#include <SPI.h>
#include <Ethernet.h> // Voor Ethernet
#include <DallasTemperature.h>
#include <OneWire.h>

//Defineer pin waarop de sensor zit
#define ONE_WIRE_BUS 11 //In mijn geval 11
//Activeer het oneWire protocol op deze pin
OneWire oneWire(ONE_WIRE_BUS);
//Geef de waardes van de oneWire door aan de DallasTemperature library, zo kan je die uitlezen. De naam is sensors.
DallasTemperature sensors(&oneWire);

// **** ETHERNET INSTELLINGEN ****
byte mac[] = { 0x54, 0x44, 0x41, 0x33, 0x36, 0x36 };
//IP instellingen client indien geen DHCP
IPAddress ip(xxx,xxx,xxx,xxx);
IPAddress dns(xxx,xxx,xxx,xxx);
IPAddress gateway(xxx,xxx,xxx,xxx);
IPAddress subnet(255,255,255,0);

//Server, vergeet de host in de http request niet aan te passen. Dit is alleen om te controleren of de server bestaat.
IPAddress server(xxx,xxx,xxx,xxx); //Indien IP
//char server[] = "xxx.local";    //Indien domein

//Modus
EthernetClient client;

void setup(void)
{
  //Start serial port
  Serial.begin(9600);

  //Configureer de CS pin
  Ethernet.init(10);

  //Activeer Ethernet shield
  Serial.println("Krijg ip door middel van DHCP:");
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Niet gelukt.");
    // Controle op hardware
    if (Ethernet.hardwareStatus() == EthernetNoHardware) {
      Serial.println("Ethernet shield niet gevonden, controleer de verbinding.");
      while (true) {
        delay(1); //Blijf hier hangen
      }
    }
    if (Ethernet.linkStatus() == LinkOFF) {
      Serial.println("Netwerkkaber niet verbonden, controleer kabel.");
    }
    //Gebruik handmatige instellingen
    Ethernet.begin(mac, ip, dns, gateway, subnet);
  }
  else {
    Serial.print("Door DHCP verkregen IP:");
    Serial.println(Ethernet.localIP());
  }
  
  //Activeer sensors
  Serial.println("Dallas Temperature IC Control Library Demo");
  sensors.begin();
}
void loop(void)
{
  //Vraag alle temperaturen van sensors die aangesloten zitten. Dit komt in sensors te zitten.
  Serial.print("Vraag temperatuur op... ");
  sensors.requestTemperatures();
  Serial.println("KLAAR!");

  //Geef temperatuur van eerste sensor weer. In dit geval de enige.
  Serial.print("Temperatuur van sensor 1 (index 0) is: ");
  double temp = sensors.getTempCByIndex(0); //Sla de temperatuur op
  Serial.println(String(temp)); //Geen de temperatuur weer over de Serial verbinding
  httpRequest(temp); //Stuur de temperatuur door naar de httpRequest functie. Die roept een webpagina aan en stuurt de waardes door.
  delay(3000); //Wacht tot de volgende meting.
}

//httpRequest code
void httpRequest(double temp) {
  Serial.println("Probeer verbinding te maken.");
  if (client.connect(server, 80)) {
    Serial.print("Verbinden met ");
    Serial.println(server);
    // Maak een HTTP GET request:
    client.println("GET /temptosql.php?temperature=" + (String)temp + " HTTP/1.1");
    client.println("Host: xxx.xxx.xxx.xxx");
    client.println("Connection: close");
    client.println();
  }
  else {
    // Indien geen verbinding mogelijk
    Serial.println("Verbinding maken mislukt.");
 }
}

En de PHP code, draait in XAMPP op mijn PC, maar dat moet verhuizen naar iets dat 24/7 draait, nog niet gedaan.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE html>
<body><p>
<?php
error_reporting(E_ALL);

//Verbind met database
$dbh = new PDO('mysql:host=xxx.xxx.xxx.xxx:3306;dbname=xxx', 'gebruikersnaam', 'wachtwoord');

//Testen op aanwezigheid GET variabele.
if(isset($_GET["temperature"]))
{
  //GET variabelen naar andere variabele schrijven
  $temperature = $_GET["temperature"];

  //Testen of invoer is getal.
  if (is_numeric($temperature))
  {
    //GET variabelen op 'double' zetten
    settype($temperature, "double");
    //Checken of binnengekomen temperatuur geldig is, dan invullen in database
    $SQL = "INSERT INTO database.tabel (kolom) VALUES (:temperature)";
    $sth = $dbh->prepare($SQL);
    $sth->bindParam(':temperature', $temperature);
    $sth->execute();
    $dbh = null;
    echo "Gelukt!";
  }
  else
  {
    echo "Geen getal opgegeven.";
  }
}
else
{
  echo "Geen temperatuur opgegeven.";
}
?>
</p>
</body>
Problemen die opgelost zijn
  • Ethernet library vind verbinden met een niet standaard poort (80) niet leuk, dat werkt moeizaam. Nu host ik het php bestand op port 80, dat werkt prima.
  • Iets raars dat na het toevoegen van de code voor het uitlezen van de sensor de Arduino niet kan verbinden met de server. Ik heb de code helemaal opnieuw opgebouwd aan de hand van dit voorbeeld: https://www.arduino.cc/en/Tutorial/WebClient. Overbodige code heb ik weggehaald, nu draait alles stabiel. Als je geen DHCP ip kan ophalen, werkt het vaak niet goed.
  • PHP Injection (hoop ik :) )
En nu?
Op internet gevonden: https://www.sparkfun.com/products/8942 samen met https://www.sparkfun.com/products/13956
Dit zou een mooi systeem kunnen zijn als basis voor de metingen. Waar ik nog iets voor moet vinden is om de Arduino inclusief shield in te stoppen dat de sensoren wel blijven werken.
Hier vond ik verder nog mooie informatie: https://learn.sparkfun.co...connected-to-wunderground
Daarnaast kan je ook nog gassensoren toevoegen, maar ik betwijfel of dat een een beetje betrouwbaar is. Het kan wel, maar daarvoor moet ik nog even goed kijken welke sensoren ik wil gebruiken.

Voor nu eerst het ontwerp maken en bepalen welke onderdelen exact nodig zijn, dat bestellen en dan bouwen.


Mochten mensen nog ideeën hebben over het verwerken van data, dan hoor ik dat ook graag. Voor nu sla ik de gegevens gewoon op met MySQL in een MariaDB.

Het zou ook leuk zijn om het realtime uit te kunnen lezen en bijvoorbeeld elk kwartier in de database op te slaan. Ik zit een beetje te denken aan MQTT, maar ook dat vergt nog wat onderzoek.

13 000 Zeemijl - documentaire - Soms maakt al die keus het er niet makkelijker op.


Acties:
  • 0 Henk 'm!

  • kmf
  • Registratie: November 2000
  • Niet online

kmf

@T.Kreeftmeijer ik heb met ESP8266 en DS18... sensoren een hoop meetwaardes gekregen. Voor het klimaat heb ik uiteindelijk toch gekozen voor kant en klare sensoren van Xiaomi en netatmo.

Die zien er toch wat beter uit/compact en doen lang met de batterijen. Dus ik heb geen moeite meer gedaan om deze zelf te bouwen.
Ik vind het ook wel fijn om het wifinetwerk niet te veel te belasten met tig ESP-bordjes.

In de tuin hangt wel een fijnstofmeter van esp8266 (https://luftdaten.info/), maar met die data doe ik niet veel.

Data van de tempsensoren wordt verzameld middels o.a. zigbee2mqtt richting influx die weer voor allerlei doeleinde uitgelezen kan worden.O.a. met grafana, maar ook node-red voor automatiseringsdoeleinden.


Ik vraag me af hoe je een regensensor/bak ga bouwen. Daar heb ik geen goedkope oplossing voor gevonden.
chaoscontrol schreef op donderdag 25 juli 2019 @ 11:55:
[...]

Juist niet want je kan er veel makkelijker indexen op aanmaken e.d. Mijn ervaring is juist dat InfluxDB, vooral als je veel data en tags hebt, na een maand al nauwelijks meer werkt. Of je moet hem 100GB ram geven. (Was dan ook wel wat meer data dan een temp sensortje.) Mysql (of in mijn geval MS SQL) geeft geen centje pijn met dezelfde dataset.

Influx is leuk als je weinig live data wil voeren aan een grafana dashboard maar niet als je historisch wil gaan berwaren.
Mijn InfluxDB is nou al 1,5 jaar oud met heel veel time series (stuk of 30-40 sensoren). Werkt gewoon nog goed door.
Ik kan er geen complexe queries en berekeningen mee maken (komt ook omdat ik de influx-QL simpelweg niet kan aanleren. Zo spartaans), maar gewoon serieel uitlezen blijft snel.

[ Voor 31% gewijzigd door kmf op 06-08-2019 12:43 ]

One thing's certain: the iPad seriously increases toilet time.. tibber uitnodigingscode: bqufpqmp


Acties:
  • 0 Henk 'm!

  • T.Kreeftmeijer
  • Registratie: December 2015
  • Laatst online: 19:17

T.Kreeftmeijer

Thomas Kreeftmeijer

Topicstarter
kmf schreef op dinsdag 6 augustus 2019 @ 12:37:
@T.Kreeftmeijer ik heb met ESP8266 en DS18... sensoren een hoop meetwaardes gekregen. Voor het klimaat heb ik uiteindelijk toch gekozen voor kant en klare sensoren van Xiaomi en netatmo.

Die zien er toch wat beter uit/compact en doen lang met de batterijen. Dus ik heb geen moeite meer gedaan om deze zelf te bouwen.
Ik vind het ook wel fijn om het wifinetwerk niet te veel te belasten met tig ESP-bordjes.
Voor binnen is dat inderdaad een mooiere oplossing, al kan ik ook wel naar elke kamer een draadje trekken met een sensor eraan en centraal een Arduino, RPI, ESP die het verwerkt (oneWire schijnt te moeten werken)
In de tuin hangt wel een fijnstofmeter van esp8266 (https://luftdaten.info/), maar met die data doe ik niet veel.
Dat klinkt interessant. Ik kan een netwerk kabel naar buiten (dak) trekken, dus draadloos is niet nodig en zo heb ik met POE ook gelijk stroom.
Data van de tempsensoren wordt verzameld middels o.a. zigbee2mqtt richting influx die weer voor allerlei doeleinde uitgelezen kan worden.O.a. met grafana, maar ook node-red voor automatiseringsdoeleinden.
Dat is een idee voor later.
Ik vraag me af hoe je een regensensor/bak ga bouwen. Daar heb ik geen goedkope oplossing voor gevonden.
Daar wilde ik de eerder genoemde Sparkfun set voor gebruiken, ik vrees dat dat inderdaad een duur onderdeel wordt, maar dat maakt niet uit. Ik weet dat er legio standaard sets te vinden zijn, maar het gaat me nu om het zelf bouwen ervan en de vrijheid die je hiermee hebt.

13 000 Zeemijl - documentaire - Soms maakt al die keus het er niet makkelijker op.


Acties:
  • 0 Henk 'm!

  • kmf
  • Registratie: November 2000
  • Niet online

kmf

T.Kreeftmeijer schreef op dinsdag 6 augustus 2019 @ 22:05:
[...]

Voor binnen is dat inderdaad een mooiere oplossing, al kan ik ook wel naar elke kamer een draadje trekken met een sensor eraan en centraal een Arduino, RPI, ESP die het verwerkt (oneWire schijnt te moeten werken)
Er is schijnbaar een max lengte van de draad voor de DS-sensoren. En vergeet niet dat het klimaat op 1,5 meter hoogte gemeten moet worden. "mensenlengte" dus. Dan is het al wat lastiger om sensoren mooi weg te werken. Een witte muntje op de muur is dan esthetischer ;)

Dat is voor de luchtdata ook het geval. Je hebt er niet veel aan als je weet dat je dak minder last hebt van fijnstof dan de voortuin waar je buren aan het BBQen is :P

[ Voor 12% gewijzigd door kmf op 06-08-2019 23:05 ]

One thing's certain: the iPad seriously increases toilet time.. tibber uitnodigingscode: bqufpqmp


Acties:
  • 0 Henk 'm!

  • T.Kreeftmeijer
  • Registratie: December 2015
  • Laatst online: 19:17

T.Kreeftmeijer

Thomas Kreeftmeijer

Topicstarter
kmf schreef op dinsdag 6 augustus 2019 @ 23:04:
[...]


Er is schijnbaar een max lengte van de draad voor de DS-sensoren. En vergeet niet dat het klimaat op 1,5 meter hoogte gemeten moet worden. "mensenlengte" dus. Dan is het al wat lastiger om sensoren mooi weg te werken. Een witte muntje op de muur is dan esthetischer ;)

Dat is voor de luchtdata ook het geval. Je hebt er niet veel aan als je weet dat je dak minder last hebt van fijnstof dan de voortuin waar je buren aan het BBQen is :P
Dat is wel een goede ja, mmm. We hebben een dakterras, geen tuin. Ik zie dat dat dus niet optimaal is, maar voor mijzelf vind ik het goed (genoeg). We wonen midden in de stad, dus de metingen zijn toch al niet zoals het hoort.

In ieder geval wel gevonden: https://www.weerstationko...fa/98111402-tfa-sensorhut

13 000 Zeemijl - documentaire - Soms maakt al die keus het er niet makkelijker op.


Acties:
  • 0 Henk 'm!

  • z1rconium
  • Registratie: Augustus 2014
  • Laatst online: 01-06 18:29
Toevallig ook mee bezig, een BME280 voor temperatuur, luchtdruk en vochtigheid. Een BH1750 lichtmeter en een regensensor, hangen aan een Wemos D1 mini.

Het eerste idee is om hem aan de prik te hangen dmv WiFi en met MQTT via Node-RED naar InfluxDB/grafana te gooien. Ben nog aan het onderzoeken of ik het aan een 18650 kan hangen en de data over RF naar een ontvanger kan sturen.

MQTT is bij uitstek geschikt voor dit soort "kleine" informatie.

Acties:
  • 0 Henk 'm!

  • T.Kreeftmeijer
  • Registratie: December 2015
  • Laatst online: 19:17

T.Kreeftmeijer

Thomas Kreeftmeijer

Topicstarter
z1rconium schreef op woensdag 7 augustus 2019 @ 07:31:
Toevallig ook mee bezig, een BME280 voor temperatuur, luchtdruk en vochtigheid. Een BH1750 lichtmeter en een regensensor, hangen aan een Wemos D1 mini.

Het eerste idee is om hem aan de prik te hangen dmv WiFi en met MQTT via Node-RED naar InfluxDB/grafana te gooien. Ben nog aan het onderzoeken of ik het aan een 18650 kan hangen en de data over RF naar een ontvanger kan sturen.

MQTT is bij uitstek geschikt voor dit soort "kleine" informatie.
Hoe bescherm je die BH1750 sensor tegen weer en wind? MQTT is ook zeker een optie.

13 000 Zeemijl - documentaire - Soms maakt al die keus het er niet makkelijker op.


Acties:
  • 0 Henk 'm!

  • z1rconium
  • Registratie: Augustus 2014
  • Laatst online: 01-06 18:29
T.Kreeftmeijer schreef op vrijdag 9 augustus 2019 @ 10:51:
[...]

Hoe bescherm je die BH1750 sensor tegen weer en wind? MQTT is ook zeker een optie.
Ik heb een doorzichtig doosje wat redelijk waterdicht is en hij gaat onder een afdak hangen.

Afbeeldingslocatie: https://www.tinytronics.nl/shop/image/cache/data/product-577/case%2082.5x57.5x33.5mm%20(85_52_34)%20transparent%203-1000x1000.JPG
Pagina: 1