Sonnen Batterie / Batterie-Pflege / Tibber / ioBroker

In dieser Beschreibung geht es darum, die Batterie-Pflege vorzuziehen, wenn der Strompreis günstig ist. Alle 30 Tage wird eine Batterie-Pflege von Sonnen initiiert, wenn die Batterie nicht innerhalb der Zeit zu 100% geladen wurde. Hier wird versucht, diese Batterie-Pflege dann einzuleiten, wenn der Strompreis besonders günstig ist.

Voraussetzung ioBroker mit installierten und konfigurierten Sonnen Adapter sowie TibberLink und der Telegram Adapter.
Ich musste feststellen, das bei einem von drei Testläufen das Laden einfach stoppte ohne ersichtlichen Grund. Es war nötig nochmal den Befehl zum Laden mit 3300W abzusetzen.

Vorbereitung:

Verwendete Datenpunkte:

0_userdata.0.Sonnen-Batterie.Tage-seit-full-charge -> number
0_userdata.0.Sonnen-Batterie.StartCharge -> boolean
0_userdata.0.Sonnen-Batterie.Time-Start-Charge -> string
0_userdata.0.Sonnen-Batterie.Time-End-Charge -> string

Berechnung zur Zeit 25 Tage = 25*24*60*60 = 2160000
Zum Test 3 Tage = 260200
getState(’sonnen.0.latestData.secondsSinceFullCharge‘).val >= 260200

Zum Testen ist der Preis noch auf „NORMAL“ gesetzt später dann „CHEAP“

Change Log
V1.0 Start Codierung -> Steuerungs Test der Batterie
V1.1 Automatisches Laden
V1.2 Einführung der Variablen (Datenpunkt 0_userdata.0.Sonnen-Batterie.StartCharge)
V1.3 Zusätzliche if Abfrage Im SOC Bereich
V1.4 Datenpunkte werden automatisch bei Script Start angelegt
V1.5 Zusätzlicher Datenpunkt Erfassung, Datum Uhrzeit Start laden und Ende Laden
V1.6 Nach dem 3. Test hat das Laden bei 26% angehalten ohne ersichtlichen Grund. Zusätzlich SOC <= 100% Setzen des Ladewertes
V1.7 Einführung der Variablen TimeToLoad = 2160000 * 25 Tage*

//**************************************************************************/
//* Script Sonnen-Batterie landen wenn der Strompreis am günstigen ist     */
//* Copyright by stephan-lubahn.de                                         */
//* Keine Garantie oder Haftung für Fehlfunktion oder Erstehung von Kosten */ 
//* License public nur für den Privaten gebrauch. Kommerziell nur mit      */
//* ausdrücklicher Genehmigung                                             */
//* Datenpunkte                                                            */
//* 0_userdata.0.Sonnen-Batterie.Tage-seit-full-charge -> number          */
//* 0_userdata.0.Sonnen-Batterie.StartCharge -> boolean                    */
//* 0_userdata.0.Sonnen-Batterie.Time-Start-Charge -> string               */
//* 0_userdata.0.Sonnen-Batterie.Time-End-Charge -> string                 */
//* Berechnung zur Zeit 25 Tage = 25*24*60*60 = 2160000                    */
//* Version 1.7                                                            */
//**************************************************************************/
// Datenpunkte Anlegen
createState("0_userdata.0.Sonnen-Batterie.StartCharge", false, {
  read: true, 
  write: true, 
  name: "StartCharge", 
  type: "boolean", 
  def: false
});

createState("0_userdata.0.Sonnen-Batterie.Tage-seit-full-charge", 0, {
  read: true, 
  write: true, 
  name: "Tage-seit-full-charge", 
  type: "number", 
  def: 0
});

createState("0_userdata.0.Sonnen-Batterie.Time-Start-Charge", "" , {
  read: true, 
  write: true, 
  name: "Time-Start-Charge", 
  type: "string", 
  def: ""
});

createState("0_userdata.0.Sonnen-Batterie.Time-End-Charge", "" , {
  read: true, 
  write: true, 
  name: "Time-End-Charge", 
  type: "string", 
  def: ""
});

schedule('*/5 * * * *', On_Time );   // Alle 5 Minuten Starten

 function On_Time() {
// Variablen
var TimeToLoad = 2160000;
var Wert1 = getState("sonnen.0.latestData.secondsSinceFullCharge").val;
var Tageseitvollgeladen = Wert1 / 60 / 60 /24;
var Tibberpreiswert =getState("tibberlink.0.Homes.YOUR TIBBER API.CurrentPrice.level").val;
var UserSOC =getState("sonnen.0.status.userSoc").val;
var Charging = getState("0_userdata.0.Sonnen-Batterie.StartCharge").val;
var Zeit = new Date();
let date = "2020-03-23T05:20:44";
setState("0_userdata.0.Sonnen-Batterie.Tage-seit-full-charge",Tageseitvollgeladen);

// Debugging -> Nach test auskommentieren 
// console.log(Wert1);
// console.log(Tageseitvollgeladen);
// console.log(TimeToLoad);
// console.log(Tibberpreiswert);
// console.log(Charging);

if (Charging === false) {
if (getState('sonnen.0.latestData.secondsSinceFullCharge').val >= TimeToLoad) {
 
 sendTo("telegram.0", "send", {
     text: 'Zeit zur Batterie Pflege erreicht'});
console.log('Wert erreicht'); 
 

if (Tibberpreiswert == 'CHEAP') {
    console.log('Preiswert');
    sendTo("telegram.0", "send", {
    text: 'Tibber Preis cheap'});
    // Start charge Sonnen Batt
setState("0_userdata.0.Sonnen-Batterie.StartCharge",true);
setState('sonnen.0.configurations.EM_OperatingMode',1);
setState('sonnen.0.control.discharge', 0); //Als erstes aus Sicherheit discharge auf 0 setzen
setState('sonnen.0.control.charge', 3300); // Die Batterie wird mit maximal 3300 Watt geladen
setState('sonnen.0.configurations.EM_OperatingMode',1);
date = formatDate(Zeit, 'DD.MM.YYYY - hh:mm');
setState("0_userdata.0.Sonnen-Batterie.Time-Start-Charge",date);
}  // Ende Tibber Preis
} // Ende Zeit last charge
} // Ende laden false

console.log(UserSOC);
if (Charging === true) {
    if (UserSOC <=100) {
       setState('sonnen.0.control.charge', 3300); 
    }
if (UserSOC >= 100) {
  setState('sonnen.0.configurations.EM_OperatingMode',2);   // Automatik
  setState('sonnen.0.control.discharge', 1); //Entladen Ein
  setState("0_userdata.0.Sonnen-Batterie.StartCharge",false); 
  setState('sonnen.0.configurations.EM_OperatingMode',2);
  sendTo("telegram.0", "send", {
    text: 'SOC >= 100%'}); 
  console.log('SOC >= 100%');
  date = formatDate(Zeit, 'DD.MM.YYYY - hh:mm');
  setState("0_userdata.0.Sonnen-Batterie.Time-End-Charge",date);
}
}

 } 
 // Ende

Dieser Beitrag wurde unter Anleitungen veröffentlicht. Setze ein Lesezeichen auf den Permalink.