Stránka 1 z 4

Balkon v paneláku

Napsal: 11 pro 2020, 07:21
od sachlj
Zdravím.
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>
Tak a co řeším?
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
      ......
který vrátí tuto odpověď:
{"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"}
Respektive tento dotaz se pošle jen jedenkrát za den a to v 01:00.
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?

Re: Balkon v paneláku

Napsal: 11 pro 2020, 09:46
od jankop
Jenom tři NodeMCU? A není to málo Antone Pavloviči?

Re: Balkon v paneláku

Napsal: 11 pro 2020, 12:22
od sachlj
Plánoval jsem to dát dohromady do tohoto ale jak jsem se dozvěděl tak je to složitější než NodeMCU. nechci nic přepínat, chci jeden funkční kód.
Apropo. pokud mi neporadíš tak sem nepiš !!!! Chci odpověď na otázku jaké je dnes počasí a nechci odpověď že jsi měl k obědu špagety. Na to se neptám.

Re: Balkon v paneláku

Napsal: 11 pro 2020, 12:52
od jankop
Promiň, odbočil jsem. O parsování stringů a konverzi proměnných se dočteš na arduino.cc

Re: Balkon v paneláku

Napsal: 11 pro 2020, 13:50
od pavel1tu
jankop píše:
11 pro 2020, 12:52
Promiň, odbočil jsem. O parsování stringů a konverzi proměnných se dočteš na arduino.cc
Tak tak,
nakopnu:
- musíš vyhledat znak/znaky, které tam jsou vždy a od nich se odrazit
- osobně bych se odrazil od "begin" a "end" - ty časy co potřebuješ budou za těmito slovy vždy stejný počet znaků.
- vyčíst hodiny/převést na číslo
- vyčíst minuty/převést na číslo
- složit výsledný čas

PS: přeji pěkný zbytek arogantní diskuze

Re: Balkon v paneláku

Napsal: 11 pro 2020, 15:25
od sachlj
jojo, v česku jsou jen hejtři...můžu se zeptat jinde venku ale chci to řešit tady protože v česku jsou jen tupci, všude venku řeší věci co mění svět ale tady jen "jak bliknou" nebo "jak číst tlačítko".....

Re: Balkon v paneláku

Napsal: 11 pro 2020, 17:54
od pavel1tu
sachlj píše:
11 pro 2020, 15:25
jojo, v česku jsou jen hejtři...můžu se zeptat jinde venku ale chci to řešit tady protože v česku jsou jen tupci, všude venku řeší věci co mění svět ale tady jen "jak bliknou" nebo "jak číst tlačítko".....
Rádi ti tu pomůžeme, ale :
- tvůj kod to ale není, takže jak máme najít chyby, že ti to ten čas nevyzobe, nevíme CO ti nefunguje
- jinak dotaz vrací čistý JSON proč se zbytečně hrabat v nějakém řetězci - JSON lze zpracovat elegantně

- pokud to chceš opravdu jednoduše https://github.com/probonopd/TimeLord používám (ne všude hrabu na net) a funguje dost přesně

PS: na dotaz https://api.sunrise-sunset.org/json?lat ... date=today to je přehlednější, pokud potřebuješ jen čas

Re: Balkon v paneláku

Napsal: 12 pro 2020, 10:21
od sachlj
Tu knihovnu znám, ale nějak mi nefunguje, odpovídá mi nesmysly.

Kód: Vybrat vše

float const LONGITUDE = 14.48;
float const LATITUDE = 50.08;

void setup()
  {
    
  Serial.begin (115200);
  
  TimeLord tardis; 
  tardis.TimeZone(10 * 60); // tell TimeLord what timezone your RTC is synchronized to. You can ignore DST
  // as long as the RTC never changes back and forth between DST and non-DST
  tardis.Position(LATITUDE, LONGITUDE); // tell TimeLord where in the world we are
  
  byte today[] = {  0, 0, 12, 12, 12, 2020    }; // store today's date (at noon) in an array for TimeLord to use
Sunrise: 16:52
Sunrise: 16:52
Sunset: 1:0
ale našel jsem popis jak to nastavit https://swfltek.com/arduino/timelord_li ... ecated.pdf tak si s tím pohraju, díky.

Re: Balkon v paneláku

Napsal: 12 pro 2020, 10:54
od sachlj
Už jsem na to přišel a nastavil to, díky. Tak už vyřešeno. Otázku možno zamknout.

Re: Balkon v paneláku

Napsal: 12 pro 2020, 15:32
od sachlj
Tak problém. TimeLord funguje jen s Adruino UNO, Mega ale ne s NodeMCU. Samotný kód ne. Když ho připojím do kódu co potřebuji tak mi vrátí blbosti.