Hat schon mal jemand den SmaSunnyBoyReader ausprobiert?
Ich bekomme keine Daten. Getting Values: fail
WĂ€hle ich mich mit IP und PW per Browser ein funktioniert es.
Hat schon mal jemand den SmaSunnyBoyReader ausprobiert?
Ich bekomme keine Daten. Getting Values: fail
WĂ€hle ich mich mit IP und PW per Browser ein funktioniert es.
Debugging can be turned on by setting DEBUG_SMAREADER_ON
. Uncomment the following line in SMAReader.h
:
#define DEBUG_SMAREADER_ON 1
Hmm, IP ok & das verwendete PW ist richtig. Der SMA zuckt aber nicht...
..WiFi connected
IP address: 192.168.100.111
Number of tries: 7
Connecting time (microseconds): 4229892
Try: 0
[HTTP] POST... URL: http://192.168.0.72/dyn/login.json
[HTTP] POST... message: {"right":"usr", "pass":"*****"}
[HTTP] POST... failed, error: -1: connection failed
Try: 1
[HTTP] POST... URL: http://192.168.0.72/dyn/login.json
[HTTP] POST... message: {"right":"usr", "pass":"*****"}
[HTTP] POST... failed, error: -1: connection failed
Try: 2
[HTTP] POST... URL: http://192.168.0.72/dyn/login.json
[HTTP] POST... message: {"right":"usr", "pass":"*****"}
[HTTP] POST... failed, error: -1: connection failed
Try: 3
[HTTP] POST... URL: http://192.168.0.72/dyn/login.json
[HTTP] POST... message: {"right":"usr", "pass":"*****"}
[HTTP] POST... failed, error: -1: connection failed
Try: 4
[HTTP] POST... URL: http://192.168.0.72/dyn/login.json
[HTTP] POST... message: {"right":"usr", "pass":"*****"}
[HTTP] POST... failed, error: -1: connection failed
Getting values: fail
Wen rein zufÀllig die Seite https verwendet wird das nichts.
Mal genau schauen auf Telefon oder Browser.
Die ist im lokalen Netz, da ist https eher ungewöhnlich.
GruĂ Tommy
Stimmt.
Frage warum wird hier die 192.168.0.72 und nicht die 192.168.100.111?
wo bei im dem Example wir noch eine andere verwendet
/**
* Example: SMAReader_Demo.ino
*
*/
#ifdef ESP8266
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#endif
#ifdef ESP32
#include <WiFi.h>
#include <HTTPClient.h>
#endif
#include <ArduinoJson.h>
#include <SMAReader.h>
// Fill in appropriate values
#define WLANSSID "..."
#define WLANPWD "..."
#define INVERTERPWD "..."
IPAddress inverterIP(192,168,0,100);
#define DEBUG_LEVEL 3
#define DEBUG_ERROR 1
#define DEBUG_MIN_INFO 2
#define DEBUG_MAX_INFO 3
#define DEBUG_OUT(level, fmt, ...) if(DEBUG_LEVEL>=level) Serial.printf_P( (PGM_P)PSTR(fmt), ## __VA_ARGS__ )
SMAReader smaReader(inverterIP, SMAREADER_USER, INVERTERPWD, 5);
void setup() {
Serial.begin(9600);
connectWifi(true);
}
int connectWifi(bool firstConnect) {
unsigned long startwifi=micros();
unsigned int retryCount = 0;
if(!firstConnect) {
WiFi.reconnect();
} else {
WiFi.mode(WIFI_STA);
WiFi.begin(WLANSSID, WLANPWD); // Start WiFI
}
DEBUG_OUT(DEBUG_MIN_INFO, "%sonnecting to %s\n", firstConnect?"C":"Rec", WLANSSID);
while ((WiFi.status() != WL_CONNECTED) && (retryCount < 40)) {
delay(500);
DEBUG_OUT(DEBUG_MIN_INFO, ".");
retryCount++;
}
int success=WiFi.status();
if(success==WL_CONNECTED) {
DEBUG_OUT(DEBUG_MIN_INFO, "WiFi connected\nIP address: %s\n", WiFi.localIP().toString().c_str());
} else {
DEBUG_OUT(DEBUG_ERROR, "Failed to connect\n");
}
DEBUG_OUT(DEBUG_MIN_INFO, "Number of tries: %d\n", retryCount);
DEBUG_OUT(DEBUG_MIN_INFO, "Connecting time (microseconds): %lu\n", micros()-startwifi);
return success;
}
void loop() {
// wait for WiFi connection
if(WiFi.status() == WL_CONNECTED) {
// getValues int example
String keys[2]={KEY_POWER, KEY_ENERGY_TODAY};
int values[2];
bool isSuccess=smaReader.getValues(2, keys, values);
Serial.printf("Getting values: %s\n", isSuccess?"success":"fail");
if(isSuccess) {
for(int val: values) {
Serial.printf("Value: %d\n", val);
}
}
// getValues String example
String keys_string[2]={KEY_WLAN_IP, KEY_WLAN_DNS_IP};
String values_string[2];
isSuccess=smaReader.getValues(2, keys_string, values_string);
Serial.printf("Getting values: %s\n", isSuccess?"success":"fail");
if(isSuccess) {
for(String& val: values_string) {
Serial.printf("Value: %s\n", val.c_str());
}
}
// getLog example
tm startTime;
strptime("2020-10-19 16:00:00", "%Y-%m-%d %T", &startTime);
uint32_t startTimestamp = mktime(&startTime);
Serial.printf("Timestamp: %lu\n", startTimestamp);
uint32_t values_log[100];
uint32_t timestamps[100];
int numValues=smaReader.getLog(startTimestamp, startTimestamp+1000, values_log, timestamps);
Serial.printf("Logger: %s\n", numValues==-1?"fail":"success");
for(int i=0;i<numValues;i++) {
Serial.printf("Timestamp: %sTotal energy production: %lu Wh\n", asctime(localtime((time_t *)×tamps[i])), values_log[i]);
}
//Serial.printf("All values, succes: %d\n", smaReader.getAllValues());
}
delay(10000);
}
type or paste code here
Der holt entweder seine Netzdaten via DHCP oder wird im Interface festgelegt.
Wenn das Hausnetz die 192.168.0/24 ist, passt das schon.
Die IP vom Inverter ist 192.168.100.72
Die IP vom ESP ist 192.168.100.111
Arrrrgggghhhh, schei....!
Mindestens 10x kontrolliert und doch ĂŒbersehen: Ich habe im Code 192.168.0.72 verwendet.
Jetzt klappt es.
Vier Augen sind immer besser als zwei
Da drauf bin spÀter gekommen.
So am Rande hab im Router die Adressen fĂŒr meine ESP fest vergeben den je nach Routertyp neigen die die Adressen stĂ€ndig Ă€ndern, zB Netgear.
Hat der keine Einstellmöglichkeit, der gleichen MAC immer die gleiche IP zuzuweisen, wie die Fritzbox?
GruĂ Tommy
Ja... So ist es, wenn man mal schnell was machen will...
DafĂŒr ist das debugging ja
Leider nein, ist sehr gĂŒnstiger ziemlich alter (10J oder sogar mehr) Router, OpenWirt kennt den auch nicht. Ist mir jetzt aber egal habe einen Fritz damit beschĂ€ftigt
if(isSuccess) {
for(int val: values) {
Serial.printf("Value: %d\n", val);
}
}
Wie bekomme ich die Werte einzeln in Variablen?
Ich versteh die Frage nicht:
int values[2];
value[0] und value[1] sind Deine beiden Werte.
Was bedeutet %d\n ?
neue Zeile, Zeilenvorschub (des Fernschreibers)
Der Reader funktioniert jetzt sehr gut. Wollte schon immer mal die Solardaten in mein E-ZĂ€hler-Auslesemodul einfĂŒgen. Eröffnet ganz neue Möglichkeiten.
Schade das der Code nicht beim ESP32 funktioniert...
Von wegen!
Eigentlich steht in der Beschreibung von GitHub das es auf dem ESP32 noch nicht funktioniert.
Macht es aber: Ich habe es an einem M5Stack getestet.
[code]
#include <M5Stack.h>
#include "WiFi.h"
#include <HTTPClient.h>
#include "Free_Fonts.h" // Include the header file attached to this sketch
#include "ezTime.h"
#include <ArduinoJson.h>
#include <SMAReader.h>
// Fill in appropriate values
#define WLANSSID "Repeater"
#define WLANPWD "*******"
#define INVERTERPWD "*******"
IPAddress inverterIP(192,168,100,72);
#define DEBUG_LEVEL 3
#define DEBUG_ERROR 1
#define DEBUG_MIN_INFO 2
#define DEBUG_MAX_INFO 3
#define DEBUG_OUT(level, fmt, ...) if(DEBUG_LEVEL>=level) Serial.printf_P( (PGM_P)PSTR(fmt), ## __VA_ARGS__ )
SMAReader smaReader(inverterIP, SMAREADER_USER, INVERTERPWD, 5);
//Display 320x240
// Netzwerk Daten
const char* ssid = "Speedlink-945";
const char* password = "xxxxxxxxxx";
unsigned long ulReqcount;
char myIpString[24]; //um IP Adresse in String umzuwandeln und anzuzeigen
// Set web server port number to 80
WiFiServer server(80);
void setup()
{
M5.begin(); //Init M5Stack
M5.Power.begin(); //Init power
M5.Lcd.println("mit WIFI vebinden"); //Screen print string.
initWiFi(); //Unterprogramm um mit Wifi zu verbinden
//Grafikanzeige
M5.Lcd.fillScreen(TFT_BLACK); // Clear screen
M5.Lcd.setTextDatum(MC_DATUM); // Set text datum to middle centre
M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK); // Set text colour to orange with black background
M5.Lcd.drawString("SunnyBoyReader", 38, 21, GFXFF);
}
void loop()
{
// wait for WiFi connection
if(WiFi.status() == WL_CONNECTED) {
// getValues int example
String keys[2]={KEY_POWER, KEY_ENERGY_TODAY};
int values[2];
bool isSuccess=smaReader.getValues(2, keys, values);
Serial.printf("Getting values: %s\n", isSuccess?"success":"fail");
if(isSuccess) {
for(int val: values) {
Serial.printf("Value: %d\n", val);
}
}
Serial.printf("Momentan: %d\n", values[0]);
M5.Lcd.setFreeFont(FSS24);
M5.Lcd.fillScreen(TFT_BLACK); // Clear screen
M5.Lcd.drawString("Solar: " + String(values[0]) + "W", 76, 21, GFXFF);
// getValues String example
String keys_string[2]={KEY_WLAN_IP, KEY_WLAN_DNS_IP};
String values_string[2];
isSuccess=smaReader.getValues(2, keys_string, values_string);
Serial.printf("Getting values: %s\n", isSuccess?"success":"fail");
if(isSuccess) {
for(String& val: values_string) {
Serial.printf("Value: %s\n", val.c_str());
}
}
// getLog example
tm startTime;
strptime("2020-10-19 16:00:00", "%Y-%m-%d %T", &startTime);
uint32_t startTimestamp = mktime(&startTime);
Serial.printf("Timestamp: %lu\n", startTimestamp);
uint32_t values_log[100];
uint32_t timestamps[100];
int numValues=smaReader.getLog(startTimestamp, startTimestamp+1000, values_log, timestamps);
Serial.printf("Logger: %s\n", numValues==-1?"fail":"success");
for(int i=0;i<numValues;i++) {
Serial.printf("Timestamp: %sTotal energy production: %lu Wh\n", asctime(localtime((time_t *)×tamps[i])), values_log[i]);
}
//Serial.printf("All values, succes: %d\n", smaReader.getAllValues());
}
delay(5000);
}
//Unterprogramm fĂŒr Wifi-Verbindung
void initWiFi() {
WiFi.mode(WIFI_STA);
WiFi.disconnect(); //Turn off all wifi connections.
delay(100);
WiFi.begin(ssid, password);
M5.Lcd.print("Call to " + String(ssid));
while (WiFi.status() != WL_CONNECTED) {
M5.Lcd.print('.');
delay(1000);
}
M5.Lcd.println(" ");
M5.Lcd.println(WiFi.localIP());
M5.Lcd.print("Signalstearke: ");
M5.Lcd.println(WiFi.RSSI());
server.begin();
delay(4000);
M5.Lcd.clear();
}
[/code]
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.