Controller Generic JsonLogic

Hallo,

meine Gruppe und Ich nutzen das openEMS für ein Uni-Projekt. Unser Ziel ist es den Speicher für eine PV-Anlage so zu regeln, dass die Residuallast = 0 gilt. Bisher werden die Befehle (Laden/Entladen) über einen MQTT-Explorer an den Speicher durch einen Einplatinencomputer übergeben.

wir haben die MQTT Bridge sowie die TelemetryMqttComponent für den Speicher erfolgreich konfiguriert. Es wird alles wie erwartet angezeigt. Als nächstes habe wir vor gehabt den Controller Generic JsonLogic zu nutzen, um mit der JsonLogic den Speicher zu steuern.
Bevor wir das umsetzen, haben wir zunächst versucht dem Speicher erst einmal abhängig vom Speicherstand (Soc) zu laden oder zu entladen. Leider zeigt der Speicher diesbezüglich keine Reaktion der ausgewählte setpoint wird nicht gesetzt. Auch im MQTT-Explorer gibt es keine Änderung.

Daher meine Frage: Wieso reagiert der Speicher nicht auf den im JsonLogic implementierten setpoint ? Sind weitere Einstellungen notwendig, um die Controller JsonLogic zu nutzen, oder reicht es im allgemeinen aus, nach der Code JsonLogic Implementierung auf speichern zu klicken ?

Leider kann ich nur ein Bild hochladen.:

Hallo,

leider ist deine JsonLogic-Rule falsch. So wärs richtig:

{
   "if":[
      {
         "<":[
            {
               "var":"_sum/EssSoc"
            },
            50
         ]
      },
      [
         [
            "ess0/SetActivePowerEquals",
            -3000
         ]
      ],
      [
         [
            "ess0/SetActivePowerEquals",
            2000
         ]
      ]
   ]
}

Der “Ess.SMA.SunnyIsland” (ich gehe wegen deinem Alias davon aus, dass du den verwendest), hat zwar intern einen “SetActivePower” Channel, dieser darf aber nicht direkt beschrieben werden, sondern man muss den “SetActivePowerEquals”-Channel dafür verwenden. Dann wird die applyPower()-Methode mit den korrekten Werten aufgerufen, die dann wiederum den SetActivePower-Channel (und SetControlMode und SetReactivePower) beschreibt:

Ich persönlich rate vom JsonLogic-Controller eher ab und empfehle euch, einen Controller in Java zu schreiben. Am einfachsten ist es, sich z. B. den Balancing-Controller zu nehmen und dort ein paar Zeilen umzuprogrammieren (hier → openems/Balancing.java at develop · OpenEMS/openems · GitHub). In Java habt ihr langfristig einfach mehr Möglichkeiten, z. B. um eine Hysterese einzubauen usw.

Gruß,
Stefan
(und halte uns gerne über euer Projekt am Laufenden; gerne veröffentlichen wir auch z. B. eine Projektdoku oder ähnliches auf unserer Internetseite)

Vielen Dank für Ihre Rückmeldung. Sehr gerne würden wir unsere Dokumentation anschließend teilen.
Wie Sie gesagt haben, haben wir die Balancing-Controller wie folgt konfiguriert:

Component - ID : ctrlBalancing0
Alias : NÜP_0W_Controller
Is enabled? : ON
ESS-ID : ess0 (ID von “ESS simulated SMA SunnyIsland Storage System”
Grid-Meter-ID : meter0 (Zähler)
Target Grid Setpoint : 0

Wie empfangen wir nun den entsprechenden Setpoint der von dem Balancing-Controller gesendet wird ? Weil nach der Konfiguration hat sich noch nichts entsprechend geregelt. Wir würden gerne so vorgehen, dass wir durch einen MqttTelemetryComponent den Setpoint empfangen und diesen an den MQTT-Explorer weiterleiten, so dass da der Setpoint entsprechend gesetzt wird. Nur leider wie erwähnt wissen wir nicht wie wir den Setpoint vom Controller empfangen.

Beste Grüße