Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Temperatur Hysterese bei If Verschachtelung

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Temperatur Hysterese bei If Verschachtelung

    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      Diamand2k22 last edited by

      Hallo zusammen, ich baue mein Skript zur Zeit um und will meine Akku Ladesteuerung in Abhängigkeit der Puffertempereratur (Heizstab Ohmpilot) steuern. Das ganze ist Prognosebasierend über den PV Forecast.

      Ich habe mich schon etwas versucht,
      es sollen 5 Grad Schalthysterese zwischen den else if Bedingungen sein.
      Aktuell ist es so, wenn der Puffer z.B. 52 Grad hat, wäre keine Bedingung erfüllt,
      wie löse ich das am besten?

       if (FC >= 80) {
          // netzdienlich
          //             5 ,6, 7, 8, 9,10,11, 12, 13, 14,  15, 16 17, 18  Uhr
          if (SOC < 25) {
            Laden_Mit = [0, 0, 0, 6, 6, 6, 6, 12, 12, 24, 24, 30, 36, 100];
          } else {
            Laden_Mit = [0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 30, 36, 100];
          }
          } else if (FC >=40 && PufferTemp >55) {
          // verteilen
            Laden_Mit =   [0, 0, 0, 6, 12, 12, 12, 12, 12, 18, 18, 24, 36, 100];
          } else if (FC >=40 && PufferTemp <50) {
            Laden_Mit = [0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 30, 36, 100];
          } else if (FC <40 && PufferTemp >55) {
          // Hamstern 
            Laden_Mit = [100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100];   
          } else if (FC <40 && PufferTemp <50){
          // Pufferspeicher laden  
            Laden_Mit = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
            }
      

      Danke für die Hilfe!

      geschild 1 Reply Last reply Reply Quote 0
      • geschild
        geschild @Diamand2k22 last edited by

        @diamand2k22 said in Temperatur Hysterese bei If Verschachtelung:

        if (SOC < 25) {
        Laden_Mit = [0, 0, 0, 6, 6, 6, 6, 12, 12, 24, 24, 30, 36, 100];
        } else {
        Laden_Mit = [0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 30, 36, 100];
        }

        nach diesem <else> ist Ende, die weiter <else if> werden nicht mehr bearbeitet.

        D 1 Reply Last reply Reply Quote 0
        • D
          Diamand2k22 @geschild last edited by

          @geschild

          Aber nur wenn obere IF Bedingung FC >= 80 erfüllt ist oder?

          OliverIO T 2 Replies Last reply Reply Quote 0
          • OliverIO
            OliverIO @Diamand2k22 last edited by OliverIO

            @diamand2k22

            als erstes ist es dringend notwendig richtig einzurücken, so das solche verschachtelten Bedingungen auch lesbar sind.
            anstatt der kombinierten Prüfungen, würde ich die einzeln aufschreiben ungefähr wie folgt

            if (FC >= 80) {
                if (SOC < 25) {
                } else {
                }
            }
            if (FC >= 40 && FC <80) {
                if (Puffertemp > 55) {
                } 
                if (Puffertemp < 55) {
                } 
            }
            if (FC <40) {
                if (Puffertemp > 55) {
                } 
                if (Puffertemp < 55) {
                } 
            }
            
            
            
            1 Reply Last reply Reply Quote 0
            • T
              ticaki Developer @Diamand2k22 last edited by ticaki

              @diamand2k22

              let istAn = getState('heizung oder was auch immer').val
              
              if (FC >= 80) {
                  // netzdienlich
                  //             5 ,6, 7, 8, 9,10,11, 12, 13, 14,  15, 16 17, 18  Uhr
                  if (SOC < 25) {
                      Laden_Mit = [0, 0, 0, 6, 6, 6, 6, 12, 12, 24, 24, 30, 36, 100];
                  } else  {// hier ist in deinem Skript ein Fehler die else greift immer 
                      Laden_Mit = [0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 30, 36, 100];
                  } // hier hab ich das else deshalb entfernt
              
                  if (FC >= 40 && PufferTemp > (istAn ? 50 : 55) ) {
                      istAn = true
                      // verteilen
                      Laden_Mit = [0, 0, 0, 6, 12, 12, 12, 12, 12, 18, 18, 24, 36, 100];
                  } else if (FC >= 40 && PufferTemp < (!istAn ? 50 : 55)) {
                      istAn = false
                      Laden_Mit = [0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 30, 36, 100];
                  } else if (FC < 40 && PufferTemp > (istAn ? 50 : 55)) {
                      istAn = true
                      // Hamstern 
                      Laden_Mit = [100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100];
                  } else if (FC < 40 && PufferTemp < (!istAn ? 50 : 55)) {
                      // Pufferspeicher laden  
                      istAn = false
                      Laden_Mit = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
                  }
              }
              // hier dann heizung schalten oder datenpunkt setzten der beim nächsten durchlauf gelesen wird.
              

              Ich verstehe es aber nicht ganz. Was schaltet da die Heizung an?

              OliverIO D 2 Replies Last reply Reply Quote 0
              • OliverIO
                OliverIO @ticaki last edited by

                @ticaki
                ist ja eigentlich egal, was es da schaltet.
                das Problem hier ist, das vor lauter Bedingungen die Übersicht verloren gegangen ist, so das das schlecht wartbar ist und evtl. Fehler, die nicht unbedingt Laufzeitfehler sein müssen, das erwartete Ergebnis verhindern.

                D 1 Reply Last reply Reply Quote 1
                • D
                  Diamand2k22 @OliverIO last edited by

                  @ticaki @oliverio

                  danke für eure Vorschläge!
                  das Skript ist erstmal nur ein grober Test und wird noch verfeinert, nur das umsetzen mit der Hysterese hab ich nicht kapiert, damit der Heizstab nicht ständig ein und auschaltet beim Schwellwert. Ich werde mal testen!

                  1 Reply Last reply Reply Quote 0
                  • D
                    Diamand2k22 @ticaki last edited by Diamand2k22

                    @ticaki said in Temperatur Hysterese bei If Verschachtelung:

                    @diamand2k22

                    let istAn = getState('heizung oder was auch immer').val
                    
                    if (FC >= 80) {
                        // netzdienlich
                        //             5 ,6, 7, 8, 9,10,11, 12, 13, 14,  15, 16 17, 18  Uhr
                        if (SOC < 25) {
                            Laden_Mit = [0, 0, 0, 6, 6, 6, 6, 12, 12, 24, 24, 30, 36, 100];
                        } else  {// hier ist in deinem Skript ein Fehler die else greift immer 
                            Laden_Mit = [0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 30, 36, 100];
                        } // hier hab ich das else deshalb entfernt
                    
                        if (FC >= 40 && PufferTemp > (istAn ? 50 : 55) ) {
                            istAn = true
                            // verteilen
                            Laden_Mit = [0, 0, 0, 6, 12, 12, 12, 12, 12, 18, 18, 24, 36, 100];
                        } else if (FC >= 40 && PufferTemp < (!istAn ? 50 : 55)) {
                            istAn = false
                            Laden_Mit = [0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 30, 36, 100];
                        } else if (FC < 40 && PufferTemp > (istAn ? 50 : 55)) {
                            istAn = true
                            // Hamstern 
                            Laden_Mit = [100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100];
                        } else if (FC < 40 && PufferTemp < (!istAn ? 50 : 55)) {
                            // Pufferspeicher laden  
                            istAn = false
                            Laden_Mit = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
                        }
                    }
                    // hier dann heizung schalten oder datenpunkt setzten der beim nächsten durchlauf gelesen wird.
                    

                    Ich verstehe es aber nicht ganz. Was schaltet da die Heizung an?

                    @ticaki

                    die Heizung ist kein separater Datenpunkt! Es wird im Skript einfach die Ladeleistung des Akkus herabgesetzt (in den Klammern [...] und somit zieht der Heizstab den PV Überschuss weg. Leider gibt es bei dem Gen24 Wechelrichter keinen Datenpunkt in der Modbus Schnittstelle um die Priorisierung zu ändern, somit muss ich die Ladeleistung des Akkus drosseln, damit der Heizstab (hängt am Ohmpilot) mehr Überschuss bekommt!

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    921
                    Online

                    31.8k
                    Users

                    80.0k
                    Topics

                    1.3m
                    Posts

                    4
                    8
                    422
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo