[Modul] Solaredge Wechselrichter

Ich habe mir das Modul gerade angeschaut bezüglich dem Fehler:
Warning : Error 403, {„String“:„Invalid token“} in C:\ProgramData\Symcon\modules\Solaredge\Auswertung\module.php on line 51

Mal schaun was der Hintergrund ist.

Der Fehler tritt aufgrund der folgenden Zeile im Code auf: (Zeile: 47)

$content = Sys_GetURLContent("https://monitoringapi.solaredge.com/site/$id/overview?api_key=$apikey"); 

Wenn der Link direkt eingegeben wird mit ohne Variable mit API-Key + ID direkt funktioniert der Abruf:

$content = Sys_GetURLContent("https://monitoringapi.solaredge.com/site/id12345/overview?api_key=apikey12345"); 

Die angegeben Variablen im Sys_GetURLContent verursachen das Problem, er sagt dann immer er erwarted einen String hat aber hat einen bool-Wert erkannt, wenn ich das richtig verstehe.

Was ist an der Syntax faslch, hat jemand einen tipp?

Code:

<?php

declare(strict_types=1);
	class Wechselrichter extends IPSModule
	{
		public function Create()
		{
			//Never delete this line!
			parent::Create();

            $this->RegisterVariableFloat("Actual", $this->Translate("Actual"),"",0);
            $this->RegisterVariableFloat("Today", $this->Translate("Today"),"",1);
            $this->RegisterVariableFloat("Month", $this->Translate("Month"),"",2);
            $this->RegisterVariableFloat("Year", $this->Translate("Year"),"",3);
            $this->RegisterVariableFloat("Total", $this->Translate("Total"),"",4); 

            $this->RegisterPropertyInteger("Aktualisierungsinvertall", 9000000);
            $this->RegisterPropertyString("ApiKey", "");
            $this->RegisterPropertyString("Id", "");

            //Create the timer for the updateintervall
            $this->RegisterTimer("Update", 9000000, 'A_UpdateAuswertung(' . $this->InstanceID . ', "Id","ApiKey");');
            
		}

		public function Destroy()
		{
			//Never delete this line!
			parent::Destroy();
		}

		public function ApplyChanges()
		{
			//Never delete this line!
			parent::ApplyChanges();

            $this->SetTimerInterval("Update", $this->ReadPropertyInteger("Aktualisierungsinvertall") * 1000);
            $this->UpdateAuswertung($this->ReadPropertyString("Id"),$this->ReadPropertyString("ApiKey"));

		}


		public function UpdateAuswertung (string $id, string $apikey) {
        
            if ($id != "")
            {   
                $content = Sys_GetURLContent("https://monitoringapi.solaredge.com/site/$id/overview?api_key=$apikey"); 
                //$content = Sys_GetURLContent("https://monitoringapi.solaredge.com/site/ID123/overview?api_key=APIkey12345"); 
                $json=json_decode($content);

                $cache = $json->overview->currentPower->power / 1000;
                $this->SetValue("Actual", $cache);

                # Generated day
                $cache = $json->overview->lastDayData->energy / 1000;
                $this->SetValue("Today", $cache);

                # Generated month
                $cache = $json->overview->lastMonthData->energy / 1000;
                $this->SetValue("Month", $cache);

                # Generated year
                $cache = $json->overview->lastYearData->energy / 1000;
                $this->SetValue("Year", $cache);

                # Generated all
                $cache = $json->overview->lifeTimeData->energy / 1000;
                $this->SetValue("Total", $cache);
            }

        }

	}

Fehlermeldung:

29.10.2021, 21:30:14 | TimerPool | Wechselrichter (Update):
Warning: Error 403, {„String“:„Invalid token“} in C:\ProgramData\Symcon\modules\Solaredge\Wechselrichter\module.php on line 47

Fatal error: Uncaught TypeError: json_decode() expects parameter 1 to be string, bool given in C:\ProgramData\Symcon\modules\Solaredge\Wechselrichter\module.php:49
Stack trace:
#0 C:\ProgramData\Symcon\modules\Solaredge\Wechselrichter\module.php(49): json_decode(false)
#1 C:\ProgramData\Symcon\scripts__generated.inc.php(7207): Wechselrichter->UpdateAuswertung(‚Id‘, ‚ApiKey‘)
#2 C:\Windows\System32-(1): A_UpdateAuswertung(28157, ‚Id‘, ‚ApiKey‘)
#3 {main}
thrown in C:\ProgramData\Symcon\modules\Solaredge\Wechselrichter\module.php on line 49

Update, der Fehler ist gelöst:

Warning : Error 403, {„String“:„Invalid token“} in C:\ProgramData\Symcon\modules\Solaredge\Auswertung\module.php on line 51

Danke geht an Nall-Chan, der mir im IP-Symcon Discord-Chat geholfen hat einen simplen, für mich unscheinbaren, Fehler zu beheben. Es wurden anstatt des hinterlegten API-Key und der ID, falsche undefinierte Variablen übergeben, wodurch der Fehler verursacht wurde.

Der ganze Anruf hat dadurch nur einmal initial beim Anlegen einer Instand des Moduls funktioniert.
Alle weiteren automatischen Abrufe sind dann Fehl geschlagen. Daher wundert es mich auch wie es bei euch funktionieren konnte, es hätte eigentlich gar nicht funktionieren dürfen.

Kurz gesagt:
Das Problem ist gelöst, das Update ist bereits auf Github hochgeladen.

@schneider1
Könntest du bei dir das Modul einmal updaten und Rückmeldung geben ob der Fehler bei dir jetzt behoben ist?

Grüße
Daniel

@Dromik @frankb
Tritt das „0er-Problem“ noch bei euch auf?

