Lastmanagement mit openWB und Fremdbox

Gero
Beiträge: 2371
Registriert: Sa Feb 20, 2021 9:55 am

Re: Lastmanagement mit openWB und Fremdbox

Beitrag von Gero »

Wenn die openWB regelt, regelt sie bei Loadsharing aktuell glaube ich nur die ersten beiden Ladepunkte. Bei Lastmanagement braucht es zwingend alle Boxen am selben EVU-Punkt, denn es wird nur einer überwacht. Aber ob da alle Boxen der WEG dranhängen möchte ich bezweifeln. Auch dass alle boxen im selben LAN hängen. Autoladen in WEG-Garagen ist schon etwas Spezielles.

Schreib‘ doch mal etwas mehr zur Installation
openWB-series2, openWB-Buchse, E3/DC S10pro+19.5kWh, 30kWp Ost-Süd, Model 3 und Ion
masi79
Beiträge: 57
Registriert: Fr Dez 11, 2020 7:17 am

Re: Lastmanagement mit openWB und Fremdbox

Beitrag von masi79 »

Installiert wird ein Netzwerk mit EVU. Bis dahin hätte ich die Boxen per WLAN vernetzt und untereinander regeln lassen mit harter Obergrenze. Und genau vor der Frage stehe ich, ob das überhaupt geht ohne EVU. Wobei ich nicht verstehe, warum das nicht gehen soll, weil letztlich nach meinem Verständnis die EVU ja nur zusätzlich noch den restlichen Stromverbrauch des Hauses mitbestimmt. Was die Boxen ziehen, wissen sie ja letztlich.
masi79
Beiträge: 57
Registriert: Fr Dez 11, 2020 7:17 am

Re: Lastmanagement mit openWB und Fremdbox

Beitrag von masi79 »

Die Lösung ist ein selbst emulitertes EVU. Man addiert die Beträge aus den einzelnen Ladepunkten und stellt das der Steuerbox zur Verfügung. In der Steuerbox trägt man unter EVU ein HTTP-Evu ein und holt sich die Beträge vom lokalen Webserver, die u.g. Skript generiert. Das ganze ist quick & dirty implementiert und auf der Box per nohup gestartet. Wer das dauerhaft betreiben will, sollte das natürlich als Service laufen lassen und auch nochmal kritisch über das Skript schauen. Vielleicht hilft es ja jmd., der vor dem gleichen Problem steht wie ich hier temporär. Wer kein root auf der Box hat, kann das natürlich auch außerhalb z.B. auf einem externen Raspi machen.

openWB Einstellungen.jpg

Code: Alles auswählen

#!/usr/bin/perl

use Net::MQTT::Simple;
use strict;
use warnings;

$ENV{MQTT_SIMPLE_ALLOW_INSECURE_LOGIN} = 1;

#Set Up MQTT server and channel details
my $mqtt_hostname = 'localhost:1883';
my $outputBase = '/var/www/html/evu';

my $mqtt_input_base = 'openWB/lp';
my $mqtt_inputA = 'APhase';
my $mqtt_inputW = 'W';

my $mqtt_username = '';
my $mqtt_password = '';

# itit data
my %data=();
for(my $i=1;$i<=8;$i++) {
    $data{$i}{"${mqtt_inputA}1"} = 0.0;
    $data{$i}{"${mqtt_inputA}2"} = 0.0;
    $data{$i}{"${mqtt_inputA}3"} = 0.0;
    $data{$i}{"${mqtt_inputW}"} = 0.0;
}


#instantiate the MQTT connection
my $mqtt = Net::MQTT::Simple->new($mqtt_hostname);

if($mqtt_username and $mqtt_password) {
    $mqtt->login($mqtt_username, $mqtt_password);
}

#subscribe to the input channel
#direct incoming messages to the callback function
for(my $i=1;$i<=8;$i++) {
    $mqtt->subscribe("${mqtt_input_base}/${i}/${mqtt_inputA}1", \&callback);
    $mqtt->subscribe("${mqtt_input_base}/${i}/${mqtt_inputA}2", \&callback);
    $mqtt->subscribe("${mqtt_input_base}/${i}/${mqtt_inputA}3", \&callback);
    $mqtt->subscribe("${mqtt_input_base}/${i}/${mqtt_inputW}", \&callback);
}

while(1) {    #main loop
    $mqtt->tick(1); #check MQTT with a 1 second timeout

    my $A1 = 0.0;
    my $A2 = 0.0;
    my $A3 = 0.0;
    my $W = 0.0;

    for(my $i=1;$i<=8;$i++) {
        $A1 += $data{$i}{"${mqtt_inputA}1"};
        $A2 += $data{$i}{"${mqtt_inputA}2"};
        $A3 += $data{$i}{"${mqtt_inputA}3"};

        $W += $data{$i}{"${mqtt_inputW}"};
    }

    open(OUTFILE, ">${outputBase}/A1");
    print OUTFILE $A1;
    close(OUTFILE);

    open(OUTFILE, ">${outputBase}/A2");
    print OUTFILE $A2;
    close(OUTFILE);

    open(OUTFILE, ">${outputBase}/A3");
    print OUTFILE $A3;
    close(OUTFILE);

    open(OUTFILE, ">${outputBase}/W");
    print OUTFILE $W;
    close(OUTFILE);

    sleep(1);
}

$mqtt->disconnect();


sub callback {    #function to handle incoming MQTT messages
  my ($topic, $message) = @_; #take the incoming message data

  my @a=  split('\/',$topic);
  my $element = $a[-1];
  my $lp = $a[-2];

  $data{$lp}{$element} = $message;
}

1
Antworten