Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Subscribe/on Optimierung

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Subscribe/on Optimierung

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

      Ich frage immer mehr Statusänderungen ab. Z. B. so:

      /*Alarm extern EIN execute*/
      on({
          id:"hm-rega.0.1234.ProgramExecute",
          change: 'any'
      }, function () {
          setState("VIS.ExternAlarmZustandsanzeige", 1); 
          log ("Setze EAZA auf 1", 'info');
          setState (idSayIt, "Der externe Alarm wurde aktiviert!");
      });
      
      /*externer_alarm_an*/
      on({
          id:"hm-rega.0.11111",
          change: 'gt'
      }, function () {
          setState("VIS.ExternAlarmZustandsanzeige", 2); 
          log ("Setze EAZA auf 2", 'info');
          setState (idSayIt, "Der externe Alarm ist nun scharf!");
      });
      
      /*externer_alarm_aus*/
      on({
          id:"hm-rega.0.11111",
          change: 'lt'
      }, function () {
          setState("VIS.ExternAlarmZustandsanzeige", 0); 
          log ("Setze EAZA auf 0", 'info');
          setState (idSayIt, "Der externe Alarm wurde deaktiviert!");
      });
      
      

      Ich frage mich, ob ich das nicht eleganter - und vor allem auch Ressourcenschonender machen kann?

      Z. B. die letzten beiden on's greifen ja auf die selbe CCU Variable zurück.

      Denn irgendwann, befürchte ich, habe ich 100 von den On's

      Was sagen die Profis?

      Viele Grüße,

      Fitti
      3435_screenshot__21_.png

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Hallo Fitti,
        @Fitti:

        Ich frage mich, ob ich das nicht eleganter - und vor allem auch Ressourcenschonender machen kann?

        Z. B. die letzten beiden on's greifen ja auf die selbe CCU Variable zurück. `
        ich kann dir nicht sagen, wieviel CPU-Last das so braucht. Ich habe ziemlich viele davon und merke keinen Geschweindigkeitsverlust verglichen mit Zeiten, als ich noch wenige hatte.

        Die Abfrage von Rega Daten ist nicht optimal. Der Rega Adapter aktualisisert nicht permanent, sondern in einem (einstellbaren) Intervall. Daher kommen die Daten eher schubweise.

        Langfristig solltest du darüber nachdenken, die gesamte Logik in ioBroker zu portieren und die CCU nur noch als Hardwareschnittstelle zu den Homematic-Komponenten und Wartungszugang (zB für Direktverknüpfungen) sehen.

        Ich habe das im ersten Quartal 2015 auch Schritt für Schritt, Programm für Programm gemacht. Ich habe CCU-Programme zuerst in ioBroker nachgebaut und dann erstmal deaktiviert. Als ich völlig sicher war, dass alles lief, habe ich sie gelöscht. Ich muss meine CCU nicht mehr neustarten. Nur bei FW-Updates und gelegentlich nach dem Anlernen von Komponenten. Das war früher leider nicht so. IoBroker bietet die Möglichkeit, durch einen weitere Javascript-Instanz eine Testumgebung für neue Skripte zu nutzen. Das macht das ganze System so stabil, auch wenn man viel probiert und entwickelt. Versuch das mal auf einer CCU :lol:

        Also versuch mal, deine Alarmanlage in ioBroker Javascript nachzubauen. Wir helfen gern weiter.

        Grüße,

        Pix

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

          @Fitti:

          Ich frage mich, ob ich das nicht eleganter - und vor allem auch Ressourcenschonender machen kann? `
          Was die CPU-Last betrifft, ist Deine Lösung sicherlich optimal; bezüglich des Speicherverbrauchs eher nicht, aber Speicher ist heutzutage meist ausreichend vorhanden, denn er kostet fast nichts mehr.
          @pix:

          Langfristig solltest du darüber nachdenken, die gesamte Logik in ioBroker zu portieren und die CCU nur noch als Hardwareschnittstelle zu den Homematic-Komponenten und Wartungszugang (zB für Direktverknüpfungen) sehen. `
          So sehe ich das auch. Programmerweiterungen für die RegaHss per ioBroker sehe ich nicht als sinnvoll an.

          Nach und nach kann man die CCU-Programme nach ioBroker portieren. Per ioBroker-Javascript sollte besser nur auf die HM-RPC-Schnittstelle(n) zugegriffen werden.
          @Fitty:

          …die letzten beiden on's greifen ja auf die selbe CCU Variable zurück. `
          Ob man das sinnvoll mit einem Auslöser machen kann, hängt vom Datenpunkttyp ab ("boolean" oder "number") und falls "number" davon, wie welche Werte verändert werden.

          1 Reply Last reply Reply Quote 0
          • F
            Fitti last edited by

            Danke erst einmal für die Antworten! ~~![](</s><URL url=)<link_text text="http://www.smiliesuche.de/smileys/grins ... s-0016.gif">http://www.smiliesuche.de/smileys/grinsende/grinsende-smilies-0016.gif</link_text>" />

            Habe "nur" 1GB auf der Banane - nach längerer Laufzeit ist dann nur noch 340MB frei. Mir ist nicht bewusst, ob man hier RAM erweitern kann? Ne, denke nicht.

            Welche Hardware nutzt ihr denn so? Im Moment läuft die CCU2 sehr gut. Trotz der knapp 80 Skripte und 170 Aktoren.

            Mit ioBroker hatte ich mal hier und da schon ein Problem. Ich schiebe es dann auf die Banane. Netzteil war auch schon ein Sorgenkind. Ich glaube aber, dass der Speicher irgendwann raus rennt. Dann ist das System einfach nicht mehr erreichbar.

            @paul53:

            Ob man das sinnvoll mit einem Auslöser machen kann, hängt vom Datenpunkttyp ab ("boolean" oder "number") und falls "number" davon, wie welche Werte verändert werden. `
            In diesem Fall ist es boolean.

            Dann wäre der Code so ungefähr? (ist von unterwegs mal zusammengeschrieben, wie ich es mir denke. Kann gerade nicht testen - geht aber um das prinzipielle)

            /*externer_alarm_an/aus*/
            on({
                id:"hm-rega.0.11111",
                change: 'any'
            }, function (extern_alarm_wert) {
                if (extern_alarm_wert === true ) {
                    setState("VIS.ExternAlarmZustandsanzeige", 2); 
                    log ("Setze EAZA auf 2", 'info');
                    setState (idSayIt, "Der externe Alarm ist nun scharf!");
                } else {
                    setState("VIS.ExternAlarmZustandsanzeige", 0); 
                    log ("Setze EAZA auf 0", 'info');
                    setState (idSayIt, "Der externe Alarm wurde deaktiviert!");
               }
            });
            
            

            Viele Grüße,

            Fitti~~

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

              Hallo Fitti,

              die meisten werden den RasPi2 nutzen. Der hat auch nur 1GB RAM. Ich habe bei Cubietruck und Cubox i4 mit je 2GB RAM den subjektiven Eindruck, dass es dort runder läuft, auch wenn die nur eine dualcore CPU besitzen.

              Das RAM könnte also tatsächlich eine Rolle spielen. Erweitern kann man es IMHO bei keinem einplatinencomputer. Wenn dann das swappen anfängt, hängt alles an der Geschwindigkeit und Qualität der swap Partition.

              Gruß

              Rainer

              Gesendet von meinem LIFETAB_S785X mit Tapatalk

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

                @Fitti:

                In diesem Fall ist es boolean.

                Dann wäre der Code so ungefähr? `
                Nicht ganz., sondern:

                /*externer_alarm_an/aus*/
                on("hm-rega.0.11111", function (dp) {
                    if (dp.newState.val) {
                        setState("VIS.ExternAlarmZustandsanzeige", 2);
                        log ("Setze EAZA auf 2", 'info');
                        setState (idSayIt, "Der externe Alarm ist nun scharf!");
                    } else {
                        setState("VIS.ExternAlarmZustandsanzeige", 0);
                        log ("Setze EAZA auf 0", 'info');
                        setState (idSayIt, "Der externe Alarm wurde deaktiviert!");
                   }
                });
                

                Wenn das Programm bezüglich Speicherverbrauch optimiert werden soll, dann etwa so:

                var wert;
                var text;
                
                function ausgabe() {
                    setState("VIS.ExternAlarmZustandsanzeige", wert);
                    log ("Setze EAZA auf " + wert, 'info');
                    setState (idSayIt, "Der externe Alarm " + text);
                }
                
                /*Alarm extern EIN execute*/
                on({id:"hm-rega.0.1234.ProgramExecute",
                      change: 'any'
                    }, function () {
                    wert = 1;
                    text = "wurde aktiviert!";
                    ausgabe();
                });
                
                /*externer_alarm_an/aus*/
                on("hm-rega.0.11111", function (dp) {
                    if (dp.newState.val) {
                        wert = 2;
                        text = "ist nun scharf!";
                    } else {
                        wert = 0;
                        text = "wurde deaktiviert!";
                    }
                    ausgabe();
                });
                
                

                Eine echte Speicherersparnis hat man aber wohl nur, wenn die Scripte compiliert werden.

                1 Reply Last reply Reply Quote 0
                • F
                  Fitti last edited by

                  @paul53:

                  Nicht ganz., sondern:

                  … `

                  Danke. Werde das heute Abend mal ausprobieren. ~~![](</s><URL url=)<link_text text="http://www.smiliesuche.de/smileys/zwink ... s-0022.gif">http://www.smiliesuche.de/smileys/zwinkernde/zwinkernde-smilies-0022.gif</link_text>" />

                  Fitti~~

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  707
                  Online

                  31.7k
                  Users

                  79.7k
                  Topics

                  1.3m
                  Posts

                  4
                  7
                  1197
                  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