Leistungsprognose für Wechselrichter

Begonnen von ch.eick, 18 Januar 2021, 08:35:46

Vorheriges Thema - Nächstes Thema

tobi01001

Zitat von: Heatseeker am 24 Oktober 2023, 18:31:45
Zitat von: DS_Starter am 18 Oktober 2023, 21:09:36
ZitatJedoch soll es noch zwei Bedingungen geben:
Humidity > 70 und DoorState =closed
Bekomme ich das mit dem interuptable hin, oder muss ich das über ein doif machen...
Es kommt darauf an, ob diese beiden Bedingungen nur unterbrechen und nicht den Consumerzyklus beenden sollen.
In Interuptable kann man nur eine Bedingung angeben. 
Ich persönlich würde mir dazu über das Attr userExitFn ein wenig Code einfügen der bei Humidity > 70 und DoorState =closed ein Reading (im SolarForecast Device) auf 1, anderenfalls auf 0 setzt. Dieses Reading und den Regex (auf "1") gibt man dann im Key interuptable an.
Das kann man natürlich auch mit einem DOIF machen und das auszuwertende Reading damit setzen. Du solltest aber mit dem DOIF nicht direkt den Consumer ein/aus schalten damit auch die Einplanungszeiten eingehalten werden können.

Moin,

Also die externen Bedingungen, sollen das Gerät unterbrechen.
Ich habe nun ein Dummy angelegt und schalte mit einem doif nun dieses auf 1 oder 0. Dies habe ich nun als interuptable angegeben, aber so richtig klappt das noch nicht... bzw wird ignoriert.
Wie müsste ich hier das interuptabld anlegen?

Ich weiß, dass es umständlicher ist als nötig, aber damit komme ich langfristig vermutlich besser klar....

Was hast du denn angegeben? Nach Doku hätte ich folgendes:
interruptable=dummy:reading:(1)
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

stefanru

Hi Christian,

ich weiß nicht ganz was du wissen willst.
Die Anzeige ist der Screenshot von meinem Tablet UI.
Das html dafür kann ich dir natürlich schicken.

Den Wert der die Verfügbaren Wh bis zum nächsten morgen (Sunrise) darstellt berechne ich aus verschiedenen Werten.
Das hängt nun sehr von deinem Wechselrichter und der Batterie ab wie du die Werte bekommst.
Falls du Fronius und BYD hast kann ich dir das ganz genau schicken.

Die Logik habe ich im Notify das die Dummys befüllt.
Allgemeingültig ist die Logik so:
my $VerbrauchBisSunrise = ReadingsNum("Forecast", "statistic_conForecastTillNextSunrise", 0);; ## Das ist das neue Reading im Forecast Device
my $BatLevelRest = $BatCapacityMaxWh / 100 * ($BatChargeProzent - 5);; ## Meine Batterie entläd maximal bis 5% also ziehe ich die von der Kapazität ab

## Diese Logik schaut ob man zwischen Sunset und Sunrise ist
## Um 0 Uhr spring RestOfDayPVforecast aus dem Forecastmodul um also muss bis zum nächsten Sunrise 0 geliefert werden wenn man auch nach 24 Uhr noch eine Vorhersage haben will
my $SunriseSec = time2sec(ReadingsVal("Forecast","Today_SunRise", 0));;
my $TimeSec = time2sec(strftime("%H:%M",localtime));;
my $SecDiffSunrise = $TimeSec - $SunriseSec;;
my $PVRestBisSunrise = ($SecDiffSunrise > 0) ? ReadingsNum("Forecast", "RestOfDayPVforecast", 0) : 0;;  ## Das ist der PV Rest des Tages oder 0 nach Sunset bis zum nächsten Sunrise

## Das Ergebniss ist eine Vorhersage der übrigen Wh bis zum nächsten Sunrise, bzw. wenn negativ der Netzbezug bis Sunrise
my $AkkuWhRestBisSunrise = $BatLevelRest + $PVRestBisSunrise - $VerbrauchBisSunrise;;

Viele Grüße,
Stefan

Heatseeker


[/quote]

Was hast du denn angegeben? Nach Doku hätte ich folgendes:
interruptable=dummy:reading:(1)
[/quote]
Ah, okay. Hatte hier ein =1 stehen. Habe diesen Fall aber auch so nicht aus der Doku herauslesen können...
Ich probiere es mal!
Danke!

fichtennadel

Hallo,

Frage zur Verbraucherplanung, weil ich mich gerade über einen unerwarteten Einschaltvorgang wundere:
Wird beim Wiedereinschalten (interrupted -> continued) die swoncond nicht geprüft?
Wie könnte ich das trotzdem erreichen, dass *nur* dann eingeschalten wird, wenn swoncond erfüllt ist?

Viele Grüße,
 Georg
RasPi 2 B | JeeLink Classic [4x 30.3144it, 2x 30.3147it] | CUL 433 a-culfw V 1.04.01 [ IT-1500, ITM-100, Somfy Telis 1 RTS, BelFox ] | TCM ESP3 [ FSB61, FSB61NP, FT55, FMH4S, AP221 ] | Fronius | Modbus/TCP (Stiebel Eltron WP) | HTTPMOD (go-e)

DS_Starter

ZitatWird beim Wiedereinschalten (interrupted -> continued) die swoncond nicht geprüft?
Nein, swoncond ist eine Zusatzbedingung die erfüllt sein muß um den geplanten Zyklus zu starten.

aus der Hilfe: ->
Bedingung die zusätzlich erfüllt sein muß um den Verbraucher einzuschalten (optional). Der geplante Zyklus wird gestartet.

ZitatWie könnte ich das trotzdem erreichen, dass *nur* dann eingeschalten wird, wenn swoncond erfüllt ist?
Das Wiedereinschalten nach einer Unterbrechnung erfolgt durch Prüfung der Bedingung in interruptable.
Hier kannst du ein Device:Reading:Regex[:Hysterese] angeben.
Ist der Regex erfüllt, erfolgt die Unterbrechnung, ist der Regex nicht mehr erfüllt wird der Verbraucher wieder fortgesetzt.
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

fichtennadel

Zitat von: DS_Starter am 25 Oktober 2023, 18:57:39Das Wiedereinschalten nach einer Unterbrechnung erfolgt durch Prüfung der Bedingung in interruptable.
Hier kannst du ein Device:Reading:Regex[:Hysterese] angeben.
Ist der Regex erfüllt, erfolgt die Unterbrechnung, ist der Regex nicht mehr erfüllt wird der Verbraucher wieder fortgesetzt.

Danke, ich fürchte nur, das hilft mir nicht. Ich will mit der Bedingung nicht aktiv ausschalten, sondern nur das erneute Einschalten ggfs verhindern.

In der swoncond prüfe ich NextHours_Sum02_PVforecast, wenn das > 4000 ist, soll eingeschalten werden (mache ich indirekt über ein userreading 0/1 für >4k).
Aber wenn schon eingeschalten ist, darf NextHours_Sum02_PVforecast auch kleiner 4000 werden. Nur wenn dann wieder ausgeschalten wird, soll vor dem erneuten Einschalten noch mehr als 4k in NextHours_Sum02_PVforecast stehen.

Hintergrund dazu: das dient der Überschussteuerung der Wärmepumpe. Wenn Überschuss ansteht und der auch laut Prognose für die nächsten 2h Stunden ausreichend ist, soll eingeschalten werden.
Wenn aber nur kurz Überschuss da ist, weil zB die Prognose nicht mehr hergibt oder schon später Nachmittag ist, dann soll gar nicht erst eingeschalten werden, um zu kurze Laufzeiten bzw. häufige Taktung der Wärmepumpe zu vermeiden.


RasPi 2 B | JeeLink Classic [4x 30.3144it, 2x 30.3147it] | CUL 433 a-culfw V 1.04.01 [ IT-1500, ITM-100, Somfy Telis 1 RTS, BelFox ] | TCM ESP3 [ FSB61, FSB61NP, FT55, FMH4S, AP221 ] | Fronius | Modbus/TCP (Stiebel Eltron WP) | HTTPMOD (go-e)

DS_Starter

#3186
ZitatNur wenn dann wieder ausgeschalten wird, soll vor dem erneuten Einschalten noch mehr als 4k in NextHours_Sum02_PVforecast stehen.
Was wäre denn die Bedingung für die Unterbrechnung nach dem erstmaligen Einschalten? Nur der nicht mehr vorhandene PV Überschuß?


