Hallo zusammen,
hab nun den ganzen beitrag editiert.
Die Instanz wurde nicht grün, da die Baudrate nicht passte.
Hier die EInstellung mit dem CUL:
Zähler wurde anschließend sehr schnell gefunden , AES Key rein uns schon kommen die Daten rein.
Hallo zusammen,
hab nun den ganzen beitrag editiert.
Die Instanz wurde nicht grün, da die Baudrate nicht passte.
Hier die EInstellung mit dem CUL:
Zähler wurde anschließend sehr schnell gefunden , AES Key rein uns schon kommen die Daten rein.
@haus-automatisierung ok danke. Dachte mir doch der wäre dagewesen
@asgothian Danke miteinander. Scheint zu klappen.
@asgothian Wo kommt in deinem Script dann das Verzögerung und Stop "Timeout" her?
Diesen Blockly hatte ich auch bereits und hab ich genauso gemacht.
Der Wert hausverbrauch liegt permanent über 200W, der Wert grenzwert Überwachung ist mit 100W angegeben.
Dennoch macht er nichts
Hallo zusammen,
ich hänge an einem vermutlich einfachen Blockly.
Ich möchte eine Meldung erhalten wenn ein Wert für eine Bestimmte Zeit (z.b. 1 Minute) lang über einem gegebenen Grenzwert (z.b XXX Watt) ist.
In Verbindung mit anderen Fallls ggf. dann auch etwas steuern.
Wenn der Wert unterschritten wird, dann soll der timeout stoppen.
Wie kann man so etwas bewerkstelligen?
ich danke euch
Chris
Hallo zusammen.
Ich hänge an einem Script, Vll. Bin ich einfach zu blind…
Folgender Fall : zu einer gewissen Zeit soll der SOC der Batterie abgefragt werden. Ist dieser wert kleiner x , so soll er in einem gewissen zeitrahmen mit Watt Y die Batterie bis auf Wert x wieder aufladen.
Danach soll er mit dem batterienetladen warten, bis eine neue zeit erreicht ist.
Wie bringe ich den Batteriewachselrichter dazu hier bei Wert x zu stoppen?
Danke und Gruß
Chris
@reblausgt anfängerfrage :
Wie bekomme ich aus der Zahl (Z.b. im stundenblcok) eine Uhrzeit im 24h Format?
Danke
Ihr braucht nicht mehr zu Antworten. Fehler gefunden.
Zyklus nicht beendet ich depp....
Hallo zusammen,
habe ein Blockly geschrieben, welches abhängig vom SoC des Batteriespeiechers die Ladeleistung reduzieren soll.
Dazu müssen nach Modbus-Doku des WR (SMA SBS 2.5) alle 6 Register zyklisch geschrieben werden. Nach Erfahrungen anderer User so alle 15-25 sek.
Sonst verfällt der WR in den Automatikmodus.
Das funktioniert auch soweit so gut, WR lässt sich steuern.
Nun ändert aber das Skript einige Sachen von sich aus.
z.b. aktualisiert er die Werte nach einer gewissen zeit auf einmal alle 5 Sekunden , und nach einem Wechsel der Leistung , also z.b. der Sprung von SoC 79 auf 80 (was eine Leistungsänderung haben sollte) schreibt er dann beide Werte , also 2200 W und 1950 W ins Register 40795.
Wo habe ich hier den Fehler, dass sich der Zyklus "aufhängt" ?
Ich danke für eure Hilfe
var my_1, my_2, my_3, my_4;
on({ id: [].concat(['modbus.0.inputRegisters.30845_BAT_SoC']), change: 'ne' }, async (obj) => {
let value = obj.state.val;
let oldValue = obj.oldState.val;
if (((obj.state ? obj.state.val : '') <= 99) && ((obj.state ? obj.state.val : '') >= 98)) {
my_1 = setInterval(async () => {
setStateDelayed('modbus.0.holdingRegisters.40236_CmpBMSOpMod' /* Betriebsart des BMS */, 2424, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40793_BatChaMinW' /* Minimale Batterieladeleistung */, 0, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40795_BatChaMaxW' /* Maximale Batterieladeleistung */, 500, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40797_BatDschMinW' /* Minimale Batterieentladeleistung */, 0, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40799_BatDschMaxW' /* Maximale Batterieentladeleistung */, 2650, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40801_GridWSpt' /* Sollwert der Netzaustauschleistung */, 0, 250, false);
}, 15000);
} else if (((obj.state ? obj.state.val : '') <= 97) && ((obj.state ? obj.state.val : '') >= 90)) {
my_2 = setInterval(async () => {
setStateDelayed('modbus.0.holdingRegisters.40236_CmpBMSOpMod' /* Betriebsart des BMS */, 2424, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40793_BatChaMinW' /* Minimale Batterieladeleistung */, 0, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40795_BatChaMaxW' /* Maximale Batterieladeleistung */, 1650, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40797_BatDschMinW' /* Minimale Batterieentladeleistung */, 0, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40799_BatDschMaxW' /* Maximale Batterieentladeleistung */, 2650, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40801_GridWSpt' /* Sollwert der Netzaustauschleistung */, 0, 250, false);
}, 15000);
} else if (((obj.state ? obj.state.val : '') <= 89) && ((obj.state ? obj.state.val : '') >= 80)) {
my_3 = setInterval(async () => {
setStateDelayed('modbus.0.holdingRegisters.40236_CmpBMSOpMod' /* Betriebsart des BMS */, 2424, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40793_BatChaMinW' /* Minimale Batterieladeleistung */, 0, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40795_BatChaMaxW' /* Maximale Batterieladeleistung */, 1950, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40797_BatDschMinW' /* Minimale Batterieentladeleistung */, 0, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40799_BatDschMaxW' /* Maximale Batterieentladeleistung */, 2650, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40801_GridWSpt' /* Sollwert der Netzaustauschleistung */, 0, 250, false);
}, 15000);
} else if (((obj.state ? obj.state.val : '') <= 79) && ((obj.state ? obj.state.val : '') >= 70)) {
my_4 = setInterval(async () => {
setStateDelayed('modbus.0.holdingRegisters.40236_CmpBMSOpMod' /* Betriebsart des BMS */, 2424, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40793_BatChaMinW' /* Minimale Batterieladeleistung */, 0, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40795_BatChaMaxW' /* Maximale Batterieladeleistung */, 2200, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40797_BatDschMinW' /* Minimale Batterieentladeleistung */, 0, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40799_BatDschMaxW' /* Maximale Batterieentladeleistung */, 2650, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40801_GridWSpt' /* Sollwert der Netzaustauschleistung */, 0, 250, false);
}, 15000);
} else if ((obj.state ? obj.state.val : '') <= 69) {
(() => { if (my_1) { clearInterval(my_1); my_1 = null; }})();
(() => { if (my_2) { clearInterval(my_2); my_2 = null; }})();
(() => { if (my_3) { clearInterval(my_3); my_3 = null; }})();
(() => { if (my_4) { clearInterval(my_4); my_4 = null; }})();
setStateDelayed('modbus.0.holdingRegisters.40236_CmpBMSOpMod' /* Betriebsart des BMS */, 2424, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40793_BatChaMinW' /* Minimale Batterieladeleistung */, 0, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40795_BatChaMaxW' /* Maximale Batterieladeleistung */, 2500, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40797_BatDschMinW' /* Minimale Batterieentladeleistung */, 0, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40799_BatDschMaxW' /* Maximale Batterieentladeleistung */, 2650, 250, false);
setStateDelayed('modbus.0.holdingRegisters.40801_GridWSpt' /* Sollwert der Netzaustauschleistung */, 0, 250, false);
}
});
Ich danke euch
Edit , nun gerad ebei 90% SoC schreibt er tatsächlich beide Werte gleichzeitig.
@haus-automatisierung ok danke. Dachte mir doch der wäre dagewesen
Hallo zusammen,
ist es möglich auf der Oberfläche bzw. Instanz ein Scrip, welches nicht mehr benötigt wird, zu löschen?
Wenn nein, wie funktioniert dies denn?
Danke euch