I am on a project that would use Dynamic Electricity Tariffs, where the price is based on availabiity (available in parts of Europe).
I use a Uno R4 WiFi, with the WiFi to get time, as well as the pricing info from a European website, using the WiFIS3 library and the example "WiFIWebClient". Using "WiFIWebClientSSL" yields the same result.
To obtain that price info a HTTP GET request is send.
When I send that request from a browser like FireFox or Safari I receive the pricing table in an XML format as expected.
But when it is send from the UNO R4, following the example code I get an answer :
301 Moved permanently
Location Microsoft-Azure-Application-Gateway/v2, which is a portal located somewhere in Amsterdam.
I have been trying all sorts with no avail.
Doing a CMD-click on the query line gives a web page with the expected result, confirming correctness.
Opening all the sub and subsub libraries to try to find out what happens seems a task too tedious.
It seems to be a DNS problem without being able to define it any closer.
I would be very grateful if anybody would put me on a track towards a solution
In the code herewith I left the example intact. I outcommented the lines that I replaced with the web address and request to use.
But I have a problem leaving my access token in the request; how should we proceed?
Paul Colin
/* Web client
This sketch connects to a website (http://www.google.com)
using the WiFi module.
created 13 July 2010
by dlf (Metodo2 srl)
modified 31 May 2012
by Tom Igoe
full UNO R4 WiFi Network documentation:
https://docs.arduino.cc/tutorials/uno-r4-wifi/wifi-examples#wi-fi-web-client
*/
#include "/Volumes/MacDev/Xcode_playground1/Arduino/libraries/WiFi/src/xxarduino_secrets.h"
#include "WiFiS3.h"
char ssid[] = SECRET_SSID; // your network SSID (name)
char pass[] = SECRET_PASS; // your network password (use for WPA, or use as key for WEP)
int keyIndex = 0; // your network key index number (needed only for WEP)
int status = WL_IDLE_STATUS;
// if you don't want to use DNS (and reduce your sketch size, use the numeric IP instead)
//IPAddress server(74,125,232,128); // numeric IP for Google (no DNS) NOT OK
//char server[] = "www.google.com"; // name address for Google (using DNS)
char server[] = "web-api.tp.entsoe.eu";
// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
WiFiClient client;
/* -------------------------------------------------------------------------- */
void setup() {
/* -------------------------------------------------------------------------- */
//Initialize serial and wait for port to open:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
delay(1500); //because of something strange withn UNO R4
// check for the WiFi module:
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("Communication with WiFi module failed!");
// don't continue
while (true)
;
}
String fv = WiFi.firmwareVersion();
if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
Serial.println("Please upgrade the firmware");
}
// attempt to connect to WiFi network:
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
status = WiFi.begin(ssid, pass);
// wait 10 seconds for connection:
delay(4000); // 4 secs is OK as well.
}
printWifiStatus();
Serial.println("\nStarting connection to server...");
// if you get a connection, report back via serial:
if (client.connect(server, 80)) {
Serial.println("connected to server");
// Make a HTTP request:
client.println("GET https://web-api.tp.entsoe.eu/api?documentType=A44&in_Domain=10YBE----------2&out_Domain=10YBE----------2&offset=0&contract_MarketAgreement.type=A01&securityToken=HERE SITS MY TOKEN&periodStart=202601140000&periodEnd=202601150000");
client.println("Host: web-api.tp.entsoe.eu");
client.println("Connection: close");
client.println();
}
}
/* just wrap the received data up to 80 columns in the serial print*/
/* -------------------------------------------------------------------------- */
void read_response() {
/* -------------------------------------------------------------------------- */
uint32_t received_data_num = 0;
while (client.available()) {
/* actual data reception */
char c = client.read();
/* print data to serial port */
Serial.print(c);
/* wrap data to 80 columns*/
received_data_num++;
if (received_data_num % 80 == 0) {
Serial.println();
}
}
}
/* -------------------------------------------------------------------------- */
void loop() {
/* -------------------------------------------------------------------------- */
read_response();
// if the server's disconnected, stop the client:
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting from server.");
client.stop();
// do nothing forevermore:
while (true)
;
}
}
/* -------------------------------------------------------------------------- */
void printWifiStatus() {
/* -------------------------------------------------------------------------- */
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// print your board's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
