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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Temperatur Hysterese bei If Verschachtelung

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.4k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    964

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Temperatur Hysterese bei If Verschachtelung

Geplant Angeheftet Gesperrt Verschoben JavaScript
8 Beiträge 4 Kommentatoren 676 Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • D Offline
    D Offline
    Diamand2k22
    schrieb am zuletzt editiert von
    #1

    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!

    geschildG 1 Antwort Letzte Antwort
    0
    • D Diamand2k22

      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!

      geschildG Offline
      geschildG Offline
      geschild
      schrieb am zuletzt editiert von
      #2

      @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 Antwort Letzte Antwort
      0
      • geschildG geschild

        @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 Offline
        D Offline
        Diamand2k22
        schrieb am zuletzt editiert von
        #3

        @geschild

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

        OliverIOO T 2 Antworten Letzte Antwort
        0
        • D Diamand2k22

          @geschild

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

          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          schrieb am zuletzt editiert von OliverIO
          #4

          @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) {
              } 
          }
          
          
          

          Meine Adapter und Widgets
          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
          Links im Profil

          1 Antwort Letzte Antwort
          0
          • D Diamand2k22

            @geschild

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

            T Nicht stören
            T Nicht stören
            ticaki
            schrieb am zuletzt editiert von ticaki
            #5

            @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?

            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

            Spenden

            OliverIOO D 2 Antworten Letzte Antwort
            0
            • T 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?

              OliverIOO Offline
              OliverIOO Offline
              OliverIO
              schrieb am zuletzt editiert von
              #6

              @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.

              Meine Adapter und Widgets
              TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
              Links im Profil

              D 1 Antwort Letzte Antwort
              1
              • OliverIOO OliverIO

                @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 Offline
                D Offline
                Diamand2k22
                schrieb am zuletzt editiert von
                #7

                @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 Antwort Letzte Antwort
                0
                • T 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?

                  D Offline
                  D Offline
                  Diamand2k22
                  schrieb am zuletzt editiert von Diamand2k22
                  #8

                  @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 Antwort Letzte Antwort
                  0
                  Antworten
                  • In einem neuen Thema antworten
                  Anmelden zum Antworten
                  • Älteste zuerst
                  • Neuste zuerst
                  • Meiste Stimmen


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  406

                  Online

                  32.6k

                  Benutzer

                  82.2k

                  Themen

                  1.3m

                  Beiträge
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                  ioBroker Community 2014-2025
                  logo
                  • Anmelden

                  • Du hast noch kein Konto? Registrieren

                  • Anmelden oder registrieren, um zu suchen
                  • Erster Beitrag
                    Letzter Beitrag
                  0
                  • Home
                  • Aktuell
                  • Tags
                  • Ungelesen 0
                  • Kategorien
                  • Unreplied
                  • Beliebt
                  • GitHub
                  • Docu
                  • Hilfe