Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Script verbesserung

    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

    Script verbesserung

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

      Hallo zusammen,

      ich fange gerade mit Javascript an und hätte da mal was zum Drüberschauen.

      Passt das so, oder wie kann man das Verbessern?

      danke für Eure Tipps

      /* 
      Wenn der Automower seine Unterkunft (Station) verlassen hat, darf die Bewässerung
      nicht anspringen.
      Bei der Bewässerung ist ein Shelly1 zwischen Steuerung und Pumpe eingebaut.
      Via MQTT wird das Relais (GrundwasserPumpe) geschaltet.
      
      Version:
          1.0 ist der Mäher zu hause, keine Bewässerung
          1.1 Bewässerung wird mit den letzten 24h Niederschlag aus Wetterstation vernetzt
      */
      
      const iDausloeser     = 'alias.0.Rasenflaeche.Station';
      const iDpumpe         = 'alias.0.Rasenflaeche.GrundwasserPumpe';
      var iDniederschlag24, iDniederschlag24_ts;
      
      iDniederschlag24 = getState('alias.0.Wetter.Doki.Niederschlag24h').val;
      iDniederschlag24_ts = getState('alias.0.Wetter.Doki.Niederschlag24h').ts;
      
       // triggert bei Mäher Aus- Einfahrt
      on({id: "alias.0.Rasenflaeche.Station", change: "any"}, function(dp) {
          iDniederschlag24 = getState('alias.0.Wetter.Doki.Niederschlag24h').val;
          if(iDniederschlag24 == 0){  /* Niederschlag die letzten 24h */
              if(getState(iDausloeser).val) {
                  setState(iDpumpe, true);
              } else {
                  setState(iDpumpe, false);
                  }
          } else {
              setState(iDpumpe, false);
              }
          console.log('Niederschlag --- Mäher  --->>> ' + iDniederschlag24 + ' mm/24h');
      });
      
      // triggert ber Niederschlag die letzten 24h
      on({id: "alias.0.Wetter.Doki.Niederschlag24h", change: "any"}, function(dp) {
          iDniederschlag24 = getState('alias.0.Wetter.Doki.Niederschlag24h').val;
          
          console.log('Niederschlag  --- 24h  ---->>> ' + iDniederschlag24 + ' mm/24h');
          if(iDniederschlag24==0) {
                  setState(iDpumpe, true);
                  console.log('Niederschlag  --->  Pumpe an');
          } else {
                  setState(iDpumpe, false); 
                  console.log('Niederschlag  --->  Pumpe aus');
                  } 
      });
      
      
      haus-automatisierung paul53 2 Replies Last reply Reply Quote 0
      • haus-automatisierung
        haus-automatisierung Developer Most Active @australien last edited by

        @australien sagte in Script verbesserung:

        iDniederschlag24 = getState('alias.0.Wetter.Doki.Niederschlag24h').val;

        Finde solche Variablennamen immer schwierig. Ich würde davon ausgehen, dass in der Variablen eine ID steht (also ein String). Und nicht ein spezifischer Wert. Liest sich komisch.

        Ansonsten könnte man das Script noch deutlich kürzen.

        A 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @australien last edited by paul53

          @australien sagte: wie kann man das Verbessern?

          Ohne die Überschrift:

          const iDausloeser      = 'alias.0.Rasenflaeche.Station';
          const iDpumpe          = 'alias.0.Rasenflaeche.GrundwasserPumpe';
          const iDniederschlag24 = 'alias.0.Wetter.Doki.Niederschlag24h';
           
          var niederschlag24 = getState(iDniederschlag24).val;
           
           // triggert bei Mäher Aus- Einfahrt
          on(iDausloeser, function(dp) {
              setState(iDpumpe, niederschlag24 == 0 && dp.state.val);
              log('Niederschlag --- Mäher  --->>> ' + niederschlag24 + ' mm/24h');
          });
           
          // triggert ber Niederschlag die letzten 24h
          on(iDniederschlag24, function(dp) {
              niederschlag24 = dp.state.val;
              log('Niederschlag  --- 24h  ---->>> ' + niederschlag24 + ' mm/24h');
              setState(iDpumpe, niederschlag24 == 0);
              log('Niederschlag  --->  Pumpe ' + niederschlag24 ? 'aus' : 'an');
          });
          
          A 1 Reply Last reply Reply Quote 0
          • A
            australien @paul53 last edited by

            @paul53 danke dafür!
            da kann ich mir schon wieder was mitnehmen.

            paul53 1 Reply Last reply Reply Quote 0
            • A
              australien @haus-automatisierung last edited by

              @haus-automatisierung stimmt, iD sollten Strings sein.
              Wie gesagt, bin am Anfang. Habe selbst mit 1991 mit dem Programmieren (turbo Pascal und turbo C) aufgehört und will jetzt zu Hause wieder etwas machen. Der Kopf soll ja was zu tun haben 😉

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

                @australien sagte: wieder was mitnehmen.

                Wenn der "Niederschlag24h" auf 0 gehen kann, während gemäht wird, dann besser so:

                const iDausloeser      = 'alias.0.Rasenflaeche.Station';
                const iDpumpe          = 'alias.0.Rasenflaeche.GrundwasserPumpe';
                const iDniederschlag24 = 'alias.0.Wetter.Doki.Niederschlag24h';
                 
                var niederschlag24 = getState(iDniederschlag24).val;
                var inStation = getState(iDausloeser).val;
                 
                 // triggert bei Mäher Aus- Einfahrt
                on(iDausloeser, function(dp) {
                    inStation = dp.state.val;
                    setState(iDpumpe, niederschlag24 == 0 && inStation);
                    log('Niederschlag --- Mäher  --->>> ' + niederschlag24 + ' mm/24h');
                });
                 
                // triggert ber Niederschlag die letzten 24h
                on(iDniederschlag24, function(dp) {
                    niederschlag24 = dp.state.val;
                    log('Niederschlag  --- 24h  ---->>> ' + niederschlag24 + ' mm/24h');
                    setState(iDpumpe, niederschlag24 == 0 && inStation);
                    log('Niederschlag  --->  Pumpe ' + niederschlag24 ? 'aus' : 'an');
                });
                
                A 1 Reply Last reply Reply Quote 0
                • A
                  australien @paul53 last edited by

                  @paul53 ja, kann er.

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

                    @australien sagte: ja, kann er

                    Noch besser mit einer Funktion:

                    const iDausloeser      = 'alias.0.Rasenflaeche.Station';
                    const iDpumpe          = 'alias.0.Rasenflaeche.GrundwasserPumpe';
                    const iDniederschlag24 = 'alias.0.Wetter.Doki.Niederschlag24h';
                     
                    var niederschlag24 = getState(iDniederschlag24).val;
                    var inStation = getState(iDausloeser).val;
                    
                    function grundwasser() {
                        let pumpe = niederschlag24 == 0 && inStation;
                        if(pumpe != getState(iDpumpe).val) {
                            setState(iDpumpe, pumpe);
                            log('Pumpe ' + (pumpe ? 'an' : 'aus'));
                        }
                    } 
                    
                    grundwasser(); // Skriptstart
                    
                     // triggert bei Mäher Aus- Einfahrt
                    on(iDausloeser, function(dp) {
                        inStation = dp.state.val;
                        log('Mäher ' + (inStation ? 'in Station' : 'mäht'));
                        grundwasser();
                    });
                     
                    // triggert ber Niederschlag die letzten 24h
                    on(iDniederschlag24, function(dp) {
                        niederschlag24 = dp.state.val;
                        log('Niederschlag  --- 24h  ---->>> ' + niederschlag24 + ' mm/24h');
                        grundwasser();
                    });
                    
                    A 1 Reply Last reply Reply Quote 0
                    • A
                      australien @paul53 last edited by

                      @paul53 sehr übersichtlich nun! danke!

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      947
                      Online

                      31.8k
                      Users

                      80.0k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      408
                      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