Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript "Hallo Welt", "Lichtschalter" ….. und dann ???

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    JavaScript "Hallo Welt", "Lichtschalter" ….. und dann ???

    This topic has been deleted. Only users with topic management privileges can see it.
    • Dutchman
      Dutchman Developer Most Active Administrators last edited by

      @Jey Cee:

      wenn der Auszug von dir Tatsächlich so in der Doku steht muss das geändert werden. Kannst bitte noch einen Link zur besagten Doku einfügen. `

      steht so in der docu auf der webseite;

      http://www.iobroker.net/docu/?page_id=5385&lang=de

      <size size="150">Bedingte Ausführung</size> Einführung

      Stellen wir uns vor, wir wollen mit dem Lichtschalter nicht nur eine Lampe, sondern zwei Lampen, die jeweils getrennt geschaltet werden können ansteuern. Wenn wir einfach das Skript erweitern, könnte es so aussehen:

      on({id: 'hm-rpc.1.IEQ053xxxx.1.PRESS_SHORT‘}, function (obj) {
      setState("hm-rpc.1.IEQ038xxxx.3.State",!getState("hm-rpc.1.IEQ038xxxx3.State").val);
      setState("hm-rpc.1.IEQ056xxxx.3.State",!getState("hm-rpc.1.IEQ056xxxx.State").val);
      });
      
      

      Auf den ersten Blick funktioniert das Programm auch bestens. Jetzt schalten wir mal eine Lampe an (z.B. per VIS). Wenn wir nunmehr das Licht per Lichtschalter. Wunderbar, jetzt leuchtet abwechselnd mal das eine und dann das andere Licht. Also müssen wir das Programm umschreiben. Hier eine Idee:

      on({id: 'hm-rpc.1.IEQ053xxxx.1.PRESS_SHORT‘}, function (obj) {
      var status=!getState("hm-rpc.1.IEQ038xxxx3.State").val;
      setState("hm-rpc.1.IEQ038xxxx.3.State",status);
      setState("hm-rpc.1\. IEQ056xxxx.3.State",status);
      });
      

      In der zweiten Zeile wird der Status der ersten Lampe invertiert gespeichert. Anschließend werden die Lampen entsprechend geschaltet. Dieses Programm ist schon erheblich besser.

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

        Ich glaube ihr redet aneinander vorbei:
        @PapaChriLo:

        Ich würde ja gerne die Lampe per VIS einschalten wenn ich nur wüsste wie :!:

        Wie bringe ich die VIS dazu dieses Skript auszuführen :?: `
        in dem Beispiel wird die Lampe ohne Skript per vis (und am Lichttaster manuell) geschaltet.

        Christian möchte aber -warum auch immer- ein Skript per vis ausführen.

        Darum geht es in diesem Beispiel aber nicht.

        Gruß

        Rainer

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

          @Jey Cee:

          Hallo Christian,

          wenn der Auszug von dir Tatsächlich so in der Doku steht muss das geändert werden. Kannst bitte noch einen Link zur besagten Doku einfügen.

          Nicht Aufgeben manchmal ist zwar Mühsam aber es Lohnt sich.

          Gesendet von Unterwegs `
          Hier mal der Link zur Doku.

          http://www.iobroker.net/docu/?page_id=5385&lang=de

          und noch ein screenshot der Doku
          3722_iobroker.png

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

            Die Doku ist völlig korrekt.

            Es geht darum, dass in dem Doku Beispiel eine von zwei Lampen in einen anderen Zustand versetzt wird, als ihr "Partner". Dementsprechend schaltet das Skript danach die Lampen nicht mehr synchron an und aus, sondern eben gegenläufig.

            Der OP scheint hier misszuverstehen, dass es nur ein Beispiel ist, warum ein JS Script andere Effekte erzeugen kann, als man eventuell erwarten würde

            1 Reply Last reply Reply Quote 0
            • Dutchman
              Dutchman Developer Most Active Administrators last edited by

              @tempestas:

              Die Doku ist völlig korrekt.

              Es geht darum, dass in dem Doku Beispiel eine von zwei Lampen in einen anderen Zustand versetzt wird, als ihr "Partner". Dementsprechend schaltet das Skript danach die Lampen nicht mehr synchron an und aus, sondern eben gegenläufig.

              Der OP scheint hier misszuverstehen, dass es nur ein Beispiel ist, warum ein JS Script andere Effekte erzeugen kann, als man eventuell erwarten würde `

              Dem stimme ich zu die Doku zum Script ist schon korrekt, nur wird nicht erklärt wie man das in diesem Beispiel mit vis macht.

              Das gehört meiner Meinung nach aber nicht in die Script sondern vis docu

              ~Dutch

              –-----------------------

              Send from mobile device

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

                @Homoran:

                Christian möchte aber -warum auch immer- ein Skript per vis ausführen.

                Gruß

                Rainer `

                Hallo Rainer!

                Nun für mich ist das ja der eigentliche Sinn und Zweck, warum ich mich mit dem ioBroker befasse.

                Klar, die Visualisierungen der Hommatic Aktoren und Sensoren die man sich da in der VIS zusammenklauben kann sind ja ganz nett und schön, ich möchte aber mehr und dazu benötige ich eben Javascript.

                Ein Beispiel was ich wenn ich das ganze irgend wann einmal behirne, umsetzen möchte.

                Mein Frau ist Krankenschwester und hat Wechseldienst.

                Auf dem Bildschirm im Flur läuft die ioBroker VIS und da ein Kalender in dem der Dienstpaln meiner Frau angezeigt wird.

                So nun haben wir im Flur einen Bewegungsmelder der in der Nacht wenn jemand aufsteht ein gewisses Lichtscenario in der Wohnung einschaltet und nach einer gewissen Zeit auch wieder ausschaltet.

                Dieses Scenarion wird bis zum Sonnenaufgang durchgeführt. Wenn jemand nach dem Sonnenaufgang aufsteht schaltet die Hommematic in den Tagmodus und schaltet damit auch verschiedene Verbraucher ein, die in der Nacht nicht benötigt werden.

                Wenn meine Faru allerdings Tagdienst hat, muss sie um 5 Uhr aufstehen, das ist speziell im Winter lange vor dem Sonnenaufgang, und würde dann ein anderes Lichtscenario benötigen.

                Dazu muss ich aber vom Nacht- in den Tagmodus schalten.

                Wie gesagt wenn ich's mal behirne würde ich dann gerne an den Tagen an denen der Tagdienst im Kalender eingetragen ist eben schon früher auf den Tagmodus schalten.

                Das ist nur ein Beispiel von vielen die mir da so im Kopf herummschwirren.

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

                  @Dutchman:

                  @tempestas:

                  Die Doku ist völlig korrekt.

                  Es geht darum, dass in dem Doku Beispiel eine von zwei Lampen in einen anderen Zustand versetzt wird, als ihr "Partner". Dementsprechend schaltet das Skript danach die Lampen nicht mehr synchron an und aus, sondern eben gegenläufig.

                  Der OP scheint hier misszuverstehen, dass es nur ein Beispiel ist, warum ein JS Script andere Effekte erzeugen kann, als man eventuell erwarten würde `

                  Dem stimme ich zu die Doku zum Script ist schon korrekt, nur wird nicht erklärt wie man das in diesem Beispiel mit vis macht.

                  Das gehört meiner Meinung nach aber nicht in die Script sondern vis docu

                  ~Dutch

                  –-----------------------

                  Send from mobile device `

                  Ich habe auch nicht behauptet das die Doku falsch ist, bis auf diesen einen uminösen Satz, sondern es geht mir genau um das was Dutch schreibt.

                  Ich versteh auch die Doku, schliesslich bin ich nicht ganz unbedarft.

                  Habe fast 20 Jahre lang Maschinensteuerungen in VB programmiert.

                  Mir sind diese Sachen also nicht fremd.

                  Ich weis wie man Variablen deklariert was Funktionen sind usw.

                  Nur mir fehlt eben einfach die Doku die die Verbindung der VIS mit dem Javascript beschreibt.

                  Egal wo auch immer es erklärt bzw. dokumentiert wird.

                  WO kann ich das nachlesen.

                  Das suche ich bzw. da brauche ich Hilfe.

                  Vielleicht denke ich da auch irgendwie falsch oder im Kreis keine Ahnung.

                  LG

                  Christian

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

                    Hallo Christian,

                    damit du mit deinen Versuchen weiter kommst:

                    hast du denn eine Lampe, die du schalten kannst? z.B. Hue oder eine Homematic Schalter oder sonstwas?

                    Wenn ja, kannst du im Admin, Reiter Objecte, diese Lampe raussuchen. Dort wirst du einen Channel "state" finden, der üblicherweise true/false anzeigt (i.e. an/aus).

                    Du musst für diene Versuche nicht in VIS schalten, du kannst auch im Object direct hinten am Status klicken und true/false ändern.

                    Für die Versuche analog der Doku brauchst du natürlich zwei Lampen. Dann kannst du es versuchen und nachvollziehen, was gemeint ist.

                    Übrigens löblich, dass du von 0 anfängst und dir alles aneignen willst (absolut ernst gemeint); da lernt man einfach mehr, als gleich zu schreiben "ich will xyz, wie geht das".

                    WENN du in VIS schalten willst:

                    öffne vis (IP:8082, dann VIS auswählen (muss natürlich installiert sein)). Dann nimmst du dir ein toggle widget oder du gibst links oben bei den widgets "light" ein und bekommst passende Schalter angezeigt. Diesen ziehst du auf deine Fläche und trägst bie "object id" deine Lampe ein, hier den State channel

                    Viel Erfolg weiterhin

                    P.S: VIS DOKU:

                    http://www.iobroker.net/docu/?page_id=6365&lang=de

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

                      @Dutchman:

                      @PapaChriLo:

                      Mit anderen Worten, ich hab null Plan/Idee wie ich die VIS dazu bringe, dieses oder ein anderes Skript auszuführen.

                      Hab mir einen Wolf gesucht um irgend ein Beispiel zu finden, aber leider. :roll:

                      Daher meine Bitte, kann mir hier wer auf die Sprünge helfen.

                      DANKE

                      Christian `

                      Hi Christian,

                      Hast du das mal probiert als beispiel?:

                      createState('javascript.0.System.Update', false;
                      
                      on ({
                      id: "javascript.0.System.Update",
                      change: 'ne',
                      val: true
                      },
                      function(){
                         log ("--> Update gestartet!");
                         setState('javascript.0.System.Update', false);
                                   }
                          });
                      });
                      
                      

                      Beispiel mit object script triggeren:

                      http://forum.iobroker.net/viewtopic.php … pt+starten

                      Alternatief script ein/ausschalten:

                      http://forum.iobroker.net/viewtopic.php ... pt+starten

                      http://forum.iobroker.net/viewtopic.php ... pt+starten

                      (Das waren uebrigens such ergebnisse mit search "vis script starten") `

                      Hallo Dutchmann!

                      Ja dieses Beispeil hab ich auch gefunden.

                      Ich verstehe auch den Code, denke ich zumindestens.

                      Was mir allerdings fehlt ist, wie sag ich dem Button, der Schaltfläche oder irgend einem anderen Widget

                      das er genau dieses Skript ausführen soll wenn ich in klicke.

                      Da komme ich nicht weiter.

                      Vermutlich denke ich auch nur zu kompliziert.

                      Keine Ahnung.

                      Christian

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

                        Hallo Christian,

                        tempestas hat es schon gut erklärt.
                        @PapaChriLo:

                        Nur mir fehlt eben einfach die Doku die die Verbindung der VIS mit dem Javascript beschreibt.

                        Egal wo auch immer es erklärt bzw. dokumentiert wird.

                        WO kann ich das nachlesen. `
                        Es gibt keine direkte Verbindung. Beide Adapter (Vis und Javascript) sind mit Admin verbunden. In Admin werden die Objekte (Datenpunkte) verwaltet. Javascript kann Objekte anlegen, beschreiben, löschen, ändern, eigentlich alles. VIS kann sie nur beschreiben (zB true/false) und anzeigen.

                        Also Vis führt keine Skripte aus, sondern beschreibt Objekte. Skript (oder auch Szenenadapter) reagiert dann auf Objektänderung.

                        Skripte müssen nicht extra ausgeführt werden, sondern sind immer aktiv.

                        Pix

                        1 Reply Last reply Reply Quote 0
                        • R
                          RappiRN Most Active last edited by

                          @pix:

                          Skripte müssen nicht extra ausgeführt werden, sondern sind immer aktiv. `

                          Wenn die Skripte aktiv sind müssen sie nicht extra ausgeführt werden, dafür sind ja die Trigger, das habe ich auch schon gelernt! 😄 Aber man kann Skripte sehrwohl aktivieren oder deaktivieren, auch über vis, ob es Sinn macht oder nicht, muss man selbst entscheiden.

                          Enrico

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

                            Hallo Leute!

                            Ich glaube ich muss das um was es mir eigentlich geht mal anders beschreiben.

                            Erst mal zu mir:

                            Ich bin nicht ganz unbedarft was das Programmieren angeht.

                            Ich habe fast 20 Jahre Maschinensteuerungen für Sondermaschinen entwickelt und programmiert.

                            Zwar nicht in Javascript sondern in VB aber ich denke das ist egal.Ich fange mit diesen Codebeispielen also durchaus etwas an und gehe auch davon aus das ich sie verstehe.

                            Zum Stand der Dinge:

                            Ich habe einen PI auf dem der ioBroker läuft.An diesem ist ein Touchscreen angeschlossen und das Ganze ist bei uns im Flur in der Wand eingebaut.

                            Ich hab mir z.B. für jeden Raum ein eigene View gebaut in dem ich die relevanten Sensoren und Aktoren

                            des jeweiligen Raumes visualisiere.

                            Des Weiteren einen View für Wetter und Klima,

                            einen mit verschiedenen Kalendern (Termine, Geburtstage)

                            und noch einige andere Views.

                            Das funktioniert soweit auch alles und ist vorerst mal zufriedenstellend.

                            Um was geht es mir:

                            Mir geht es um die Verbindung der VIS mit Javascript.

                            Mit anderen Worten, ich will mir verschiedenste Skripte bauen, die dann eben zu einem bestimmten Zeitpunkt oder bei einem bestimmten Ereignis oder wenn ich auf einen bestimmten Button in der VIS drücke, oder was auch immer, ausgeführt werden sollen.

                            Was fehlt mir:

                            Ich behirne einfach nicht, wie ich z.B. einem Button in der VIS klar machen soll, dass wenn er betätigt wird er dann eben ein ganz bestimmtes Skript ausführen soll.

                            Da fehlt mir irgendetwas und ich komm einfach nicht drauf was es ist.

                            Wie schon erwähnt, vielleicht denke ich da auch viel zu kompliziert.

                            Keine Ahnung.

                            LGChristian

                            PS.: Danke jedenfalls für eure Bemühungen. Ich weiß ich bin manchmal etwas schwer von Begriff.

                            1 Reply Last reply Reply Quote 0
                            • AlCalzone
                              AlCalzone Developer last edited by

                              @PapaChriLo:

                              einem Button in der VIS klar machen soll, dass wenn er betätigt wird er dann eben ein ganz bestimmtes Skript ausführen soll. `
                              Die Vorgehensweise in ioBroker ist hierfür etwas anders als du erwartest.

                              • Das Skript ist immer aktiv und überwacht mit einem Trigger einen oder mehrere Datenpunkte (die du dafür auch erstellen musst). Der meiste Code befindet sich innerhalb von Triggern, d.h. wird nur bei Bedarf ausgeführt.

                              • Mit dem Button setzt du den überwachten Datenpunkt auf true/false

                              • Der Trigger innerhalb des Skripts reagiert darauf, d.h. führt den jeweiligen Codeblock aus.

                              1 Reply Last reply Reply Quote 0
                              • R
                                RappiRN Most Active last edited by

                                Ich würde sagen, mit den Skripten kannst du automatisch auf irgendwelche Änderungen reagieren.

                                Die Button im vis kannst du doch meist direkt mit den Aktoren verbinden und dann sofort und ohne Skript schalten. In der Konfiguration zu den Button kannst du dann einstellen was reagieren, oder welches Objekt schalten soll, bzw. angezeigt werden soll.

                                Enrico

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

                                  @PapaChriLo:

                                  wie ich z.B. einem Button in der VIS klar machen soll, dass wenn er betätigt wird er dann eben ein ganz bestimmtes Skript ausführen soll. `
                                  Es werden keine Skripte ausgeführt (die laufen immer), sondern es werden Funktionen aufgerufen.
                                  @PapaChriLo:

                                  die dann eben zu einem bestimmten Zeitpunkt… `
                                  Das macht man mit https://github.com/ioBroker/ioBroker.javascript#schedule.
                                  @PapaChriLo:

                                  …oder bei einem bestimmten Ereignis... `
                                  Dazu gibt es https://github.com/ioBroker/ioBroker.javascript#on–-subscribe-on-changes-or-updates-of-some-state, mit dem man meistens auf Wertänderung triggert.
                                  @PapaChriLo:

                                  …oder wenn ich auf einen bestimmten Button in der VIS drücke `
                                  Dazu aktualisiert man mit dem VIS-Button einen Datenpunkt, der im Skript als Trigger ausgewertet wird.

                                  Prinzip:

                                  const idAuslöser = '...';
                                  const idButton = '...';
                                  
                                  function meineFunktion() {
                                      ...
                                  }
                                  
                                  // zeitabhängiges Ereignis
                                  schedule('0 * * * *', meineFunktion);  // jede volle Stunde
                                  
                                  // Ereignis ist Wertänderung eines Datenpunktes
                                  on(idAuslöser, meineFunktion);
                                  
                                  // Ereignis ist (VIS-)Button-Datenpunkt
                                  on({id: idButton}, meineFunktion);  // Triggern bei Aktualisierung des Zeitstempels
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • P
                                    PapaChriLo last edited by

                                    So, OK das die Skripte immer laufen hab ich jetzt kapiert.

                                    Das man dann quasi nur die Funktion in dem Skript aufruft hab ich auch kapiert.

                                    Das ich meinen Button mit einem Datenpunkt verknüpfen muss ist mir auch schon seit längerem klar.

                                    Nur genau da setzt es jetzt bei mir aus.

                                    Ich hab z.B. ein Skript gebaut, welches das Browserfenster neu laden soll.

                                    Hier der Code:


                                    createState('javascript.0.VIS.Skriptstart', false, {name: 'NewLoad'});

                                    on('javascript.0.VIS.Skriptstart', function (obj) {

                                    if (!obj.state.ack && obj.state.val) {

                                    //Browser neu laden

                                    window.location.reload();

                                    }

                                    });


                                    Ich denke das Skript sollte funktionieren, lass mich aber auch gerne eines Besseren belehren.

                                    So jetzt hab ich einen View der heißt System bei mir, auf diesem View hab ich einen naviation-Button.

                                    Bei diesem Button habe ich in der Objekt ID das dementsprechende Skript eingetragen.

                                    und jetzt weiß ich nicht mehr weiter, denn es funktioniert leider nicht. 😢

                                    Und ich hab echt null Plan warum nicht. :oops:

                                    Christian
                                    3722_iobroker.png

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

                                      Bei Skripten sind andere zuständig 😉

                                      Aber was willst du mit dem Navigation widget?

                                      Warum nimmst du nicht einfach ein on/off toggle?

                                      Das HQ-Widget kannst du auch als Taster konfigurieren.

                                      Und Skript enabled ist auch nicht der DP, den du benötigst.

                                      Du müsstest den DP auf den dein Skript triggert einbinden.

                                      Gruß

                                      Rainer

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

                                        Du hast zum einen das Skript in die Einstellungen für die Sichtbarkeit (des Widgets) reingeschrieben. Das kann nicht funktionieren.

                                        Dieser Bereich ist dafür vorgesehen, z.B. Texte (oder was auch immer) ein- oder auszublenden, wnen bestimmte Bedingungen (nicht) erfüllt sind. Also eine optische Sache.

                                        1 Reply Last reply Reply Quote 0
                                        • R
                                          RappiRN Most Active last edited by

                                          Ein Navigationsbutton ist dafür falsch. Und du hast deinen Datenpunkt im Feld Sichtbarkeit eingetragen, da kommen nur Bedingungen rein, wenn das Widget nicht immer zu sehen sein soll.

                                          Du kannst z.B. basic HTML state nehmen.

                                          Enrico

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

                                            Diese Buttons die du da anführst find ich leider alle nicht. :?:

                                            Was den DP angeht.

                                            Ich hab ja nur diesen Datenpunkt, wie soll ich dann einen anderen auswählen.
                                            3722_iobroker.png

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            665
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            11
                                            40
                                            5302
                                            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