Sieht sehr gut aus, Hut ab! Betreffend Differenzen: Beachte dass es einen grösseren Unterschied zeitlich gibt zwischen App und den Daten, welche du von der Anlage erhälst… bis zu 10-15 Minuten! Vielleicht liegt es daran? Also, deine Modbus-Anfragen und Werte sind genauer
Ja das könnte sein :-).
Der Fehler mit Zeitüberschreitung und Block 8
Bezieht sich Block 8 auf das Jons Script? 8ter Abschnitt?
Ich verstehe dich nicht, von welchem Script sprichst du? Mir sagt das gerade gar nichts.
Die Werte sind dennoch nicht ganz stimmig
Differenz 703 Watt zu 0,705 kW okay, die 0,705 kW gehen 0,686 kW ins Haus und 0,017 kW in Netz passt auch noch. Aber die 0,686 kW + 0,025 kW passen nicht zu den 0,728 kW.
Sorry nicht Script sondern in der Modbus Vorlage Wechselrichter.json, die meinte ich.
Das in meinem Post ist der Auszug aus der Datei, hier der Block8 wenn ich von Oben nach Unten durchzähle.
Hm, bei mir funktioniert es; und ich glaube ein paar andere nutzen die gleichen Variabeln und Adressblöcke ohne Fehler… Zumindest ist mir nichts bekannt.
Komisch… Und es gibt keine Aktualisierung der Werte?
Ich habe gerade keinen Lösungsansatz; ich kann mir nur vorstellen, dass bei deinem Gerät/Firmware ev. die Werte nicht zur Verfügung stehen oder an anderer Stelle stehen??
Die Differenz wäre dann 0.017kW, richtig? Könnte das nicht einfach die Differenz auf Grund des Intervalls der Abfrage sein? Sprich, es wird ja meines Wissens nicht alles „gleichzeitig“ gelesen… Vielleicht kommt die Differenz daher…?
Welche Variabeln nutzt du bei diesen Berechnungen?
Hast du das mit IPSView gemacht?
Genau das hätte ich jetzt auch gesagt. Nicht alle Phasen / Strings bzw. Spannung/Strom werden gleichzeitig gelesen. Daher müssten die Fehler kommen.
Aber die View sieht sehr gut aus!
View ist mit IPSView erstellt, das ist richtig
Hier sind meine Scripte
<?php
//Script zur Ermittlung des Eigenverbrauch
// IDs der Variablen definieren
$string1_id = 40532; // ID der Variable String1
$string2_id = 48977; // ID der Variable String2
$speicher_ladung_id = 54486; // ID der Variable Batterieladung
$Netzeinspeisung_id = 57868; // ID der Variable Netzeinspeisung
// Werte der Variablen abrufen
$string1 = GetValue($string1_id);
$string2 = GetValue($string2_id);
$speicher_ladung = GetValue($speicher_ladung_id);
$Netzeinspeisung = GetValue($Netzeinspeisung_id);
// EV berechnen
$Eigenverbrauch = ($string1 + $string2) - ($speicher_ladung/1000 + $Netzeinspeisung);
// Ergebnis in eine Variable schreiben
$EigenverbrauchID = 44234; // ID der Zielvariable für Eigenverbrauch
SetValue($EigenverbrauchID, $Eigenverbrauch);
// Ausgabe zur Kontrolle
//echo "Die berechnete EV ist: " . $ev;
?>
<?php
// Script zur Trennung von Netzeinspeisung und Netzbezug
$Netzleistung = GetValue(55407); // Ersetze xxxxx durch die ID der Leistung vom Dach
$Netzeinspeisung = 0;
$Netzbezug = 0;
// Prüfen, ob der Wert kleiner als 0 ist
if ($Netzleistung < 0) {
$Netzeinspeisung = $Netzleistung * -1;
SetValue(57868, $Netzeinspeisung); // Ersetze xxxxx durch die ID der Variablen für die Netzeinspeisung
} else {
$Netzbezug = $Netzleistung;
SetValue(17203, $Netzbezug); // Ersetze xxxxx durch die ID der Variable für den Netzbezug
}
?>
<?php
// Script zur Ermittlung des Ertrags je Dachfläche
// ID der Variablen
$totalPowerID = 18305; // Ersetzen Sie dies durch die echte ID der TotalPower-Variablen
$pv1VoltID = 15891; // Ersetzen Sie dies durch die echte ID der PV1 Volt-Variablen
$pv2VoltID = 25311; // Ersetzen Sie dies durch die echte ID der PV2 Volt-Variablen
// Werte der Variablen abrufen
$totalPower = GetValue($totalPowerID);
$pv1Volt = GetValue($pv1VoltID);
$pv2Volt = GetValue($pv2VoltID);
// Berechnung durchführen
$sumPvVolt = $pv1Volt + $pv2Volt;
if ($sumPvVolt != 0) {
$string1 = ($totalPower / $sumPvVolt) * $pv1Volt;
$string2 = ($totalPower / $sumPvVolt) * $pv2Volt;
} else {
$string1 = 0; // Vermeidung der Division durch Null
$string2 = 0; // Vermeidung der Division durch Null
}
// Ergebnisse in String1 und String2 speichern (hier Beispiel-IDs 33445 und 55667 verwenden)
$string1ID = 40532; // Ersetzen Sie dies durch die echte ID der String1-Variablen
$string2ID = 48977; // Ersetzen Sie dies durch die echte ID der String2-Variablen
SetValue($string1ID, $string1);
SetValue($string2ID, $string2);
?>
Danke schön für die positive Rückmeldung
Hi kannst du dir das Script mal ansehen, nehme die Grid Power vom Dongle. Wenn diese negativ ist, soll er den Wert mit -1 Multiplizieren und diesen Wert der Variablen Netzbezug zuweisen.
Wenn der Wert >0 ist, soll er diesen Wert der Variablen Netzeinspeisung zuweisen.
Komischerweise bekomme ich aber immer sowohl beim Netzbezug als auch der Einspeisung Werte dargestellt.
Müsste ich das Script ändern, da die jeweilige andere Variable immer genullt wird und wenn ja wie macht man dies?
<?php
// Script zur Trennung von Netzeinspeisung und Netzbezug
$Netzleistung = GetValue(55407); // Ersetze xxxxx durch die ID der Leistung vom Dach
$Netzeinspeisung = 0;
$Netzbezug = 0;
// Prüfen, ob der Wert kleiner als 0 ist
if ($Netzleistung < 0) {
$Netzbezug = $Netzleistung * -1;
SetValue(17203, $Netzbezug); // Ersetze xxxxx durch die ID der Variablen für die Netzbezug
} else {
$Netzeinspeisung = $Netzleistung;
SetValue(57868, $Netzeinspeisung); // Ersetze xxxxx durch die ID der Variable für den Netzeinspeisung
}
?>
Sorry, ich bin diese Woche einwenig beschäftigt… muss es vermutlich mal am Wochenende anschauen.
Hallo M70,
kein Problem, habe jetzt alle Werte berechnet und die stimmen auch (der Zeitversatz spielt eine nicht unerhebliche Rolle du hattest Recht).
Nur den Fehler bekomme ich nicht weg, bisher hatte auch noch kein anderes Forumsmitglied eine Idee.
Hallo,
durch die tolle Unterstützung des Supports von IP-Symcon konnte das Problem umgehend gelöst werden.
Unter dem Wechselrichter musste nur der Eintrag Coils gelöscht werden, dadurch tritt der Fehler nicht mehr auf.
Super, das freut mich, dass du es lösen konntest.
Ich hoffe, alles läuft nun so wie gewünscht.
Ja, einige Berechnungen muss ich noch anlegen aber ansonsten alles perfekt
Zu früh gefreut seit heute kommt jetzt der Fehler
Der Fehler müsste dann in dem Datenblock 2 grau markiert liegen?
Den Datenblock 8 haben wir gelöscht, somit war das Problem behoben, hier handelt es sich aber um einen sehr großen Block den ich nicht einfach löschen möchte.
Hast du den Timeout eingestellt? Der Dongle ist da ziemlich empfindlich…
Siehe hier Modbus abfragen und über weiteres Gerät verteilen - #57 von M70
Bei mir hat das Script wie folgt ausgesehen, welches man einmalig ausführen musste (zumindest in der 7.2. Vermutlich dann in der 8.0 nicht mehr nötig per Script…):
<?php
// muss nur einmal ausgeführt werden; in 8.0 sollte diese Einstellung auch via Eigenschaften-Seite einstellbar sein
IPS_SetProperty(23736, "TimeoutTime", 30);
IPS_ApplyChanges(23736);
IPS_SetProperty(48263, "TimeoutTime", 30);
IPS_ApplyChanges(48263);
IPS_SetProperty(13255, "TimeoutTime", 30);
IPS_ApplyChanges(13255);
Es sind die Einstellungen bei den Modbus-Gateways von Dongle und Master (resp. auch der Slave WR bei mir). Ganz weg bekommt man die Fehler nicht… zumindest habe ich es nicht geschafft. Erhalte nur noch so 6 Stk pro Tag; immer um die gleiche Zeit.
Die Fehlermeldung „ILLEGAL_RESPONSE_LENGTH“ erhalte ich aber nie.
Ich habe das Skript jetzt integriert und einmal laufen lassen. Der Fehler tritt so wie ich das aktuell sehe immer mit dem Abruf in der Nacht auf. Könnte vielleicht mit dem Tageswechsel zu tun haben?
Das Skript muss also nicht zyklisch laufen?
Vielen Dank für deine Unterstützung.
Nein, das Script braucht nur einmal zu laufen. Dieser nimmt die nötige Einstellung vor.
Und ja, es scheint immer um die gleiche Zeit zu erfolgen, alle 24 Stunden. Ich vermute, dass es wohl in der Zeit tusammenfällt, wenn der Dongle von extern allenfalls beansprucht wird (Wartung, oder sowas)
Interessant bei mir zumindest: die Uhrzeit hängt dabei auch damit zusammen, wann allenfalls ein Verbindungsunterbruch zur PV Anlage stattfand. Dann, sobald wieder die Verbindung hergestellt wurde, gilt offensichtlich diese Uhrzeit als Trigger für die 24 Stunden…