Überschuss einer PV Anlage verwerten.

  • sunburstc

    Vielen Dank wieder für Deine Antwort.

    Ich hatte die letzten 24h nur mal den =>publish q3b/Power_curr %curr% aktiv. Hatte aber wieder so um die zehn "0er".

    Eigentlich müsste nur der Power_curr alle 10 Sekunden (meine Teleperoid) gesendet werden . Die Total_in und Total_out würde auch alle 10min reichen.

    Meine FW hatte ich auf Gitpod kompiliert und sicher nur mit 80 MHz. Werde das aber beim nächsten Mal probieren. Gibt es eigentlich hardwareseitig performante Unterschiede zwischen den vierschieden ESP-Boards?

    Zitat

    Oder die Websend Geschichte in mehrere Parts aufteilen,...

    Da bin ich überfragt. Ein delay einbauen ??


    Zitat

    Eine weitere Möglichkeit wäre, den Wert vor dem Websend abfragen. Befindet dieser sich bei <1 oder > 10kw dann soll der Wert nicht übertragen werden.

    Auch hier weiss ich nicht so recht ... Vermutlich eine if then else ??


    Gruss OW


  • Das ist der Teil der die Maxima begrenzt. Werden die über/unterboten, wird nichts gepostet.


    Probier mal das rot markierte probehalbe mit +> oder -> zu ersetzen. Habe aktuell kein ESP um etwas zu testen.


    Normalerweise müsste der esp8266 genug dampf haben um das alles zu können. Bei mir wurde eine lange zeit ein 3Phasen Modbuszähler, ein Q3BAA und 2 Lichtschranken ausgelesen ohne Probleme. Deshalb wundert mich das alles sehr. Und ist es nur der eine Wert der immer wieder zicken macht? Hast du mal über sensor53 d1 geschaut ob evtl. die Nachrichten nicht korrekt ankommen?

    Hast du dein Sleep verändert?

    Übrigens, nach Möglichkeit kein delay verwenden.

    Vielleicht hilft es auch einfach schon die >M Sektion ans Ende des scripts zu packen.

  • Besten Dank für Deine Anpassungen!

    Durch die >M Sektion am Ende, wird nach dem speichern des Scripts (und diese also gestartet wird) bei allen drei Einzelwerten erstmal "0" gesendet. Der Power_curr wird dann nach 10 sec korrekt gesendet, Total_in und Total_out hingegen nicht. Auch eine Veränderung der upsecs%xxx

    brachte keine Änderung, bis auf upsecs%10 Erst damit werden auch diese Werte gesendet.


    Hier mal ein kurzer log vom Sensor:



    Ich konnte da eigentlich nichts ungewöhnliches erkennen, wie gesagt der NodeMCU mit TEKT5400 läuft in dieser Konstellation seit über einem Jahr ohne grössere Aussetzer.


    Und während ich dass schreibe habe ich wieder die grösseren Ausreisser:


    (liegt eventuell wieder am Treiber (0 statt 16) ?


    Mysteriöse Sache das ist :) ...

  • Die Abstände sind viel zu lang zwischen den Daten.

    Man beachte wie es bei mir aussieht:

    Hab auch ein easymeter.


    Was sind das da in deinem log für connect failed? bei websend?

    Ja ich hatte die 16 wieder vergessen. Dadurch wird ein Median eingeschaltet. Aber ich finde sehr seltsam, dass deine Ergebnisse so selten kommen.

    Offensichtlich hängt der ganze Laden, wenn websend keinen host erreicht.



    Was passiert da in der >T Sektion mit dem 0-smlcurrent? Wozu?

  • ;was passiert hier?

    pcurr=0-SML#Power_curr


    Das ist ein noch ein Überbleibsel von gemus ersten Script für mich . Es wird einfach mit positiven Zahlen gerechnet (weil ja eigentlich bei PV-Überschuss/Einspeisung der Power_curr negativ ist) also 0 - (-300) = 300


    if pcurr>260{

    ->WebSend %url_1% POWER1 ON

    }if pcurr<10{

    ->WebSend %url_1% POWER1 OFF

    }


    Das könnte man natürlich auch mit Minuswerten curr rechnen, statt mit pcurr.


    Habe Deinen neuen Code (Danke!) jetzt gleich geladen. und beobachte ... Ggf. werde ich die von Dir angesprochene Websend-Geschichte mal deaktivieren.

    Ich musste allerdings das Debugfeature ,das Webdisplay und div. Kommentare löschen, da sonst nicht alles in den Speicher gepasst hat.



    dimmlevel=pheiz*100/pheizstab

    ;Warum wird der eigene Dimmlevel verändert?

    =>dimmer %0dimmlevel%


    Das kommt noch von meinen eigenen Versuchen :) Hintergrund war die tatsächliche Leistung des Heizstabes mit einzuberechnen , da ja der Dimmer 0-100%-Werte ausgibt. Bei einem 250W Heizer wird mit dimmer 100 = 250W verbraucht , bei einem 2500W Heizer eben 2500W. Wenn das für Deine Dimmerberechnung nicht von Belang ist, kann das weg. Damals ist mir noch aufgefallen, dass Dimmerwerte über 100 ignoriert werden, es bleibt der letzte gültige Dimmerwert (0-100) bestehen .



    Bis später und vielen Dank nochmal

    Gruss OW

  • opferwurst

    Moin Moin.


    Naja das beste ist natürlich immer erstmal auf alles zu verzichten. Ich weiß gerade nicht, wie sich der Empfänger verhält wenn er einen Dimmerwert über 100 bekommt. Ob er das dann auch einfach auf 100 reduziert. Ansonsten müsste man das mit einem IF abfangen.


    Bzgl. Platz im Script.

    Falls du ein Wemosd1mini oder nodemcu mit 4mb Flash hast, dann kompilieren doch wie folgt:

    In deiner user_config_override hinzufügen:

    Code
    #define USE_SCRIPT_FATFS -1
    #define FAT_SCRIPT_SIZE 4096
    #define USE_SCRIPT_FATFS_EXT
    #define SDCARD_DIR


    und quick&dirty in deiner Platformio.ini:

    Code
    board_build.f_cpu       = 160000000L
    board_build.ldscript    = eagle.flash.4m2m.ld

    entsprechend abändern.


    Es muss allerdings via Kabel geflasht werden. Weil "neu partitioniert" wird.

    Also dementsprechend gehen auch deine Einstellungen und das Script vermutlich verloren.

    Ein vorheriges Erase ist eh nie verkehrt ;)!


    Danach stehen dir zumindest 4096 Zeichen zu Verfügung.

  • sunburstc

    Deine Vermutung war goldrichtig! Dein Script lief ohne einen einzigen Aussetzer! Also habe ich einen neuen NodeMCU mit der aktuellen tasmota und Deinen Anpassungen geflasht um mehr Speicher usw. zu haben. Auch dieser läuft seit 12h ohne Aussetzer (sogar mit "0" statt "16" im Treiber)



    Also muss man mit => Websend aufpassen...

    Jetzt warte ich noch auf die letzten Teile für meine Ansteuerung des Heizers und auf Sonne und melde mich sicher wieder :)


    Schönen 3.Advend und vielen Dank

    OW

  • Betreffend des dimmer Befehls habe ich einfach in der Konsole mal diverse Werte getestet:



    wie oben bereits angedeutet, werden alle Dimmerwerte kleiner 0 und grösser 100 ignoriert. Bei einem Wert ausserhalb dieses Ranges bleibt der letzte gültige Dimmerwert bestehen.

  • Heute war mal kurz Sonne...


    if upsecs%tper==0

    and pin>0

    and curr>0 {
    if curr<15000{

    print akt curr %1curr%

    =>publish q3b/Power_curr %curr%


    ...und der curr wurde ein Minuswert und somit wurde kein publish mehr ausgeführt. (habe es gelöscht)


    Das gleiche auch hier:


    if upsecs%30==0

    and pin>0

    and curr>0 {

    dimmlevel=pheiz*100/pheizstab

    =>dimmer %0dimmlevel%


    Und mal eine Frage zum Variablenaufruf.

    Was ist der Unterschied von z.B. %curr% und %1curr% oder was bewirkt die Zahl vor der Variable?


    Ich habe auch Deine Dimmlevelbegrenzung eingefügt. Kannst Du mal bitte drüber schauen, denn ...

    .. danach hängt der NodeMCU. Keine Anzeige mehr, der Zugriff (wenn) dauert ewig. Ich dachte schon ich muss neu flashen.

  • opferwurst

    :D Schau doch mal auf die Benennung. Die Variable gibt es nicht. Dimmervalue. Bei dir heißt sie Dimmvalue =)!

    Das von mir war nur ein Beispiel wie es in etwa aussehen muss. Hatte nicht damit gerechnet ,dass du des direkt kopierst :-P!


    %1var% bedeutet eine Dezimalstelle.

    Es müsste auch noch: %1.1var% geben oder %0.1var% bin mir nicht sicher. Das ist für eine führende Null. also statt: 1.5 ein 01.5.

  • Moin,

    und frohe Weihnachten gehabt zu haben.

    In den vergangenen Tagen habe ich meine Hardware fertig aufgebaut.

    Das Netzteil wird über einen Sonoff Pow geregelt. Die notwendigen Pins sind per Optokoppler aus dem Pow potentialfrei herausgeführt worden. Klappt super.

    Jede freie Minute habe ich über dem Script gebrütet. Nochmals danke an Sunburstc!

    Herausgekommen ist folgendes mit Kommentaren:

    Da sind bestimmt noch einige Fehler drin.

    Aber dürfen Leerschritte am Zeilenanfang sein?

    Weitere Fragen sind im Code.


    Beste Grüße


    Edit: Gelöscht

  • Moin !

    Also Antworten zu den Fragen aus dem Script:


    Zeile:

    38: Ich bin mir hierbei nicht sicher. Früher wurde mit jeder Teleperiode an dieser stelle die Daten vom SML Treiber in die eigenen angelegten Variablen geschrieben. Aber inzw. hat sich da so einiges geändert. Würde es einfach ausprobieren.


    57: Da fliegt noch eine "2" in im Script rum die dort nicht hingehört.

    101: War eine Frage die ich dir gestellt habe :D


    Leerzeichen am Anfang sind kein Problem wenn du das Script mit dem Scripteditor hochlädst. Der entfernt alle Kommentare und unnötigen Leerzeichen.

    Im Scripteditor selbst hast du so allerdings eine bessere Übersicht über die verschiedenen Funktionen. Das einfachste ist, dass alles mal bei dir zu testen.

  • Hallöle,

    habe im Script den >T Bereich geändert. Funktioniert offensichtlich.


    Die "2" habe ich eliminiert


    Die Frage war mal an OW gerichtet.


    AAber irgendwie stimmt bei den pheiz - Berechnungen was nicht.

    pheiz wurde immer weiter aufaddiert.


    Fragen in den Kommentaren im Script:


    Bin noch nicht dahinter gekommen woran es genau liegt.

    Es gibt zwei Fälle wo es möglich wäre

  • Achso okay!

    Leider hab ich aktuell nicht die Zeit mich in das Skript nochmal reinzufuchsen.

    Wenn ich mich richtig erinnere, setzt die Einstellung des Pheiz vorraus, dass die gewonnene Leistung also der Überschuss nach dem einschalten kleiner wird.

    Sprich: Wenn ich 600 Watt Überschuss habe, wird pheiz auf 600-Threshold gesetzt.

    Durch den neuerlichen Verbrauch müsste der Überschusswert auf höhe des Thresholds sinken.

    Wenn ein geringerer Überschuss vorhanden ist, sollte der "Überschusswert" negativ werden und dadurch das skript triggern den Wert PHeiz neu anzupassen.

    Ich glaube so war der Plan.


    Die Abhängige Variable die alles steuert ist also der gemessene Überschuss.

    Wenn dieser sich nicht ändert, wenn Pheiz eingeschaltet wird, dann kann pheiz niemals aufhören sich zu addieren :D

  • Genau. Du kannst es lediglich testen, indem du via console selbst "Sonne" spielst und die Variable mit dem Befehl:


    script>VARIABLE=WERT;


    veränderst.

    Vorher solltest du allerdings dafür sorgen, dass deine curr Variable in Zeile 31 nicht ständig wieder mit 0 überschrieben wird.

    Also dementsprechend auskommentieren und selber Werte von Hand via Konsole setzen.

  • Hatte ich mir auch schon überlegt aber Sonne zu spielen reicht nicht.

    Das Ladegerät muss dann auch händisch nachziehen.


    Edit: Frage:


    cnt1 u. cnt2 ( soll wohl für Counter stehen) sowie vz dienen doch nur zur zeitlichen Verzögerung?

    Und wie wirkt diese? Unter >S geschieht doch alles im Sekundentakt:/

    Außerdem dienen diese auch zu Entscheidungsfindung nur wenn > vz ?

  • Hast du das Ladegerät schon? Dann schließe es doch direkt an? Das wird ja vermutlich eine eingebaute Obergrenze haben oder? ansonsten gebe dem Skript eine Obergrenze mit.



    Testhalber könnte man mal probieren in Zeile 46 folgendes einzusetzen:


    Code
    if pheiz<MAXWERT {
    pheiz=pheiz+curr-sw
    cnt1=0
    } else {
    print Maxwert Fall1 schon erreicht.
    }

    und in Zeile 62

    Code
    if pheiz<MAXWERT {
    
    pheiz=pheiz+curr
    cnt2=0
    } else {
    print Maxwert Fall2 schon erreicht.
    }
  • Die Sonne hat mir heute doch geholfen.

    Dein Script läuft, vielen Dank!

    Habe es ein klein wenig abgeändert.

    Also ohne den pheiz am Anfang der >S Sektion auf 0 zu setzen geht es nicht.

    Trotzdem "überleben" wohl die pheiz - Variablen in den Schleifen diese Prozedur, siehe Bild.

    Kurioserweise habe ich Ausreißer wenn ich einen hohen Verbrauch habe und somit nicht geladen werden darf.

    In der >M Sektion steht der Median auf 16 und auf dem Web-Display tauchen diese Ausreißer auch nicht auf.

    Die Dimmerwerte konnte ich über die "Ladegerätleistung" recht gut anpassen.



    Anbei der Aktuelle Code: