Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Intégration du Powerwall Tesla
#1
Bonjour à tous,
Tout nouveau sur ce forum, je voudrais tout d'abord adresser un grand merci et bravo à André pour ce magnifique projet. Je suis les évolutions avec grand intérêt depuis plusieurs années, bien que n'ayant pas d'installation photovoltaïque actuellement.
J'ai en projet l'installation de 9kWc de panneaux, avec une batterie Powerwall Tesla, et la Gateway qui va avec.
Le Powerwall dispose d'une API qui permet de récupérer la valeur du surplus solaire. André, pourrais-tu envisager d'intégrer la routine permettant d'interroger le Powerwall à une prochaine version du routeur ? Pour les tests éventuels, je devrais avoir mon installation dans 2 mois environ, et je suis bien sûr prêt à jouer les cobayes...
A toutes fins utiles, j'ai demadé à ChatGPT de me générer un code pour utiliser l'API. Je le recopie tout en bas de ce message. La requête a l'air plutôt simple, mais il faudrait l'intégrer au projet global...
Merci d'avance.
Philippe




#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <RBDdimmer.h>

#define DIMMER_PIN  23
#define ZERO_CROSS_PIN 22

dimmerLamp dimmer(DIMMER_PIN, ZERO_CROSS_PIN);

const char* ssid = "TON_WIFI";
const char* password = "TON_MDP";
const char* powerwall_ip = "192.168.1.50";

WiFiClientSecure client;

const int puissanceMax = 2000; // W chauffe-eau

void setup() {
  Serial.begin(115200);

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(500);

  client.setInsecure();

  dimmer.begin(NORMAL_MODE, ON);
}

void loop() {
  HTTPClient https;
  String url = String("https://") + powerwall_ip + "/api/meters/aggregates";

  https.begin(client, url);
  int httpCode = https.GET();

  if (httpCode == 200) {
    DynamicJsonDocument doc(2048);
    deserializeJson(doc, https.getString());

    float site_power = doc["site"]["instant_power"];
    float surplus = -site_power;

    // Conversion en %
    int powerPercent = (surplus / puissanceMax) * 100;

    // Clamp
    powerPercent = constrain(powerPercent, 0, 100);

    dimmer.setPower(powerPercent);

    Serial.print("Surplus: ");
    Serial.print(surplus);
    Serial.print(" W | Puissance: ");
    Serial.print(powerPercent);
    Serial.println("%");
  }

  https.end();
  delay(2000);
}
Répondre

#2
(Il y a 5 heures)Philippe (ex F6EDJ) a écrit : Bonjour à tous,
Tout nouveau sur ce forum, je voudrais tout d'abord adresser un grand merci et bravo à André pour ce magnifique projet. Je suis les évolutions avec grand intérêt depuis plusieurs années, bien que n'ayant pas d'installation photovoltaïque actuellement.
J'ai en projet l'installation de 9kWc de panneaux, avec une batterie Powerwall Tesla, et la Gateway qui va avec.
Le Powerwall dispose d'une API qui permet de récupérer la valeur du surplus solaire. André, pourrais-tu envisager d'intégrer la routine permettant d'interroger le Powerwall à une prochaine version du routeur ? Pour les tests éventuels, je devrais avoir mon installation dans 2 mois environ, et je suis bien sûr prêt à jouer les cobayes...
A toutes fins utiles, j'ai demadé à ChatGPT de me générer un code pour utiliser l'API. Je le recopie tout en bas de ce message. La requête a l'air plutôt simple, mais il faudrait l'intégrer au projet global...
Merci d'avance.
Philippe




#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <RBDdimmer.h>

#define DIMMER_PIN  23
#define ZERO_CROSS_PIN 22

dimmerLamp dimmer(DIMMER_PIN, ZERO_CROSS_PIN);

const char* ssid = "TON_WIFI";
const char* password = "TON_MDP";
const char* powerwall_ip = "192.168.1.50";

