Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Javaskript nur positive Ergebnisse anzeigen

    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

    Javaskript nur positive Ergebnisse anzeigen

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

      Hallo zusammen,

      ich möchte bei diesem Skript nur positive Ergebnisse anzeigen lassen. Alles was minus als Vorzeichen hat soll 0 sein.
      Könnt Ihr mir einen Lösungsansatz geben? Ich denke das ist für geübte nur eine Kleinigkeit 😉

      Vielen Dank schonmal!!!

      Timo

      const idSolar = 'javascript.0.Solar.Wechselrichter.PVLeistungAktuell';
      const idSolarBatt = 'modbus.0.holdingRegisters.57716_Battery_Instantaneous_Power';
      const idSumme = 'javascript.0.Solar.PVDach'; 
       
      var solar = getState(idSolar).val;
      var solarBatt = getState(idSolarBatt).val;
       
      if(!existsState(idSumme)) createState(idSumme, solar + solarBatt, {type: 'number', unit: 'W'}); 
       
      function summe() {
          setState(idSumme, solar + solarBatt, true);
      }
       
      on(idSolar, function(dp) {
         solar = dp.state.val;
         summe();
      });
      on(idSolarBatt, function(dp) {
       solarBatt = dp.state.val;
         summe();
      });
      
      bahnuhr 1 Reply Last reply Reply Quote 0
      • bahnuhr
        bahnuhr Forum Testing Most Active @txixmxo last edited by

        @txixmxo
        So klappt das nicht.

        • Variablen nicht übergeben zur function
        • außerhalb der function Variablen sind nicht aktuell
        • etc.

        Probier es so:

        var solar, solarBatt, summe = 'javascript.0.Solar.PVDach'; 
        
        on('javascript.0.Solar.Wechselrichter.PVLeistungAktuell', function(dp) {
            solar = dp.state.val;
        	if (solar < 0) { solar = 0; } 
            solarBatt = getState('modbus.0.holdingRegisters.57716_Battery_Instantaneous_Power').val;
        	if (solarBatt < 0) { solarBatt = 0; };
            setState(summe, solar + solarBatt);
        });
        
        on('modbus.0.holdingRegisters.57716_Battery_Instantaneous_Power', function(dp) {
            solarBatt = dp.state.val;
        	if (solarBatt < 0) { solarBatt = 0; } 
            solar = getState('javascript.0.Solar.Wechselrichter.PVLeistungAktuell').val;
        	if (solar < 0) { solar = 0; };
            setState(summe, solar + solarBatt);
        });
        
        
        1 Reply Last reply Reply Quote 0
        • T
          txixmxo last edited by

          Die SolarBatt ist gerade ein negativer Wert da entladen wird. Mit der Addition mit der PV Leistung Aktuell soll die aktuelle Solarleistung angezeigt werden.

          Wenn ich dein Skript starte Habe ich fpr PVDach gerade einen Wert von 400 Watt. Das enspricht der Entladung der Batterie.

          Möchte halt gerne nur die Ausgabe nach der Berechnung auf dem Minimalwert 0 bringen. Die Berechnung an sich soll nicht beeinflusst werden.

          bahnuhr paul53 2 Replies Last reply Reply Quote 0
          • bahnuhr
            bahnuhr Forum Testing Most Active @txixmxo last edited by

            @txixmxo sagte in Javaskript nur positive Ergebnisse anzeigen:

            Die SolarBatt ist gerade ein negativer Wert da entladen wird. Mit der Addition mit der PV Leistung Aktuell soll die aktuelle Solarleistung angezeigt werden.

            Wenn ich dein Skript starte Habe ich fpr PVDach gerade einen Wert von 400 Watt. Das enspricht der Entladung der Batterie.

            Möchte halt gerne nur die Ausgabe nach der Berechnung auf dem Minimalwert 0 bringen. Die Berechnung an sich soll nicht beeinflusst werden.

            Das versteh ich nicht.
            Du hast oben geschrieben:

            @txixmxo sagte in Javaskript nur positive Ergebnisse anzeigen:

            Alles was minus als Vorzeichen hat soll 0 sein.

            und dies macht das Script.

            Aber wenn es nicht so ist, wie du es möchtest dann pass es doch an.
            Hast doch jetzt eine Vorlage.

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

              @txixmxo sagte: nach der Berechnung auf dem Minimalwert 0 bringen.

              function summe() {
                  setState(idSumme, Math.max(solar + solarBatt, 0), true);
              }
              
              T 1 Reply Last reply Reply Quote 0
              • T
                txixmxo last edited by

                @bahnuhr said in Javaskript nur positive Ergebnisse anzeigen:

                @txixmxo sagte in Javaskript nur positive Ergebnisse anzeigen:

                Alles was minus als Vorzeichen hat soll 0 sein.

                Genau. Meine aber das Ergebnis was in PVDach steht. Wenn Skript -40 ausrechnet dann sollte 0 in PVDach angezeigt werden. Wenn im Skript 400 ausgerechnet wird soll auch 400 in PVDach ausgegeben werden.

                So verständlicher? Sorry für die umständliche Beschreibung.

                Meine erste Idee war bei diesem hier:

                if(!existsState(idSumme)) createState(idSumme, solar + solarBatt, {type: 'number', unit: 'W'});

                einfach ein =>0 einzufügen, aber das hat leider nicht geklappt ...

                Vielen Dank auf jeden Fall schonmal für deine Hilfe!!

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

                  @paul53 said in Javaskript nur positive Ergebnisse anzeigen:

                                                                                                                                              function summe() {                                                                                                                                                                                setState(idSumme, Math.max(solar + solarBatt, 0), true);                                                                                                                                                                            }                                            
                  

                  Ich glaube das war es .... danke allen!! Mal sehen was passiert, wenn morgen die Sonne scheint 😉

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  482
                  Online

                  31.9k
                  Users

                  80.1k
                  Topics

                  1.3m
                  Posts

                  3
                  7
                  170
                  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