Zitat...um zu kurze Laufzeiten bzw. häufige Taktung der Wärmepumpe zu vermeiden.
Dafür kann man auch "locktime" verwenden.
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

fichtennadel

Zitat von: DS_Starter am 25 Oktober 2023, 19:23:10Was wäre denn die Bedingung für die Unterbrechnung nach dem erstmaligen Einschalten? Nur der nicht mehr vorhandene PV Überschuß?
Ja, nur der nicht mehr vorhandene PV Überschuß.

Zitat von: DS_Starter am 25 Oktober 2023, 19:23:10Dafür kann man auch "locktime" verwenden.
Hab ich schon, zwei Stunden nach dem Ausschalten. Der Fall heute war ein bewölkter Nachmittag, an dem nach drei Stunden doch noch kurz um halb fünf die Sonne rauskam.

Aber was gehen könnte, ist ein Userreading für interruptable 0/1, das den aktuellen Schaltzustand miteinbezieht:
(Consumer == "An" ? 1 : ( NextHours_Sum02_PVforecast > 4000 ? 1 : 0 ) )

Dann unterbricht dieses Reading nie, prüft aber bei Einschalten. Und wenn zu wenig Überschuss ansteht, sollte laut Doku ja trotzdem abgeschalten werden, richtig?
RasPi 2 B | JeeLink Classic [4x 30.3144it, 2x 30.3147it] | CUL 433 a-culfw V 1.04.01 [ IT-1500, ITM-100, Somfy Telis 1 RTS, BelFox ] | TCM ESP3 [ FSB61, FSB61NP, FT55, FMH4S, AP221 ] | Fronius | Modbus/TCP (Stiebel Eltron WP) | HTTPMOD (go-e)

DS_Starter

#3188
Ja, könnte so funktionieren.

Aber .... Consumer eq "An" ? ...  ;)
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

fichtennadel

Zitat von: DS_Starter am 25 Oktober 2023, 19:47:37Aber .... Consumer eq "An" ? ...  ;)

ja, eh, war schnell getippter Pseudocode ;D

Wobei wenn wir schon dabei sind: gibt es ein Reading im PV_Forecast, mit dem ich direkt den Schaltzustand auslesen kann? Oder müsste ich aus consumerXX den state rausparsen?
RasPi 2 B | JeeLink Classic [4x 30.3144it, 2x 30.3147it] | CUL 433 a-culfw V 1.04.01 [ IT-1500, ITM-100, Somfy Telis 1 RTS, BelFox ] | TCM ESP3 [ FSB61, FSB61NP, FT55, FMH4S, AP221 ] | Fronius | Modbus/TCP (Stiebel Eltron WP) | HTTPMOD (go-e)

DS_Starter

#3190
ZitatWobei wenn wir schon dabei sind: gibt es ein Reading im PV_Forecast, mit dem ich direkt den Schaltzustand auslesen kann?
Das nicht, aber es gibt noch undokumentierte Programmierschnittstellen.
Du kannst dir viele Werte der Consumer auslesen mit:

$X = ConsumerVal ($hash, $co, $key, $def);
Dabei ist:

