Welkom bij de Tweaking4All gemeenschapsforums!
Voor je gaat deelnemen, bekijk de Forum Regels!
Specifieke onderwerpen: Start het onderwerp met de naam van het programma of systeem.
Bijvoorbeeld “MacOS X – Jouw vraag“, of bijvoorbeeld “MS Word – Jouw Tip of Truc“.
Merk op: Omschakelen naar een andere taal zal niet werken als je een post aan het lezen bent aangezien er waarschijnlijk geen vertaling beschikbaar is.
Dat kan zeer zeker .... maar ik vrees dat je dan wel een bron moet hebben waar je de tijd vandaan haalt.
Een Realtime Clock is zeker een optie ... maar misschien kun je de actuele tijd ergens op het Internet vandaan plukken. Helaas bevat de JSON van de weerlive.nl niet de huidige tijd, anders kon je dat elke keer als je de data ophaalt vergelijken met sup en sunder.
time = 16-03-2021 08:28:03 Zon komt op = 06:49 Zon gaat onder om = 18:48 is hier wel mee te werken om te kunnen schakelen en bijvoorbeeld maar om de 2 of 4 uur te updaten van de weersite? hartelijke groet, Hans
ESP8266 en HTTPS was nog niet zo'n eenvoudige om aan de gang te krijgen (veel voorbeelden maken het voor onze toepassing veel moeilijker, en langzamer, dan nodig is). Ik heb het eerdere voorbeeld aangepast voor https gebruik.
Ik heb geen API key voor meteoserver.nl - ik heb er wel een aangemaakt, maar kreeg vervolgens de melding dat ik er voor moest betalen, en daar had ik dus even geen zin in. 🤣
Ik heb dus de weerlive.nl gepakt wat ook met https werkt (ik vermoed dat ook hun in de toekomst http ondersteuning laten vallen).
Daarnaast pik ik de tijd van een NTP server (zomer en wintertijd correctie nog niet toegepast!) om de tijd op te halen en vervolgens te bepalen of het dag of nacht is.
Ik neem aan dat je hier iets mee kunt, of stukken hergebruiken als je een andere methode wilt gebruiken (b.v. meteoserver). 😊
Ook als downloadbare INO:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <WiFiUdp.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>
#include <StreamUtils.h>
#include <NTPClient.h> // don't forget to install the NTPClient
#include <ESP8266HTTPClient.h> // http web access library
#include <ArduinoJson.h> // JSON decoding library
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "nl.pool.ntp.org", 0); // take this NTP server so we do not need to calculate an offset
// remove comment slashes to see debug output
#define DEBUG
const char* ssid = "SkyNet";
const char* password = "22101967";
const char* weatherURL = "https://weerlive.nl/api/json-data-10min.php?key=19970382d1&locatie=Tilburg";
int timeHours;
int timeMinutes;
int SupHours;
int SupMinutes;
int SunderHours;
int SunderMinutes;
boolean SunIsUp;
#define Richtingen 16
char * RichtingGraden [Richtingen][2] = { {"Noord", "0" },
{"NNO", "22.5" },
{"NO", "45" },
{"ONO", "67.5" },
{"Oost", "90" },
{"OZO", "112.5" },
{"ZO", "135" },
{"ZZO", "157.5" },
{"Zuid", "180" },
{"ZZW", "202.5" },
{"ZW", "225" },
{"WZW" "247.5" },
{"West", "270" },
{"WNW", "292.5" },
{"NW", "315" },
{"NNW", "337.5" } };
void setup() {
Serial.begin(115200);
delay(500);
Serial.print("\n\rConnecting.");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password); // access Wi-FI point
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("connected\r\n");
timeClient.begin();
}
void loop() {
// Update time - sometimes, only at first read, this returns 00:00 (incorrectly)
timeClient.update();
timeHours = timeClient.getHours();
timeMinutes = timeClient.getMinutes();
Serial.println("-----------------------------------------------------------");
Serial.printf("Current Time : %02d:%02d (without daylight saving correction!)\n\r", timeHours, timeMinutes);
Serial.println("-----------------------------------------------------------");
std::unique_ptr<BearSSL::WiFiClientSecure>client(new BearSSL::WiFiClientSecure);
client->setInsecure();
if (WiFi.status() == WL_CONNECTED) { // Check WiFi connection status
HTTPClient http; // Declare an object of class HTTPClient
http.begin(*client, weatherURL);
int httpCode = http.GET(); // send the request
// for debugging, dumps HTTP result (JSON) to serial monitor
#ifdef DEBUG
Serial.printf("HTTP Return code = %d\r\n",httpCode);
#endif
if (httpCode > 0) { // check the returning code (>0 may not be correct)
DynamicJsonDocument doc(2048);
#ifdef DEBUG
Serial.print("JSON Data: ");
ReadLoggingStream loggingStream(http.getStream(), Serial);
DeserializationError error = deserializeJson(doc, loggingStream);
Serial.println("\n\r-----------------------------------------------------------");
#else
DeserializationError error = deserializeJson(doc, http.getStream());
#endif
if (error) {
Serial.print("JSON Deserialization failed: ");
Serial.println(error.f_str());
}
float temp = (float)(doc["liveweer"][0]["temp"]); // get temperature (Celcius)
int humidity = doc["liveweer"][0]["lv"]; // get humidity (relatieve luchtvochtigheid)
float pressure = (float)(doc["liveweer"][0]["luchtd"]); // get pressure (luchtdruk)
float wind_speed = doc["liveweer"][0]["windms"]; // get wind speed (in m/s)
const char* winddirection = doc["liveweer"][0]["windr"]; // get wind degree (windrichting)
float feels_like = (float)(doc["liveweer"][0]["gtemp"]); // get feel_like (gevoelstemperatuur)
const char* ZonsOpgang = doc["liveweer"][0]["sup"];
const char* ZonsOndergang = doc["liveweer"][0]["sunder"];
// print data
Serial.println("Het weer NU in Tilburg");
Serial.printf("Temperatuur = %.2f°C\r\n", temp);
Serial.printf("Voelt als = %.2f°C\r\n", feels_like);
Serial.printf("Vochtigheid = %d %%\r\n", humidity);
Serial.printf("Luchtdruk = %.3f millibar (hPa)\r\n", pressure);
Serial.printf("Wind snelheid = %.1f m/s\r\n", wind_speed);
Serial.printf("Wind richting = %s (%s°)\r\n", winddirection, RichtingNaarGraden(winddirection));
Serial.printf("Zonsopgang = %s\r\n", ZonsOpgang);
Serial.printf("Zonsondergang = %s\r\n\r\n", ZonsOndergang);
// Convert SUP and SUNDER strings to number we can calculate with
sscanf(ZonsOpgang, "%02d:%02d", &SupHours, &SupMinutes);
sscanf(ZonsOndergang, "%02d:%02d", &SunderHours, &SunderMinutes);
// See if we're dealing with daytime (I hope I did that right)
SunIsUp = ( ( (timeHours>SupHours) || ( (timeHours==SupHours) && (timeMinutes>=SupMinutes) ) ) &&
( (timeHours<SunderHours) || ( (timeHours==SunderHours) && (timeMinutes<=SunderMinutes) ) ) );
if(SunIsUp) {
Serial.println("The Sun is UP (daytime)"); // Do something here; eg. switch lights OFF
} else {
Serial.println("The Sun is DOWN (nighttime)"); // Do something here; eg. switch lights ON
}
}
http.end(); // Close connection
}
// note: seems per documentation that the JSON data is only updated every 10 minutes,
// so it is probably better set the the interval to 10 minutes as well
delay(60000); // wait 1 minute
}
char* RichtingNaarGraden(const char* WindRichting) {
for(int Counter=0; Counter<Richtingen; Counter++) {
if ( strcmp(WindRichting, RichtingGraden[Counter][0]) == 0 )
return RichtingGraden[Counter][1];
}
}
hallo naast de interactieve selectiepagina is het ook mogelijk om de selectie vanuit een script te benaderen, bijvoorbeeld met wget. Aangezien het selectieformulier via de POST-methode werkt, moeten de selectieparameters worden doorgegeven als "POST-gegevens". In wget ziet het er als volgt uit:
wget -O bestand --no-check-certificaat --post-data = "variabele = waarde & variabele = waarde & ...." https://www.daginformatie.knmi.nl/klimatologie/daginformatie (om het zoekresultaat in het opgegeven bestand te corrigeren. Als "bestand" wordt vervangen door "-", wordt de uitvoer naar STDOUT gestuurd).
Mooi om te zien dat dit probleem opgelost is, ik heb nog wat vragen. Had het geholpen om gebruik te maken van een low code voor het bouwen van de API koppeling? Dit zou in principe sneller moeten werken. Ik kon het niet terugvinden maar misschien heb je hier al wel gebruik van gemaakt, in dat geval ben ik benieuwd naar welke tool je gebruikt hebt. Ik probeer wat meer over coderen te leren, daarom vind ik het erg interessant om dit soort oplossingen zoals dit draadje te lezen.
Alles loopt op een ESP8266 - er is geen gebruik gemaakt van een low-code tool. Van wat ik begrijp van low-code tools is dat het misschien makkelijker maakt om een verbinding te bouwen, maar sneller zal het niet, of niet altijd, zijn. Hoe hoger het abstractie level, hoe "slordiger" de code omgaat met resources.
De tool die hier gebruikt wordt is de standaard Arduino IDE, en we coderen redelijk dicht tegen de hardware aan.
AlternativeTo Geweldige website als je een alternatief zoekt voor en programma, bijvoorbeeld omdat het programma niet precies doet wat je wilt, of omdat het programma dat je in gedachten hebt niet voor jouw computer platform bestaat.
ViMediaManager ViMediaManager is een media manager voor Mac OS X, welke het mogelijk maakt om informatie, afbeeldingen, trailers, en andere extra te downloaden voor films en TV Series, voor gebruik met b.v. XBMC.
NAPS2 - Not Another PDF Scanner 2 Heerlijk eenvoudig scan programma voor Windows gebruikers. Het heeft wel nog de scanner driver nodig, maar het maakt scannen naar afbeelding of PDF erg makkelijk.
SpeedOf.me Test de snelheid van jouw Internet verbinding
PreLoaders Handige website als je een preloader afbeelding wilt maken (zogenaamde "Spinners").
Ubuntu Ubuntu is waarschijnlijk een van de meest gebruikte Linux versie welke goed werkt en goed ondersteund wordt.
Links Pagina Deze en meer van onze favoriete link vindt je op de Links Pagina.
New Downloads
ConnectMeNow4-v4.0.18-macOS-x86-64.dmgDate: 2024-04-24 - Size: 3.5 MBVersie 4 van ConnectMeNow - een gratis hulpmiddel om snel en eenvoudig netwerkverbindingen te mounten. Dit is de specifieke Intel version die ook werkt op Apple Silicon Macs.
ConnectMeNow4-v4.0.18-macOS-arm64.dmgDate: 2024-04-24 - Size: 3 MBVersie 4 van ConnectMeNow - een gratis hulpmiddel om snel en eenvoudig netwerkverbindingen te mounten. Dit is de specifieke Apple Silicon version (niet geschikt voor Intel).
MiniWOL2 MacOS (64 bits Apple Silicon)Date: 2023-08-01 - Size: 1.2 MBminiWol is een eenvoudig, maar effectief programma voor het versturen van een Wake On LAN naar netwerkapparaten. Dit is de macOS versie (Apple Silicon 64 bit en gesigneerd).
MovieScanner2-2.2.3-Windows-32bit-setup.exeDate: 2023-04-12 - Size: 18.6 MBEen klein programma, wat gebruik maakt van FFProbe jouw video bestanden te scannen, en de media details in een database op te slaan. Dit is de 32 bits versie voor Windows.
MovieScanner2-2.2.2-Linux-GTK-64bits.tar.gzDate: 2023-04-11 - Size: 29.2 MBEen klein programma, wat gebruik maakt van FFProbe jouw video bestanden te scannen, en de media details in een database op te slaan. Dit is de 64 bits versie voor Linux (GTK).
MovieScanner2-2.2.2-Linux-QT5-64bits.tar.gzDate: 2023-04-11 - Size: 29.1 MBEen klein programma, wat gebruik maakt van FFProbe jouw video bestanden te scannen, en de media details in een database op te slaan. Dit is de 64 bits versie voor Linux (QT5).
Downloads Page Find these and more Downloads on the Downloads Page, where you will also find articles references, operating system requirements and categories.
Amazon Ads
Ondersteun ons door te winkelen bij Amazon.com, klik deze link, of klik een van de onderstaande links …
You can also sponsor us through these Amazon offerings:
Vriendelijk verzoek om te overwegen Ad Blocking uit te zetten voor onze website.We zijn afhankelijk van inkomen uit Advertenties om de website te kunnen draaien.Je kunt ons ook op andere manieren ondersteunen (zie Ondersteun ons links bovenin).
Tweaking4All gebruikt cookies voor correcte werking van de website. Als je doorgaat met het gebruiken van de website, gaan we er vanuit dat ermee instemt.OKDetails