Roky mám na zábradlí balkonu v přízemním bytě na pražském Jarově-Žižkově meteo stanici. Sestava je stanice WH1080 a Raspberry PI3 kde je software weewx které data zpracovává a dělá z nich výstupy. Letos asi po 5 ti letech provozu odešel u RPi ethernetový chip, prostě LAN nefunguje. Hned jsem zapojil jiné a o5 oprášil myšlenku na balkoně měřit ještě něco jiného. Tohle je výstup z weewx.
Hledal jsem tedy nápady a narazil jsem na tento popis, Trochu jsem ho inovoval a připravil 3 (tři) systémy s NodeMCU v3. Inspirací pro jeden mi je tento popis. Musel jsem ho ale upravit a tak všechny hodnoty co se ze senzorů stáhnou se mi posílají do MySQL databáze na mém serveru. Tam se pak budou data zobrazovat formou Grafany a taky ve weewx.
Takže:
1 NodeMCU : senzor PMS5003, MQ-135, BME280 - tato sestava bude vně balkonu aby nasávala skutečně proudící vzduch. Bude to v nějaké ohnuté trubce jako je na prvním odkazu.
2 NodeMCU : CCS811 s úpravou hodnot pomocí BME280 - tato sestava bude na balkoně a bude v krabičce s průduchy osazenými pomalu-otáčkovými ventilátory tak aby se dovnitř hnal vzduch zvnějška ale ne tolik aby ochlazoval BME280.
3 NodeMCU : to je to o které mi v otázce jde : to měří světlo. Senzor VEML6070 měří UV záření, senzor TCS34725 měří vše ostatní. Problém je, že senzory měří jen když je co měřit jinak nic. Nechci pálit čipy na polovinu dne kdy je tma. Proto je kód u tohoto zapojení nejsložitější. Jsou použity knihovny:
Kód: Vybrat vše
#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiUdp.h>
#include <TimeLib.h>
#include <TimeAlarms.h>
#include <Wire.h>
#include "Adafruit_VEML6070.h"
#include "Adafruit_TCS34725.h"
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
Každých 5 minut dojde k zjištění přesného času z NTP a updrade časovače TimeAlarms. Zároveň se odešle dotaz
Kód: Vybrat vše
void loop() {
if (WiFi.status() == WL_CONNECTED) { //Check WiFi connection status
HTTPClient http; //Declare an object of class HTTPClient
http.begin("http://api.sunrise-sunset.org/json?lat=50.0874654&lng=14.4212535&formatted=0"); //Specify request destination
int httpCode = http.GET(); //Send the request
if (httpCode > 0) { //Check the returning code
String payload = http.getString(); //Get the request response payload
Serial.println(payload); //Print the response payload
......
Respektive tento dotaz se pošle jen jedenkrát za den a to v 01:00.{"results":{"sunrise":"2020-12-11T06:51:51+00:00","sunset":"2020-12-11T15:00:06+00:00","solar_noon":"2020-12-11T10:55:59+00:00","day_length":29295,"civil_twilight_begin":"2020-12-11T06:13:40+00:00","civil_twilight_end":"2020-12-11T15:38:17+00:00","nautical_twilight_begin":"2020-12-11T05:32:11+00:00","nautical_twilight_end":"2020-12-11T16:19:46+00:00","astronomical_twilight_begin":"2020-12-11T04:52:47+00:00","astronomical_twilight_end":"2020-12-11T16:59:10+00:00"},"status":"OK"}
A co potřebuji?
Z tohoto vráceného textového řetězce uloženého do proměnné (payload) vytáhnout údaje "civil_twilight_begin":"2020-12-11T06:13:40+00:00","civil_twilight_end":"2020-12-11T15:38:17+00:00" a z nich údaj o hodině a minutě. Tj. 06:13 a 15:38.
Tyto znaky pak převést na čísla, respektive čas, tato dvě hodnoty uložit do proměnných a ty pak porovnávat každých 5 minut s časem. Tj. je víc než východ slunce-ne, nic nedělej, ano pak je čas větší než západ slunce - ano, nic nedělej, jinak změř UV, ostatní hodnoty a odešli je do databáze.
S čím potřebuji pomoct je ten výběr z textu, převod hodnot na čas a naťuknout podmínky. To jsou věci co jsem doposud nepotřeboval. Před léty mi Arduino mega řídila akvárium než jsem pochopil, že příroda se řídit nedá.
V současnosti mi jdou domů z číny nějaké čidla a hlavně měřák PM2,5. Plánuji to na balkon namontovat v březnu, dubnu (až bude teplo). Ale měřit a zasílat data to musí už na stole.
Slibuji, že kódy dám v plen jakmile budou funkční.
Poradí někdo?