Dynamisch tarief - Hoe werk ik er mee? - Mijn integratie van HomeAssistant als EMS

  • Tags domotica elektriciteit energie energiebesparing energieverbruik
  • c00kie

    Beheerder
    Forumleiding
    Lid geworden
    22 mrt 2006
    Berichten
    13.111
    Waarderingsscore
    3.734
    Punten
    113
    Hey Allen,

    As Promised ga ik hier uit de doeken doen hoe ik mijn energieverbruik in eerste instantie wil monitoren, en in tweede instantie wil sturen via HomeAssistant. Ik doe dit omdat we van Ecopower verplicht werden om over te schakelen naar het dynamische kwartiertarief, omdat Fluvius voor ons "meetregime 3" had geactiveerd omdat we meer dan 10kVA aan omvormers hebben staan.

    In dit topic ga ik mijn (lijdens)weg beschrijven van hoe ik mijn HomeAssistant ingericht heb, waar ik tegenaan ben gelopen, en hopelijk heeft iemand er uiteindelijk iets aan zodat meerdere mensen dezelfde integratie kunnen doen zoals ik, en er vooral Energie mee kunnen besparen. Dit topic zal geleidelijk aan uitgebouwd worden, zodat het zo volledig mogelijk is. Als iemand dit zelf ook gedaan heeft, is het altijd handig dat hij/zij ook kan uitleggen wat precies, zodat we dat hier kunnen toevoegen.
    Een voorbeeldje: Ik zelf heb een omvormer van Huawei en eentje van SMA, maar ik veronderstel dat iedere omvormer een aparte aanpak nodig heeft om geïntegreerd te krijgen... Dus extra omvormers, altijd welkom ;).

    Ik heb totaal geen voorkennis van HomeAssistant. Mijn bedoeling is dus ook om voor iedereen duidelijk te maken, en uit te leggen hoe jullie deze sturing zelf kunnen bouwen.

    Home Assisant
    Waarom HomeAssistant
    De vraag is eenvoudig te beantwoorden met: "Waarom niet?". ;). Ik had me natuurlijk een beetje op voorhand ingelezen, blijkbaar niet goed genoeg zal later blijken, en ik kwam HomeAssistant regelmatig tegen om omvormers te sturen, en zaken aan te sturen. Je kon héél veel met elkaar laten praten, zonder al te veel technische kennis. (ook daar ben ik ondertussen achter dat je toch wel een basis moet hebben om hier vlot mee te werken...) Soit HomeAssistant zal het zijn, moeilijk of makkelijk, dat zien we wel, het ding staat hier, het zal renderen ;).

    3 2 1 Start
    The Unboxing...
    Ik heb een HomeAssistent Green besteld, samen met een aantal extra's als "energie manager". Klinkt héél logisch in wat ik wil bereiken.
    Een dag na de bestelling kwam er een doosje toe :
    20250409_122126.jpg
    Het eerste wat ik nodig had was natuurlijk "het bakske" zelf, en ik had er ook een draadloze P1 energiemeter bij gekocht. En ja hoor, dat vond ik als eerste in het doosje :).
    20250409_124813.jpg
    De installatie kon beginnen.
    De HomeAssistant Green aan de praat krijgen:
    20250409_130254.jpg
    Geen verrassingen tot nu toe. In de doos zat de HomeAssistant Green, met een netwerkkabel bij EN een stekker zodat "het bakske" kon gevoed worden. Zoals beloofd door HomeAssistant zou het voldoende zijn om het bakje in het stopcontact te steken, zorgen dat het op je netwerk hangt via de kabel, en het zou moeten werken...
    Alles aangesloten zoals het moest, even gewacht en dan zou ik moeten kunnen surfen naar: http://homeassistant.local:8123/
    En ja hoor, so far so good:
    1744278545315.png
    Gebruikersnaam & wachtwoord in gegeven, en het spelen kon beginnen... Toen was ik nog héél euforisch.

    Energiemeter installeren
    En de miserie kan beginnen. De installatie van de energiemeter die ik gekocht had was ook Plug & Play. Het enige wat ik moest doen was het ding in de P1 poort steken, stroom geven, op mijn interne draadloze netwerk hangen en klaar is kees.
    En eigenlijk, eigenlijk mag ik niet klagen daarover. Buiten het feit dat die P1 poort misschien niet op de meest eenvoudig/ergonomische plaats zit, ging dat redelijk goed. Na een paar minuten prullen om het kabeltje in de P1 poort te krijgen, kon ik van start gaan.
    Stekker in het stopcontact en gaaaaaaan!!!

    Ik moest met mijn telefoon verbinding maken met het draadloze netwerk: "Energiemeter", dan zou er een popup komen, en daar zou ik dan mijn eigen SSID moeten invullen met wachtwoord... Niet dus.
    Dan maar naar mijn bureau gewandeld, en dit geprobeerd via mijn laptop... Hopelijk had ik verbinding, en ja hoor... Zo geschiedde... ik kreeg nog altijd geen pop-up, maar als ik dan een nieuw browserscherm opende kon ik inderdaad mijn eigen gegevens invullen. JOEPIE! Dat was ook weer gelukt.

    Toen ik dan op mijn HomeAssistant dashboard keek, kwam er een nieuwe melding onderaan, dat er een nieuw "apparaat" klaar stond, ESPHome. Ok, installeren die handel.
    1744283863041.png
    Jammer maar helaas vergeten screen shots te pakken, het was te gemakkelijk :p. En toen kon de miserie beginnen.
    Na klikken op het apparaat, zou ik een overzicht moeten krijgen van de verschillende waarden die de energiemeter kon uitlezen uit de P1 poort van mijn digitale meter. Ik kreeg een overzicht, maar jammer genoeg stond er bij iedere waarde: NA :-(. Nu ja, ik had wel gedacht dat niet alles koek & ei zou zijn, dus ik ben vlijtig op zoek gegaan via google naar een oplossing. Het heeft een tijdje geduurd, tot ik dacht... Misschien moet ik eens op de site van de leverancier kijken, misschien staat er daar wel iets op, want welke zoektermen ik ook ingaf, ik kreeg toch niet echt wat ik wou... Een oplossing.

    En ja hoor, op de site van de leverancier stond inderdaad "iets":

    Geen data:​

    Als u op de webpagina van de P1-meter bij DSRM en verschillende bronnen enkel NA krijgt, kan dit betekenen dat de P1-kabel niet goed is aangesloten, waardoor er geen data binnenkomt.
    Een andere mogelijke oorzaak is dat u een ouder type meter gebruikt. Deze meters hebben een andere firmware nodig.
    Ok, ik dacht bij mezelf: Ik heb zo hard zitten knoeien om dat kabeltje er in te krijgen, misschien heb ik wel iets fout gedaan... Ik opnieuw naar de meter, duwen op het kabeltje, ik hoor niks extra klikken ofzo dus ja... 't Zal wel in orde zijn. Pagina refreshen, ESPHome de-installeren, ESPHome opnieuw installeren... Nope, nog altijd niks.
    Volgende poging: Firmware van de energiemeter dan maar updaten. Meter van de muur gehaald, de instructies van de site van de leverancier gevolgd:
    1. Via USB aan mijn laptop gehangen,
    2. Alle stappen gevolgd
    3. Gewacht
    4. Nog wat gewacht
    5. zo kan ik nog effe doorgaan, maar uiteindelijk kwam er "succes" te staan, dus de update was gelukt.
    Dommerik dat ik was, het ding hing al terug op zijn plaatst maar natuurlijk waren alle gegevens van het toestelletje gesmeten door de firmware-update, dus ook de connectie met mijn intern draadloos netwerk...
    Ik dacht: Ik sta hier nu, met de gsm in de hand EN een nieuwe firmware, ik probeer eerst via de gsm... En je raadt het nooit, zonder boe of ba verliep dit vlekkeloos. Damn, again a happy man :).

    Vol verwachting het dashboard geopend... maar nog steeds geen verbetering... Overal NA. Voor zij die het tot hier al volgehouden hebben, en al met de P1 poort gewerkt hebben is het misschien makkelijk, maar ik vrees dat er nog een aantal in mijn situatie hebben gezeten. Die P1 poort wordt niet standaard opengezet via fluvius. 🤷‍♂️
    Dus.. Next steps: Poort openzetten via mijnfluvius.be:
    1. surf naar https://mijnfluvius.be
    2. Meld je op één of andere manier aan
    3. klik op 1744280171128.png
    4. Klik op de knop : Poortbeheer aanvragen
    5. Geef de EAN-code van je meter in (of klik onderaan op je elektriciteitsmeter)
    6. volg de verdere instructies en meldingen en klaar is kees.
    7. Ha nee, toch niet... Je kan nu zelf de P1 poort openzetten of sluiten, maar ook al heb je nu toegang tot poortbeheer... Je moet ze zelf nog openzetten. let op, je meter moet een paar dagen geïnstalleerd zijn alvorens je dit kan blijkbaar...
    8. Uiteindelijk kom je dan op deze pagina, waar je het schuivertje kan aan- of afzetten:
      1744280518021.png
    Even wachten, nog even wachten, nog even wachten, mijn geduld werd op de proef gesteld, en ja hoor... gegevens komen binnen :p. Joepie, die heb ik al.

    Tot nu toe is alles wat ik "fysisch" moest installeren geïnstalleerd & werkende.

    Actuele prijzen binnentrekken

    1e manier: via Nord Pool
    Als ik wil sturen op prijs & opbrengst van mijn panelen, moet ik natuurlijk weten wat ik op dit moment betaal voor de geleverde energie. Ik dacht, laat ik zonder opzoekwerk eens iets uitproberen. Ik ga naar instellingen - Apparaten & diensten en ik zie wat ik kan doen...
    Onderaan staat een knop: Integratie Toevoegen 1744282905757.png , dus laten we daar maar eens op klikken.
    Ok, zoeken op "Day Ahead" leverde niks op, "Elia" (waar ik zelf de day ahead prijzen volg) leverde ook niks op... Damn, maar dan bedacht ik mij dat ik ook nog ergens "Nord Pool" had zien passeren, en ja hoor... Nord pool heeft een integratie met die met een klik op de knop te installeren is. De bedragen komen niet exact overeen, maar eigenlijk om te sturen zou dit voldoende moeten zijn.

    2e manier: via ENTSO-e
    Het voordeel van deze manier van werken is dat de prijzen correcter zijn. Het nadeel van deze integratie is, dat dit niet "out of the box" kan. Dit wil dus zeggen dat we eigenlijk een integratie van de "HomeAssistant"-community moeten gebruiken, om deze data te raadplegen. Mocht HACS bij jou nog niet geïnstalleerd zijn, vind je hier wat lager de uitleg om het geïnstalleerd te krijgen. (credentials & bron: https://doe-duurzaam.nl/artikel/dynamische-energieprijzen-inlezen-met-home-assistant-zo-doe-je-dat/)

    Voor je kan starten met de integratie van ENTSO-e, moet je toegang tot de API aanvragen.
    1. Registreer je op het Transparency Platform. (rechtsbovenaan op login klikken, dan onderaan de popup op register klikken)
    2. Na registratie is het belangrijk om een e-mail naar transparancy apestaartje (@) entsoe.eu te sturen, met hetzelfde mailadres dan hetgene waarmee je geregistreerd bent, onderwerp "Restful API access". Vermeld in de mail, in het engels, ook nog eens dat je toegang wil tot de API, en vermeld je mailadres nog een keertje. Ik had na een uur of 2 een antwoord en toegang :).
    Vanaf dat je toegang hebt kun je de ENTSO-e integratie installeren.
    1. Ga in je Home Assistant installatie naar "HACS" 1744299876139.png en zoek de ENTSO-e integratie
      1744299928208.png
    2. Klik op de integratie, en daarna onderaan op de download knop
      1744299975297.png
    3. Klik nogmaals op download. ik heb de laatst beschikbare versie genomen, het is te zeggen, de laatst goedgekeurde beschikbare versie.
    4. Na downloaden herstart je HomeAssistant (instellingen - systeem - rechtsboven herstarten)
      Ik kreeg bij instellingen een "1" te zien, en als ik daar op klikte kreeg ik:
      1744300105715.png
    5. Na klikken kreeg ik volgend schermpje, waar ik op verzenden heb geklikt, waarna ik een half minuutje heb gewacht:
      1744300182551.png
    6. Daarna kun je de integratie downloaden, op de ondertussen misschien gekende manier: Instellingen - Apparaten & diensten, knop integratie toevoegen, zoek op ENTSO-e en installeren maar.
      1744300284304.png
    7. Ga naar je accountsettings van ENTSO-e (https://transparency.entsoe.eu/usrm/user/myAccountSettings ). Normaal staat daar nu een knop om een token aan te maken. Klik daarop, en kopieer de waarde van die token naar je klembord. Plak deze in het veld "Your API key*"
      1744300495399.png
    8. Ik heb het vakje "i want to set VAT,... aangevinkt".
      1744300797423.png
    9. Price Modifier Template wordt bepaald door je energieleverancier. Je kan de waarde hiervan terugvinden op : https://github.com/JaccoR/hass-entso-e/discussions/categories/price-modifyer-templates
      Voor mij, ecopower wordt dit dan
      1. Voor consumptie:
        Code:
        {% set s = {"bijz_accijns": 0.04748,
        "energiebijdrage": 0.0019261,
        "kost_gsc": 0.01581,
        "kost_wkk": 0.002576,
        "afnametarief": 0.0508125,
        "btw": 1.06,
        "marge_procentueel": 1.02,
        "marge_per_kwh": 0.004
        } %}
        {{((((current_price * s.marge_procentueel) + s.marge_per_kwh) + s.bijz_accijns + s.energiebijdrage + s.kost_gsc + s.kost_wkk + s.afnametarief) * s.btw) | float}}
      2. Voor injectie:
        Code:
        {% set s = {"marge_procentueel": 0.98,
        "marge_per_kwh": 0.015
        } %}
        {{((current_price * s.marge_procentueel) - s.marge_per_kwh) | float}}
    10. En dan wordt het schermpje voor consumptie als volgt ingevuld:
      1744301257106.png
    11. Na toevoegen van ook nog eens de Injectieprijzen krijg ik volgende "dingen" te zien:
      1. Bij integraties (instellingen - apparaten en diensten)
        1744301757847.png
      2. Op het dashboard zijn er 2 blokken bijgekomen:
        1744301824527.png 1744301864466.png
    12. Volgende stap is om die dingen wat mooier te zetten, lees juiste benaming te geven.

    Installeren van HACS
    Wanneer je "niet-officiële" integraties van HomeAssistant wil gebruiken, moet je de "Home Assistant Community Store" installeren. Dit vraagt al iets meer moeite dan een druk op de knop, dus misschien toch best om hier even bij stil te staan.
    Deze info vind je makkelijk terug op het internet, op het moment van schrijven heb ik onderstaande manier gebruikt.
    1. Om te beginnen moet je de "geavanceerde modus" inschakelen voor je gebruikersprofiel. Alleen al het feit dat je dit moet inschakelen moet je doen vermoeden dat je hier van het makkelijkst bewandelbare padje afwijkt. Maar niet getreurd, ook tijdens het schrijven van dit stukje heb ik al een paar zaken via HACS gedaan en eigenlijk blijft het allemaal redelijk eenvoudig werken...
      Klik links onderaan op je (gebruikers)naam, scroll wat naar beneden en zet de "Geavanceerde modus" aan:
      1744294065026.png
    2. Van zodra je dit gedaan hebt, ga je bij je instellingen naar de "Add-on winkel" (instellingen - Add-ons - Add-on winkel)
    3. Bij mij stond HACS bij de te installeren add-ons:
      1744294437997.png
      Indien dit bij jou het geval is mag je verder gaan naar stap X, anders naar stap 4.
    4. Je moet nog een SSH add on installeren om manueel HACS te kunnen downloaden. Ik heb gebruik gemaakt van 'Terminal & SSH'. Onder Add-ons heb je rechts onderaan een knop 1744294809258.png, en in de zoekbalk geef je 'Terminal & SSH' in, en volg de documentatie. ik heb hier jammer genoeg geen print screens genomen.
    5. Na installatie ga je naar de Terminal & SHH Add-on (instellingen - Add-ons)
      1744298886429.png
    6. Open de add-on, en klik op "open web-ui"
      1744298908102.png
    7. Nu wordt een klein beetje technisch, maar het is voldoende om in die "web-ui" volgend commando in te geven, om HACS te downloaden:
      Code:
      wget -O - https://get.hacs.xyz | bash -
    8. HACS is nu gedownload. Om het te kunnen installeren moet je eerst de cache van je browser wissen of een harde refresh uitvoeren.
    9. Daarna kun je HACS als integratie toevoegen: Instellingen - Apparaten & diensten - Integraties & diensten --> knop integratie toevoegen
      1744299211808.png
    10. Daarna krijg je een schermpje te zien waar je een aantal waarschuwingen te zien krijgt. Deze moet je allemaal aanvinken voordat je verder mag gaan.
    11. Nu wordt het nog iets lastiger, want je moet een koppeling opzetten met Github. Dus daar eerste een account aanmaken, om daarna de koppeling te maken. Jammer genoeg ook hier geen printscreens van, maar je krijgt een schermpje te zien met een link & een authorisatiecode. Kopieer de authorisatiecode en klik op de link (https://github.com/login/device) en volg de stappen aangegeven op het scherm. Als je nog geen account op github hebt, moet je een nieuwe aanmaken, anders kan het zijn dat je moet aanmelden.
    12. Na aanmelding plak je de authorisatiecode in de vakjes en klik je op "continue".
    13. Voltooi de autorisatie door op ‘Authorize hacs’ te klikken
    14. Nadat je het bevestigingsscherm hebt gezien, kun je de tab sluiten & terug verder gaan in Home Assistant.
    15. Klik op submit, koppel de integratie eventueel aan een ruimte en je bent klaar met de installatie van HACS. Proficiat ;).

    Next steps To Do:
    1. Connectie maken met Huawei omvormer en data uitlezen
    2. Connectie maken met SMA omvormer en data uitlezen dit gaat moeilijk worden, maar moeilijk gaat ook... Moeilijk omdat het om een oudere omvormer gaat...
    3. Manier bepalen wanneer er energie "mag" verbruikt worden en wanneer "niet"
      dus eigenlijk een systeem bepalen door rekening te houden met de opgewekte energie van de zonnepanelen en de huidige prijs van de energie
    4. Als systeem bepaald is (op papier), proberen integreren in HA
      1. rgb led aansturen die groen is bij "verbruik maar", oranje bij "verbruik maar, maar probeer het tot een minimum te beperken", rood bij "verbruik zo weinig mogelijk"
      2. aansturing omvormers: Indien mogelijk beperken van de output van de omvormer tot het verbruik van de woning (ideaal), anders uitschakelen van 1 of beide omvormers
    Misschien zijn er nog wel dingen die ik kan doen, maar tegen dat we daar zijn, zullen we wel al wat verder zijn ;-)

    Grtz,
    c00kie

    PS: Op- of aanmerkingen --> Shoot, ik probeer ze te integreren
     

    Bijlagen

    • 1744294220035.png
      1744294220035.png
      1,7 KB · Weergaven: 9
    • 1744294421738.png
      1744294421738.png
      8,1 KB · Weergaven: 7
    • 1744299188370.png
      1744299188370.png
      13,2 KB · Weergaven: 18
    Laatst bewerkt:
    Ik weet dat bvb Solar edge die functie standaard heeft en veel anderen hebben een integratie in HA die je kan gebruikken
     
    solar edge heb ik inderdaad al dikwijls voorbij zien komen... voor de huawei heb ik ook wel al iets gevonden, maar dan moet ik eerst zorgen dat ik meer rechten op de omvormer krijg :s. Straf eigenlijk, ge betaald 1000-den euro's voor een installatie, en als er iets moet veranderen heb je niet voldoende rechten :s.
    Soit, de vraag is gesteld om extra rechten te to be continued ;)
     
    Qua concept hangt het volgens mij een stuk af van de afweging tussen simpliciteit vs hoe ver je wil optimaliseren. Weet dat de laatste 20% optimalisatie vaak 80% van de inspanning vraagt in een typisch geval.
    Als ik het goed begrijp heb je momenteel weinig tot geen grote verbruikers die je automatisch zou kunnen starten en stoppen (1 of 0) of sturen (tussen 0% en 100%) zoals een warmtepomp, elektrische auto, ... maar eerder manueel te bedienen gebruikers. Je wil vooral een signaal zit ik nu op een gunstig moment, en zit ik de komende x uren in een gunstig moment (voor die x zou ik precies 3u nemen gezien dat de typische max duur is van een was/droogkast). Ik had begrepen dat je graag met een simpele kleur wil werken (groen/geel/rood).

    Een idee dat ik had was te werken met 4 ledjes, telkens 2 voor nu en 2 voor de komende x uur. 1 voor status opwekking en 1 voor status prijs.

    Status nu:
    *Injectie > x KWH = groen, tussen 0 en x geel, <0 rood
    *Prijs vaste waarden voor goedkoop/normaal/duur

    Status komende x uur:
    *Prijs gemiddeld van die komende x uur vergeleken met jou vast ingestelde waardes
    *data binnentrekken van ergens dat een zonnevoorspelling doet de komende uren bvb van https://ned.nl/nl/dataportaal/energie-productie/elektriciteit/zonne-energie hier hebben ze een dataset voorspelde zon per uur aankomende 7 dagen. Hier ook een status maken van van verwachte beschikbare zonne-energie de komende x uren (veel, gemiddeld, weinig/geen).

    Hoe gebruiken:

    *status nu + komende uren groen voor zowel zon als prijs --> gaan met die banaan
    *Prijs nu hoog en komende uren hoog, maar veel zon nu en de komende uren --> zet maart wat aan, maar ook niet overdreven (niet meer dan overschot)
    *status groen nu (voor 1 of beide) maar komende x uur oranje of rood --> nu iets korts doen (stofzuigen/strijken), maar niet direct iets van meerdere uren aanzetten
    *...

    Wat betreft het regelen van je omvormer (beperken injectie) had ik vooral gelezen dat deze redelijk modulair geregeld kan worden (misschien niet voor je oudste omvormer) en dus niet enkel aan en af. Hierbij zou ik niet verder kijken dan enkel naar negatieve injectieprijzen. De kans dat de prijs zodanig negatief is dat je je netkosten ook dekt (-14 cent zoals je aangeeft) is zodanig klein dat ik niet rekening zou houden met het scenario dat je je omvormers volledig uitzet zodat ook je direct verbruik niet door zonnestroom geleverd wordt, maar alles door de negatieve netstroom.
    Dus een aansturing als volgt: Als injectietarrief < 0 --> omvormer moduleren naar 0 injectie. Ik heb al voor een aantal omvormers reeds deze integratie gezien.

    Dit allemaal ge-implementeerd krijgen is natuurlijk een ander paar mouwen.
    Als je de actuele ledjes niet op productie maar op overschot stuurt, dan veranderen ze vanzelf van kleur wanneer je dingen aan zet. Zodra iets veel gaat verbruiken zal het ledje dan veranderen van kleur. Tenzij er echt véél productie is.
    De vraag is dan: hoeveel overschot is ‘groen’? 2kW overschot is al veel voor bvb was of droog, of strijken, maar is heel weinig voor de auto.
     
    Straf eigenlijk, ge betaald 1000-den euro's voor een installatie, en als er iets moet veranderen heb je niet voldoende rechten :s.
    Vanaf september is dat opgelost. Nieuwe datawet zegt dat jij lokaal toegang moet krijgen tot alle data van jouw eigen toestellen
     
    Straf eigenlijk, ge betaald 1000-den euro's voor een installatie, en als er iets moet veranderen heb je niet voldoende rechten :s.
    Vanaf september is dat opgelost. Nieuwe datawet zegt dat jij lokaal toegang moet krijgen tot alle data van jouw eigen toestellen
    Toegang om data/instellingen te lezen, maar niet om ze te wijzigen…
     
    Een eerste versie van de limiter functie.
    Nog niet volledig door getest, dus zitten mogelijk nog wat bugs in.
    Voel je vrij om verbeteringen voor te stellen of mogelijke bugs te melden ;-)

    Het idee erachter is om elk x seconden het verbruik en de injectie te meten.
    Indien verbruik > 0 , dan zetten we het percentage in stappen terug naar boven tot aan max 100. Afhankelijk van de grootte van het verbruik zijn de stappen groter. Indien verbruik 0 is en er injectie is, zetten we het percentage van de omvormer in stappen terug.

    [{"id":"7438718903a5922b","type":"tab","label":"Solaregde limiter","disabled":false,"info":"","env":[]},{"id":"0b5cc768c416b9b5","type":"inject","z":"7438718903a5922b","name":"Poll every 3 sec","props":[{"p":"payload"}],"repeat":"3","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":210,"y":180,"wires":[["0280d49eb2c39729","e9edffe72e604152","d732f5e0b5719db6","ae8df5e047a9f8fe"]]},{"id":"0280d49eb2c39729","type":"api-current-state","z":"7438718903a5922b","name":"DSMR poll","server":"f52c678d.eab598","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.dsmr_reading_electricity_currently_delivered","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"DSMR","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":450,"y":180,"wires":[["c4548b935c710cad"]]},{"id":"c4548b935c710cad","type":"calculator","z":"7438718903a5922b","name":"","inputMsgField":"payload","outputMsgField":"payload","operation":"mult","constant":"1000","round":false,"truncate":false,"decimals":0,"decimals2":0,"x":640,"y":180,"wires":[["4cfae09301ce069d"]]},{"id":"e9edffe72e604152","type":"api-current-state","z":"7438718903a5922b","name":"Solaredge AC power","server":"64ed5089.78254","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.solaredge_i1_ac_power","state_type":"str","blockInputOverrides":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":540,"y":60,"wires":[["64d80025e554aeee"]]},{"id":"ba58152f9d0fbe1e","type":"debug","z":"7438718903a5922b","name":"PV Power","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"$flowContext('pv_power')\t","targetType":"jsonata","statusVal":"","statusType":"auto","x":940,"y":60,"wires":[]},{"id":"d732f5e0b5719db6","type":"api-current-state","z":"7438718903a5922b","name":"DSMR poll","server":"f52c678d.eab598","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.dsmr_reading_electricity_currently_returned","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"DSMR","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":450,"y":260,"wires":[["3678371f151b2694"]]},{"id":"3678371f151b2694","type":"calculator","z":"7438718903a5922b","name":"","inputMsgField":"payload","outputMsgField":"payload","operation":"mult","constant":"1000","round":false,"truncate":false,"decimals":0,"decimals2":0,"x":640,"y":260,"wires":[["3ba2e65bcae3af3c"]]},{"id":"4cfae09301ce069d","type":"change","z":"7438718903a5922b","name":"","rules":[{"t":"set","p":"verbruik","pt":"flow","to":"$number(msg.payload)\t","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":840,"y":180,"wires":[["69d1e75da49bc54b"]]},{"id":"3ba2e65bcae3af3c","type":"change","z":"7438718903a5922b","name":"","rules":[{"t":"set","p":"injectie","pt":"flow","to":"$number((msg.payload))","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":840,"y":260,"wires":[["e164c2447236b5d1"]]},{"id":"64d80025e554aeee","type":"change","z":"7438718903a5922b","name":"","rules":[{"t":"set","p":"pv_power","pt":"flow","to":"$number(msg.payload)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":770,"y":60,"wires":[["ba58152f9d0fbe1e"]]},{"id":"ae8df5e047a9f8fe","type":"api-current-state","z":"7438718903a5922b","name":"PV limiter on?","server":"64ed5089.78254","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.solaredge_export_limit","state_type":"str","blockInputOverrides":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"PV_Limiter","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":260,"y":500,"wires":[["9a940fa226894481"]]},{"id":"9a940fa226894481","type":"debug","z":"7438718903a5922b","name":"Limiter","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":450,"y":500,"wires":[]},{"id":"4a515e880d0b51ae","type":"server-state-changed","z":"7438718903a5922b","name":"Solar export limit state changed?","server":"64ed5089.78254","version":6,"outputs":1,"exposeAsEntityConfig":"","entities":{"entity":["input_boolean.solaredge_export_limit"],"substring":[],"regex":[]},"outputInitially":false,"stateType":"str","ifState":"","ifStateType":"str","ifStateOperator":"is","outputOnlyOnStateChange":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":290,"y":620,"wires":[["5147e8ed13bfd617"]]},{"id":"d3ae06648e93f613","type":"switch","z":"7438718903a5922b","name":"Choose solar limiter percentage","property":"injectie","propertyType":"flow","rules":[{"t":"gt","v":"2000","vt":"str"},{"t":"gt","v":"1500","vt":"str"},{"t":"gte","v":"500","vt":"str"},{"t":"gte","v":"250","vt":"str"},{"t":"gte","v":"50","vt":"str"},{"t":"gte","v":"2","vt":"str"},{"t":"eq","v":"0","vt":"str"}],"checkall":"false","repair":false,"outputs":7,"x":930,"y":480,"wires":[["968b1ffe310766d8"],["af7adf9fd16bedfc"],["b5bf4568f7fb8ee5"],["548349c612f6de07"],["56b1924b07fc2e62"],["5e0458cc133a4aa9"],[]]},{"id":"5147e8ed13bfd617","type":"switch","z":"7438718903a5922b","name":"","property":"PV_Limiter","propertyType":"flow","rules":[{"t":"eq","v":"on","vt":"str"},{"t":"eq","v":"off","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":530,"y":620,"wires":[[],["c5e5b0e611d3b493"]]},{"id":"c5e5b0e611d3b493","type":"change","z":"7438718903a5922b","name":"injectie percentage naar 100%","rules":[{"t":"set","p":"injectie_percentage","pt":"flow","to":"100","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":750,"y":640,"wires":[["b0d3d07c75a65585"]]},{"id":"b0d3d07c75a65585","type":"api-call-service","z":"7438718903a5922b","name":"Set pv limiter percentage","server":"64ed5089.78254","version":7,"debugenabled":false,"action":"number.set_value","floorId":[],"areaId":[],"deviceId":[],"entityId":["number.solaredge_i1_active_power_limit"],"labelId":[],"data":"{\"value\" : $flowContext('injectie_percentage')}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":true,"domain":"number","service":"set_value","x":1050,"y":640,"wires":[[]]},{"id":"0cbd11760c8f077d","type":"change","z":"7438718903a5922b","name":"injectie = temp","rules":[{"t":"set","p":"injectie_percentage","pt":"flow","to":"temp","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":1800,"y":440,"wires":[["05d052b53418fed5"]]},{"id":"05d052b53418fed5","type":"api-call-service","z":"7438718903a5922b","name":"Set pv limiter percentage","server":"64ed5089.78254","version":7,"debugenabled":false,"action":"number.set_value","floorId":[],"areaId":[],"deviceId":[],"entityId":["number.solaredge_i1_active_power_limit"],"labelId":[],"data":"{\"value\" : $flowContext('injectie_percentage')}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":true,"domain":"number","service":"set_value","x":2050,"y":440,"wires":[["37c03a4a642ada6d"]]},{"id":"e164c2447236b5d1","type":"switch","z":"7438718903a5922b","name":"PV limiter switch 'on' or 'off'","property":"PV_Limiter","propertyType":"flow","rules":[{"t":"eq","v":"on","vt":"str"},{"t":"eq","v":"off","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":640,"y":360,"wires":[["71e95b63945fd015"],[]]},{"id":"71e95b63945fd015","type":"switch","z":"7438718903a5922b","name":"Verbruk = 0?","property":"verbruik","propertyType":"flow","rules":[{"t":"eq","v":"0","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":890,"y":360,"wires":[["d3ae06648e93f613","393648a118a6b457"]]},{"id":"643432a32bb2a870","type":"switch","z":"7438718903a5922b","name":"Choose solar limiter percentage","property":"verbruik","propertyType":"flow","rules":[{"t":"gt","v":"2000","vt":"str"},{"t":"gt","v":"1500","vt":"str"},{"t":"gte","v":"500","vt":"str"},{"t":"gte","v":"250","vt":"str"},{"t":"gte","v":"50","vt":"str"},{"t":"gte","v":"0","vt":"str"}],"checkall":"false","repair":false,"outputs":6,"x":1250,"y":180,"wires":[["5898d570bf91d28a"],["fb1cd6a496a274a2"],["493ceb1324efc405"],["2c6bd87692637740"],["457a4b23ff1cefa0"],[]]},{"id":"5898d570bf91d28a","type":"change","z":"7438718903a5922b","name":"injectie +20","rules":[{"t":"set","p":"temp","pt":"flow","to":"$flowContext('injectie_percentage') + 20","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1530,"y":120,"wires":[["094736990c6528a7"]]},{"id":"fb1cd6a496a274a2","type":"change","z":"7438718903a5922b","name":"injectie +10","rules":[{"t":"set","p":"temp","pt":"flow","to":"$flowContext('injectie_percentage') + 10","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1530,"y":160,"wires":[["094736990c6528a7"]]},{"id":"493ceb1324efc405","type":"change","z":"7438718903a5922b","name":"injectie + 5","rules":[{"t":"set","p":"temp","pt":"flow","to":"$flowContext('injectie_percentage') + 5","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1530,"y":200,"wires":[["094736990c6528a7"]]},{"id":"2c6bd87692637740","type":"change","z":"7438718903a5922b","name":"injectie +2","rules":[{"t":"set","p":"temp","pt":"flow","to":"$flowContext('injectie_percentage') + 2","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1520,"y":240,"wires":[["094736990c6528a7"]]},{"id":"457a4b23ff1cefa0","type":"change","z":"7438718903a5922b","name":"injectie +1","rules":[{"t":"set","p":"temp","pt":"flow","to":"$flowContext('injectie_percentage') + 1","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1520,"y":280,"wires":[["094736990c6528a7"]]},{"id":"69d1e75da49bc54b","type":"switch","z":"7438718903a5922b","name":"Verbruk > 0?","property":"verbruik","propertyType":"flow","rules":[{"t":"gt","v":"0","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":1010,"y":180,"wires":[["643432a32bb2a870","471d4450b9452fee"]]},{"id":"37c03a4a642ada6d","type":"debug","z":"7438718903a5922b","name":"Solar limiter percentage","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"$flowContext('injectie_percentage')","targetType":"jsonata","statusVal":"","statusType":"auto","x":2410,"y":440,"wires":[]},{"id":"cc42752483e31e4b","type":"inject","z":"7438718903a5922b","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":180,"y":740,"wires":[["0ae6f5a2d85ccadd","578698fc0fb1332a","df994e4255fcd157"]]},{"id":"0ae6f5a2d85ccadd","type":"change","z":"7438718903a5922b","name":"","rules":[{"t":"set","p":"injectie_percentage","pt":"flow","to":"50","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":420,"y":740,"wires":[[]]},{"id":"578698fc0fb1332a","type":"change","z":"7438718903a5922b","name":"verbruik 0","rules":[{"t":"set","p":"verbruik","pt":"flow","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":800,"wires":[[]]},{"id":"df994e4255fcd157","type":"change","z":"7438718903a5922b","name":"injectie 500","rules":[{"t":"set","p":"injectie","pt":"flow","to":"500","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":370,"y":840,"wires":[["6b08f1cc5bee129c"]]},{"id":"b5bf4568f7fb8ee5","type":"change","z":"7438718903a5922b","name":"Injectie - 15","rules":[{"t":"set","p":"temp","pt":"flow","to":"$number($flowContext('injectie_percentage')) -15","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1230,"y":480,"wires":[["825bce3f7b4d2147"]]},{"id":"6b08f1cc5bee129c","type":"change","z":"7438718903a5922b","name":"","rules":[{"t":"set","p":"temp","pt":"flow","to":"0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":840,"wires":[[]]},{"id":"af7adf9fd16bedfc","type":"change","z":"7438718903a5922b","name":"Injectie - 20","rules":[{"t":"set","p":"temp","pt":"flow","to":"$number($flowContext('injectie_percentage')) -20","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1230,"y":440,"wires":[["825bce3f7b4d2147"]]},{"id":"968b1ffe310766d8","type":"change","z":"7438718903a5922b","name":"Injectie - 30","rules":[{"t":"set","p":"temp","pt":"flow","to":"$number($flowContext('injectie_percentage')) -30","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1230,"y":400,"wires":[["825bce3f7b4d2147"]]},{"id":"548349c612f6de07","type":"change","z":"7438718903a5922b","name":"Injectie - 10","rules":[{"t":"set","p":"temp","pt":"flow","to":"$number($flowContext('injectie_percentage')) -10","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1230,"y":520,"wires":[["825bce3f7b4d2147"]]},{"id":"56b1924b07fc2e62","type":"change","z":"7438718903a5922b","name":"Injectie - 5","rules":[{"t":"set","p":"temp","pt":"flow","to":"$number($flowContext('injectie_percentage')) -5","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1230,"y":560,"wires":[["825bce3f7b4d2147"]]},{"id":"5e0458cc133a4aa9","type":"change","z":"7438718903a5922b","name":"Injectie - 1","rules":[{"t":"set","p":"temp","pt":"flow","to":"$number($flowContext('injectie_percentage')) -1","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1230,"y":600,"wires":[["825bce3f7b4d2147"]]},{"id":"825bce3f7b4d2147","type":"switch","z":"7438718903a5922b","name":">= 0","property":"temp","propertyType":"flow","rules":[{"t":"gte","v":"0","vt":"num"},{"t":"lte","v":"0","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":1490,"y":460,"wires":[["0cbd11760c8f077d"],["01d3fc4f1d7a4bd0"]]},{"id":"01d3fc4f1d7a4bd0","type":"change","z":"7438718903a5922b","name":"set 0","rules":[{"t":"set","p":"temp","pt":"flow","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1630,"y":500,"wires":[["0cbd11760c8f077d"]]},{"id":"094736990c6528a7","type":"switch","z":"7438718903a5922b","name":"> 100","property":"temp","propertyType":"flow","rules":[{"t":"gt","v":"100","vt":"num"},{"t":"lte","v":"100","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":1710,"y":180,"wires":[["d810c3089e2d034c"],["0cbd11760c8f077d"]]},{"id":"d810c3089e2d034c","type":"change","z":"7438718903a5922b","name":"set 100","rules":[{"t":"set","p":"temp","pt":"flow","to":"100","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1820,"y":120,"wires":[["0cbd11760c8f077d"]]},{"id":"d479f166ad5905f5","type":"comment","z":"7438718903a5922b","name":"when consuming","info":"","x":1260,"y":100,"wires":[]},{"id":"2e2ba2bfbf514e29","type":"comment","z":"7438718903a5922b","name":"when injection","info":"","x":950,"y":560,"wires":[]},{"id":"ea02fa7305a59cef","type":"comment","z":"7438718903a5922b","name":"PV limitier off, then se to 100%","info":"","x":610,"y":580,"wires":[]},{"id":"7adc88e864dcde1c","type":"inject","z":"7438718903a5922b","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":780,"y":740,"wires":[["ee26d75f6ae55308"]]},{"id":"ee26d75f6ae55308","type":"change","z":"7438718903a5922b","name":"injectie 20","rules":[{"t":"set","p":"injectie","pt":"flow","to":"20","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1000,"y":800,"wires":[[]]},{"id":"ed158888d06e2d3d","type":"inject","z":"7438718903a5922b","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":1160,"y":740,"wires":[["b6711fe7e14b92ae"]]},{"id":"b6711fe7e14b92ae","type":"change","z":"7438718903a5922b","name":"injectie 0","rules":[{"t":"set","p":"injectie","pt":"flow","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1380,"y":800,"wires":[["2d9e60b81cd1d093"]]},{"id":"2d9e60b81cd1d093","type":"debug","z":"7438718903a5922b","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"$flowContext('injectie')\t","targetType":"jsonata","statusVal":"","statusType":"auto","x":1560,"y":800,"wires":[]},{"id":"393648a118a6b457","type":"debug","z":"7438718903a5922b","name":"debug 2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1100,"y":320,"wires":[]},{"id":"471d4450b9452fee","type":"debug","z":"7438718903a5922b","name":"Verbruik","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1160,"y":60,"wires":[]},{"id":"f52c678d.eab598","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true},{"id":"64ed5089.78254","type":"server","name":"homeassistant","addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]
     

    Bijlagen

    • Nodered_solar_limiter.jpg
      Nodered_solar_limiter.jpg
      95,8 KB · Weergaven: 25
    Een eerste versie van de limiter functie.
    Nog niet volledig door getest, dus zitten mogelijk nog wat bugs in.
    Voel je vrij om verbeteringen voor te stellen of mogelijke bugs te melden ;-)

    Foto: zie hoger


    JSON:
    [
        {
            "id": "7438718903a5922b",
            "type": "tab",
            "label": "Solaregde limiter",
            "disabled": false,
            "info": "",
            "env": []
        },
        {
            "id": "0b5cc768c416b9b5",
            "type": "inject",
            "z": "7438718903a5922b",
            "name": "Poll every 3 sec",
            "props": [
                {
                    "p": "payload"
                }
            ],
            "repeat": "3",
            "crontab": "",
            "once": true,
            "onceDelay": 0.1,
            "topic": "",
            "payload": "",
            "payloadType": "date",
            "x": 210,
            "y": 180,
            "wires": [
                [
                    "0280d49eb2c39729",
                    "e9edffe72e604152",
                    "d732f5e0b5719db6",
                    "ae8df5e047a9f8fe"
                ]
            ]
        },
        {
            "id": "0280d49eb2c39729",
            "type": "api-current-state",
            "z": "7438718903a5922b",
            "name": "DSMR poll",
            "server": "f52c678d.eab598",
            "version": 3,
            "outputs": 1,
            "halt_if": "",
            "halt_if_type": "str",
            "halt_if_compare": "is",
            "entity_id": "sensor.dsmr_reading_electricity_currently_delivered",
            "state_type": "num",
            "blockInputOverrides": false,
            "outputProperties": [
                {
                    "property": "payload",
                    "propertyType": "msg",
                    "value": "",
                    "valueType": "entityState"
                },
                {
                    "property": "DSMR",
                    "propertyType": "flow",
                    "value": "",
                    "valueType": "entityState"
                }
            ],
            "for": "0",
            "forType": "num",
            "forUnits": "minutes",
            "override_topic": false,
            "state_location": "payload",
            "override_payload": "msg",
            "entity_location": "data",
            "override_data": "msg",
            "x": 450,
            "y": 180,
            "wires": [
                [
                    "c4548b935c710cad"
                ]
            ]
        },
        {
            "id": "c4548b935c710cad",
            "type": "calculator",
            "z": "7438718903a5922b",
            "name": "",
            "inputMsgField": "payload",
            "outputMsgField": "payload",
            "operation": "mult",
            "constant": "1000",
            "round": false,
            "truncate": false,
            "decimals": 0,
            "decimals2": 0,
            "x": 640,
            "y": 180,
            "wires": [
                [
                    "4cfae09301ce069d"
                ]
            ]
        },
        {
            "id": "e9edffe72e604152",
            "type": "api-current-state",
            "z": "7438718903a5922b",
            "name": "Solaredge AC power",
            "server": "64ed5089.78254",
            "version": 3,
            "outputs": 1,
            "halt_if": "",
            "halt_if_type": "str",
            "halt_if_compare": "is",
            "entity_id": "sensor.solaredge_i1_ac_power",
            "state_type": "str",
            "blockInputOverrides": true,
            "outputProperties": [
                {
                    "property": "payload",
                    "propertyType": "msg",
                    "value": "",
                    "valueType": "entityState"
                },
                {
                    "property": "data",
                    "propertyType": "msg",
                    "value": "",
                    "valueType": "entity"
                }
            ],
            "for": "0",
            "forType": "num",
            "forUnits": "minutes",
            "override_topic": false,
            "state_location": "payload",
            "override_payload": "msg",
            "entity_location": "data",
            "override_data": "msg",
            "x": 540,
            "y": 60,
            "wires": [
                [
                    "64d80025e554aeee"
                ]
            ]
        },
        {
            "id": "ba58152f9d0fbe1e",
            "type": "debug",
            "z": "7438718903a5922b",
            "name": "PV Power",
            "active": true,
            "tosidebar": true,
            "console": false,
            "tostatus": false,
            "complete": "$flowContext('pv_power')\t",
            "targetType": "jsonata",
            "statusVal": "",
            "statusType": "auto",
            "x": 940,
            "y": 60,
            "wires": []
        },
        {
            "id": "d732f5e0b5719db6",
            "type": "api-current-state",
            "z": "7438718903a5922b",
            "name": "DSMR poll",
            "server": "f52c678d.eab598",
            "version": 3,
            "outputs": 1,
            "halt_if": "",
            "halt_if_type": "str",
            "halt_if_compare": "is",
            "entity_id": "sensor.dsmr_reading_electricity_currently_returned",
            "state_type": "num",
            "blockInputOverrides": false,
            "outputProperties": [
                {
                    "property": "payload",
                    "propertyType": "msg",
                    "value": "",
                    "valueType": "entityState"
                },
                {
                    "property": "DSMR",
                    "propertyType": "flow",
                    "value": "",
                    "valueType": "entityState"
                }
            ],
            "for": "0",
            "forType": "num",
            "forUnits": "minutes",
            "override_topic": false,
            "state_location": "payload",
            "override_payload": "msg",
            "entity_location": "data",
            "override_data": "msg",
            "x": 450,
            "y": 260,
            "wires": [
                [
                    "3678371f151b2694"
                ]
            ]
        },
        {
            "id": "3678371f151b2694",
            "type": "calculator",
            "z": "7438718903a5922b",
            "name": "",
            "inputMsgField": "payload",
            "outputMsgField": "payload",
            "operation": "mult",
            "constant": "1000",
            "round": false,
            "truncate": false,
            "decimals": 0,
            "decimals2": 0,
            "x": 640,
            "y": 260,
            "wires": [
                [
                    "3ba2e65bcae3af3c"
                ]
            ]
        },
        {
            "id": "4cfae09301ce069d",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "",
            "rules": [
                {
                    "t": "set",
                    "p": "verbruik",
                    "pt": "flow",
                    "to": "$number(msg.payload)\t",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 840,
            "y": 180,
            "wires": [
                [
                    "69d1e75da49bc54b"
                ]
            ]
        },
        {
            "id": "3ba2e65bcae3af3c",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "",
            "rules": [
                {
                    "t": "set",
                    "p": "injectie",
                    "pt": "flow",
                    "to": "$number((msg.payload))",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 840,
            "y": 260,
            "wires": [
                [
                    "e164c2447236b5d1"
                ]
            ]
        },
        {
            "id": "64d80025e554aeee",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "",
            "rules": [
                {
                    "t": "set",
                    "p": "pv_power",
                    "pt": "flow",
                    "to": "$number(msg.payload)",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 770,
            "y": 60,
            "wires": [
                [
                    "ba58152f9d0fbe1e"
                ]
            ]
        },
        {
            "id": "ae8df5e047a9f8fe",
            "type": "api-current-state",
            "z": "7438718903a5922b",
            "name": "PV limiter on?",
            "server": "64ed5089.78254",
            "version": 3,
            "outputs": 1,
            "halt_if": "",
            "halt_if_type": "str",
            "halt_if_compare": "is",
            "entity_id": "input_boolean.solaredge_export_limit",
            "state_type": "str",
            "blockInputOverrides": true,
            "outputProperties": [
                {
                    "property": "payload",
                    "propertyType": "msg",
                    "value": "",
                    "valueType": "entityState"
                },
                {
                    "property": "PV_Limiter",
                    "propertyType": "flow",
                    "value": "",
                    "valueType": "entityState"
                }
            ],
            "for": "0",
            "forType": "num",
            "forUnits": "minutes",
            "override_topic": false,
            "state_location": "payload",
            "override_payload": "msg",
            "entity_location": "data",
            "override_data": "msg",
            "x": 260,
            "y": 500,
            "wires": [
                [
                    "9a940fa226894481"
                ]
            ]
        },
        {
            "id": "9a940fa226894481",
            "type": "debug",
            "z": "7438718903a5922b",
            "name": "Limiter",
            "active": false,
            "tosidebar": true,
            "console": false,
            "tostatus": false,
            "complete": "payload",
            "targetType": "msg",
            "statusVal": "",
            "statusType": "auto",
            "x": 450,
            "y": 500,
            "wires": []
        },
        {
            "id": "4a515e880d0b51ae",
            "type": "server-state-changed",
            "z": "7438718903a5922b",
            "name": "Solar export limit state changed?",
            "server": "64ed5089.78254",
            "version": 6,
            "outputs": 1,
            "exposeAsEntityConfig": "",
            "entities": {
                "entity": [
                    "input_boolean.solaredge_export_limit"
                ],
                "substring": [],
                "regex": []
            },
            "outputInitially": false,
            "stateType": "str",
            "ifState": "",
            "ifStateType": "str",
            "ifStateOperator": "is",
            "outputOnlyOnStateChange": true,
            "for": "0",
            "forType": "num",
            "forUnits": "minutes",
            "ignorePrevStateNull": false,
            "ignorePrevStateUnknown": false,
            "ignorePrevStateUnavailable": false,
            "ignoreCurrentStateUnknown": false,
            "ignoreCurrentStateUnavailable": false,
            "outputProperties": [
                {
                    "property": "payload",
                    "propertyType": "msg",
                    "value": "",
                    "valueType": "entityState"
                },
                {
                    "property": "data",
                    "propertyType": "msg",
                    "value": "",
                    "valueType": "eventData"
                },
                {
                    "property": "topic",
                    "propertyType": "msg",
                    "value": "",
                    "valueType": "triggerId"
                }
            ],
            "x": 290,
            "y": 620,
            "wires": [
                [
                    "5147e8ed13bfd617"
                ]
            ]
        },
        {
            "id": "d3ae06648e93f613",
            "type": "switch",
            "z": "7438718903a5922b",
            "name": "Choose solar limiter percentage",
            "property": "injectie",
            "propertyType": "flow",
            "rules": [
                {
                    "t": "gt",
                    "v": "2000",
                    "vt": "str"
                },
                {
                    "t": "gt",
                    "v": "1500",
                    "vt": "str"
                },
                {
                    "t": "gte",
                    "v": "500",
                    "vt": "str"
                },
                {
                    "t": "gte",
                    "v": "250",
                    "vt": "str"
                },
                {
                    "t": "gte",
                    "v": "50",
                    "vt": "str"
                },
                {
                    "t": "gte",
                    "v": "2",
                    "vt": "str"
                },
                {
                    "t": "eq",
                    "v": "0",
                    "vt": "str"
                }
            ],
            "checkall": "false",
            "repair": false,
            "outputs": 7,
            "x": 930,
            "y": 480,
            "wires": [
                [
                    "968b1ffe310766d8"
                ],
                [
                    "af7adf9fd16bedfc"
                ],
                [
                    "b5bf4568f7fb8ee5"
                ],
                [
                    "548349c612f6de07"
                ],
                [
                    "56b1924b07fc2e62"
                ],
                [
                    "5e0458cc133a4aa9"
                ],
                []
            ]
        },
        {
            "id": "5147e8ed13bfd617",
            "type": "switch",
            "z": "7438718903a5922b",
            "name": "",
            "property": "PV_Limiter",
            "propertyType": "flow",
            "rules": [
                {
                    "t": "eq",
                    "v": "on",
                    "vt": "str"
                },
                {
                    "t": "eq",
                    "v": "off",
                    "vt": "str"
                }
            ],
            "checkall": "true",
            "repair": false,
            "outputs": 2,
            "x": 530,
            "y": 620,
            "wires": [
                [],
                [
                    "c5e5b0e611d3b493"
                ]
            ]
        },
        {
            "id": "c5e5b0e611d3b493",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "injectie percentage naar 100%",
            "rules": [
                {
                    "t": "set",
                    "p": "injectie_percentage",
                    "pt": "flow",
                    "to": "100",
                    "tot": "num"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 750,
            "y": 640,
            "wires": [
                [
                    "b0d3d07c75a65585"
                ]
            ]
        },
        {
            "id": "b0d3d07c75a65585",
            "type": "api-call-service",
            "z": "7438718903a5922b",
            "name": "Set pv limiter percentage",
            "server": "64ed5089.78254",
            "version": 7,
            "debugenabled": false,
            "action": "number.set_value",
            "floorId": [],
            "areaId": [],
            "deviceId": [],
            "entityId": [
                "number.solaredge_i1_active_power_limit"
            ],
            "labelId": [],
            "data": "{\"value\" : $flowContext('injectie_percentage')}",
            "dataType": "jsonata",
            "mergeContext": "",
            "mustacheAltTags": false,
            "outputProperties": [],
            "queue": "none",
            "blockInputOverrides": true,
            "domain": "number",
            "service": "set_value",
            "x": 1050,
            "y": 640,
            "wires": [
                []
            ]
        },
        {
            "id": "0cbd11760c8f077d",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "injectie = temp",
            "rules": [
                {
                    "t": "set",
                    "p": "injectie_percentage",
                    "pt": "flow",
                    "to": "temp",
                    "tot": "flow"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 1800,
            "y": 440,
            "wires": [
                [
                    "05d052b53418fed5"
                ]
            ]
        },
        {
            "id": "05d052b53418fed5",
            "type": "api-call-service",
            "z": "7438718903a5922b",
            "name": "Set pv limiter percentage",
            "server": "64ed5089.78254",
            "version": 7,
            "debugenabled": false,
            "action": "number.set_value",
            "floorId": [],
            "areaId": [],
            "deviceId": [],
            "entityId": [
                "number.solaredge_i1_active_power_limit"
            ],
            "labelId": [],
            "data": "{\"value\" : $flowContext('injectie_percentage')}",
            "dataType": "jsonata",
            "mergeContext": "",
            "mustacheAltTags": false,
            "outputProperties": [],
            "queue": "none",
            "blockInputOverrides": true,
            "domain": "number",
            "service": "set_value",
            "x": 2050,
            "y": 440,
            "wires": [
                [
                    "37c03a4a642ada6d"
                ]
            ]
        },
        {
            "id": "e164c2447236b5d1",
            "type": "switch",
            "z": "7438718903a5922b",
            "name": "PV limiter switch 'on' or 'off'",
            "property": "PV_Limiter",
            "propertyType": "flow",
            "rules": [
                {
                    "t": "eq",
                    "v": "on",
                    "vt": "str"
                },
                {
                    "t": "eq",
                    "v": "off",
                    "vt": "str"
                }
            ],
            "checkall": "true",
            "repair": false,
            "outputs": 2,
            "x": 640,
            "y": 360,
            "wires": [
                [
                    "71e95b63945fd015"
                ],
                []
            ]
        },
        {
            "id": "71e95b63945fd015",
            "type": "switch",
            "z": "7438718903a5922b",
            "name": "Verbruk = 0?",
            "property": "verbruik",
            "propertyType": "flow",
            "rules": [
                {
                    "t": "eq",
                    "v": "0",
                    "vt": "num"
                }
            ],
            "checkall": "true",
            "repair": false,
            "outputs": 1,
            "x": 890,
            "y": 360,
            "wires": [
                [
                    "d3ae06648e93f613",
                    "393648a118a6b457"
                ]
            ]
        },
        {
            "id": "643432a32bb2a870",
            "type": "switch",
            "z": "7438718903a5922b",
            "name": "Choose solar limiter percentage",
            "property": "verbruik",
            "propertyType": "flow",
            "rules": [
                {
                    "t": "gt",
                    "v": "2000",
                    "vt": "str"
                },
                {
                    "t": "gt",
                    "v": "1500",
                    "vt": "str"
                },
                {
                    "t": "gte",
                    "v": "500",
                    "vt": "str"
                },
                {
                    "t": "gte",
                    "v": "250",
                    "vt": "str"
                },
                {
                    "t": "gte",
                    "v": "50",
                    "vt": "str"
                },
                {
                    "t": "gte",
                    "v": "0",
                    "vt": "str"
                }
            ],
            "checkall": "false",
            "repair": false,
            "outputs": 6,
            "x": 1250,
            "y": 180,
            "wires": [
                [
                    "5898d570bf91d28a"
                ],
                [
                    "fb1cd6a496a274a2"
                ],
                [
                    "493ceb1324efc405"
                ],
                [
                    "2c6bd87692637740"
                ],
                [
                    "457a4b23ff1cefa0"
                ],
                []
            ]
        },
        {
            "id": "5898d570bf91d28a",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "injectie +20",
            "rules": [
                {
                    "t": "set",
                    "p": "temp",
                    "pt": "flow",
                    "to": "$flowContext('injectie_percentage') + 20",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 1530,
            "y": 120,
            "wires": [
                [
                    "094736990c6528a7"
                ]
            ]
        },
        {
            "id": "fb1cd6a496a274a2",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "injectie +10",
            "rules": [
                {
                    "t": "set",
                    "p": "temp",
                    "pt": "flow",
                    "to": "$flowContext('injectie_percentage') + 10",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 1530,
            "y": 160,
            "wires": [
                [
                    "094736990c6528a7"
                ]
            ]
        },
        {
            "id": "493ceb1324efc405",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "injectie + 5",
            "rules": [
                {
                    "t": "set",
                    "p": "temp",
                    "pt": "flow",
                    "to": "$flowContext('injectie_percentage') + 5",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 1530,
            "y": 200,
            "wires": [
                [
                    "094736990c6528a7"
                ]
            ]
        },
        {
            "id": "2c6bd87692637740",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "injectie +2",
            "rules": [
                {
                    "t": "set",
                    "p": "temp",
                    "pt": "flow",
                    "to": "$flowContext('injectie_percentage') + 2",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 1520,
            "y": 240,
            "wires": [
                [
                    "094736990c6528a7"
                ]
            ]
        },
        {
            "id": "457a4b23ff1cefa0",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "injectie +1",
            "rules": [
                {
                    "t": "set",
                    "p": "temp",
                    "pt": "flow",
                    "to": "$flowContext('injectie_percentage') + 1",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 1520,
            "y": 280,
            "wires": [
                [
                    "094736990c6528a7"
                ]
            ]
        },
        {
            "id": "69d1e75da49bc54b",
            "type": "switch",
            "z": "7438718903a5922b",
            "name": "Verbruk > 0?",
            "property": "verbruik",
            "propertyType": "flow",
            "rules": [
                {
                    "t": "gt",
                    "v": "0",
                    "vt": "num"
                }
            ],
            "checkall": "true",
            "repair": false,
            "outputs": 1,
            "x": 1010,
            "y": 180,
            "wires": [
                [
                    "643432a32bb2a870",
                    "471d4450b9452fee"
                ]
            ]
        },
        {
            "id": "37c03a4a642ada6d",
            "type": "debug",
            "z": "7438718903a5922b",
            "name": "Solar limiter percentage",
            "active": true,
            "tosidebar": true,
            "console": false,
            "tostatus": false,
            "complete": "$flowContext('injectie_percentage')",
            "targetType": "jsonata",
            "statusVal": "",
            "statusType": "auto",
            "x": 2410,
            "y": 440,
            "wires": []
        },
        {
            "id": "cc42752483e31e4b",
            "type": "inject",
            "z": "7438718903a5922b",
            "name": "",
            "props": [
                {
                    "p": "payload"
                },
                {
                    "p": "topic",
                    "vt": "str"
                }
            ],
            "repeat": "",
            "crontab": "",
            "once": false,
            "onceDelay": 0.1,
            "topic": "",
            "payload": "",
            "payloadType": "date",
            "x": 180,
            "y": 740,
            "wires": [
                [
                    "0ae6f5a2d85ccadd",
                    "578698fc0fb1332a",
                    "df994e4255fcd157"
                ]
            ]
        },
        {
            "id": "0ae6f5a2d85ccadd",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "",
            "rules": [
                {
                    "t": "set",
                    "p": "injectie_percentage",
                    "pt": "flow",
                    "to": "50",
                    "tot": "num"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 420,
            "y": 740,
            "wires": [
                []
            ]
        },
        {
            "id": "578698fc0fb1332a",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "verbruik 0",
            "rules": [
                {
                    "t": "set",
                    "p": "verbruik",
                    "pt": "flow",
                    "to": "0",
                    "tot": "num"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 360,
            "y": 800,
            "wires": [
                []
            ]
        },
        {
            "id": "df994e4255fcd157",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "injectie 500",
            "rules": [
                {
                    "t": "set",
                    "p": "injectie",
                    "pt": "flow",
                    "to": "500",
                    "tot": "num"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 370,
            "y": 840,
            "wires": [
                [
                    "6b08f1cc5bee129c"
                ]
            ]
        },
        {
            "id": "b5bf4568f7fb8ee5",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "Injectie - 15",
            "rules": [
                {
                    "t": "set",
                    "p": "temp",
                    "pt": "flow",
                    "to": "$number($flowContext('injectie_percentage')) -15",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 1230,
            "y": 480,
            "wires": [
                [
                    "825bce3f7b4d2147"
                ]
            ]
        },
        {
            "id": "6b08f1cc5bee129c",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "",
            "rules": [
                {
                    "t": "set",
                    "p": "temp",
                    "pt": "flow",
                    "to": "0",
                    "tot": "str"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 550,
            "y": 840,
            "wires": [
                []
            ]
        },
        {
            "id": "af7adf9fd16bedfc",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "Injectie - 20",
            "rules": [
                {
                    "t": "set",
                    "p": "temp",
                    "pt": "flow",
                    "to": "$number($flowContext('injectie_percentage')) -20",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 1230,
            "y": 440,
            "wires": [
                [
                    "825bce3f7b4d2147"
                ]
            ]
        },
        {
            "id": "968b1ffe310766d8",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "Injectie - 30",
            "rules": [
                {
                    "t": "set",
                    "p": "temp",
                    "pt": "flow",
                    "to": "$number($flowContext('injectie_percentage')) -30",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 1230,
            "y": 400,
            "wires": [
                [
                    "825bce3f7b4d2147"
                ]
            ]
        },
        {
            "id": "548349c612f6de07",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "Injectie - 10",
            "rules": [
                {
                    "t": "set",
                    "p": "temp",
                    "pt": "flow",
                    "to": "$number($flowContext('injectie_percentage')) -10",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 1230,
            "y": 520,
            "wires": [
                [
                    "825bce3f7b4d2147"
                ]
            ]
        },
        {
            "id": "56b1924b07fc2e62",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "Injectie - 5",
            "rules": [
                {
                    "t": "set",
                    "p": "temp",
                    "pt": "flow",
                    "to": "$number($flowContext('injectie_percentage')) -5",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 1230,
            "y": 560,
            "wires": [
                [
                    "825bce3f7b4d2147"
                ]
            ]
        },
        {
            "id": "5e0458cc133a4aa9",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "Injectie - 1",
            "rules": [
                {
                    "t": "set",
                    "p": "temp",
                    "pt": "flow",
                    "to": "$number($flowContext('injectie_percentage')) -1",
                    "tot": "jsonata"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 1230,
            "y": 600,
            "wires": [
                [
                    "825bce3f7b4d2147"
                ]
            ]
        },
        {
            "id": "825bce3f7b4d2147",
            "type": "switch",
            "z": "7438718903a5922b",
            "name": ">= 0",
            "property": "temp",
            "propertyType": "flow",
            "rules": [
                {
                    "t": "gte",
                    "v": "0",
                    "vt": "num"
                },
                {
                    "t": "lte",
                    "v": "0",
                    "vt": "num"
                }
            ],
            "checkall": "true",
            "repair": false,
            "outputs": 2,
            "x": 1490,
            "y": 460,
            "wires": [
                [
                    "0cbd11760c8f077d"
                ],
                [
                    "01d3fc4f1d7a4bd0"
                ]
            ]
        },
        {
            "id": "01d3fc4f1d7a4bd0",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "set 0",
            "rules": [
                {
                    "t": "set",
                    "p": "temp",
                    "pt": "flow",
                    "to": "0",
                    "tot": "num"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 1630,
            "y": 500,
            "wires": [
                [
                    "0cbd11760c8f077d"
                ]
            ]
        },
        {
            "id": "094736990c6528a7",
            "type": "switch",
            "z": "7438718903a5922b",
            "name": "> 100",
            "property": "temp",
            "propertyType": "flow",
            "rules": [
                {
                    "t": "gt",
                    "v": "100",
                    "vt": "num"
                },
                {
                    "t": "lte",
                    "v": "100",
                    "vt": "num"
                }
            ],
            "checkall": "true",
            "repair": false,
            "outputs": 2,
            "x": 1710,
            "y": 180,
            "wires": [
                [
                    "d810c3089e2d034c"
                ],
                [
                    "0cbd11760c8f077d"
                ]
            ]
        },
        {
            "id": "d810c3089e2d034c",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "set 100",
            "rules": [
                {
                    "t": "set",
                    "p": "temp",
                    "pt": "flow",
                    "to": "100",
                    "tot": "num"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 1820,
            "y": 120,
            "wires": [
                [
                    "0cbd11760c8f077d"
                ]
            ]
        },
        {
            "id": "d479f166ad5905f5",
            "type": "comment",
            "z": "7438718903a5922b",
            "name": "when consuming",
            "info": "",
            "x": 1260,
            "y": 100,
            "wires": []
        },
        {
            "id": "2e2ba2bfbf514e29",
            "type": "comment",
            "z": "7438718903a5922b",
            "name": "when injection",
            "info": "",
            "x": 950,
            "y": 560,
            "wires": []
        },
        {
            "id": "ea02fa7305a59cef",
            "type": "comment",
            "z": "7438718903a5922b",
            "name": "PV limitier off, then se to 100%",
            "info": "",
            "x": 610,
            "y": 580,
            "wires": []
        },
        {
            "id": "7adc88e864dcde1c",
            "type": "inject",
            "z": "7438718903a5922b",
            "name": "",
            "props": [
                {
                    "p": "payload"
                },
                {
                    "p": "topic",
                    "vt": "str"
                }
            ],
            "repeat": "",
            "crontab": "",
            "once": false,
            "onceDelay": 0.1,
            "topic": "",
            "payload": "",
            "payloadType": "date",
            "x": 780,
            "y": 740,
            "wires": [
                [
                    "ee26d75f6ae55308"
                ]
            ]
        },
        {
            "id": "ee26d75f6ae55308",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "injectie 20",
            "rules": [
                {
                    "t": "set",
                    "p": "injectie",
                    "pt": "flow",
                    "to": "20",
                    "tot": "num"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 1000,
            "y": 800,
            "wires": [
                []
            ]
        },
        {
            "id": "ed158888d06e2d3d",
            "type": "inject",
            "z": "7438718903a5922b",
            "name": "",
            "props": [
                {
                    "p": "payload"
                },
                {
                    "p": "topic",
                    "vt": "str"
                }
            ],
            "repeat": "",
            "crontab": "",
            "once": false,
            "onceDelay": 0.1,
            "topic": "",
            "payload": "",
            "payloadType": "date",
            "x": 1160,
            "y": 740,
            "wires": [
                [
                    "b6711fe7e14b92ae"
                ]
            ]
        },
        {
            "id": "b6711fe7e14b92ae",
            "type": "change",
            "z": "7438718903a5922b",
            "name": "injectie 0",
            "rules": [
                {
                    "t": "set",
                    "p": "injectie",
                    "pt": "flow",
                    "to": "0",
                    "tot": "num"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 1380,
            "y": 800,
            "wires": [
                [
                    "2d9e60b81cd1d093"
                ]
            ]
        },
        {
            "id": "2d9e60b81cd1d093",
            "type": "debug",
            "z": "7438718903a5922b",
            "name": "debug 1",
            "active": true,
            "tosidebar": true,
            "console": false,
            "tostatus": false,
            "complete": "$flowContext('injectie')\t",
            "targetType": "jsonata",
            "statusVal": "",
            "statusType": "auto",
            "x": 1560,
            "y": 800,
            "wires": []
        },
        {
            "id": "393648a118a6b457",
            "type": "debug",
            "z": "7438718903a5922b",
            "name": "debug 2",
            "active": true,
            "tosidebar": true,
            "console": false,
            "tostatus": false,
            "complete": "false",
            "statusVal": "",
            "statusType": "auto",
            "x": 1100,
            "y": 320,
            "wires": []
        },
        {
            "id": "471d4450b9452fee",
            "type": "debug",
            "z": "7438718903a5922b",
            "name": "Verbruik",
            "active": true,
            "tosidebar": true,
            "console": false,
            "tostatus": false,
            "complete": "payload",
            "targetType": "msg",
            "statusVal": "",
            "statusType": "auto",
            "x": 1160,
            "y": 60,
            "wires": []
        },
        {
            "id": "f52c678d.eab598",
            "type": "server",
            "name": "Home Assistant",
            "version": 5,
            "addon": true,
            "rejectUnauthorizedCerts": true,
            "ha_boolean": "y|yes|true|on|home|open",
            "connectionDelay": true,
            "cacheJson": true,
            "heartbeat": false,
            "heartbeatInterval": 30,
            "areaSelector": "friendlyName",
            "deviceSelector": "friendlyName",
            "entitySelector": "friendlyName",
            "statusSeparator": "at: ",
            "statusYear": "hidden",
            "statusMonth": "short",
            "statusDay": "numeric",
            "statusHourCycle": "h23",
            "statusTimeFormat": "h:m",
            "enableGlobalContextStore": true
        },
        {
            "id": "64ed5089.78254",
            "type": "server",
            "name": "homeassistant",
            "addon": true,
            "rejectUnauthorizedCerts": true,
            "ha_boolean": "y|yes|true|on|home|open",
            "connectionDelay": true,
            "cacheJson": true
        }
    ]

    Node red flow
     
    Het eerste probleem dat ik nu moet zien op te lossen is het uitlezen van de P1 poort. De tool zelf heeft connectieproblemen, ook al staat er een extender héél dicht in de buurt... Iedere keer ik het toestelletje zonder stroom zet, en opnieuw stroom geeft worden de gegevens correct doorgegeven, daarna is het weer kapot... Dus dat moet ik eerst oplossen voor ik verder ga met hier van alles op te schrijven :p.
    Dat is potentieel een ingewikkelde. ideaal zitten al je toestellen op eenzelfde ethernet en zijn alle extenders ethernet switchen. Soms zijn het eerder ip routers. Sommige broadcasts worden dan niet correct doorgegeven. En krijg je voor een dergelijke toepassingen soms problemen. Een start kan zijn te zorgen dat je p1 lezer een vast ip adres heeft.
     
    Hi,

    wat je ook zou kunnen doen is gewoon de stroom meten aan de hand van een Shelly EM of iets dergelijks (heeft meerdere kanalen waar je meerdere klemmen kan op aansluiten). Kan je ook gebruiken met je SMA inverter (ik heb zelf ook een 4000-TL met BT, en lees die uit via SBFspot en gooi de data op MQTT, maar dat is niet realtime genoeg gezien het via een cronjob gaat en er dus een lag van 5 minuten op de data zit).

    Daarnaast zou ik ook eens kijken naar EVCC (evcc.io), is oorspronkelijk gemaakt voor laadpalen maar tegenwoordig zitten er ook smart plugs, SG-ready warmtepompen, dynamic pricing en zo in). Werkt ook perfect samen met een EM en zo.
     
    Het eerste probleem dat ik nu moet zien op te lossen is het uitlezen van de P1 poort. De tool zelf heeft connectieproblemen, ook al staat er een extender héél dicht in de buurt... Iedere keer ik het toestelletje zonder stroom zet, en opnieuw stroom geeft worden de gegevens correct doorgegeven, daarna is het weer kapot... Dus dat moet ik eerst oplossen voor ik verder ga met hier van alles op te schrijven :p.
    Dat is potentieel een ingewikkelde. ideaal zitten al je toestellen op eenzelfde ethernet en zijn alle extenders ethernet switchen. Soms zijn het eerder ip routers. Sommige broadcasts worden dan niet correct doorgegeven. En krijg je voor een dergelijke toepassingen soms problemen. Een start kan zijn te zorgen dat je p1 lezer een vast ip adres heeft.
    probleem is niet zo zeer het netwerk, maar de brakke poorten om de lezer te koppelen met de p1 poort. Ik ben er nu in geslaagd om het werkende te krijgen, na een zoveelste reset van de meter, en de zoveelste keer duwen aan het kabeltje dat het zeker goed contact maakt... Voorlopig gaat het goed, houden zo, maar niemand mag daar nog aankomen, want de minste tinteling van het kabeltje zorgt voor een onstabiele connectie met de P1-meter.
    Moet de leverancier er misschien nog wel eens op aanspreken, want dat is toch niet normaal.
    Hi,

    wat je ook zou kunnen doen is gewoon de stroom meten aan de hand van een Shelly EM of iets dergelijks (heeft meerdere kanalen waar je meerdere klemmen kan op aansluiten). Kan je ook gebruiken met je SMA inverter (ik heb zelf ook een 4000-TL met BT, en lees die uit via SBFspot en gooi de data op MQTT, maar dat is niet realtime genoeg gezien het via een cronjob gaat en er dus een lag van 5 minuten op de data zit).

    Daarnaast zou ik ook eens kijken naar EVCC (evcc.io), is oorspronkelijk gemaakt voor laadpalen maar tegenwoordig zitten er ook smart plugs, SG-ready warmtepompen, dynamic pricing en zo in). Werkt ook perfect samen met een EM en zo.
    dit gaat met voorlopig precies iets te technisch :). ik heb sbfspot ook ooit gebruikt, maar dat was wel wat gedoe... Dus dat doe ik niet meer. Ik heb nu wel de meeste data binnen in homeassistant, maar wegens héél drukke privéplanning er even niet toe gekomen om verder te werken.

    Eerste wat ik nu wil organiseren is dat er effectief gebruik wordt gemaakt van "zware toestellen" op het moment dat de stroomprijs laag/negatief is.
    Bijv.: Als ik weet dat het de komende dagen zonnig gaat zijn (dat weet je gewoon via het weerbericht), mag je er eigenlijk van uit gaan dat er x-aantal tijd negatieve stroomprijzen zullen zijn, dan mag de laadpaal maar beschikbaar zijn van 11u - 17u. (tijdstippen van de meeste negatieve stroomprijzen).
    Eenvoudiger naar medebewoners toe is een klein dashboardje maken waar de stroomprijzen op staan, samen met het huidige verbruik. Iedereen binnen ons gezin kan die cijfers wel interpreteren en kunnen dan ook wel inschatten of ze energie mogen verbruiken of niet... Bijv.: Mijn vrouw is ondertussen geleerd dat ze voor 9u 's ochtends gaan wasmachine en droogkast meer mag aanzetten. We hebben die luxe, omdat er quasi altijd iemand thuis is...

    Dus de eerste sturing is die laadpaal.
    2e, veel ingewikkeldere sturing voor mij, is het limiteren of uitschakelen van de omvormers. Ook al heb ik daar wat onderzoek naar gedaan, het is mij nog niet helemaal duidelijk hoe ik dat allemaal goed aan de praat krijg. Ik had gehoopt: voeg een plugin toe aan homeassistant, stuur daar wat commando's naartoe en klaar is kees, maar zo eenvoudig is het dus niet. MAAR!!! dit gaat wel noodzakelijk zijn, want het is gewoon geld wegsmijten... Ik kan met mijn installatie gewoon niet alles opgebruiken, zelfs niet met 2 elektrische wagens... Het jammere is dat ik aanzien wordt als "groot verbruiker" qua installatie, maar door de hoeveelheid oost west haal ik en pak minder opbrengsten dan iemand die een installatie van 10kVa op het zuiden heeft... Maar ik heb wegens de hoeveelheid zonnepanelen wel 14kVa aan omvormers nodig...
    Soit, het is zo... 1 ding is duidelijk, de periodes dat we op vakantie zijn, gaan er 2 zekeringen uit staan, of mijn homeassistant installatie zou in orde moeten zijn.
     
    k doe dit omdat we van Ecopower verplicht werden om over te schakelen naar het dynamische kwartiertarief, omdat Fluvius voor ons "meetregime 3" had geactiveerd omdat we meer dan 10kVA aan omvormers hebben staan.

    Huh, dat wist ik niet dat je verplicht dynamisch tarief moest nemen als je op kwartierintervals ging ("meetregime 3"). In dat geval kan idd je injectietarief negatief gaan en dan betaal je om je energie op het net te zetten. Hoewel dat in jouw geval mss wel nog meevalt omdat je als je zonnepanelen oost en west liggen je meer een soort kameel hebt in je productie (2 bulten in de grafiek?).

    Ecopower heeft een integratie met het EnergieID platform (https://app.energyid.eu/groups/ecopower/info) waar ze onder andere een soort dashboard hebben wanneer je best je verbruik plant. Misschien daar eerst eens een account aanmaken en je P1 erop koppelen en zien of dat je al vooruit helpt?

    Dus de eerste sturing is die laadpaal.

    Home assistant is IMHO niet de beste optie om een EMS op te bouwen. Er bestaan dedicated tools die dit soort dingen al doen zoals bvb EVCC : https://docs.evcc.io/en/docs/Home

    Je zou dit ook kunnen nabouwen in HASS maar dat gaat wss resulteren in een inflexibele en complexe oplossing.

    Het jammere is dat ik aanzien wordt als "groot verbruiker" qua installatie, maar door de hoeveelheid oost west haal ik en pak minder opbrengsten dan iemand die een installatie van 10kVa op het zuiden heeft...

    Dit snap ik niet goed. Als je dynamisch tarief hebt dan betaal je toch op wat je injecteert? Of is dat een ander regime dan iemand die pakweg een 5kVA installatie heeft?
     
    Wat c00kie met die laatste bedoelt is dat zijn wettelijk gesproken ‘grote’ installatie minder opbrengt dan wat de wet nog als een kleine installatie beschouwt, maar toch moet hij verplicht een btw-nummer nemen om betaald te worden voor injectie én moet hij dynamisch tarief nemen.

    Oost-west heeft veel meer panelen nodig om aan dezelfde opbrengst te komen dan zuid. Het ‘voordeel’ van vroegere en latere opbrengst is een riedeltje van de sector en de politiek om zoveel mogelijk mensen toch te overtuigen tot PV, maar is een leugen: de opbrengst in de vroege en late uurtjes is zó minimaal dat je er eigenlijk niks aan hebt in de praktijk. Met digitale meter misschien net iets meer, maar niettemin verwaarloosbaar tov de minderopbrengst overdag. Wel meer kans op eigenverbruik en minder injectie door de lagere bulten, maar installatie heeft ook meer gekost per geproduceerde MWh, dus ook dat is geen echt voordeel.

    Door de grotere hoeveelheid panelen heb je echter een zwaardere omvormer nodig met meer mppt spanningsregelaars. En dan kom je per ongeluk al eens boven de 10kVA uit terwijl die nooit op hun max gaan werken.

    Maar goed, oost-west PV is nog altijd beter dan geen PV en betaalt zichzelf, zeker aan de prijzen van vandaag, nog altijd op relatief korte termijn terug.
     
    k doe dit omdat we van Ecopower verplicht werden om over te schakelen naar het dynamische kwartiertarief, omdat Fluvius voor ons "meetregime 3" had geactiveerd omdat we meer dan 10kVA aan omvormers hebben staan.

    Huh, dat wist ik niet dat je verplicht dynamisch tarief moest nemen als je op kwartierintervals ging ("meetregime 3"). In dat geval kan idd je injectietarief negatief gaan en dan betaal je om je energie op het net te zetten. Hoewel dat in jouw geval mss wel nog meevalt omdat je als je zonnepanelen oost en west liggen je meer een soort kameel hebt in je productie (2 bulten in de grafiek?).
    is bij ecopower zo... weet niet of dat bij anderen ook zo is, maar ik heb tot nu toe geen goedkopere leverancier gevonden dan ecopower... ik heb in het beste geval een mooie borst, geen kameel ;).

    Ecopower heeft een integratie met het EnergieID platform (https://app.energyid.eu/groups/ecopower/info) waar ze onder andere een soort dashboard hebben wanneer je best je verbruik plant. Misschien daar eerst eens een account aanmaken en je P1 erop koppelen en zien of dat je al vooruit helpt?
    Been there done that :). Het is duidelijk wanneer ik nu moet verbruiken... Momenteel wordt het manueel bepaald en doorgegeven aan moeder de vrouw. Tussen 11 & 17 kan het nooit geen kwaad... Tot nu toe is het dan altijd het goedkoopste, los van of het nu negatieve energieprijzen zijn of positieve... Op een dag is het dan het goedkoopste...
    Dus de eerste sturing is die laadpaal.
    Home assistant is IMHO niet de beste optie om een EMS op te bouwen. Er bestaan dedicated tools die dit soort dingen al doen zoals bvb EVCC : https://docs.evcc.io/en/docs/Home

    Je zou dit ook kunnen nabouwen in HASS maar dat gaat wss resulteren in een inflexibele en complexe oplossing.
    Laadpaal draait op zichzelf. Hier is weinig sturing aan, enige dat ik hier wil sturen is start / stop, zodat ook die enkel op de goedkope momenten inschakelt. Dan laad ik OF gratis zonder dat ik injecteer in betaal voor mijn injectie OF op het goedkoopste moment van de dag. Hier heb ik geen ems voor nodig. Een EMS is volgens mij ook pas interessant wanneer al je toestellen geconnecteerd zijn, je alles op elektriciteit hebt EN wanneer je een batterij hebt. Het enige wat ik echt nog opgezet wil krijgen is een directe connectie met de omvormers zodat ik die kan sturen, al is het aan uit. 1 ding weet ik wel... Als ik deze zomer op vakantie ben, zullen de automaten van de zonnepanelen uit staan. Dan is er héél weinig verbruik, en gaat het mij meer kosten aan injectie dan aan verbruik van het net... (of de sturing vd omvormers zou tegen dan moeten werken)
    Het jammere is dat ik aanzien wordt als "groot verbruiker" qua installatie, maar door de hoeveelheid oost west haal ik en pak minder opbrengsten dan iemand die een installatie van 10kVa op het zuiden heeft...
    Dit snap ik niet goed. Als je dynamisch tarief hebt dan betaal je toch op wat je injecteert? Of is dat een ander regime dan iemand die pakweg een 5kVA installatie heeft?
    Zie uitleg hierboven van @D I Y ,
     
    Maar ik heb wegens de hoeveelheid zonnepanelen wel 14kVa aan omvormers nodig...
    14kVA aan omvormers: en wat is de piek van wat die installatie produceert? En hoeveel omvormers zijn dat?
     
    Maar ik heb wegens de hoeveelheid zonnepanelen wel 14kVa aan omvormers nodig...
    14kVA aan omvormers: en wat is de piek van wat die installatie produceert? En hoeveel omvormers zijn dat?

    2 omvormers. ("oude" installatie en nieuwe). Max piek ligt op 10kW. (2 keer voorgekomen vorig jaar, 10,3 kW an 10,6 kW)
     
    just a small update... Ik heb 2 automatisaties gemaakt die ik nog altijd manueel kan overrulen... De laadpaal wordt automatisch ingeschakeld en op 100% zonne-energie gezet wanneer ik moet betalen om energie terug op 't net te steken. Vanaf dat ik moet betalen om te laden, dan wordt de laadpaal stopgezet en kan hij niet meer gebruikt worden. is vooral handig in deze periode tot september ofzo... en als ik echt moet laden kan ik de laadpaal nog altijd manueel op laden zetten want soms zijn er ook dagen dat er wel moet geladen worden, maar de prijzen altijd positief zijn :). Zolang het dan op zonne-energie is, is het ook nog gratis natuurlijk... Maar op deze manier verdien ik nog iets aan mijn zonne-energie, want de grootste verbruikers zijn wel die wagens...

    Dit is een kleine stap voor ik aan die omvormers ga beginnen prutsen, want dat is toch nog niet zo eenvoudig ;-)
     
    @D I Y Is het dan louter de hoek waarin de zon instraalt die er dan voor zorgt dat oost-west zo weinig opbrengt?
     
    @D I Y Is het dan louter de hoek waarin de zon instraalt die er dan voor zorgt dat oost-west zo weinig opbrengt?
    Denk ik wel. Ik heb ze vol op zuid liggen, maar op een plat dak aan 15°. Dat op zich kost al 7% opbrengst per jaar tov het ideaal van 42° voor onze regio.
     

    Geen antwoord op je vraag? Misschien vind je iets in onderstaande topics.

    Subject
    Aangemaakt door
    Laatste reactie
    Comments
Blijf op de hoogte. Schrijf je in voor onze nieuwsbrief.
Terug
Bovenaan