# $co:  Consumer Nummer (01,02,03,...)
# $key: name            - Name des Verbrauchers (Device)
#       alias           - Alias des Verbrauchers (Device)
#       type            - Typ des Verbrauchers
#       state           - Schaltstatus des Consumers
#       power           - nominale Leistungsaufnahme des Verbrauchers in W
#       mode            - Planungsmode des Verbrauchers
#       icon            - Icon für den Verbraucher
#       mintime         - min. Einplanungsdauer
#       onreg           - Regex für phys. Zustand "ein"
#       offreg          - Regex für phys. Zustand "aus"
#       oncom           - Einschaltkommando
#       offcom          - Ausschaltkommando
#       onoff           - logischer ein/aus Zustand des am Consumer angeschlossenen Endverbrauchers
#       asynchron       - Arbeitsweise des FHEM Consumer Devices
#       retotal         - Reading der Leistungsmessung
#       uetotal         - Unit der Leistungsmessung
#       rpcurr          - Readingname des aktuellen Verbrauchs
#       powerthreshold  - Schwellenwert d. aktuellen Leistung(W) ab der ein Verbraucher als aktiv gewertet wird
#       energythreshold - Schwellenwert (Wh pro Stunde) ab der ein Verbraucher als aktiv gewertet wird
#       upcurr          - Unit des aktuellen Verbrauchs
#       avgenergy       - initialer / gemessener Durchschnittsverbrauch pro Stunde
#       avgruntime      - durchschnittliche Einschalt- bzw. Zykluszeit (Minuten)
#       epieces         - prognostizierte Energiescheiben (Hash)
#       ehodpieces      - geplante Energiescheiben nach Tagesstunde (hour of day) (Hash)
#       dswoncond       - Device zur Lieferung einer zusätzliche Einschaltbedingung
#       rswoncond       - Reading zur Lieferung einer zusätzliche Einschaltbedingung
#       swoncondregex   - Regex einer zusätzliche Einschaltbedingung
#       dswoffcond      - Device zur Lieferung einer vorrangige Ausschaltbedingung
#       rswoffcond      - Reading zur Lieferung einer vorrangige Ausschaltbedingung
#       swoffcondregex  - Regex einer einer vorrangige Ausschaltbedingung
#       isIntimeframe   - ist Zeit innerhalb der Planzeit ein/aus
#       interruptable   - Consumer "on" ist während geplanter "ein"-Zeit unterbrechbar
#       lastAutoOnTs    - Timestamp des letzten On-Schaltens bzw. letzter Fortsetzung (nur Automatik-Modus)
#       lastAutoOffTs   - Timestamp des letzten Off-Schaltens bzw. letzter Unterbrechnung (nur Automatik-Modus)
#       hysteresis      - Hysterese
#       sunriseshift    - Verschiebung (Sekunden) Sonnenaufgang bei SunPath Verwendung
#       sunsetshift     - Verschiebung (Sekunden) Sonnenuntergang bei SunPath Verwendung
#
# $def: Defaultwert

In deinem Fall wäre es:

$X = ConsumerVal ($hash, <Consumer-Nr>, 'state', '');
oder

$X = ConsumerVal ($hash, <Consumer-Nr>, 'onoff', '');  (logischer ein/aus Zustand)

Ergänzung: Von "außerhalb" des Moduls (außerhalb von userExitFn) heißt es FHEM::SolarForecast::ConsumerVal
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Christian83

Zitat von: DS_Starter am 21 Oktober 2023, 09:36:18graphicHeaderOwnspec <Label>:<Reading> <Label>:<Reading> ...

Hab das jetzt etwas genutzt. Wobei bei mir "dayAfterTomorrowPVforecast" keine Daten hat. Liegt das an der Forecast.Solar Api?

Die angezeigten Werte ignorieren auch das Attribut "graphicEnergyUnit". Denkst du du machst da noch die Umrechnung rein?

kask

Soweit ich weiß kann "dayAfterTomorrowPVforecast" nur die Solcast API und VictronVRM (Solcast Basis).



WW

Hallo zusammen,

Du darfst diesen Dateianhang nicht ansehen.

gibt es eine Möglichkeit:
  • die Breite der Grafik anzupassen? Ich hätte sie gerne entsprechend meiner SVG-Grafiken auf 800 Pixel
  • den Leerraum unterhalb der Flow-Grafiken zu minimieren, bzw. die Höhe dieses Bereiches vorzugeben?

LG Willi
FHEM 6.x im Docker-Container (OMV4 auf ASRock J3455-ITX), FHEM 6.0 auf Raspi, Fritzbox 7490, CUL433, CUL868, Jeelink868, SIGNALduino, LaCrosseGateway, Shelly, Sonoff, ESP8266, ESP32, ESP32-Cam, LaCrosse, OneWire, Zigbee (Sonoff, Blitzwolf, IKEA, Lidl), Azzurro-WR/Pylontech-Bat., Lambda-Wärmepumpe

kask

Ich denke mal der Platz unrehalb ist für die Consumer reserviert. Ich würde es auch begrüßen das wenn die Anzeige der Consumer ausgeblendet ist, das der Bereich nicht da wäre.
Die Größe und damit die Breite geht mit dem attr "flowGraphicSize".