Navigation

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

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Hilfe bei Scripterstellung!

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

      @lobomau:

      Ich war davon ausgegangen, dass es bei ihm so aussieht wie bei mir.

      Genau, Lautstärke geht über Master_Volume. ` das kann ich mir auch durchaus vorstellen, häufig zeigen Screenshots dennoch den einen oder anderen Hinweis über die Umgebung, Namensnennung usw. beim User; oder auch ob der Adapter oder das Gerät sauber konfiguriert ist.

      Ich selbst ändere z.B. mitunter nach Bedarf die Rollen einiger Datenpunkte.

      Dennoch Danke 🙂

      1 Reply Last reply Reply Quote 0
      • D
        djtale2003 last edited by

        Hier sind die zwei Variablen, die ich in Homematic integrieren möchte.

        In Homematic ist eine Systemvariable hinterlegt. wenn ic dort die Role des Denonwertes eintrage, passiert nichts. Mit der 16 Kanal Zustandsanzeige habe ich es auch schon versucht. Da wird mit dann ein parser-fehler angezeigt.
        3384_iobroker.admin1.png
        3384_iobroker.admin2.png
        3384_iobroker.admin3.png

        1 Reply Last reply Reply Quote 0
        • D
          djtale2003 last edited by

          @Homoran:

          @lobomau:

          Hier sieht man die benötigten Datenpunkte `

          Da fehlen aber noch die auch noch gewünschten
          @BBTown:

          und woher kommen diese 433MHz Signale? `
          Datenpunkte.

          Gruß

          Rainer `

          Ich wollte es nach diesem Tutorial versuchen:

          https://tutorials-raspberrypi.de/raspbe … z-steuern/

          Das ist aber zweitrangig. Wichtig ist erstmal, dass die Systemvariablen auf Homematic dargestellt werden….

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

            @djtale2003:

            Den Zustand Power ON / OFF möchte ich in Homematic als Systemvariable haben.

            Den Zustand des Input Select Input möchte ich ebenfalls in der Homematic als Systemvariable sehen. `
            Für Power ON/OFF muss eine SV vom Typ Logikwert und für Input Select eine SV vom Typ Werteliste angelegt werden. Bitte eindeutige Namen vergeben (z.B. "SV-Denon-Power").

            Sollen diese SV nur die Zustände anzeigen oder soll darüber auch bedient werden ?

            1 Reply Last reply Reply Quote 0
            • D
              djtale2003 last edited by

              @paul53:

              Für Power ON/OFF muss eine SV vom Typ Logikwert und für Input Select eine SV vom Typ Werteliste angelegt werden. Bitte eindeutige Namen vergeben (z.B. "SV-Denon-Power").

              Sollen diese SV nur die Zustände anzeigen oder soll darüber auch bedient werden ? `

              Das habe ich bereits gemacht. Die verschiedenen Werte sind in Homematic bereits in Programmen verknüpft.
              3384_homematic_webui4.png

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

                Du solltest die Namen, die vom HM-Rega-Adapter erzeugt werden, nicht ändern. Dann kannst du so die SV setzen:

                var idSVPower = getIdByName('Denon Power');
                var idSVInput = getIdByName('Denon Input');
                var idPower = 'javascript.0.Denon.Zone_Main.Power'; 
                var idSelect = 'javascript.0.Denon.Zone_Main.Select_Input';
                var idLeinwand = '...'; 
                var idLevel = '...';  // ID für Lautstärke-Datenpunkt
                
                var power = getState(idPower).val;
                var select = getState(idSelect).val;
                var level = getState(idLevel).val;
                
                function Leinwand() {
                    if(select === 7 && power) {
                        level = getState(idLevel).val;
                        setState(idLevel, 50);
                        setState(idLeinwand, true);  // Leinwand ab
                    } else {    
                       setState(idLevel, level);  // alte Lautstärke
                       setState(idLeinwand, false);  // Leinwand auf
                    }
                }       
                
                // bei Script start in SV schreiben
                setState(idSVPower, power);
                setState(idSVInput, select);
                Leinwand();
                
                // bei Änderung in SV schreiben
                on(idPower, function(dp) {
                    power = dp.state.val;
                    setState(idSVPower, power);
                    Leinwand();
                });
                on(idSelect, function(dp) {
                    select = dp.state.val;
                    setState(idSVInput, select);
                    Leinwand();
                });       
                
                
                1 Reply Last reply Reply Quote 0
                • D
                  djtale2003 last edited by

                  Das Script hat leider nicht funktioniert. Der Wert der Lautstärke hat sich zwar in io.broker geändert, aber nicht am Gerät selbst. Das script hat mich aber auf den richtigen Pfad gebracht. Ich habe nun den Inputstatus und den Powerstatus von dem Denon mit der Systemvariable in Blockly mit der Funktion "binde" verknüpft. Nun werde die Werte als Systemvariable in Homematic angezeigt. Perfekt!! Vielen Dank für den Schubs in die richtige Richtung. Jetzt muß ich das nur noch mit der Lautstärke hinkriegen. Wie muß das Script geändert werden? Oder soll besser mt Blockly arbeiten? Da habe ich auch keinen Plan von…

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

                    @djtale2003:

                    Der Wert der Lautstärke hat sich zwar in io.broker geändert, aber nicht am Gerät selbst. `
                    Dann hast Du sicherlich die falsche Datenpunkt-ID verwendet. Ob es mit dem Datenpunkt funktioniert, kannst Du im Reiter "Objekte" testen, indem Du dort den Wert veränderst. Beim richtigen Datenpunkt sollte sich dann auch die Lautstärke am Gerät ändern.

                    1 Reply Last reply Reply Quote 0
                    • D
                      djtale2003 last edited by

                      Ich habe den Datenpunkt Master Volume gewählt. Welchen soll ich sonst wählen? Einen anderen finde ich nicht.

                      Ich habe mal den Wert von dem Input in iobroker geändert. Auch darauf reagiert der Denon nicht.

                      Gibt es hier vielleicht ein grundlegendes Problem?

                      In der Zeile Command to AVR steht kein Wert, muß ich hier erst die Fernsteuerung via iobroker "aktivieren"?

                      Offensichtlich nicht. Ich kann nur den Tuner fernsteuern. Alle anderen ID von Denon reagieren nicht auf eine Änderung des Wertes…
                      3384_iobroker.admin1.png

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

                        @djtale2003:

                        Alle anderen ID von Denon reagieren nicht auf eine Änderung des Wertes… ` hast du denn in diesem Feld (siehe Pfreil) einmal einen anderen Wert eingetragen und reagiert dein Denon hierauf?

                        Wenn nicht, dann stimmt ja etwas mit der Verbindung nicht. Und zudem wird es dann erst recht nicht über ein Script funktionieren.

                        Zeige doch mal einen Screenshot der Eigenschaften von "Master_Volume" (allgemein, native, raw)

                        Was mir auch auffällt ist eine Unstimmigkeit in der Darstellung vom Datenpunkt "Master_Volume_DOWN".

                        Als Rolle steht dor "button" aber in den Werten ist ein "false" zu sehen … das dürfte gar nicth sein.

                        Am besten Du zeigst ebenfalls einmal einen Screenshot der Eigenschaften von "Master_Volume_DOWN" (allgemein, native, raw)
                        1917_denon_mastervolume.png

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

                          Ich vermute mal, dass Du das Skript von @Lucky verwendest. Dann wird nur an den Denon gesendet, wenn ack=false ist (Werte werden im Reiter "Objekte" rot dargestellt). Wenn getestet werden soll, ob Änderungen in ioBroker beim Denon ankommen, muss bei Änderung des Wertes ack auf false gesetzt werden. Das geht einfacher im Reiter "Zustände": Filtern der ID "Denon.Zone_Main.", den Wert ändern und den Haken bei "Bestätigt" entfernen.

                          1 Reply Last reply Reply Quote 0
                          • D
                            djtale2003 last edited by

                            @BBTown:

                            hast du denn in diesem Feld (siehe Pfreil) einmal einen anderen Wert eingetragen und reagiert dein Denon hierauf? ` Genau dort habe ich die Werte geändert und mit dem Haken bestätigt. Auf Änderungen im Reiter Tuner_Control hat der Denon reagiert, auf Änderungen im Ordner Zone_Main nicht

                            @BBTown:

                            Was mir auch auffällt ist eine Unstimmigkeit in der Darstellung vom Datenpunkt "Master_Volume_DOWN".

                            Als Rolle steht dor "button" aber in den Werten ist ein "false" zu sehen … das dürfte gar nicth sein.

                            Am besten Du zeigst ebenfalls einmal einen Screenshot der Eigenschaften von "Master_Volume_DOWN" (allgemein, native, raw) ` Master_Volume_UP ist auch button….

                            @BBTown:

                            Ich vermute mal, dass Du das Skript von @Lucky verwendest. Dann wird nur an den Denon gesendet, wenn ack=false ist (Werte werden im Reiter "Objekte" rot dargestellt). Wenn getestet werden soll, ob Änderungen in ioBroker beim Denon ankommen, muss bei Änderung des Wertes ack auf false gesetzt werden. Das geht einfacher im Reiter "Zustände": Filtern der ID "Denon.Zone_Main.", den Wert ändern und den Haken bei "Bestätigt" entfernen. ` Genau, dass ist das Script von Lucky. Ich konnte aber keinen Reiter Zustände bei mir finden, nur Objekte. Was in der Zone Main steht, ist auf den letzten Screenshots zu sehen. ack kann ich auch nirgends finden.
                            3384_iobroker.admin.png
                            3384_iobroker.admin1.png
                            3384_iobroker.admin2.png
                            3384_iobroker.admin3.png
                            3384_iobroker.admin4.png
                            3384_iobroker.admin5.png
                            3384_iobroker.admin6.png

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

                              @djtale2003:

                              Ich konnte aber keinen Reiter Zustände bei mir finden `
                              Dann musst Du ihn http://www.iobroker.net/docu/?page_id=5473&lang=de#Reiter (über das Bleistift-Icon rechts oben).

                              1 Reply Last reply Reply Quote 0
                              • D
                                djtale2003 last edited by

                                UPDATE:

                                Ich habe das Denon Script jetz in den Ordner common verschoben und neu gestartet. Jetzt reagiert er auf die Wertänderung. Lediglich das Dimmen des Display geht nicht.

                                Das Script von paul53 funktioniert aber leider auch nicht. Die Werte des Denon bekomme ich ja mittlerweile in Homematic angezeigt, und die dort hinterlegten Programme funtionieren auch.

                                Wenn mir jetzt noch jemand das Script von paul53 anpasst, wäre super. Es geht dabei nur noch um die Lautstärke. Der AVR startet mit einem Wert von 30. Der Kanal MPLAY soll aber mit 50 starten. Beim Wechsel des Kanals soll die Lautstärke wieder auf die vorherige Lautstärke (wenn nicht vorhanden auf 30) gesenkt werden. In dem vorhanden Script kann alles, was mit Leinwand zu tun hat gelöscht werden.

                                Die Laustärkeregelung des Scriptes funktioniert soweit. Die Werte ändern sich in iobroker auch korrekt, nur am reciever nicht. Der Haken zum Bestätigen der Änderung muss wohl noch durch das Script betätigt werden. Wie kann ich dem script einen Startwert für die Laautstärke der anderen Kanäle svorgeben. Das müsste ja die Zeile````
                                var level = getState(idLevel).val;

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

                                  var level = getState(idLevel).val;
                                  

                                  Damit wird die Skriptvariable level mit dem aktuellen Lautstärkewert bei Skriptstart initialisiert.

                                      if(select === 7 && power) {
                                          level = getState(idLevel).val;
                                  
                                  

                                  merkt sich den eingestellten Lautstärkewert in der Skriptvariablen level.

                                         setState(idLevel, level);  // alte Lautstärke
                                  

                                  setzt die Lautstärke wieder auf den gemerkten Wert.

                                  1 Reply Last reply Reply Quote 0
                                  • D
                                    djtale2003 last edited by

                                    Die Wertänderung wird durch das Script nicht bestätigt:
                                    3384_unbenannt-2.jpg

                                    Ich habe jetzt mal alles mit Leinwand gelöscht. Nun geht gar nix mehr. Was habe ich falsch gemacht?

                                    var idSVPower = getIdByName('Denon Power');
                                    var idSVInput = getIdByName('Denon Input');
                                    var idPower = 'javascript.0.Denon.Zone_Main.Power'; 
                                    var idSelect = 'javascript.0.Denon.Zone_Main.Select_Input';
                                    var idLevel = 'javascript.0.Denon.Zone_Main.Master_Volume';  //ID für Lautstärke-Datenpunkt
                                    
                                    var power = getState(idPower).val;
                                    var select = getState(idSelect).val;
                                    var level = getState(idLevel).val;
                                    
                                    function Leinwand() {
                                        if(select === 7 && power) {
                                            level = getState(idLevel).val;
                                            setState(idLevel, 50);
                                        } else {    
                                           setState(idLevel, level);  // alte Lautstärke
                                        }
                                    }       
                                    
                                    // bei Script start in SV schreiben
                                    setState(idSVPower, power);
                                    setState(idSVInput, select);
                                    Leinwand();
                                    
                                    // bei Änderung in SV schreiben
                                    on(idPower, function(dp) {
                                        power = dp.state.val;
                                        setState(idSVPower, power);
                                    });
                                    on(idSelect, function(dp) {
                                        select = dp.state.val;
                                        setState(idSVInput, select);
                                    });       
                                    
                                    1 Reply Last reply Reply Quote 0
                                    • L
                                      Lucky last edited by

                                      es ist sollte zusätzlich immer beachtet werden, das nicht jeder AVR alle Funktionen unterstützt !

                                      was passiert wenn du die States manuell mit den State UPDATE aktualisierst ? die, die nicht geupdatet werden, sind auch nicht unterstützt ! Welche Firmware hast du ?

                                      Alles States die als Role"Button" haben, sollten auch als Button dargestellt werden, bei mir sieht das so aus ..

                                      Übrigens, der "State Command to AVR" dient dazu per Hand Kommandos aus der API an den Denon zu senden, und hat für den normalen Ablauf keine Relevanz !
                                      2611_denon_states.png

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

                                        @djtale2003:

                                        Nun geht gar nix mehr. Was habe ich falsch gemacht? `
                                        Nichts, denn das Skript macht was es soll: Es hat den Wert für Master_Volume auf 50 mit ack=false gesetzt.
                                        @djtale2003:

                                        Die Wertänderung wird durch das Script nicht bestätigt: `
                                        Diese Bestätigung sollte durch das Denon-Skript erfolgen, nachdem der Lautstärkewert gesendet und vom Denon quittiert wurde. Das passiert anscheinend aber nicht. Offenbar ist das Denon-Skript nicht (voll) kompatibel zu Deinem Denon AVR.

                                        1 Reply Last reply Reply Quote 0
                                        • D
                                          djtale2003 last edited by

                                          @paul53:

                                          Nichts, denn das Skript macht was es soll: Es hat den Wert für Master_Volume auf 50 mit ack=false gese ` Das vonm mir überarbeitete Script ändert leider keine Werte.

                                          @Lucky:

                                          was passiert wenn du die States manuell mit den State UPDATE aktualisierst ? ` Der Wert in iobroker wird auf den tatsächlichen Wert des Denon geändert.

                                          @Lucky:

                                          die, die nicht geupdatet werden, sind auch nicht unterstützt ! Welche Firmware hast du ? ` Der Denon hat die aktuellste Version 4800-8776-1654. Warum werden de Werte dann von dem Verstärker geändert, wenn ich die Eingabe in iobroker mit dem Häckchen bestätige?

                                          @Lucky:

                                          Alles States die als Role"Button" haben, sollten auch als Button dargestellt werden, bei mir sieht das so aus .. ` Das liegt offensichtlich an Firefox. Mit Microsoft Edge sind die Button da.

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

                                            @djtale2003:

                                            Das vonm mir überarbeitete Script ändert leider keine Werte. `
                                            Du musst weiterhin bei jeder Änderung die Funktion Leinwand() aufrufen, obwohl der Name jetzt unpassend ist. Habe leider übersehen, dass Du die Funktionsaufrufe gelöscht hast.

                                            // bei Änderung in SV schreiben und Funktion aufrufen
                                            on(idPower, function(dp) {
                                                power = dp.state.val;
                                                setState(idSVPower, power);
                                                Leinwand();
                                            });
                                            on(idSelect, function(dp) {
                                                select = dp.state.val;
                                                setState(idSVInput, select);
                                                Leinwand();
                                            });
                                            
                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            458
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            7
                                            37
                                            4296
                                            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