Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Javascript zur Temperaturüberwachung [gelöst]

    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

    Javascript zur Temperaturüberwachung [gelöst]

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

      @tomily sagte:

      mit mehreren Werten machen kann, die auf gleiche Weiße überprüft werden sollen.

      Mit dem gleichen Grenzwert ?

      1 Reply Last reply Reply Quote 0
      • T
        tomily last edited by

        Ja, das wäre vollkommen ausreichend.

        Am elegantesten wäre es natürlich, wenn man oben die Datenpunkte in Variabeln schreiben könnte, die überwacht werden sollen. Ich habe aber keine Ahnung, wie ich diese dann weiter verarbeiten kann/soll.

        Sorry für die plumpe Fragen, bin wirklich ein Scripting-Anfänger!

        Beispiel:

        var idTemp1 = "synology.0.DiskStationManager.hdd_info.laufwerk_1.temperature";
        var idTemp2 = "synology.0.DiskStationManager.hdd_info.laufwerk_2.temperature";
        var idTemp3 = "synology.0.DiskStationManager.hdd_info.laufwerk_2.temperature";
        
        paul53 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @tomily last edited by

          @tomily
          Das geht mit einem Array im on().

          on([idTemp1, idTemp2, idTemp3], function(dp) {
          

          Wenn Du die ID an die Mail übergeben willst, dann verwende anstelle von idTemp dp.id oder den Namen dp.common.name. Den Wert enthält dp.state.val.

          1 Reply Last reply Reply Quote 0
          • T
            tomily last edited by

            Geil! Danke! Bin begeistert von der schnellen und kompetenten Hilfe.
            Klappt super. Bin trotzdem frech und frage auch noch nach meiner dritten Frage:

            Hast du noch eine Idee, wie ich den Emailinhalt mehrzeilig und mit Betreff gestalten kann?

            Beim ausprobieren ist mir noch folgendes eingefallen:

            Von dp.id kommt nun natürlich "synology.0.DiskStationManager.hdd_info.laufwerk_1.temperature" zurück.
            Ich kann das lesen, da ich weiß was es bedeutet. Schöner wäre aber eine Beschriftung. Könnte ich der Variable auch einen Namen mit geben, der dann in die Email übergeben wird?
            Bespiel:

            var temp1 = "synology.0.DiskStationManager.hdd_info.laufwerk_1.temperature";
            var temp1-label = "HDD1"
            var temp2 = "synology.0.DiskStationManager.hdd_info.laufwerk_2.temperature";
            var temp2-label = "HDD2"
            
            // Beispiel "dp.id.label" .... stimmt natürlich nicht :=()
            msg = "Temperatur (" + dp.id.label + ") über Treshold (" + treshold + " °C)! Aktueller Wert: " + (dp.state.val) + " °C";
            
            
            paul53 AlCalzone 2 Replies Last reply Reply Quote 0
            • paul53
              paul53 @tomily last edited by paul53

              @tomily sagte:

              mehrzeilig

              Zeilenschaltung macht man gewöhnlich mit "\n".

              @tomily sagte in Javascript zur Temperaturüberwachung:

              mit Betreff

              sendTo('email.0', {
                  subject: 'mein Betreff',
                  text:    msg
              });
              

              @tomily sagte in Javascript zur Temperaturüberwachung:

              Könnte ich der Variable auch einen Namen mit geben, der dann in die Email übergeben wird?

              Der Name des Datenpunktes "synology.0.DiskStationManager.hdd_info.laufwerk_1.temperature" kann im Tab "Objekte" beliebig geändert werden, z.B. in "Temperatur HDD1".

              msg = dp.common.name + " über Treshold (" + treshold + " °C)!\nAktueller Wert: " + dp.state.val + " °C";
              
              T 1 Reply Last reply Reply Quote 0
              • AlCalzone
                AlCalzone Developer @tomily last edited by

                @tomily sagte in Javascript zur Temperaturüberwachung:

                mehrzeilig

                z.B. mit Backticks, die können auch wunderbar Variablen enthalten:

                const wert = 25;
                const foo = `Dies
                ist
                ein mehrzeiliger
                String!
                Der Wert ist ${wert}.`;
                

                foo enthält den folgenden Text:

                Dies
                ist
                ein mehrzeiliger
                String!
                Der Wert ist 25.
                
                1 Reply Last reply Reply Quote 0
                • T
                  tomily @paul53 last edited by

                  @paul53

                  Da hätte ich auch selbst drauf kommen können. Das funktioniert und wäre eine gute Lösund.
                  Leider wird das Feld vom ioBroker-Adapter nach dem neu Laden wieder überschreiben mit einem default.
                  Die Anpassung der Namensfelder und das verwenden von dp.common.name wäre super. Bekomme ich den Adapter dazu, das Feld nicht wieder zu überschreiben?

                  Dafür ist "\n" perfekt für den Zeilenumbruch.

                  @AlCalzone
                  Danke auch für deinen Hinweis. Das wirkt als Skripting-Anfänger für mich recht mächtig, werde es aber auch ausprobieren 🙂

                  Mercie

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

                    @tomily sagte:

                    Leider wird das Feld vom ioBroker-Adapter nach dem neu Laden wieder überschreiben

                    Vom Adapter ioBroker.synology ?
                    Dann verwende common.desc (Beschreibung). Oder wird das auch überschrieben ?

                    1 Reply Last reply Reply Quote 0
                    • T
                      tomily last edited by

                      So ein Mist. Leider wird das Feld genau so auf Default zurück gesetzt wie der Name 😕

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

                        @tomily sagte:

                        Leider wird das Feld genau so auf Default zurück gesetzt wie der Name

                        Dann probiere mal native.name.

                        1 Reply Last reply Reply Quote 0
                        • T
                          tomily last edited by tomily

                          DANKE! Ich danke euch vielmals. Habe viel dazu gelernt und nun funktioniert es genau so wie ich es wollte.
                          Den native.name kannte ich noch nicht. Mir war nicht bewusst, dass man dort noch Felder hinzufügen kann. Diese werden nicht überschrieben und können verwendet werden.

                          Hier mein Ergebnis:

                          var temp1 = "synology.0.DiskStationManager.hdd_info.laufwerk_1.temperature";
                          var temp2 = "synology.0.DiskStationManager.hdd_info.laufwerk_2.temperature";
                          var temp3 = "synology.1.DiskStationManager.hdd_info.laufwerk_1.temperature";
                          var temp4 = "synology.1.DiskStationManager.hdd_info.laufwerk_2.temperature";
                          var temp5 = "synology.1.DiskStationManager.hdd_info.laufwerk_3.temperature";
                          var temp6 = "synology.1.DiskStationManager.hdd_info.laufwerk_4.temperature";
                          
                          var threshold = 33;
                          
                          on([temp1, temp2, temp3, temp4, temp5, temp6], function(dp) {
                               if (dp.state.val >= threshold && dp.oldState.val < threshold) {
                                      //Email Temperatur ÜBER Threshold
                                      sendTo("email", {
                                              subject: ("Temperatur " + dp.native.name + " " + dp.state.val + " °C"),
                                              text: dp.native.name + " ÜBER Threshold!\nThreshold: " + threshold + " °C\nAktueller Wert: " + (dp.state.val) + " °C"
                                              })
                                  } else if ( dp.state.val <= threshold - 0.5 && dp.oldState.val > threshold - 0.5) {
                                      //Email Temperatur UNTER Threshold
                                      sendTo("email", {
                                              subject: ("Temperatur " + dp.native.name + " " + dp.state.val + " °C"),
                                              text: dp.native.name + " UNTER Threshold!\nThreshold: " + threshold + " °C\nAktueller Wert: " + (dp.state.val) + " °C"
                                              })
                                  }   
                              });
                          
                          paul53 1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @tomily last edited by

                            @tomily sagte:

                            Den native.name kannte ich noch nicht.

                            Den gibt es normalerweise auch nicht. Wenn aber common immer wieder vollständig überschrieben wird, kann man dahin ausweichen.
                            Bitte das Thema in der Überschrift des ersten Beitrags als [gelöst] markieren.

                            1 Reply Last reply Reply Quote 0
                            • T
                              tomily last edited by

                              Besten Dank und vorab ein schönes Wochenende.

                              Kann den Betreff leider nicht mehr ändern. Wie macht Ihr das normal?

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

                                @tomily sagte:

                                Kann den Betreff leider nicht mehr ändern.

                                Im ersten Beitrag auf die 3 Punkte rechts unten: Bearbeiten auswählen. Dann die Überschrift editieren.

                                1 Reply Last reply Reply Quote 0
                                • T
                                  tomily last edited by tomily

                                  Versteck gefunden 🙂
                                  Mercie und schönes Wochenende!

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

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  389
                                  Online

                                  31.8k
                                  Users

                                  80.0k
                                  Topics

                                  1.3m
                                  Posts

                                  3
                                  18
                                  638
                                  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