vielen Dank für dieses Tutorial. Leider habe ich das Problem, dass nachts, wenn keine Stromerzeugung ist, unter "holdingRegisters.40083_I_AC_Leistung" weiterhin Zahlen angezeigt werden (bei mir wechselnd zwischen ~30 Watt und ~650 Watt). Das ist natürlich falsch.
Tagsüber stimmen die Werte aber mit den Daten aus der App überein und sind realistisch.
@cybtrash Was hast Du denn bei "SELECT" eingestellt?
Bei mir steht "last" und damit passt es.
EDIT:
Hast Du den Fehler nur in Grafana, oder kommen die "falschen" Werte direkt vom Wechselrichter über den Modbus Adapter? Dann weiß ich auch nicht...
Finde irgendwie nichts wo diese beschrieben werden.
Du hast auch unter Punkt 2 und Punkt 7 den gleichen Code gepostet.
Evtl. bin ich blind...
Wäre cool wenn du dich hier melden könntest.
Finde irgendwie nichts wo diese beschrieben werden.
Du hast auch unter Punkt 2 und Punkt 7 den gleichen Code gepostet.
Evtl. bin ich blind...
Wäre cool wenn du dich hier melden könntest.
@Chris87
Moin Chris, sorry für die späte Antwort. Und die wird dich glaube ich etwas enttäuschen. Da ich die Idee von einem User aus dem PV Forum habe und die von dir angesprochenen Werte auch nicht nutze, kann ich dir nichts näheres dazu sagen.
@Chris87
Moin Chris, sorry für die späte Antwort. Und die wird dich glaube ich etwas enttäuschen. Da ich die Idee von einem User aus dem PV Forum habe und die von dir angesprochenen Werte auch nicht nutze, kann ich dir nichts näheres dazu sagen.
kein Thema. Ich sag sogar Danke für die späte Antwort.
Somit hatte ich die Möglichkeit mich mal detailiert mit Grafana auseinander zu setzten, mit (wie ich finde) gutem Resultat:
kein Thema. Ich sag sogar Danke für die späte Antwort.
Somit hatte ich die Möglichkeit mich mal detailiert mit Grafana auseinander zu setzten, mit (wie ich finde) gutem Resultat:
seit 2 Wochen beschäftige ich mich nun auch mit diesem Thema. Hab zwar alles so gemacht wie oben geschildert und die Variablen mit meiner Situation angepasst. Doch irgendwie klappt es doch nicht... Vermute mal etwas im Script nicht passt und bei Java kenne ich mich leider noch nicht aus.... Wäre also um einen kleinen Tip Dankbar...
Das Script schaut bei mir so aus. hab's nur mal mit der Wechselrichter Temperatur ausprobiert, denn da bin ich mir eigentlich über den zu erhaltenen Wert sicher.
function convertValue(value, factor) {
if (value === null) return;
if (factor === null) factor = 0;
setState('Solar.Wechselrichter.TempWechselrichter', value * Math.pow(10, factor), true);
}
seit 2 Wochen beschäftige ich mich nun auch mit diesem Thema. Hab zwar alles so gemacht wie oben geschildert und die Variablen mit meiner Situation angepasst. Doch irgendwie klappt es doch nicht... Vermute mal etwas im Script nicht passt und bei Java kenne ich mich leider noch nicht aus.... Wäre also um einen kleinen Tip Dankbar...
Das Script schaut bei mir so aus. hab's nur mal mit der Wechselrichter Temperatur ausprobiert, denn da bin ich mir eigentlich über den zu erhaltenen Wert sicher.
function convertValue(value, factor) {
if (value === null) return;
if (factor === null) factor = 0;
setState('Solar.Wechselrichter.TempWechselrichter', value * Math.pow(10, factor), true);
}
originale Werte vom Wechselrichter liegen auf 40107 und 40104
Hey Daniel,
so wie ich das sehe, verwendest du die falschen Werte. Du musst (wie in meinem Fall) einen Zähler abziehen und das bedeutet statt 40107 und 40104 nimmst du 40106 und 40103 und nicht jeweils eins mehr. Versuch es mal damit.
originale Werte vom Wechselrichter liegen auf 40107 und 40104
Hey Daniel,
so wie ich das sehe, verwendest du die falschen Werte. Du musst (wie in meinem Fall) einen Zähler abziehen und das bedeutet statt 40107 und 40104 nimmst du 40106 und 40103 und nicht jeweils eins mehr. Versuch es mal damit.
@hennerich Werde ich gleich mal versuchen. Bei diversen Youtube-Kanälen stand, dass der Modbus-Adapter nicht den realen Register nimmt, sondern +1. Daher also das Beispieö von oben+1, weil ich einen anderen Wechselrichter habe und nochmals +1 Zweck Bedienungsanleitungen im Netz... Aber werds danach testen. Schöne Grüße und Danke in der Zwischenzeit
originale Werte vom Wechselrichter liegen auf 40107 und 40104
Hey Daniel,
so wie ich das sehe, verwendest du die falschen Werte. Du musst (wie in meinem Fall) einen Zähler abziehen und das bedeutet statt 40107 und 40104 nimmst du 40106 und 40103 und nicht jeweils eins mehr. Versuch es mal damit.
Hallo, nun meldet sich nochals der Neue...
Teil 3 - Pumkt 2 PVErzeugteEnergieAktuell Blockly Script:
Hier ist im Spoiler ja ein fixfertiges Script. Wenn ich ein neues Blockly öffne und das Ansichtsfenster von Blockly auf JS ändere, dann komme ich zum Script Bereich. Soweit OK.
Das Script kann ich aber leider nicht importieren, weil man nur Lese-Rechte im Ansichtsfenster vom Blockly Script hat (schreibt mir der iobroker zumindest im Blockly Hausverbrauch). Kann man das ändern oder gibt es eine andere Möglichkeit, das Script zu importieren?
Hallo, nun meldet sich nochals der Neue...
Teil 3 - Pumkt 2 PVErzeugteEnergieAktuell Blockly Script:
Hier ist im Spoiler ja ein fixfertiges Script. Wenn ich ein neues Blockly öffne und das Ansichtsfenster von Blockly auf JS ändere, dann komme ich zum Script Bereich. Soweit OK.
Das Script kann ich aber leider nicht importieren, weil man nur Lese-Rechte im Ansichtsfenster vom Blockly Script hat (schreibt mir der iobroker zumindest im Blockly Hausverbrauch). Kann man das ändern oder gibt es eine andere Möglichkeit, das Script zu importieren?
@DanielO
Moin Daniel, du hast Recht. Dort kann man nichts ändern.
Wenn du mal oben in deinem neuen Script auf das Symbol mit dem Pfeil in das Dokument klickst
dann öffnet sich ein neues Fenster, in das du meinen Code hineinkopieren kannst. Dann müsste ioBroker dir das Blockly Script erzeugen.
@DanielO
Moin Daniel, du hast Recht. Dort kann man nichts ändern.
Wenn du mal oben in deinem neuen Script auf das Symbol mit dem Pfeil in das Dokument klickst
dann öffnet sich ein neues Fenster, in das du meinen Code hineinkopieren kannst. Dann müsste ioBroker dir das Blockly Script erzeugen.
@hennerich eben nur müsste :) wenn man aufs rechte Symbol klickt, dann kommt in der Tat ein Fenster mit Blöcke importieren.
Wenn der Code eingefügt wird, dann bleibt jedoch alles im Feld leer. Siehe Foto 3 und wenn ich mal auch JS umschalte, dann fügt er mir nur eine Zeile ein.
@hennerich eben nur müsste :) wenn man aufs rechte Symbol klickt, dann kommt in der Tat ein Fenster mit Blöcke importieren.
Wenn der Code eingefügt wird, dann bleibt jedoch alles im Feld leer. Siehe Foto 3 und wenn ich mal auch JS umschalte, dann fügt er mir nur eine Zeile ein.
@hennerich Könntest du mir nicht bitte als ERsteller einen Export zur Verfügung stellen, wäre natt von dir :) Hab mitbekommen, dass das nicht so einfach zu importieren geht.
@hennerich Könntest du mir nicht bitte als ERsteller einen Export zur Verfügung stellen, wäre natt von dir :) Hab mitbekommen, dass das nicht so einfach zu importieren geht.
@DanielO
Hey Daniel, ich habe mal mein zweites Posting (oben) etwas konkretisiert. Dort steht jetzt, dass die Scripte
PVLeistungAktuell,
Sonnenstand,
TempWechselrichter und
TotalRealPower
JS Scripte sein müssen. Und von meinem einen Blockly hab ich einen Export eingefügt.
Edit: Und auch in meinem dritten Posting hab ich das noch nachgezogen und die Namen meiner Blockly Scripte in Klammern dahinter geschrieben. War (ist) schon etwas verwirrend ;-)
kein Thema. Ich sag sogar Danke für die späte Antwort.
Somit hatte ich die Möglichkeit mich mal detailiert mit Grafana auseinander zu setzten, mit (wie ich finde) gutem Resultat:
@Chris87
Mit welchem Script/Blocky hast du die drei fehlenden Werte erzeugt?
Und wie hast du das Sonnenstandsscript angepasst, sodass die Werte passen? Bei mir stimmt der Verlauf nicht (Sonne steht viel zu hoch bzw. geht zu früh auf und zu spät unter)
@Chris87
Mit welchem Script/Blocky hast du die drei fehlenden Werte erzeugt?
Und wie hast du das Sonnenstandsscript angepasst, sodass die Werte passen? Bei mir stimmt der Verlauf nicht (Sonne steht viel zu hoch bzw. geht zu früh auf und zu spät unter)
@hennerich
Danke :slightly_smiling_face:
Habe die Punkte ebenfalls manuell angelegt, aber mir fehlt noch das Script für "PVErzeugteEnergieTag", denn damit lassen sich erst die anderen Werte berechnen. Ich sehe gerade zwei Posts weiter oben, dass du ein Blocky bei dir dafür hast.
@hennerich
Danke :slightly_smiling_face:
Habe die Punkte ebenfalls manuell angelegt, aber mir fehlt noch das Script für "PVErzeugteEnergieTag", denn damit lassen sich erst die anderen Werte berechnen. Ich sehe gerade zwei Posts weiter oben, dass du ein Blocky bei dir dafür hast.
@hardy_01
das mit dem fehlenden Script ist richtig. das fehlt laut mir auch. ich habe mir jenen z.b. selber gebastelt, als ich das ganze Script verstanden habe. Ich hab z.b. den total import um 00.01 abgelesen und eine Variable erstellt. Dann einfach die weiteren Zählerstände davon abgezogen. Also als Beispiel aktueller Import gesamt - Import um 00.01 Uhr. Es fehlt mir zwar die Minute 01, aber das ist nicht schlimm. :)
und @hennerich Bedanke mich für die Super Arbeit. Import funktioniert nun Seit 2 Tagen einwandfrei. Export und Eigenverbrauch muss ich noch testen, dafür muss der Schnee vom Dach :stuck_out_tongue:
@hardy_01
das mit dem fehlenden Script ist richtig. das fehlt laut mir auch. ich habe mir jenen z.b. selber gebastelt, als ich das ganze Script verstanden habe. Ich hab z.b. den total import um 00.01 abgelesen und eine Variable erstellt. Dann einfach die weiteren Zählerstände davon abgezogen. Also als Beispiel aktueller Import gesamt - Import um 00.01 Uhr. Es fehlt mir zwar die Minute 01, aber das ist nicht schlimm. :)
und @hennerich Bedanke mich für die Super Arbeit. Import funktioniert nun Seit 2 Tagen einwandfrei. Export und Eigenverbrauch muss ich noch testen, dafür muss der Schnee vom Dach :stuck_out_tongue:
Teil3 – Visualisierung (ob mit Grafana oder mit anderen Tools muss ich sehen)
ongoing, erster Screenshot von meinem Grafana Dashboard (auch hier danke an inkoFa, das ist nämlich seine Idee gewesen).
Damit ihr euch das auch nachbauen könnt, erkläre ich nachfolgend welche Einstellungen dafür notwendig sind. Der linke Block kommt von meiner Heizung, den lasse ich außen vor und konzentriere mich nur auf die PV Sachen.
1. Graph PV
Quellen aus der InfluxDB sind
PVLeistungAktuell -> gelber Graph
Hausverbrauch -> blauer Graph
TempWechselrichter -> orangener Graph
(Sonnenstand) -> gestrichelt grüne Linie
Die ersten 3 Werte solltet ihr schon haben wenn ihr oben aus meinem Teil 2 die Sachen übernommen habt.
Sonnenstand war ein fertiges JS Script:
// calculates the sun position, path and power throughout the day
// based on from http://www.stjarnhimlen.se/comp/tutorial.html
// most var-names are identical to above tutorial
// combined with Sonnenstand-Script: paul53, pix; 06.07.2015 nach ioBroker Forum http://forum.iobroker.net/viewtopic.php?f=21&t=975&sid=6f0ba055de5f82eed6809424f49ca93b#p7635
// Angepasst ykuendig 12.02.17; stringify im log, ack = true bei setState und Diverses
var suncalc = require('suncalc'),
result = getObject("system.adapter.javascript.0"),
lat = result.native.latitude,
long = result.native.longitude;
log("long: " + long + " - lat: " + lat);
var modtilt = 50; //Dachneigung in Grad (Solar panel's tilt angle)
var modazi = 285; //Ausrichtung des Hauses in Grad zB SSW (Solar panel's azimut)
var modsufrace = 148.0; //Paneloberfläche in m2 (Solar panel's surface in sq. meters)
var modeff = 0.211; //Annäherung an Panel-Wirkungsgrad zB 18 Prozent (modules efficiency correction)
// Hier kann an einem klaren Tag etwas geschraubt werden ;-)
var altitude; // Calculated Elevation
var azimuth; // Calculated Azimuth
createState('javascript.0.Solar.Sonnenstand.Elevation', 0, {unit: '°'});
createState('javascript.0.Solar.Sonnenstand.Azimut', 0, {unit: '°'});
createState('javascript.0.Solar.Sonnenstand.PanelPossible', 0, {unit: 'W'});
// ganz am Ende die setStates anpassen nicht vergessen!
// Do not change below, until You know what You are doing!
// ********************************************************
Math.degrees = function(radians) {return radians * 180 / Math.PI;};
Math.radians = function(degrees) {return degrees * Math.PI / 180;};
function Sonnenstand_berechnen () {
var now = new Date();
var sunpos = suncalc.getPosition(now, lat, long);
log("Script Sonnenstand; latitude : " + result.native.latitude + " / longitude: " + result.native.longitude,'debug');
log("Script Sonnenstand; sunpos: " + JSON.stringify(sunpos),'debug');
altitude = Math.degrees(sunpos.altitude);
azimuth = Math.degrees(sunpos.azimuth) + 180;
// The intensity of the direct component of sunlight throughout each day can be determined as
// a function of air mass. based on: http://pveducation.org/pvcdrom/properties-of-sunlight/air-mass#formula
var airmass = 1/Math.cos((90-altitude)*4*Math.asin(1)/360);
// Sincident is the intensity on a plane perpendicular to the sun's rays in units of kW/m2 and AM is the air mass.
// The value of 1.353 kW/m2 is the solar constant and the number 0.7 arises from the fact that about 70% of the radiation incident on the atmosphere is transmitted
// to the Earth. The extra power term of 0.678 is an empirical fit to the observed data and takes into account the non-uniformities in the atmospheric layers.
// ykuendig: use different values because of pv instead thermal panels
var Sincident = (1.367*Math.pow(0.78,Math.pow(airmass,0.6)));
var fraction = Math.cos(altitude*4*Math.asin(1)/360)*Math.sin(modtilt*4*Math.asin(1)/360)*Math.cos(azimuth*4*Math.asin(1)/360-modazi*4*Math.asin(1)/360)+Math.sin(altitude*4*Math.asin(1)/360)*Math.cos(modtilt*4*Math.asin(1)/360);
// W/m² light intensity on the module * module's surface
var SmoduleInt = Sincident * fraction * modsufrace * 1000;
if(SmoduleInt<0) {
SmoduleInt = 0;
}
// Module Effective in relation of the efficiency of the used panel
var SmoduleEff = SmoduleInt * modeff;
if( altitude < 0 ) {
SmoduleInt = 0;
SmoduleEff = 0;
altitude = 0;
}
log("Script Sonnenstand; Erfolgreich gelaufen, Werte akzeptiert", "info");
log("Script Sonnenstand; airmass: " + airmass,"debug");
log("Script Sonnenstand; azimuth: " + azimuth,"debug");
log("Script Sonnenstand; altitude: " + altitude,"debug");
log("Script Sonnenstand; SmoduleInt: " + SmoduleInt,"debug");
log("Script Sonnenstand; SmoduleEff: " + SmoduleEff,"debug");
// Change ID to the created States
setState('javascript.0.Solar.Sonnenstand.Elevation'/*javascript 0 Solar Sonnenstand Elevation*/,altitude.toFixed(1), true);
setState('javascript.0.Solar.Sonnenstand.Azimut'/*javascript 0 Solar Sonnenstand Azimut*/,azimuth.toFixed(), true);
setState('javascript.0.Solar.Sonnenstand.PanelPossible'/*javascript 0 Solar Sonnenstand PanelPossible*/, SmoduleEff.toFixed(), true);
}
// -> Zyklisch
schedule("*/10 * * * *", Sonnenstand_berechnen);
Sonnenstand_berechnen(); // bei Scriptstart
2. Graph PV Erzeugung in kWh
Quelle aus der InfluxDB sind
@hennerich Hallo, sehr schöne Doku. Ich lese das auch seit einiger Zeit so aus. Leider habe ich 2 WR als Master-Slave und schaffe es einfach nicht an die summierten Daten zu kommen. WR1 ist kein Problem aber WR2 kann ich nicht finden. Es muss die Daten geben, bei Solaredge tauchen sie ja auch auf. aber im Modbus Adapter finde ich die richtige Nummer nicht. Batteriedaten habe ich gefunden (102853, 37, 55) aber beim WR2 scheitere ich. Der wäre aber für den Eigenverbrauch wichtig. Hast Du eine Idee?