Ich kann es leider nicht nachvollziehen, dass es plötzlich 0 ist.
Wobei es zusammenhängen könnte mit dem in Problem das gelöst wurde, dass ich die Variablen nicht korrekt übergeben habe, wie in Beitrag 44 beschrieben.

Daher sollten aktuell alle Probleme gelöst sein.

Hallo Daniel,

bekomme beim aktualisieren diese Meldung

image002.png

Wollte es jetzt nicht löschen und neu installieren.

image001.png

Guten Morgen,
ich habe etwas nicht bedacht gehabt…

Ich habe das alte Github-Repository gelöscht und das Modul erneut hochgeladen.
Dadurch hat sich die Adresse geändert, du müsstest einmal den neuen Link zum Modul nutzen.

Hintergrund warum ich das Ursprüngliche Repository gelöscht habe:
Ich hatte beim ersten immmer „wild“ commitet ohne die Hintergründe zu verstehen.
Nachdem ich mir aber das Webinar von paresy und Dr. Nils angeschaut habe, habe ich so einiges gelernt. Ich wollte das ganze dann noch eimal sauber haben und habe das alte gelöscht und ein neues angelegt.

Sag bescheid ob es mit dem neuen Link klappt.
Das Modul ist jetzt auch über den Modul-Store verfügbar. :slight_smile:

Webinar:

1 „Gefällt mir“

@schneider1:
Funktioniert es jetzt wieder bei dir, nach meiner Info aus Post 47?

Hallo,
ich habe nun auch eine Solaredge Anlage verbaut bekommen, das Modul habe ich installiert und es läuft prima. :smiley:
Aus dem API Handbuch geht hervor, dass noch mehr Werte ausgelesen/abgerufen werden können, ist geplant dieses Modul zu erweitern? (ggf. Werte aus dem currentPowerFlow)
Vielleicht gibt es ja noch mehr Interessenten / Ideen :face_with_monocle:

Hi Andreas,
danke für deine Nachfrage, über die API kann ich aktuell nur folgende Infos auslesen, so wie aktuell im Modul verfügbar.

auslesen

Über Modbus erhält man noch mehr Werte.
Ich werde mal schauen ob ich den Wechselrichter auch direkt im Netzwerk über eine API ansprechen kann.

Würde mir jemand, der einen Moduzähler zum erfassen des Verbrauchs angeschlossen hat seinen API-Zugang zum testen zur Verfügung stellen, damit ich die Programmierung durchführen + testen kann?

Leider hat mein Zähler keinen Zähler zur Messung des Verbrauchs.
Auch habe ich ein Modell der keine Modbus-TCP kann zum auslesen der Werte zur Verfügung stellt.

Ich hab dir eine ne PN geschick :slight_smile:

Perfekt, danke dir! :slight_smile:

An einem Ausbau des Moduls bzw. Modbus wäre ich auch sehr stark interessiert - wäre super - vielen Dank

2 „Gefällt mir“

Ich habe mir die weitere API jetzt einmal angesehen. (Danke auch für die zur Verfügung Stellung deines Systems.)

Die Frage die ich mir gerade Stelle:
Die verschiedenen Werte die man auslesen kann werden auf verschiedenen Seiten zur Verfügung gestellt d.h. ich brauche für verschiedene Infos die ich abrufen will verschiedene API Aufrufe.

Wenn ich jetzt schon einmal zwei API-Aufruf habe um verschiedene Werte auszulesen.
Die Anzahl der API-Aufrufe pro Tag bleibt zwar gleich, aber durch verschiedene Seiten die aufgerufen werden müssen um alle benötigten Infos zu erhalten, halbiert sich „Aktualität der Daten“, da ich hier nicht mehr alle 5 Minuten abrufen kann sondern nur noch alle 10 Minuten.

Daher die Frage ob es sich rentiert das Modul in Bezug auf Abfrage der Infos über die API zu erweitern? Per Modbus hingegen macht es sin, da ich hier keine Limitierung an Anfragen habe.

Es gibt allerdings auch Solaredge-Wechselrichter (so wie meiner) der noch kein Modbus-TCP integriert hat.

Was meint ihr bzw. was sagt ihr dazu zu dem Thema API-Aufrufe?

Hallo zusammen,

ich habe seit neuestem auch eine PV-Anlage mit einem SE-Wechselrichter. Natürlich möchte ich die Daten ins IPS übernehmen. Allerdings scheitere ich schon daran, dass ich keinen API-Key generiert bekomme. Wenn ich mich beim Monitoring der SE Anlage anmelde, dann habe ich oben nur die Übersicht und keine weiteren Punkte. Also auch kein Admin.
Könnt ihr mir sagen, ob der Installateur da etwas freischalten muss, oder wie komme ich sonst an den API-Key?
Viele Grüße

Markus

Hallo Macblock,
puh eine gute Frage, du bist der erste bei dem ich höre das etwas freigeschalten werden müsste.

Hast du schon einmal Rücksprache mit deinem Solarteur gehalten?

Grüße
Daniel

Hallo Macblock,
am besten mit deinem Solateur reden, du brauchst mindestens das Recht
" DASHBOARD_AND_LAYOUT"

Grüße
Matze

Hallo Matze,

vielen Dank für deine Info. Dann werde ich den Kollegen mal ansprechen und ihm sagen, dass er mir mal mehr Rechte geben soll :grin:

VG Markus

@Daste wäre super wenn es ein Modul für Modbus geben würde.

Hallo da ich einen SolarEdge Wechselrichter bekommen habe (PV noch nicht am Dach) würde mich interessieren ob schon wer ihn mit ModBus eingebunden hat? Und wenn wie? Momentan habe ich nur Spannung und Strom hinbekommen.
Gruß Stefan