Listato ChatGPT
Inviato: mercoledì 29 gennaio 2025, 16:56
Salve, ho uno Shelly Plus 1 che comanda due potenti fari esterni (tramite un contattore) per illuminare l'esterno della casa in funzione dissuasiva; questi fari li accendo con lo smartphone e poi ci pensa lo Shelly a spegnerli dopo 5 minuti.
Ora vorrei comandare anche automaticamente i fari con due o più sensori di movimento; dato che ho parecchi tra ESP8266 e ESP32 inutilizzati persavo di comandare lo Shelly da questi microcontrollori che gestiscono i sensori di movimento (e quant'altro) utilizzando il protocollo HTTP e non MQTT.
Per facilitarmi le cose sul piano della programmazione degli ESP ho chiesto a ChatGPT di suggerirmi un listato.
La risposta è stata immediata e la riporto qui sotto:
-------------------------------------------------------------------------------------
#include <ESPAsyncWebServer.h>
#include <WiFi.h>
// Dati di accesso alla rete Wi-Fi
const char* ssid = "MyWiFi";
const char* password = "MyPW";
// Imposta l'indirizzo IP del Shelly
const char* shellyIP = "192.168.1.192"; // Cambia con l'IP del tuo Shelly
const int shellyPort = 80; // Porta HTTP del Shelly (80 di default)
// Crea un'istanza del server web
AsyncWebServer server(80);
// Funzione per inviare un comando HTTP per controllare lo Shelly
void sendShellyCommand(const String& command) {
WiFiClient client;
if (client.connect(shellyIP, shellyPort)) {
String url = "/relay/0?turn=" + command; // Il comando per accendere o spegnere
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + shellyIP + "\r\n" +
"Connection: close\r\n\r\n");
} else {
Serial.println("Errore di connessione a Shelly");
}
}
void setup() {
// Avvia la connessione WiFi
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connessione a WiFi...");
}
Serial.println("Connesso a WiFi");
Serial.println("Indirizzo IP ESP32: " + WiFi.localIP().toString());
// Definisci i percorsi per accendere/spegnere lo Shelly
server.on("/accendi", HTTP_GET, [](AsyncWebServerRequest *request){
sendShellyCommand("on"); // Accende il relay dello Shelly
request->send(200, "text/plain", "Shelly acceso");
});
server.on("/spegni", HTTP_GET, [](AsyncWebServerRequest *request){
sendShellyCommand("off"); // Spegne il relay dello Shelly
request->send(200, "text/plain", "Shelly spento");
});
// Avvia il server
server.begin();
}
void loop() {
// Il loop è vuoto, poiché usiamo un server asincrono
}
--------------------------------------------------------------------------------------------
Breve, carino solo che ... non funziona, o per meglio dire la risposta al comando è Shelly Acceso, ma ... acceso non è.
Secondo voi dove sbaglio io o dove sbaglia ChatGPT?
Grazie per le risposte!
iPino
Ora vorrei comandare anche automaticamente i fari con due o più sensori di movimento; dato che ho parecchi tra ESP8266 e ESP32 inutilizzati persavo di comandare lo Shelly da questi microcontrollori che gestiscono i sensori di movimento (e quant'altro) utilizzando il protocollo HTTP e non MQTT.
Per facilitarmi le cose sul piano della programmazione degli ESP ho chiesto a ChatGPT di suggerirmi un listato.
La risposta è stata immediata e la riporto qui sotto:
-------------------------------------------------------------------------------------
#include <ESPAsyncWebServer.h>
#include <WiFi.h>
// Dati di accesso alla rete Wi-Fi
const char* ssid = "MyWiFi";
const char* password = "MyPW";
// Imposta l'indirizzo IP del Shelly
const char* shellyIP = "192.168.1.192"; // Cambia con l'IP del tuo Shelly
const int shellyPort = 80; // Porta HTTP del Shelly (80 di default)
// Crea un'istanza del server web
AsyncWebServer server(80);
// Funzione per inviare un comando HTTP per controllare lo Shelly
void sendShellyCommand(const String& command) {
WiFiClient client;
if (client.connect(shellyIP, shellyPort)) {
String url = "/relay/0?turn=" + command; // Il comando per accendere o spegnere
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + shellyIP + "\r\n" +
"Connection: close\r\n\r\n");
} else {
Serial.println("Errore di connessione a Shelly");
}
}
void setup() {
// Avvia la connessione WiFi
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connessione a WiFi...");
}
Serial.println("Connesso a WiFi");
Serial.println("Indirizzo IP ESP32: " + WiFi.localIP().toString());
// Definisci i percorsi per accendere/spegnere lo Shelly
server.on("/accendi", HTTP_GET, [](AsyncWebServerRequest *request){
sendShellyCommand("on"); // Accende il relay dello Shelly
request->send(200, "text/plain", "Shelly acceso");
});
server.on("/spegni", HTTP_GET, [](AsyncWebServerRequest *request){
sendShellyCommand("off"); // Spegne il relay dello Shelly
request->send(200, "text/plain", "Shelly spento");
});
// Avvia il server
server.begin();
}
void loop() {
// Il loop è vuoto, poiché usiamo un server asincrono
}
--------------------------------------------------------------------------------------------
Breve, carino solo che ... non funziona, o per meglio dire la risposta al comando è Shelly Acceso, ma ... acceso non è.
Secondo voi dove sbaglio io o dove sbaglia ChatGPT?
Grazie per le risposte!
iPino