WiFiClientSecure client;

const int puissanceMax = 2000; // W chauffe-eau

void setup() {
  Serial.begin(115200);

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(500);

  client.setInsecure();

  dimmer.begin(NORMAL_MODE, ON);
}

void loop() {
  HTTPClient https;
  String url = String("https://") + powerwall_ip + "/api/meters/aggregates";

  https.begin(client, url);
  int httpCode = https.GET();

  if (httpCode == 200) {
    DynamicJsonDocument doc(2048);
    deserializeJson(doc, https.getString());

    float site_power = doc["site"]["instant_power"];
    float surplus = -site_power;

    // Conversion en %
    int powerPercent = (surplus / puissanceMax) * 100;

    // Clamp
    powerPercent = constrain(powerPercent, 0, 100);

    dimmer.setPower(powerPercent);

    Serial.print("Surplus: ");
    Serial.print(surplus);
    Serial.print(" W | Puissance: ");
    Serial.print(powerPercent);
    Serial.println("%");
  }

  https.end();
  delay(2000);
}

Intéressant.
Je garde cela dans un coin.
Répondre

#3
(Il y a 3 heures)F1ATB a écrit :
(Il y a 5 heures)Philippe (ex F6EDJ) a écrit : Bonjour à tous,
Tout nouveau sur ce forum, je voudrais tout d'abord adresser un grand merci et bravo à André pour ce magnifique projet. Je suis les évolutions avec grand intérêt depuis plusieurs années, bien que n'ayant pas d'installation photovoltaïque actuellement.
J'ai en projet l'installation de 9kWc de panneaux, avec une batterie Powerwall Tesla, et la Gateway qui va avec.
Le Powerwall dispose d'une API qui permet de récupérer la valeur du surplus solaire. André, pourrais-tu envisager d'intégrer la routine permettant d'interroger le Powerwall à une prochaine version du routeur ? Pour les tests éventuels, je devrais avoir mon installation dans 2 mois environ, et je suis bien sûr prêt à jouer les cobayes...
A toutes fins utiles, j'ai demadé à ChatGPT de me générer un code pour utiliser l'API. Je le recopie tout en bas de ce message. La requête a l'air plutôt simple, mais il faudrait l'intégrer au projet global...
Merci d'avance.
Philippe




#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <RBDdimmer.h>

#define DIMMER_PIN  23
#define ZERO_CROSS_PIN 22

dimmerLamp dimmer(DIMMER_PIN, ZERO_CROSS_PIN);

const char* ssid = "TON_WIFI";
const char* password = "TON_MDP";
const char* powerwall_ip = "192.168.1.50";

WiFiClientSecure client;

const int puissanceMax = 2000; // W chauffe-eau

void setup() {
  Serial.begin(115200);

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(500);

  client.setInsecure();

  dimmer.begin(NORMAL_MODE, ON);
}

void loop() {
  HTTPClient https;
  String url = String("https://") + powerwall_ip + "/api/meters/aggregates";

  https.begin(client, url);
  int httpCode = https.GET();

  if (httpCode == 200) {
    DynamicJsonDocument doc(2048);
    deserializeJson(doc, https.getString());

    float site_power = doc["site"]["instant_power"];
    float surplus = -site_power;

    // Conversion en %
    int powerPercent = (surplus / puissanceMax) * 100;

    // Clamp
    powerPercent = constrain(powerPercent, 0, 100);

    dimmer.setPower(powerPercent);

    Serial.print("Surplus: ");
    Serial.print(surplus);
    Serial.print(" W | Puissance: ");
    Serial.print(powerPercent);
    Serial.println("%");
  }

  https.end();
  delay(2000);
}

Intéressant.
Je garde cela dans un coin.
Merci  Wink
Répondre



Atteindre :


Utilisateur(s) parcourant ce sujet :
2 visiteur(s)

Moteur MyBB, © 2002-2026 Melroy van den Berg.