Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Hardware
  4. Sungrow WR SGH10RT MODBUS ioSkripte

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.7k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.1k

Sungrow WR SGH10RT MODBUS ioSkripte

Scheduled Pinned Locked Moved Hardware
blocklyskriptsungrowjavaskriptphotovoltaikbatteriespeicherakkuautomatisierungsmarthomewechselrichter
52 Posts 10 Posters 9.1k Views 15 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G GombersIOB

    @gombersiob
    Zum Darstellen der Erträge mache ich mir Auswertungen "pro Tag", "pro Monat" und "pro Jahr". Hier will ich mal die Auswertung "pro Tag" darstellen, die anderen kann man ja davon ableiten

    • 13.3.2023 - Tippfehler im DaySwitch korrigiert
    • 12.3.2023 - Habe meine eigenen DataPoint und Variablennamen überarbeitet. Deshalb alle Scripte ausgetauscht
    • 11.3.2023 - Rechnung der Verluste aus Batterie Charge/Discharge

    Idee: Über VIS will ich sehen, wie sich der tägliche Verbrauch gestaltet. Ich stelle dabei den heutigen Tag, dem gestrigen "gegenüber". "Gegenüber" in Anführungszeichen, weil ich sie untereinander darstelle. Denn ich will dasselbe Bild auf Computer, IPad und Handy darstellen. Nebeneinander müsste ich auf dem Handy hin und her scrollen.
    So sieht derzeit das Gesamtbild aus:
    37e04f9d-78cb-41b6-92ab-07e06afa6c27-grafik.png

    Die Datenpunkte sehen so aus:
    67c7bf33-7198-49b1-9ec8-acaa41041ed1-grafik.png
    Es sind Datenpunkte dabei, die ich anderswo oder auch nicht mehr verwende. Da muss ich mal aufräumen!

    Setup der Datenpunkte mache ich wieder mit einem TypeScript-Programm. Das ist recht nützlich. Ich habe schon ein paarmal alles platt gemacht und neu angefangen. Jeden Datenpunkt einzeln zu definieren ist nervig.

    /**
    * Yesterday
    */
    let today = new Date();
    let milliSeconds = today.getTime();
    let milliSecondsOfADay = 24*60*60*1000;
    let yesterday = new Date(milliSeconds-milliSecondsOfADay);
    let prevDate:string = yesterday.toLocaleDateString('de-DE');
    let prevEnergyConsumed:number = 11.1832;
    let prevEnergyImported:number=0.3;
    let prevEnergyOwnConsumed:number=10.1;
    let prevEnergyDirectPvConsumed:number=3.3;
    let prevEnergyBatteryConsumed:number=6.8;
    let prevEnergyGenerated:number = 21.3;
    let prevEnergyExported:number = 8.9;
    let prevEnergyBatteryLoss:number = 0.7832;
    let prevBatteryChargeFromGrid:number = 0.1;
    let prevBatteryDischargeToGrid:number = 0;
    let prevEOD_BatteryLevel:number = 48.4;
    
    let prevPercentConsumedFromImported:number = 0;
    let prevPercentConsumedFromOwn:number = 0;
    let prevPercentConsumedFromDirectPv:number = 0;
    let prevPercentConsumedFromBattery:number = 0;
    let prevPercentEnergyBatteryLoss:number = 0;
    
    if (prevEnergyConsumed > 0) {
    
    	prevPercentConsumedFromImported = prevEnergyImported * 100 / prevEnergyConsumed;
    	prevPercentConsumedFromOwn = prevEnergyOwnConsumed * 100 / prevEnergyConsumed;
    	prevPercentConsumedFromDirectPv = prevEnergyDirectPvConsumed * 100 / prevEnergyConsumed;
    	prevPercentConsumedFromBattery = prevEnergyBatteryConsumed * 100 / prevEnergyConsumed;
    	prevEnergyBatteryLoss = prevEnergyBatteryLoss * 100 / prevEnergyConsumed;
    }
    let prevPercentEnergyExported:number = 0;
    if (prevEnergyGenerated > 0) {
    
    	prevPercentEnergyExported = prevEnergyExported * 100 / prevEnergyGenerated;
    }
    let prefix:string = '0_userdata.0.Sungrow.EarningsPerDay.Yesterday.';
    doCreateStateString(prefix, "Date", "Yesterday", prevDate);
    doCreateStateNumber(prefix, "EnergyConsumed", "Yesterday", prevEnergyConsumed);
    doCreateStateNumber(prefix, "EnergyImported", "Yesterday", prevEnergyImported);
    doCreateStateNumber(prefix, "EnergyOwnConsumed", "Yesterday", prevEnergyOwnConsumed);
    doCreateStateNumber(prefix, "EnergyDirectPvConsumed", "Yesterday", prevEnergyDirectPvConsumed);
    doCreateStateNumber(prefix, "EnergyBatteryConsumed", "Yesterday", prevEnergyBatteryConsumed);
    doCreateStateNumber(prefix, "EnergyBatteryLoss", "Yesterday", prevEnergyBatteryLoss);
    doCreateStateNumber(prefix, "EnergyGenerated", "Yesterday", prevEnergyGenerated);
    doCreateStateNumber(prefix, "EnergyExported", "Yesterday", prevEnergyExported);
    doCreateStateNumber(prefix, "EOD-BatteryLevel", "Yesterday", prevEOD_BatteryLevel, 1);
    doCreateStateNumber(prefix, "BatteryChargeFromGrid", "Yesterday", prevBatteryChargeFromGrid);
    doCreateStateNumber(prefix, "BatteryDischargeToGrid", "Yesterday", prevBatteryDischargeToGrid);
    doCreateStateNumber(prefix, "PercentConsumedFromImported", "Yesterday", prevPercentConsumedFromImported);
    doCreateStateNumber(prefix, "PercentConsumedFromOwn", "Yesterday", prevPercentConsumedFromOwn);
    doCreateStateNumber(prefix, "PercentConsumedFromDirectPv", "Yesterday", prevPercentConsumedFromDirectPv);
    doCreateStateNumber(prefix, "PercentConsumedFromBattery", "Yesterday", prevPercentConsumedFromBattery);
    doCreateStateNumber(prefix, "PercentEnergyBatteryLoss", "Yesterday", prevPercentEnergyBatteryLoss);
    doCreateStateNumber(prefix, "PercentEnergyExported", "Yesterday", prevPercentEnergyExported);
    
    /**
    * Today
    */
    let nowDate:string = new Date().toLocaleDateString('de-DE');
    let nowEnergyBatteryLevelStart:number = 48.4;
    
    let nowEnergyConsumed:number = 0;
    let nowEnergyImported:number=0;
    let nowEnergyOwnConsumed:number=0;
    let nowEnergyDirectPvConsumed:number=0;
    let nowEnergyBatteryConsumed:number=0;
    let nowEnergyGenerated:number = 0;
    let nowEnergyExported:number = 0;
    let nowEnergyBatteryLoss:number = 0;
    let nowBatteryChargeFromGrid:number = 0;
    let nowBatteryDischargeToGrid:number = 0;
    let nowPercentConsumedFromImported:number = 0;
    let nowPercentConsumedFromOwn:number = 0;
    let nowPercentConsumedFromDirectPv:number = 0;
    let nowPercentConsumedFromBattery:number = 0;
    let nowPercentEnergyBatteryLoss:number = 0;
    if (nowEnergyConsumed > 0) {
    
    	nowPercentConsumedFromImported = nowEnergyImported * 100 / nowEnergyConsumed;
    	nowPercentConsumedFromOwn = nowEnergyOwnConsumed * 100 / nowEnergyConsumed;
    	nowPercentConsumedFromDirectPv = nowEnergyDirectPvConsumed * 100 / nowEnergyConsumed;
    	nowPercentConsumedFromBattery = nowEnergyBatteryConsumed * 100 / nowEnergyConsumed;
    	nowEnergyBatteryLoss = nowEnergyBatteryLoss * 100 / nowEnergyConsumed;
    }
    let nowPercentEnergyExported:number = 0;
    if (nowEnergyGenerated > 0) {
    
    	nowPercentEnergyExported = nowEnergyExported * 100 / nowEnergyGenerated;
    }
    prefix = '0_userdata.0.Sungrow.EarningsPerDay.Today.';
    doCreateStateString(prefix, "Date", "Today", nowDate);
    
    doCreateStateNumber(prefix, "EnergyBatteryLevelStart", "Today", nowEnergyBatteryLevelStart, 1);
    
    doCreateStateNumber(prefix, "EnergyConsumed", "Today", nowEnergyConsumed);
    doCreateStateNumber(prefix, "EnergyImported", "Today", nowEnergyImported);
    doCreateStateNumber(prefix, "EnergyOwnConsumed", "Today", nowEnergyOwnConsumed);
    doCreateStateNumber(prefix, "EnergyDirectPvConsumed", "Today", nowEnergyDirectPvConsumed);
    doCreateStateNumber(prefix, "EnergyBatteryConsumed", "Today", nowEnergyBatteryConsumed);
    doCreateStateNumber(prefix, "EnergyBatteryLoss", "Today", nowEnergyBatteryLoss);
    doCreateStateNumber(prefix, "EnergyGenerated", "Today", nowEnergyGenerated);
    doCreateStateNumber(prefix, "EnergyExported", "Today", nowEnergyExported);
    doCreateStateNumber(prefix, "BatteryChargeFromGrid", "Today", nowBatteryChargeFromGrid);
    doCreateStateNumber(prefix, "BatteryDischargeToGrid", "Today", nowBatteryDischargeToGrid);
    doCreateStateNumber(prefix, "PercentConsumedFromImported", "Today", nowPercentConsumedFromImported);
    doCreateStateNumber(prefix, "PercentConsumedFromOwn", "Today", nowPercentConsumedFromOwn);
    doCreateStateNumber(prefix, "PercentConsumedFromDirectPv", "Today", nowPercentConsumedFromDirectPv);
    doCreateStateNumber(prefix, "PercentConsumedFromBattery", "Today", nowPercentConsumedFromBattery);
    doCreateStateNumber(prefix, "PercentEnergyBatteryLoss", "Today", nowPercentEnergyBatteryLoss);
    doCreateStateNumber(prefix, "PercentEnergyExported", "Today", nowPercentEnergyExported);
    
    
    function doCreateStateNumber(prefix:string, datapoint:string, nameSuffix:string, value:number, decimals:number=0) {
    
    	createState(prefix + datapoint, iobGlbl_roundToDecimals(value, decimals) , {
    
    		name: datapoint+nameSuffix,
    		type: 'number',
    		role: 'value'
    
    	})
    });
    function doCreateStateString(prefix:string, datapoint:string, nameSuffix:string, value:string) {
    
    	createState(prefix + datapoint, value, {
    
    		name: datapoint+nameSuffix,
    		type: 'string',
    		role: 'value'
    
    	})
    });
    

    Dann habe ich noch ein Blockly für den Tageswechsel (läuft täglich, wie man sehen kann, um 23:59 Uhr):
    c9286e6f-f51c-492f-8386-31fd805df7b0-grafik.png
    Hier das XML-Unload des Blockly: DaySwitch.blockly
    Und natürlich ein Script, dass unter Tage die Sicht auf den laufenden Tag aktuell hält. Auch das ist wieder ein TypeScript. Ich finde dafür Blockly doch zu unhandlich.

    
    // Daily energy consumption distributed to the sources
    // by absolute values and percentages
    schedule("* * * * *", async function () {
    
    	let prefix = '0_userdata.0.Sungrow.EarningsPerDay.Today.';
    	// Get start values
    	let energyBatteryLevelStart = Number(getState(prefix+"EnergyBatteryLevelStart").val);
    	// Get current registers
    	prefix = 'modbus.0.inputRegisters.';
    	let totalModBusDataAsJson =
    	{
    
    		"energyImport": Number(getState(prefix+"13035_Daily_Import_Energy").val),
    		"directPvConsumption": Number(getState(prefix+"13016_Daily_Direct_Energy_Consumption").val),
    		"energyGeneration": Number(getState(prefix+"13001_Daily_PV_Generation").val),
    		"energyExport": Number(getState(prefix+"13044_Daily_Export_Energy").val),
    		"energyExportFromPv": Number(getState(prefix+"13004_Daily_Export_Energy_from_PV").val),
    		"energyBatteryCharge": Number(getState(prefix+"13039_Daily_Charge_Energy").val),
    		"energyBatteryChargeFromPV": Number(getState(prefix+"13011_Daily_Battery_Charge_Energy_from_PV").val),
    		"energyBatteryDischarge": Number(getState(prefix+"13025_Daily_Battery_Discharge_Energy").val),
    		"energyBatteryCapacity": Number(getState(prefix+"13038_Battery_Capacity").val),
    		"energyBatteryLevel": Number(getState(prefix+"13022_Battery_Level_").val),
    		"energyBatteryLevelStart": energyBatteryLevelStart,
    
    	};
    
    	let result = ioGlobl_calculateTheEarnings(JSON.stringify(totalModBusDataAsJson));
    	let resultJson = JSON.parse(result);
    	// Persist calculated values
    	prefix = '0_userdata.0.Sungrow.EarningsPerDay.Today.';
    	setState(prefix+'EnergyConsumed', iobGlbl_roundToDecimals(resultJson.energyConsumption, 1), true);
    	setState(prefix+'EnergyImported', iobGlbl_roundToDecimals(resultJson.energyImport, 1), true);
    	setState(prefix+'EnergyOwnConsumed', iobGlbl_roundToDecimals(resultJson.energyOwnConsumption, 1), true);
    	setState(prefix+'EnergyDirectPvConsumed', iobGlbl_roundToDecimals(resultJson.energyPvConsumption, 1), true);
    	setState(prefix+'EnergyBatteryConsumed', iobGlbl_roundToDecimals(resultJson.energyBatteryConsumption, 1), true);
    	setState(prefix+"EnergyBatteryLoss", iobGlbl_roundToDecimals(resultJson.energyBatteryLoss,1));
    	setState(prefix+'EnergyGenerated', iobGlbl_roundToDecimals(resultJson.energyGeneration, 1), true);
    	setState(prefix+'EnergyExported', iobGlbl_roundToDecimals(resultJson.energyExport, 1), true);
    	setState(prefix+'BatteryChargeFromGrid', iobGlbl_roundToDecimals(resultJson.batteryChargeFromGrid, 1), true);
    	setState(prefix+'BatteryDischargeToGrid', iobGlbl_roundToDecimals(resultJson.batteryDischargeToGrid, 1), true);
    	setState(prefix+'PercentConsumedFromImported', iobGlbl_roundToDecimals(resultJson.percentImport, 0), true);
    	setState(prefix+'PercentConsumedFromOwn', iobGlbl_roundToDecimals(resultJson.percentOwnConsumption, 0), true);
    	setState(prefix+'PercentConsumedFromDirectPv', iobGlbl_roundToDecimals(resultJson.percentPvConsumption, 0), true);
    	setState(prefix+'PercentConsumedFromBattery', iobGlbl_roundToDecimals(resultJson.percentBatteryConsumption, 0), true);
    	setState(prefix+"PercentEnergyBatteryLoss", iobGlbl_roundToDecimals(resultJson.percentBatteryLoss,0));
     	setState(prefix+'PercentEnergyExported', iobGlbl_roundToDecimals(resultJson.percentExport, 0), true);
    });
    
    /**
     * We are called with derived modbus data and we will caclulate sum sums and percentages
     */
    function ioGlobl_calculateTheEarnings(modBusData) {
    
    	let modBusJson = JSON.parse(modBusData);
    	/* calculate */
    	let batteryChargeFromGrid = modBusJson.energyBatteryCharge - modBusJson.energyBatteryChargeFromPV;
    	let batteryDischargeToGrid = modBusJson.energyExport-modBusJson.energyExportFromPv;
    	let energyBatteryConsumption = modBusJson.energyBatteryDischarge - batteryDischargeToGrid;
    	
    	let energyOwnConsumption = energyBatteryConsumption + modBusJson.directPvConsumption;
    	let energyBatteryContentStart = modBusJson.energyBatteryCapacity * modBusJson.energyBatteryLevelStart / 100;
    	let energyBatteryContentNow = modBusJson.energyBatteryCapacity * modBusJson.energyBatteryLevel / 100;
    	let energyBatteryContentExpected = energyBatteryContentStart + modBusJson.energyBatteryCharge - modBusJson.energyBatteryDischarge;
    	let energyBatteryLoss = energyBatteryContentExpected - energyBatteryContentNow;
    //	console.log("Contt: " +  modBusJson.energyBatteryCapacity + " * " + modBusJson.energyBatteryLevelStart + " / 100 " +  " = " + energyBatteryContentStart);
    //	console.log("Expct: " + energyBatteryContentStart + " + " + modBusJson.energyBatteryCharge + " - " + modBusJson.energyBatteryDischarge + " = " + energyBatteryContentExpected);
    //	console.log("Loss: " + energyBatteryContentExpected + " - " + energyBatteryContentNow + " = " + energyBatteryLoss);
    	if (energyBatteryLoss < 0) {
    		energyBatteryLoss = 0;
    	}
    
    	let energyConsumption = modBusJson.energyImport + energyOwnConsumption + energyBatteryLoss;
    // console.log("Cons: " + modBusJson.energyImport + " + " + energyOwnConsumption + " + " + energyBatteryLoss + " = " + energyConsumption);
    	let percentImport = 0;
    	let percentOwnConsumption = 0;
    	let percentPvConsumption = 0;
    	let percentBatteryConsumption = 0;
    	let percentBatteryLoss = 0;
    	let percentExport = 0;
    
    	if (energyConsumption > 0) {
    		percentImport = modBusJson.energyImport * 100 / energyConsumption;
    		percentOwnConsumption = energyOwnConsumption * 100 / energyConsumption;
    		percentPvConsumption = modBusJson.directPvConsumption * 100 / energyConsumption;
    		percentBatteryConsumption = energyBatteryConsumption * 100 / energyConsumption;
    		percentBatteryLoss = energyBatteryLoss * 100 / energyConsumption;
    
    	}
    	if ( modBusJson.energyGeneration > 0) {
    
    		percentExport = modBusJson.energyExport * 100 / modBusJson.energyGeneration;
    
    	}
    	let result = {
    
    		"energyConsumption": energyConsumption,
    		"energyImport": modBusJson.energyImport,
    		"energyOwnConsumption": energyOwnConsumption,
    		"energyPvConsumption": modBusJson.directPvConsumption,
    		"energyBatteryConsumption": energyBatteryConsumption,
    		"energyBatteryLoss": energyBatteryLoss,
    		"energyGeneration": modBusJson.energyGeneration,
    		"energyExport": modBusJson.energyExport,
    		"percentImport":percentImport,
    		"percentOwnConsumption": percentOwnConsumption,
    		"percentPvConsumption":  percentPvConsumption,
    		"percentBatteryConsumption": percentBatteryConsumption,
    		"percentBatteryLoss": percentBatteryLoss,
    		"percentExport": percentExport,
            "batteryChargeFromGrid": batteryChargeFromGrid,
            "batteryDischargeToGrid": batteryDischargeToGrid,
    
    	};
    
    	return JSON.stringify(result);
    }
    
    
    


    • 9.3.2023 - 20:00: Berechnung "energyOwnConsumption" korrigiert

    Dieses Script ruft eine Function auf ("ioGlbl_roundToDecimals") mit der die errechnete Zahl auf die gewünschte Anzahl Nachkommastellen gerundet wird. Ich habe die bei mir als "Globale Funktion" definiert (d.h. in den Ordner "global"). Man kann Sie aber auch einfach direkt an das EarningsPerDay-Script oben anhängen.
    Die Kalkulationen habe ich jetzt auch in eine "Function" ausgelagert. Damit kann ich sie bei den EarningsPerMonth und EarningsPerYear einfach wiederverwenden - getreu dem Motto DRY (Don't repeat yourself).
    /*
    * Provide numbers with requested number of decimals
    */
    function iobGlbl_roundToDecimals(num = 0, decimals = 2) {
        var base = 1, i=decimals;
    	while (i > 0) {
    		base = base*10;
    		i--;
    	}
    	return +(Math.round(num*base))/base;
    }
    

    Bei mir läuft das Script minütlich. Das muss eigentlich nicht sein. Alle halbe Stunde würde auch reichen. Aber derzeit ist mein RaspBerry noch ganz entspannt - ich habe da keinen Druck.

    G Offline
    G Offline
    GombersIOB
    wrote on last edited by
    #16

    @gombersiob

    An anderer Stelle habe ich es schon erwähnt. Ich lese die ModBus-Daten (ohne IOBroker!) mit einem eigenen Java-Programm regelmäßig (alle 15 Minuten) und schreibe sie als XML-File weg. Dazu habe ich mir auf meinem RaspBerry eine JAVA-Runtime installiert und lasse es via crontab, wie gesagt viertelstündlich, laufen.

    Wenn Interesse an sowas besteht würde ich das Programm anpassen, damit es über Parameter personalisierbar wird. Derzeit mache ich alle Einstellungen direkt im Code.

    Ich füge hier mal die XML von heute ein, damit man sich ein Bild darüber machen kann.
    Der lese ich nur die Input-Register aus. Die Vorbereitung für die Holding-Register ist da, aber da sie mich nicht interessieren sammele ich sie auch (noch) nicht.

    2023_03-MARCH_12-data.xml

    K 1 Reply Last reply
    0
    • G GombersIOB

      @gombersiob

      An anderer Stelle habe ich es schon erwähnt. Ich lese die ModBus-Daten (ohne IOBroker!) mit einem eigenen Java-Programm regelmäßig (alle 15 Minuten) und schreibe sie als XML-File weg. Dazu habe ich mir auf meinem RaspBerry eine JAVA-Runtime installiert und lasse es via crontab, wie gesagt viertelstündlich, laufen.

      Wenn Interesse an sowas besteht würde ich das Programm anpassen, damit es über Parameter personalisierbar wird. Derzeit mache ich alle Einstellungen direkt im Code.

      Ich füge hier mal die XML von heute ein, damit man sich ein Bild darüber machen kann.
      Der lese ich nur die Input-Register aus. Die Vorbereitung für die Holding-Register ist da, aber da sie mich nicht interessieren sammele ich sie auch (noch) nicht.

      2023_03-MARCH_12-data.xml

      K Offline
      K Offline
      kklaus
      wrote on last edited by
      #17

      Ich bin noch Anfänger und versuche gerade meine vielen Daten sinnvoll zu nutzen.
      Die Running States des SH10RT lese ich erfolgreich aus und einzelne Verbraucher (Heizstab Warmwasser, Kliaanlage zum heizen und kühlen, Wärmepumpe Pool, Fahrzeug Laden) schalten geht auch, wenn meist händisch. Das irgendwie zu automatisieren wäre mein Ziel.

      Hat hier Jemand die Daten ähnlich der ISolarCloud abgebildet und kann mir helfen das nachzubauen.

      M 1 Reply Last reply
      0
      • K kklaus

        Ich bin noch Anfänger und versuche gerade meine vielen Daten sinnvoll zu nutzen.
        Die Running States des SH10RT lese ich erfolgreich aus und einzelne Verbraucher (Heizstab Warmwasser, Kliaanlage zum heizen und kühlen, Wärmepumpe Pool, Fahrzeug Laden) schalten geht auch, wenn meist händisch. Das irgendwie zu automatisieren wäre mein Ziel.

        Hat hier Jemand die Daten ähnlich der ISolarCloud abgebildet und kann mir helfen das nachzubauen.

        M Offline
        M Offline
        MRaioBroker
        wrote on last edited by
        #18

        @kklaus

        das ist ne recht offene Frage. Wenn Du auf der Suche nach Skripts zur Automatisierung bist kann Dir hier evtl. geholfen werden.

        Zur Automatisierung: Ich selbst nutze ein paar Skripts z.B. um meine Wärmepumpe in den Smart Grid Modus zu schalten,
        teilen bringt aber nicht viel, weil recht spezifisch. Ich schalte z.B. einen Datenpunkt wenn ich Überschuss hab und mit dem schalte ich
        dann andere Dinge wie z.B. einen Shelly der meine Brauchwasser-Wärmepumpe aktiviert...
        (aber das auch. nur wenn ich am Vortag Strom zugekauft hab, wenn der Speicher noch voll ist bringts nicht ne Wärmepumpe mit PV Strom direkt zu steuern)

        Wichtiger als die Schaltung selbst ist die Intelligenz dahinter, damit man PV Strom auch wirklich sinnvoll nutzt.
        Bei Balkonkraftwerk recht einfach, da musst Du nur den Strom sinnvoll investieren
        Bei PV Anlage mit Speicher schon schwieriger, da musst Du verhindern, dass Du einspeist und nachkaufst.

        Vielleicht hilft das
        c42b1f8d-c6ac-4571-800a-4e94e3ab19d9-image.png

        App:
        Die Daten der App nachzustellen wäre evtl. ein anderes Thema hier im Forum z.B. https://forum.iobroker.net/post/972129
        Die App ist extrem umfangreich.

        Ich habe nur Teile die mich interessieren nachgebildet, die Visualisierung der App in IoBroker VIS mit dem Energieflussadapter andere Dinge in einer VIS
        die mich interessieren z.B. so

        240076bd-5b5f-402f-8866-128ed144967a-image.png
        30fdfda9-5038-481c-99a2-a1891f937808-image.png

        K R 2 Replies Last reply
        0
        • M MRaioBroker

          @kklaus

          das ist ne recht offene Frage. Wenn Du auf der Suche nach Skripts zur Automatisierung bist kann Dir hier evtl. geholfen werden.

          Zur Automatisierung: Ich selbst nutze ein paar Skripts z.B. um meine Wärmepumpe in den Smart Grid Modus zu schalten,
          teilen bringt aber nicht viel, weil recht spezifisch. Ich schalte z.B. einen Datenpunkt wenn ich Überschuss hab und mit dem schalte ich
          dann andere Dinge wie z.B. einen Shelly der meine Brauchwasser-Wärmepumpe aktiviert...
          (aber das auch. nur wenn ich am Vortag Strom zugekauft hab, wenn der Speicher noch voll ist bringts nicht ne Wärmepumpe mit PV Strom direkt zu steuern)

          Wichtiger als die Schaltung selbst ist die Intelligenz dahinter, damit man PV Strom auch wirklich sinnvoll nutzt.
          Bei Balkonkraftwerk recht einfach, da musst Du nur den Strom sinnvoll investieren
          Bei PV Anlage mit Speicher schon schwieriger, da musst Du verhindern, dass Du einspeist und nachkaufst.

          Vielleicht hilft das
          c42b1f8d-c6ac-4571-800a-4e94e3ab19d9-image.png

          App:
          Die Daten der App nachzustellen wäre evtl. ein anderes Thema hier im Forum z.B. https://forum.iobroker.net/post/972129
          Die App ist extrem umfangreich.

          Ich habe nur Teile die mich interessieren nachgebildet, die Visualisierung der App in IoBroker VIS mit dem Energieflussadapter andere Dinge in einer VIS
          die mich interessieren z.B. so

          240076bd-5b5f-402f-8866-128ed144967a-image.png
          30fdfda9-5038-481c-99a2-a1891f937808-image.png

          K Offline
          K Offline
          kklaus
          wrote on last edited by
          #19

          @mraiobroker Danke, ich stehe noch sehr am Anfang und habe nun erstmal alle Systeme eingebunden so dass sie Daten liefern.
          Den Energieflussadapter habe ich auch installiert, er läuft aber noch nicht mit den richtigen Daten und meine bisherigen Versuche zur Visualisierung und Steuerung sind noch sehr "rudimentär"!
          Welche Datenpunkte setzt Du im Energieflussadapter ein?

          PXL_20230427_081754195.jpg

          M 1 Reply Last reply
          0
          • K kklaus

            @mraiobroker Danke, ich stehe noch sehr am Anfang und habe nun erstmal alle Systeme eingebunden so dass sie Daten liefern.
            Den Energieflussadapter habe ich auch installiert, er läuft aber noch nicht mit den richtigen Daten und meine bisherigen Versuche zur Visualisierung und Steuerung sind noch sehr "rudimentär"!
            Welche Datenpunkte setzt Du im Energieflussadapter ein?

            PXL_20230427_081754195.jpg

            M Offline
            M Offline
            MRaioBroker
            wrote on last edited by
            #20

            @kklaus
            Du musst berechnen, ob die Batterie be oder entladen wird, dass kann Modbus so nicht

            7772425f-d675-42e6-8f32-a544ae2402c2-image.png

            Datenpunkt berechnen Skript
            a95f6b6b-e693-4a25-a2d0-eaf7aaf1bbef-image.png

            <xml xmlns="https://developers.google.com/blockly/xml">
              <variables>
                <variable id="(ocA``hXb:ASln87_[5i">PV Akku Be- oder Entladung</variable>
              </variables>
              <block type="on_ext" id="ehBZF8`0,PKLSMKg__PB" x="-2012" y="-487">
                <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
                <field name="CONDITION">ne</field>
                <field name="ACK_CONDITION"></field>
                <value name="OID0">
                  <shadow type="field_oid" id="0m^saRA]WjVCQ`9A%2n8">
                    <field name="oid">modbus.0.inputRegisters.13007_Load_power_</field>
                  </shadow>
                </value>
                <statement name="STATEMENT">
                  <block type="variables_set" id="F`@4}oyq-b-2|/kYbR$U">
                    <field name="VAR" id="(ocA``hXb:ASln87_[5i">PV Akku Be- oder Entladung</field>
                    <value name="VALUE">
                      <block type="math_arithmetic" id="1Zv4~dL0,_aGpt}7[_kP">
                        <field name="OP">MINUS</field>
                        <value name="A">
                          <shadow type="math_number" id="d[QgpJU-{V|[)Y8g,,:@">
                            <field name="NUM">1</field>
                          </shadow>
                          <block type="math_arithmetic" id="5||kb1lHC-qwY!85c3KH">
                            <field name="OP">MINUS</field>
                            <value name="A">
                              <shadow type="math_number" id="lWjzQ^1^A)~nyY4K}k/%">
                                <field name="NUM">1</field>
                              </shadow>
                              <block type="get_value" id="v|oqCDrxh=7lS_fPh~*[">
                                <field name="ATTR">val</field>
                                <field name="OID">modbus.0.inputRegisters.5016_Total_DC_Power</field>
                              </block>
                            </value>
                            <value name="B">
                              <shadow type="math_number" id="hMTHE%-|Fip{Z1M$2d7y">
                                <field name="NUM">1</field>
                              </shadow>
                              <block type="get_value" id="pQL:D)uc#*C|yW94;;1U">
                                <field name="ATTR">val</field>
                                <field name="OID">modbus.0.inputRegisters.13007_Load_power_</field>
                              </block>
                            </value>
                          </block>
                        </value>
                        <value name="B">
                          <shadow type="math_number" id="LWB:(CTORxv:`-#$RF=q">
                            <field name="NUM">1</field>
                          </shadow>
                          <block type="get_value" id="E}0?u4:S)mn)6}@G9fd]">
                            <field name="ATTR">val</field>
                            <field name="OID">modbus.0.inputRegisters.13009_Export_power</field>
                          </block>
                        </value>
                      </block>
                    </value>
                    <next>
                      <block type="update" id="(TMX3NmoY?k,I8B2]p?C">
                        <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                        <field name="OID">0_userdata.0.PV_Datenpunkte.Berechnung_Batterieentladung_negativ</field>
                        <field name="WITH_DELAY">FALSE</field>
                        <value name="VALUE">
                          <block type="variables_get" id="p$a.=$hGsH%AenyyxPI!">
                            <field name="VAR" id="(ocA``hXb:ASln87_[5i">PV Akku Be- oder Entladung</field>
                          </block>
                        </value>
                      </block>
                    </next>
                  </block>
                </statement>
              </block>
            </xml>
            
            K C 2 Replies Last reply
            1
            • M MRaioBroker

              @kklaus
              Du musst berechnen, ob die Batterie be oder entladen wird, dass kann Modbus so nicht

              7772425f-d675-42e6-8f32-a544ae2402c2-image.png

              Datenpunkt berechnen Skript
              a95f6b6b-e693-4a25-a2d0-eaf7aaf1bbef-image.png

              <xml xmlns="https://developers.google.com/blockly/xml">
                <variables>
                  <variable id="(ocA``hXb:ASln87_[5i">PV Akku Be- oder Entladung</variable>
                </variables>
                <block type="on_ext" id="ehBZF8`0,PKLSMKg__PB" x="-2012" y="-487">
                  <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
                  <field name="CONDITION">ne</field>
                  <field name="ACK_CONDITION"></field>
                  <value name="OID0">
                    <shadow type="field_oid" id="0m^saRA]WjVCQ`9A%2n8">
                      <field name="oid">modbus.0.inputRegisters.13007_Load_power_</field>
                    </shadow>
                  </value>
                  <statement name="STATEMENT">
                    <block type="variables_set" id="F`@4}oyq-b-2|/kYbR$U">
                      <field name="VAR" id="(ocA``hXb:ASln87_[5i">PV Akku Be- oder Entladung</field>
                      <value name="VALUE">
                        <block type="math_arithmetic" id="1Zv4~dL0,_aGpt}7[_kP">
                          <field name="OP">MINUS</field>
                          <value name="A">
                            <shadow type="math_number" id="d[QgpJU-{V|[)Y8g,,:@">
                              <field name="NUM">1</field>
                            </shadow>
                            <block type="math_arithmetic" id="5||kb1lHC-qwY!85c3KH">
                              <field name="OP">MINUS</field>
                              <value name="A">
                                <shadow type="math_number" id="lWjzQ^1^A)~nyY4K}k/%">
                                  <field name="NUM">1</field>
                                </shadow>
                                <block type="get_value" id="v|oqCDrxh=7lS_fPh~*[">
                                  <field name="ATTR">val</field>
                                  <field name="OID">modbus.0.inputRegisters.5016_Total_DC_Power</field>
                                </block>
                              </value>
                              <value name="B">
                                <shadow type="math_number" id="hMTHE%-|Fip{Z1M$2d7y">
                                  <field name="NUM">1</field>
                                </shadow>
                                <block type="get_value" id="pQL:D)uc#*C|yW94;;1U">
                                  <field name="ATTR">val</field>
                                  <field name="OID">modbus.0.inputRegisters.13007_Load_power_</field>
                                </block>
                              </value>
                            </block>
                          </value>
                          <value name="B">
                            <shadow type="math_number" id="LWB:(CTORxv:`-#$RF=q">
                              <field name="NUM">1</field>
                            </shadow>
                            <block type="get_value" id="E}0?u4:S)mn)6}@G9fd]">
                              <field name="ATTR">val</field>
                              <field name="OID">modbus.0.inputRegisters.13009_Export_power</field>
                            </block>
                          </value>
                        </block>
                      </value>
                      <next>
                        <block type="update" id="(TMX3NmoY?k,I8B2]p?C">
                          <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                          <field name="OID">0_userdata.0.PV_Datenpunkte.Berechnung_Batterieentladung_negativ</field>
                          <field name="WITH_DELAY">FALSE</field>
                          <value name="VALUE">
                            <block type="variables_get" id="p$a.=$hGsH%AenyyxPI!">
                              <field name="VAR" id="(ocA``hXb:ASln87_[5i">PV Akku Be- oder Entladung</field>
                            </block>
                          </value>
                        </block>
                      </next>
                    </block>
                  </statement>
                </block>
              </xml>
              
              K Offline
              K Offline
              kklaus
              wrote on last edited by kklaus
              #21

              @mraiobroker Danke, ich glaube so funktioniert es jetzt schonmal.

              Ich dachte das müsste ich über die "Running States" berechnen.
              Wie hast Du die Dachseiten in die Anzeige miteingebunden?
              PXL_20230428.jpg

              M 1 Reply Last reply
              0
              • K kklaus

                @mraiobroker Danke, ich glaube so funktioniert es jetzt schonmal.

                Ich dachte das müsste ich über die "Running States" berechnen.
                Wie hast Du die Dachseiten in die Anzeige miteingebunden?
                PXL_20230428.jpg

                M Offline
                M Offline
                MRaioBroker
                wrote on last edited by MRaioBroker
                #22

                @kklaus für´s Dach hab ich mit nem HTML Widget gemacht.
                Zwei Bildchen eingefügt und jeweils die Dachseiten berechnet.

                Das stimmt nicht zu 100% mit der Summe des Energieflussadapters überein, aber gut genug

                HTML Code
                Süd {Voltsuedmppt1:modbus.0.inputRegisters.5010_MPPT_1_Voltage;Amperesuedmppt1:modbus.0.inputRegisters.5011_MPPT_1_Current;(Voltsuedmppt1*Amperesuedmppt1).toFixed(0)} Watt

                Nord {Voltnordmppt2:modbus.0.inputRegisters.5012_MPPT_2_Voltage;Amperenordmppt2:modbus.0.inputRegisters.5013_MPPT_2_Current;(Voltnordmppt2*Amperenordmppt2).toFixed(0)} Watt

                1558f251-afd1-4909-a35b-1390f2aa7d5a-image.png

                K 1 Reply Last reply
                0
                • M MRaioBroker

                  @kklaus für´s Dach hab ich mit nem HTML Widget gemacht.
                  Zwei Bildchen eingefügt und jeweils die Dachseiten berechnet.

                  Das stimmt nicht zu 100% mit der Summe des Energieflussadapters überein, aber gut genug

                  HTML Code
                  Süd {Voltsuedmppt1:modbus.0.inputRegisters.5010_MPPT_1_Voltage;Amperesuedmppt1:modbus.0.inputRegisters.5011_MPPT_1_Current;(Voltsuedmppt1*Amperesuedmppt1).toFixed(0)} Watt

                  Nord {Voltnordmppt2:modbus.0.inputRegisters.5012_MPPT_2_Voltage;Amperenordmppt2:modbus.0.inputRegisters.5013_MPPT_2_Current;(Voltnordmppt2*Amperenordmppt2).toFixed(0)} Watt

                  1558f251-afd1-4909-a35b-1390f2aa7d5a-image.png

                  K Offline
                  K Offline
                  kklaus
                  wrote on last edited by kklaus
                  #23

                  @mraiobroker said in Sungrow WR SGH10RT MODBUS ioSkripte:

                  Süd {Voltsuedmppt1:modbus.0.inputRegisters.5010_MPPT_1_Voltage;Amperesuedmppt1:modbus.0.inputRegisters.5011_MPPT_1_Current;(Voltsuedmppt1*Amperesuedmppt1).toFixed(0)} Watt

                  Danke,

                  @edit
                  Hat geklappt,, die Werte habe ich schon mal. War doch einfacher als ich dachte.PXL_20230502_132620744.jpg

                  M 1 Reply Last reply
                  0
                  • K kklaus

                    @mraiobroker said in Sungrow WR SGH10RT MODBUS ioSkripte:

                    Süd {Voltsuedmppt1:modbus.0.inputRegisters.5010_MPPT_1_Voltage;Amperesuedmppt1:modbus.0.inputRegisters.5011_MPPT_1_Current;(Voltsuedmppt1*Amperesuedmppt1).toFixed(0)} Watt

                    Danke,

                    @edit
                    Hat geklappt,, die Werte habe ich schon mal. War doch einfacher als ich dachte.PXL_20230502_132620744.jpg

                    M Offline
                    M Offline
                    MRaioBroker
                    wrote on last edited by
                    #24

                    @kklaus das ist eine Variable innerhalb des HTML Widgets, damit man die beiden Datenpunkt multiplizieren kann.
                    Einfach in eine View in ein HTML Widget einfügen und gut ist

                    1 Reply Last reply
                    1
                    • M MRaioBroker

                      @gombersiob
                      sehr cool, danke für den Beitrag.
                      Mein Solarteur hat mir einen 10kW WR und eine 16er Anlage verbaut, erst heute weiß ich was das bedeutet und wie das Verhältnis sein sollte...

                      Hab dann ECharts genutzt und es grafisch gelöst. Werde wohl den halben Sommer über den 10kW des WR liegen

                      Mir war es eh wichtiger im Winter viel Strom zu haben, daher das ganze Dach voll gemacht, im Sommer nicht alles nutzen zu können.... ist dann halt so - gibt ja eh kaum Geld dafür.
                      Trotzdem wichtig das zu überwachen, finde ich.

                      Carsten SauermannC Offline
                      Carsten SauermannC Offline
                      Carsten Sauermann
                      wrote on last edited by Carsten Sauermann
                      #25

                      @mraiobroker sagte in Sungrow WR SGH10RT MODBUS ioSkripte:

                      sehr cool, danke für den Beitrag.

                      Mein Solarteur hat mir einen 10kW WR und eine 16er Anlage verbaut, erst heute weiß ich was das bedeutet und wie das Verhältnis sein sollte...

                      Hab dann ECharts genutzt und es grafisch gelöst. Werde wohl den halben Sommer über den 10kW des WR liegen

                      Mir war es eh wichtiger im Winter viel Strom zu haben, daher das ganze Dach voll gemacht, im Sommer nicht alles nutzen zu können.... ist dann halt so - gibt ja eh kaum Geld dafür.

                      Trotzdem wichtig das zu überwachen, finde ich.

                      Hier könntest du ein Programm schreiben, was anhand der Wetterdaten ermittelt, ob du heute die 10000W vermutlich knacken wirst.
                      Den Akku dann mit dem Überschuss über 10000W laden. Denn das geht, der WR kann zwar "nur" 10000W, aber er kann den Rest direkt an den Akku abgeben, weil dieser Gleichstrom bekommt!
                      So könntest du das Ganze zumindest noch ein wenig optimieren!

                      G 1 Reply Last reply
                      0
                      • Carsten SauermannC Carsten Sauermann

                        @mraiobroker sagte in Sungrow WR SGH10RT MODBUS ioSkripte:

                        sehr cool, danke für den Beitrag.

                        Mein Solarteur hat mir einen 10kW WR und eine 16er Anlage verbaut, erst heute weiß ich was das bedeutet und wie das Verhältnis sein sollte...

                        Hab dann ECharts genutzt und es grafisch gelöst. Werde wohl den halben Sommer über den 10kW des WR liegen

                        Mir war es eh wichtiger im Winter viel Strom zu haben, daher das ganze Dach voll gemacht, im Sommer nicht alles nutzen zu können.... ist dann halt so - gibt ja eh kaum Geld dafür.

                        Trotzdem wichtig das zu überwachen, finde ich.

                        Hier könntest du ein Programm schreiben, was anhand der Wetterdaten ermittelt, ob du heute die 10000W vermutlich knacken wirst.
                        Den Akku dann mit dem Überschuss über 10000W laden. Denn das geht, der WR kann zwar "nur" 10000W, aber er kann den Rest direkt an den Akku abgeben, weil dieser Gleichstrom bekommt!
                        So könntest du das Ganze zumindest noch ein wenig optimieren!

                        G Offline
                        G Offline
                        GombersIOB
                        wrote on last edited by
                        #26

                        @carsten-sauermann

                        Hier könntest du ein Programm schreiben

                        Das Programm gibt es schon - bzw. den entsprechenden Adapter.
                        Derzeit wird er zum Zeichnen eines Graphen verwendet, die Zahlen lassen sich aber bestimmt auch auswerten.

                        Carsten SauermannC 1 Reply Last reply
                        0
                        • G GombersIOB

                          @carsten-sauermann

                          Hier könntest du ein Programm schreiben

                          Das Programm gibt es schon - bzw. den entsprechenden Adapter.
                          Derzeit wird er zum Zeichnen eines Graphen verwendet, die Zahlen lassen sich aber bestimmt auch auswerten.

                          Carsten SauermannC Offline
                          Carsten SauermannC Offline
                          Carsten Sauermann
                          wrote on last edited by
                          #27

                          @gombersiob
                          Den Adapter kenne ich. Liegt bei mir leider immer daneben.

                          Ich wollte aber nicht den Adapter programmieren sondern man muss dann ein Programm schreiben was dafür sorgt, das alles was über 10k Erzeugung liegt in den Akku geht.

                          Was insofern schwierig ist da man nicht weiss was vom Dach kommen könnte, da der WR ja begrenzt..
                          Evtl kann man es aber anhand von MPP Spannung × MPP Strom errechnen. Ich weiss nicht ob dort die echt anliegenden Werte stehen. Kann ich auch kickt testen da mein WR nicht unterdimensioniert ist

                          1 Reply Last reply
                          0
                          • X Offline
                            X Offline
                            xpectives
                            wrote on last edited by
                            #28

                            Hallo Zusammen,

                            bin seit kurzem glücklicher Besitzer einer PV Anlage (12.7 kWp) mit zwei Sungrow WR (SH8 und SG5) und einem SBR128

                            Gibt es die Möglichkeit, den SBR script-/ und zeitgesteuert mit einer Zwangsladung zu befüllen?

                            Hintergedanken der Frage ist die Kombination mit einem dynamischen Stromtarif (aWattar, Tibber,...) und der Möglichkeit, speziell in der dunklen Jahreszeit den Strombezug/Strompreis zu optimieren.

                            Hat hier jemand eine Idee oder einen Ansatz dafür?

                            VG
                            Alex

                            Carsten SauermannC 1 Reply Last reply
                            0
                            • X xpectives

                              Hallo Zusammen,

                              bin seit kurzem glücklicher Besitzer einer PV Anlage (12.7 kWp) mit zwei Sungrow WR (SH8 und SG5) und einem SBR128

                              Gibt es die Möglichkeit, den SBR script-/ und zeitgesteuert mit einer Zwangsladung zu befüllen?

                              Hintergedanken der Frage ist die Kombination mit einem dynamischen Stromtarif (aWattar, Tibber,...) und der Möglichkeit, speziell in der dunklen Jahreszeit den Strombezug/Strompreis zu optimieren.

                              Hat hier jemand eine Idee oder einen Ansatz dafür?

                              VG
                              Alex

                              Carsten SauermannC Offline
                              Carsten SauermannC Offline
                              Carsten Sauermann
                              wrote on last edited by
                              #29

                              @xpectives hi. Ich habe einen sungrow sh8.0rt mit sbr096. Damit ist es über die Holding register möglich eine Zwangsladung zu starten. Man kann sogar die Ladeleistung einstellen.

                              Holding 13050 und zwei weitere muss man dafür ändern.

                              Habe die Daten gerade nicht im Kopf. Aber es ist möglich!

                              Wie genau steht auch hier im forum. Kann leider gerade nicht nachgucken da ich unterwegs bin...

                              X 1 Reply Last reply
                              0
                              • Carsten SauermannC Carsten Sauermann

                                @xpectives hi. Ich habe einen sungrow sh8.0rt mit sbr096. Damit ist es über die Holding register möglich eine Zwangsladung zu starten. Man kann sogar die Ladeleistung einstellen.

                                Holding 13050 und zwei weitere muss man dafür ändern.

                                Habe die Daten gerade nicht im Kopf. Aber es ist möglich!

                                Wie genau steht auch hier im forum. Kann leider gerade nicht nachgucken da ich unterwegs bin...

                                X Offline
                                X Offline
                                xpectives
                                wrote on last edited by xpectives
                                #30

                                @carsten-sauermann
                                Danke für dein Feedback
                                Gut zu hören, dass es eine Möglichkeit gibt :+1:

                                Zugegeben... ist für mich noch alles ein wenig Neuland... aber man wächst mit den Herausforderungen :grinning:

                                Bisher habe ich als Registerbeschreibung nur folgende Infos gefunden
                                https://gist.github.com/dnoegel/543c72ef722365a3934bbad0bb43e222

                                Allerdings fehlt hier die 13050

                                Edit/Gefunden
                                Communication.Protocol.of.Residential.Hybrid.InverterV1.0.22_20201117.pdf

                                Hast Du noch eine andere Quelle?

                                Grüße
                                Alex

                                Carsten SauermannC 1 Reply Last reply
                                0
                                • X xpectives

                                  @carsten-sauermann
                                  Danke für dein Feedback
                                  Gut zu hören, dass es eine Möglichkeit gibt :+1:

                                  Zugegeben... ist für mich noch alles ein wenig Neuland... aber man wächst mit den Herausforderungen :grinning:

                                  Bisher habe ich als Registerbeschreibung nur folgende Infos gefunden
                                  https://gist.github.com/dnoegel/543c72ef722365a3934bbad0bb43e222

                                  Allerdings fehlt hier die 13050

                                  Edit/Gefunden
                                  Communication.Protocol.of.Residential.Hybrid.InverterV1.0.22_20201117.pdf

                                  Hast Du noch eine andere Quelle?

                                  Grüße
                                  Alex

                                  Carsten SauermannC Offline
                                  Carsten SauermannC Offline
                                  Carsten Sauermann
                                  wrote on last edited by
                                  #31

                                  @xpectives in der pdf stehen auch die Holding register mit drin. Ich kann die meine Liste als Import für iobroker geben.

                                  _address	name	description	unit	type	len	factor	offset	formula	role	room	poll	wp	cw	isScale
                                  4999	System Clock Year	Systemzeit Jahr		uint16be	1	1	0		value		true	false	false	false
                                  5000	System Clock Month	Systemzeit Monat		uint16be	1	1	0		value		true	false	false	false
                                  5001	System Clock Day	Systemzeit Tag		uint16be	1	1	0		value		true	false	false	false
                                  5002	System Clock Hour	Systemzeit Stunde		uint16be	1	1	0		value		true	false	false	false
                                  5003	System Clock Minute	Systemzeit Minute		uint16be	1	1	0		value		true	false	false	false
                                  12999	Start/Stop	Start/Stop Start(CF) Stop (CF)		uint16be	1	1	0		value		true	false	false	false
                                  13001	Load Adjustment mode	Energie Management Modus ON/OFF(1) / Energieoptimiert(2)		uint16be	1	1	0		value		true	false	false	false
                                  13002	Load 1 timing period 1: Start hour		h	uint16be	1	1	0		value		true	false	false	false
                                  13003	Load 1 timing period 1: Start minute		min	uint16be	1	1	0		value		true	false	false	false
                                  13004	Load 1 timing period 1: End hour		min	uint16be	1	1	0		value		true	false	false	false
                                  13005	Load 1 timing period 1: End minute		h	uint16be	1	1	0		value		true	false	false	false
                                  13006	Load 1 timing period 2: Start hour		h	uint16be	1	1	0		value		true	false	false	false
                                  13007	Load 1 timing period 2: Start minute		min	uint16be	1	1	0		value		true	false	false	false
                                  13008	Load 1 timing period 2: End hour		h	uint16be	1	1	0		value		true	false	false	false
                                  13009	Load 1 timing period 2: End minute		min	uint16be	1	1	0		value		true	false	false	false
                                  13010	Load 1 ON/OFF mode	Load 1 ON/OFF mode    ON(170/AA)/ OFF (85/55)		uint16be	1	1	0		value		true	false	false	false
                                  13011	Load 1 power optimized mode: Start hour		h	uint16be	1	1	0		value		true	false	false	false
                                  13012	Load 1 power optimized mode: Start minute		min	uint16be	1	1	0		value		true	false	false	false
                                  13013	Load 1 power optimized mode: End hour		h	uint16be	1	1	0		value		true	false	false	false
                                  13014	Load 1 power optimized mode: End Minute 		min	uint16be	1	1	0		value		true	false	false	false
                                  13015	Optimized power of load 1	Optimized power of load 1	W	uint16be	1	1	0		value		true	false	false	false
                                  13049	EMS mode selection 	EMS Modus		uint16be	1	1	0		value		true	false	false	false
                                  13050	Charge/discharge command	Ext. Sollvorgabe Laden170(AA)/ Stop187(BB)/ Entladen204(CC) 		uint16be	1	1	0		value		true	false	false	false
                                  13051	Charge/discharge power	Ext. Sollvorgabe Lade/Entladeleistung		uint16be	1	1	0		value		true	false	false	false
                                  13057	Max. SOC	Max SOC	%	uint16be	1	0.1	0		value		true	false	false	false
                                  13058	Min. SOC	Min SOC	%	uint16be	1	0.1	0		value		true	false	false	false
                                  13065	Max. discharge current	Max. Entlade Strom	A	int16be	1	0.001	0		value		true	false	false	false
                                  13066	Max. charge current	Max. Lade Strom	A	int16be	1	0.001	0		value		true	false	false	false
                                  13074	Export Power Backup	Backup-Ausgang AN(170/AA) AUS(85/55h)		uint16be	1	1	0		value		true	false	false	false
                                  13079	External EMS heartbeat			uint16be	1	1	0		value		true	false	false	false
                                  13083	Start  Charging Power	u.U. Leistung, mit welcher ein Ladevorgang begonnen wird. Klärung erwünscht	W	uint16be	1	1	0		value		true	false	false	false
                                  13084	Start Discharging Power	u.U. Leistung, mit welcher ein Entladevorgang begonnen wird. Klärung erwünscht	W	uint16be	1	1	0		value		true	false	false	false
                                  13085	Meter Comm.	Kommunikation mit Energie Meter des WR		uint16be	1	1	0		value		true	false	false	false
                                  13086	Export Power Limitation	Einspeise Limitierung AN(170/AA) AUS(85/55h)		uint16be	1	1	0		value		true	false	false	false
                                  13099	SOC Reserve	SOC Reserve	%	uint16be	1	1	0		value		true	false	false	false
                                  
                                  X 1 Reply Last reply
                                  0
                                  • Carsten SauermannC Carsten Sauermann

                                    @xpectives in der pdf stehen auch die Holding register mit drin. Ich kann die meine Liste als Import für iobroker geben.

                                    _address	name	description	unit	type	len	factor	offset	formula	role	room	poll	wp	cw	isScale
                                    4999	System Clock Year	Systemzeit Jahr		uint16be	1	1	0		value		true	false	false	false
                                    5000	System Clock Month	Systemzeit Monat		uint16be	1	1	0		value		true	false	false	false
                                    5001	System Clock Day	Systemzeit Tag		uint16be	1	1	0		value		true	false	false	false
                                    5002	System Clock Hour	Systemzeit Stunde		uint16be	1	1	0		value		true	false	false	false
                                    5003	System Clock Minute	Systemzeit Minute		uint16be	1	1	0		value		true	false	false	false
                                    12999	Start/Stop	Start/Stop Start(CF) Stop (CF)		uint16be	1	1	0		value		true	false	false	false
                                    13001	Load Adjustment mode	Energie Management Modus ON/OFF(1) / Energieoptimiert(2)		uint16be	1	1	0		value		true	false	false	false
                                    13002	Load 1 timing period 1: Start hour		h	uint16be	1	1	0		value		true	false	false	false
                                    13003	Load 1 timing period 1: Start minute		min	uint16be	1	1	0		value		true	false	false	false
                                    13004	Load 1 timing period 1: End hour		min	uint16be	1	1	0		value		true	false	false	false
                                    13005	Load 1 timing period 1: End minute		h	uint16be	1	1	0		value		true	false	false	false
                                    13006	Load 1 timing period 2: Start hour		h	uint16be	1	1	0		value		true	false	false	false
                                    13007	Load 1 timing period 2: Start minute		min	uint16be	1	1	0		value		true	false	false	false
                                    13008	Load 1 timing period 2: End hour		h	uint16be	1	1	0		value		true	false	false	false
                                    13009	Load 1 timing period 2: End minute		min	uint16be	1	1	0		value		true	false	false	false
                                    13010	Load 1 ON/OFF mode	Load 1 ON/OFF mode    ON(170/AA)/ OFF (85/55)		uint16be	1	1	0		value		true	false	false	false
                                    13011	Load 1 power optimized mode: Start hour		h	uint16be	1	1	0		value		true	false	false	false
                                    13012	Load 1 power optimized mode: Start minute		min	uint16be	1	1	0		value		true	false	false	false
                                    13013	Load 1 power optimized mode: End hour		h	uint16be	1	1	0		value		true	false	false	false
                                    13014	Load 1 power optimized mode: End Minute 		min	uint16be	1	1	0		value		true	false	false	false
                                    13015	Optimized power of load 1	Optimized power of load 1	W	uint16be	1	1	0		value		true	false	false	false
                                    13049	EMS mode selection 	EMS Modus		uint16be	1	1	0		value		true	false	false	false
                                    13050	Charge/discharge command	Ext. Sollvorgabe Laden170(AA)/ Stop187(BB)/ Entladen204(CC) 		uint16be	1	1	0		value		true	false	false	false
                                    13051	Charge/discharge power	Ext. Sollvorgabe Lade/Entladeleistung		uint16be	1	1	0		value		true	false	false	false
                                    13057	Max. SOC	Max SOC	%	uint16be	1	0.1	0		value		true	false	false	false
                                    13058	Min. SOC	Min SOC	%	uint16be	1	0.1	0		value		true	false	false	false
                                    13065	Max. discharge current	Max. Entlade Strom	A	int16be	1	0.001	0		value		true	false	false	false
                                    13066	Max. charge current	Max. Lade Strom	A	int16be	1	0.001	0		value		true	false	false	false
                                    13074	Export Power Backup	Backup-Ausgang AN(170/AA) AUS(85/55h)		uint16be	1	1	0		value		true	false	false	false
                                    13079	External EMS heartbeat			uint16be	1	1	0		value		true	false	false	false
                                    13083	Start  Charging Power	u.U. Leistung, mit welcher ein Ladevorgang begonnen wird. Klärung erwünscht	W	uint16be	1	1	0		value		true	false	false	false
                                    13084	Start Discharging Power	u.U. Leistung, mit welcher ein Entladevorgang begonnen wird. Klärung erwünscht	W	uint16be	1	1	0		value		true	false	false	false
                                    13085	Meter Comm.	Kommunikation mit Energie Meter des WR		uint16be	1	1	0		value		true	false	false	false
                                    13086	Export Power Limitation	Einspeise Limitierung AN(170/AA) AUS(85/55h)		uint16be	1	1	0		value		true	false	false	false
                                    13099	SOC Reserve	SOC Reserve	%	uint16be	1	1	0		value		true	false	false	false
                                    
                                    X Offline
                                    X Offline
                                    xpectives
                                    wrote on last edited by
                                    #32

                                    @carsten-sauermann
                                    Danke Dir :+1:
                                    Jetzt heisst es erstmal studieren :grinning:

                                    1 Reply Last reply
                                    0
                                    • M MRaioBroker

                                      @kklaus

                                      das ist ne recht offene Frage. Wenn Du auf der Suche nach Skripts zur Automatisierung bist kann Dir hier evtl. geholfen werden.

                                      Zur Automatisierung: Ich selbst nutze ein paar Skripts z.B. um meine Wärmepumpe in den Smart Grid Modus zu schalten,
                                      teilen bringt aber nicht viel, weil recht spezifisch. Ich schalte z.B. einen Datenpunkt wenn ich Überschuss hab und mit dem schalte ich
                                      dann andere Dinge wie z.B. einen Shelly der meine Brauchwasser-Wärmepumpe aktiviert...
                                      (aber das auch. nur wenn ich am Vortag Strom zugekauft hab, wenn der Speicher noch voll ist bringts nicht ne Wärmepumpe mit PV Strom direkt zu steuern)

                                      Wichtiger als die Schaltung selbst ist die Intelligenz dahinter, damit man PV Strom auch wirklich sinnvoll nutzt.
                                      Bei Balkonkraftwerk recht einfach, da musst Du nur den Strom sinnvoll investieren
                                      Bei PV Anlage mit Speicher schon schwieriger, da musst Du verhindern, dass Du einspeist und nachkaufst.

                                      Vielleicht hilft das
                                      c42b1f8d-c6ac-4571-800a-4e94e3ab19d9-image.png

                                      App:
                                      Die Daten der App nachzustellen wäre evtl. ein anderes Thema hier im Forum z.B. https://forum.iobroker.net/post/972129
                                      Die App ist extrem umfangreich.

                                      Ich habe nur Teile die mich interessieren nachgebildet, die Visualisierung der App in IoBroker VIS mit dem Energieflussadapter andere Dinge in einer VIS
                                      die mich interessieren z.B. so

                                      240076bd-5b5f-402f-8866-128ed144967a-image.png
                                      30fdfda9-5038-481c-99a2-a1891f937808-image.png

                                      R Offline
                                      R Offline
                                      rali2011
                                      wrote on last edited by
                                      #33

                                      @mraiobroker

                                      Hallo, ich habe gesehen, dass du (genauso wie ich) zwei Dächer seperat mit PV bestückt hast. Ich addiere einfach die Werte 5016 der beiden Wechselrichter und habe dann den aktuellen Gesamtertrag.

                                      Allerdings finde ich nicht heraus, wie ich den aktuellen Verbrauch auslesen kann. Der unter 13033 ausgelesene Werte ist konstant ca. 200W geringer als die (verzögerte) anzeige in der App.

                                      Hast du oder alle anderen einen Tipp für mich, wie an den korrekten Wert komme?

                                      Liebe Grüße und Danke für eure Hilfe

                                      Ralph

                                      M Carsten SauermannC 2 Replies Last reply
                                      0
                                      • R rali2011

                                        @mraiobroker

                                        Hallo, ich habe gesehen, dass du (genauso wie ich) zwei Dächer seperat mit PV bestückt hast. Ich addiere einfach die Werte 5016 der beiden Wechselrichter und habe dann den aktuellen Gesamtertrag.

                                        Allerdings finde ich nicht heraus, wie ich den aktuellen Verbrauch auslesen kann. Der unter 13033 ausgelesene Werte ist konstant ca. 200W geringer als die (verzögerte) anzeige in der App.

                                        Hast du oder alle anderen einen Tipp für mich, wie an den korrekten Wert komme?

                                        Liebe Grüße und Danke für eure Hilfe

                                        Ralph

                                        M Offline
                                        M Offline
                                        MRaioBroker
                                        wrote on last edited by
                                        #34

                                        @rali2011

                                        Hi Ralf,

                                        Ich arbeite nur mit 13007 als Verbrauch des Hauses und separat mit der Ladeleistung der Batterie.

                                        Mein Tipp ist es, die App einfach nicht zu benutzen. wenn doch dann nicht miteinander vergleichen. Die Modus Daten sind wesentlich genauer.

                                        Ich habe auch aufgegeben Werte die in Modbus bereits summiert werden (Gesamtverbräuche) durch die Aufaddierung der Einzelwerte nachzuvollziehen, weil das hat nie gestimmt. Es ist alles nicht 100-prozent genau.

                                        R 1 Reply Last reply
                                        0
                                        • R rali2011

                                          @mraiobroker

                                          Hallo, ich habe gesehen, dass du (genauso wie ich) zwei Dächer seperat mit PV bestückt hast. Ich addiere einfach die Werte 5016 der beiden Wechselrichter und habe dann den aktuellen Gesamtertrag.

                                          Allerdings finde ich nicht heraus, wie ich den aktuellen Verbrauch auslesen kann. Der unter 13033 ausgelesene Werte ist konstant ca. 200W geringer als die (verzögerte) anzeige in der App.

                                          Hast du oder alle anderen einen Tipp für mich, wie an den korrekten Wert komme?

                                          Liebe Grüße und Danke für eure Hilfe

                                          Ralph

                                          Carsten SauermannC Offline
                                          Carsten SauermannC Offline
                                          Carsten Sauermann
                                          wrote on last edited by
                                          #35

                                          @rali2011 die Werte in der App sind gemittelt Werte über die letzten paar Minuten. Daher weicht die Anzeige immer von der reellen Werten auf dem modbus ab.

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          989

                                          Online

                                          32.4k

                                          Users

                                          81.5k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe