Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Wer findet den Fehler im Skript (ZisternenNachbefüllung)

    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

    Wer findet den Fehler im Skript (ZisternenNachbefüllung)

    This topic has been deleted. Only users with topic management privileges can see it.
    • DJMarc75
      DJMarc75 @keineAhnungvonProgrmieren last edited by

      @keineahnungvonprogrmieren sagte in Wer findet den Fehler im Skript (ZisternenNachbefüllung):

      Habt ihr eine Idee wo da was falsch programiert ist?

      Pack mal bitte das ganze Skript in Codetags - dann kann vll geholfen werden 🙂

      1 Reply Last reply Reply Quote 0
      • Ro75
        Ro75 @keineAhnungvonProgrmieren last edited by Ro75

        @keineahnungvonprogrmieren sagte in Wer findet den Fehler im Skript (ZisternenNachbefüllung):

        // Tankfüllstand auslesen
        const tankLevel = getState(tankLevelId);

        Versuche mal so:

         var tankLevel = getState(tankLevelId).val;
        

        und

        if (tankLevel) {
        const tankLevelValue = parseFloat(tankLevel.val);

        if (tankLevel) {
        var tankLevelValue = parseFloat(tankLevel);
        

        Habe nur mal kurz überflogen...
        Ro75.

        1 Reply Last reply Reply Quote 0
        • Homoran
          Homoran Global Moderator Administrators last edited by

          Wo wird denn hier im showroom ein nützliches Projekt vorgestellt?

          ich schieb das mal nach javascript.

          1 Reply Last reply Reply Quote 0
          • T
            ticaki Developer @keineAhnungvonProgrmieren last edited by

            @keineahnungvonprogrmieren
            Pack das mal alles in code tags

            K 1 Reply Last reply Reply Quote 0
            • K
              keineAhnungvonProgrmieren @ticaki last edited by

              @ticaki ; @Ro75
              Habe mal versucht die änderungen einzubauen, ist das so gemeint?

              Leider funktioniert es noch nicht so wie gedacht.
              Habe den shelly aus testgründen in der Instanz auf true gestellt, gehe davon aus das das skript Ihn dann auf false stellt.

              // Konfiguration
              const tankLevelId = '0_userdata.0.Füllstand_Hauptzisterne'; // Füllstand Hauptzisterne
              const shellyPlugId = 'shelly.3.shellyplusplugs#d4d4daf36728#1.Relay0.Switch'; // Schalter
              const threshold = 5; // Schwellenwert auf 5% gesetzt
              const checkInterval = 15000; // 15 Sekunden
              const activateDuration = 45000; // Standard: 45 Sekunden
              const maxCyclesBeforeShutdown = 4; // Max. Anzahl der Zyklen, bevor der Shelly Plug deaktiviert wird
              
              let shellyActive = false;
              let cycleCount = 0;
              
              // Funktion zum periodischen Auslesen des Tankfüllstands
              function readTankLevel() {
                  // Tankfüllstand auslesen
                   const tankLevel = getState(tankLevelId).val; 
                  
              
              if (tankLevel) {
              
              const tankLevelValue = parseFloat(tankLevel);
                      console.log('Tank Level:', tankLevelValue);
              
                      if (tankLevelValue < threshold) {
                          // Schalte den Shelly Plug S ein und setze den Timer
                          if (!shellyActive) {
                              shellyActive = true;
                              setState(shellyPlugId, true);
                              console.log('Shelly Plug S aktiviert');
                              setTimeout(() => {
                                  // Deaktiviere den Shelly Plug S nach Ablauf der Zeit
                                  shellyActive = false;
                                  setState(shellyPlugId, false);
                                  console.log('Shelly Plug S deaktiviert');
                              }, activateDuration);
                          }
                          cycleCount++;
                          if (cycleCount >= maxCyclesBeforeShutdown) {
                              // Deaktiviere den Shelly Plug S nach der maximalen Anzahl von Zyklen
                              shellyActive = false;
                              setState(shellyPlugId, false);
                              console.log('Shelly Plug S deaktiviert nach', maxCyclesBeforeShutdown, 'Zyklen');
                              cycleCount = 0;
                          }
                      } else {
                          // Wenn der Füllstand den Schwellenwert überschreitet, setze den Zählzyklus zurück
                          cycleCount = 0;
                      }
                  }
              }
              
              // Periodisch den Tankfüllstand auslesen
              setInterval(() => {
                  console.log('--- Neuer Zyklus ---');
                  readTankLevel();
              }, checkInterval);
              
              
              K T Ro75 3 Replies Last reply Reply Quote 0
              • K
                keineAhnungvonProgrmieren @keineAhnungvonProgrmieren last edited by

                @keineahnungvonprogrmieren
                Sorry natürlich in objekten 😉

                1 Reply Last reply Reply Quote 0
                • T
                  ticaki Developer @keineAhnungvonProgrmieren last edited by ticaki

                  Falsch läuft das du alle 15 Sekunden den Füllstand prüfst und wenn true schaltest du den shelly an und dann prüfst du 15 Sekunden später auf den Füllstand und schaltest den Shelly auf True und dann kommst drauf an wer zu erst malt. Jetzt kommt dein Timeout zurück und schaltet den Shelly ab und dann prüfst du den Füllstand und schaltest den Shelly auf true 🙂

                  Zeit des umschließenden Intervals auf 1 Minute setzen.

                  1 Reply Last reply Reply Quote 0
                  • Ro75
                    Ro75 @keineAhnungvonProgrmieren last edited by

                    @keineahnungvonprogrmieren

                    // Konfiguration
                    const tankLevelId = '0_userdata.0.Füllstand_Hauptzisterne'; // Füllstand Hauptzisterne
                    const shellyPlugId = 'shelly.3.shellyplusplugs#d4d4daf36728#1.Relay0.Switch'; // Schalter
                    const threshold = 5; // Schwellenwert auf 5% gesetzt
                    const activateDuration = 45000; // Standard: 45 Sekunden
                    const maxCyclesBeforeShutdown = 4; // Max. Anzahl der Zyklen, bevor der Shelly Plug deaktiviert wird
                     
                    let shellyActive = false;
                    let cycleCount = 0;
                     
                    // Funktion zum periodischen Auslesen des Tankfüllstands
                    function readTankLevel() {
                    if (tankLevel) {
                     
                    var tankLevelValue = parseFloat(tankLevel);
                            console.log('Tank Level:', tankLevelValue);
                     
                            if (tankLevelValue < threshold) {
                                // Schalte den Shelly Plug S ein und setze den Timer
                                if (!shellyActive) {
                                    shellyActive = true;
                                    setState(shellyPlugId, true);
                                    console.log('Shelly Plug S aktiviert');
                                    setTimeout(() => {
                                        // Deaktiviere den Shelly Plug S nach Ablauf der Zeit
                                        shellyActive = false;
                                        setState(shellyPlugId, false);
                                        console.log('Shelly Plug S deaktiviert');
                                    }, activateDuration);
                                }
                                cycleCount++;
                                if (cycleCount >= maxCyclesBeforeShutdown) {
                                    // Deaktiviere den Shelly Plug S nach der maximalen Anzahl von Zyklen
                                    shellyActive = false;
                                    setState(shellyPlugId, false);
                                    console.log('Shelly Plug S deaktiviert nach', maxCyclesBeforeShutdown, 'Zyklen');
                                    cycleCount = 0;
                                }
                            } else {
                                // Wenn der Füllstand den Schwellenwert überschreitet, setze den Zählzyklus zurück
                                cycleCount = 0;
                            }
                        }
                    }
                     
                    on(tankLevelId, function(dp) {
                        // Tankfüllstand auslesen
                        var tankLevel = dp.state.val; 
                    
                        console.log('--- Neuer Zyklus ---');
                        readTankLevel();
                    });
                    
                    1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @keineAhnungvonProgrmieren last edited by paul53

                      @keineahnungvonprogrmieren sagte: soll der shelly falls er extern auf true gestellt wurde alle 4 Zyklen auf false gestellt werden.

                      Vorschlag mit Shedule und Trigger auf den Shelly:

                      // Konfiguration
                      const tankLevelId = '0_userdata.0.Füllstand_Hauptzisterne'; // Füllstand Hauptzisterne
                      const shellyPlugId = 'shelly.3.shellyplusplugs#d4d4daf36728#1.Relay0.Switch'; // Schalter
                      const threshold = 5; // Schwellenwert auf 5% gesetzt
                      const checkInterval = 15000; // 15 Sekunden
                      const activateDuration = 45000; // Standard: 45 Sekunden
                      const maxCyclesBeforeShutdown = 4; // Max. Anzahl der Zyklen, bevor der Shelly Plug deaktiviert wird
                       
                      let shellyActive = getState(shellyPlugId).val;
                      var timer = null;
                       
                      // Funktion zum periodischen Auslesen des Tankfüllstands
                      function readTankLevel() {
                          // Tankfüllstand auslesen
                          const tankLevel = parseFloat(getState(tankLevelId).val); 
                          if (tankLevel) {
                              console.log('Tank Level:', tankLevel);
                              if (tankLevel < threshold) {
                                  // Schalte den Shelly Plug S ein und setze den Timer
                                  if (!shellyActive) {
                                      setState(shellyPlugId, true);
                                      console.log('Shelly Plug S aktiviert');
                                  } 
                              } else if(shellyActive && !timer) {
                                  timer = setTimeout(() => {
                                      // Deaktiviere den Shelly Plug S nach Ablauf der Zeit
                                      setState(shellyPlugId, false);
                                      console.log('Shelly Plug S deaktiviert');
                                      timer = null;
                                  }, activateDuration);
                              }
                          }
                      }
                       
                      // Periodisch den Tankfüllstand auslesen
                      schedule('*/15 * * * * *', function() {
                          console.log('--- Neuer Zyklus ---');
                          readTankLevel();
                      });
                      
                      on(shellyPlugId, function(dp) {
                          shellyActive = dp.state.val;
                          if(shellyActive && dp.state.c != scriptName) {
                              setTimeout(function() {
                                  setState(shellyPlugId, false);
                              }, maxCyclesBeforeShutdown * checkInterval);
                          }
                      });
                      

                      @keineahnungvonprogrmieren sagte in Wer findet den Fehler im Skript (ZisternenNachbefüllung):

                      kleiner 5% dann schalte Shelly auf true für mindestens 45sec.

                      K 1 Reply Last reply Reply Quote 0
                      • K
                        keineAhnungvonProgrmieren @paul53 last edited by

                        @paul53

                        Mit dem skript funktioniert es . Vielen Dank für die Hilfe.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        912
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        6
                        11
                        430
                        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