Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript einem VIS Button zuweisen….

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.6k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.8k

JavaScript einem VIS Button zuweisen….

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
16 Beiträge 7 Kommentatoren 12.7k Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • S Offline
    S Offline
    simpixo
    schrieb am zuletzt editiert von
    #1

    Wie kann ich denn eigentlich eine Javascript Funktion einem Button im VIS zuweisen, damit dieses Script beim Betätigung ausgeführt wird? :?

    1 Antwort Letzte Antwort
    0
    • blauholstenB Offline
      blauholstenB Offline
      blauholsten
      Developer
      schrieb am zuletzt editiert von
      #2

      Hi,

      indem du z.B. im JS Adapter einen Datenpunkt anlegst, und diesen dann bei Objekt ID im VIS beim zugehörigen button einträgst.

      Den Datenpunkt kannst du im JS Adapter folgendermaßen anlegen:

      Variante 1.

      Im Admin unter dem Reiter Objekte, in der JS Instanz auf + drücken

      Variante 2.

      Ein Skript anlegen, und dort mit Hilfe von createstate einen Datenpunkt erzeugen (bsp. Sieht man in der JS doku)

      Wenn du das alles gemacht hast, musst du in deinem Skript auf die Veränderungen des buttons reagieren. Das geht mit Hilfe der on('dein Datenpunkt', function(){mache was;});

      Gesendet von unterwegs….

      Entwickler vom: - Viessman Adapter
      - Alarm Adapter

      1 Antwort Letzte Antwort
      0
      • P Offline
        P Offline
        pix
        schrieb am zuletzt editiert von
        #3

        Bluefox hat das mal so gepostet (für hier etwas angepasst):

        createState('javascript.0.VIS.Skriptstart', false, {name: 'Skript bei VIS Tastendruck starten'});
        
        on('javascript.0.VIS.Skriptstart', function (obj) {
            if (!obj.state.ack && obj.state.val) {
                // was soll passieren?
                // hier die Ausführung rein
            }
        });
        

        In VIS dann einen Knopf oder Link einbauen, der bei Druck den Wert "true" in die Variable schreibt:

        [{"tpl":"tplBasicState","data":{"oid":"javascript.0.VIS:Skriptstart","visibility-cond":"==","visibility-val":1,"value":"true","html":"[aktualisieren]","name":"Javascript ausführen","class":"","icon_src":"","gestures-offsetX":0,"gestures-offsetY":0,"gestures-swiping-value":"","gestures-rotating-value":"","gestures-pinching-value":"","gestures-swipeRight-value":"","gestures-swipeLeft-value":"","gestures-swipeUp-value":"","gestures-swipeDown-value":"","gestures-rotateLeft-value":"","gestures-rotateRight-value":"","gestures-pinchIn-value":"","gestures-pinchOut-value":""},"style":{"left":"318px","top":"28px","z-index":"40","color":"","font-family":"","font-style":"","font-size":"12px","width":"auto","height":"auto"},"widgetSet":"basic"}]
        

        Gruß

        Pix

        ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

        1 Antwort Letzte Antwort
        0
        • D Offline
          D Offline
          DerGraf123
          schrieb am zuletzt editiert von
          #4

          Hallo zusammen.

          Schön, dass man immer wieder weiter lernt. Befasse mich nun auch neuerdings mit Iobroker und Javascript. Aber irgendwie hakt es.

          Wie kriege ich denn den Button dazu bewegt als sich als "Aktiv" zu zeigen.

          Hintergrund:

          Ich möchte mittels jqui Ctrl Buttons eine vertikale Liste von Radiosendern (max. 10 Stück) erstellen. Alle Buttons zeigen auf das selbe Javascript und als Value werden die URL´s gesendet.

          Im Script wird dann obj.newState.val einfach an Tasker (TNES) geschickt, der dann das Webradio im Hintergrund startet, bzw. andere Dinge erledigt.

          Irgendwie muss das doch machbar sein, den Button zu "aktivieren" um zu sehen was läuft. Also irgendwie wenn Objekt State = Button Value dann Button aktiv

          1 Antwort Letzte Antwort
          0
          • P Offline
            P Offline
            pix
            schrieb am zuletzt editiert von
            #5

            Hallo,

            ich würde mit createState oder dem Objekt Reiter ein Objekt erstellen (Name: SenderURL, Typ: String).

            Dann im Javascript das Objekt beobachten. Es wird nämlich in VIS von den "Wert-Widgets" bei Tastendruck mit der entsprechenden URL als String gefüttert.

            on({ id: SenderURL,
                change: 'any'
            } , function (obj) {
                // hier die URL aufrufn mit dem Inhalt des Objektes (obj.state.val)
            });
            
            

            Gruß

            Pix

            ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

            1 Antwort Letzte Antwort
            0
            • D Offline
              D Offline
              DerGraf123
              schrieb am zuletzt editiert von
              #6

              Danke für die Antwort.

              Die URL wird auch schön übergeben, jedoch bleibt der entsprechende Button nicht aktiv. Vielleicht drücke ich mich auch falsch aus:

              Ich benutze die Standard jqui Widgets in schwarz. Bei den On/Off Widgets ist dann der aktive Button blau. So soll es auch mit den SenderURL sein. Aktuell ist jedoch der Button nach anklicken nur leicht blau überlagert. Sobald ich irgendwo ins leere klicke ist der "aktive" Button wieder schwarz :(

              Vielleicht ist auch ein "ctrl Button State" Widget der völlig falsche Ansatz für mein Vorhaben. Mit dem Widget "ctrl Radiobuttons ValueList" funktioniert es, jedoch nur horizontal. Es klappt auch, wenn ich für jeden Sender ein eigenes "ctrl Radiobuttons ValueList" Widget nehme und auf die gleiche ObjectID zeige. Leider kann ich da aber keine fixe Breite des Button angeben. Egal was ich eintrage, es bleibt gleich :evil:

              Für weitere Tipps bin ich dankbar.

              Gruß DerGraf

              1 Antwort Letzte Antwort
              0
              • B Offline
                B Offline
                balear59
                schrieb am zuletzt editiert von
                #7

                Hallo und Moin Moin,

                verstehe Dein Problem und kann Dir leider nicht helfen. Es würde mich aber brennend interessieren wie Du das mit dem Webradio verwirklichst. Habe ein iPad 2 über Bluetooth mit einer Airport Express mit Lautsprechern verbunden. Wie schaffe ich es in iobroker Vis Webradio zum laufen zu bringen? Bin leider mehr der Dau :D

                viel Spass noch

                Jens

                1 Antwort Letzte Antwort
                0
                • D Offline
                  D Offline
                  DerGraf123
                  schrieb am zuletzt editiert von
                  #8

                  Ich weiß nicht, ob das unter iOS funktioniert.

                  Für das Webradio über VIS braucht man unter Android 3 Apps: Tasker, TNES für Tasker und Intentradio.

                  Der VIS Button sendet ein HTTP POST mit der Stream URL an TNES. Dieser startet ein Event, wo die URL an Intentradio übergeben wird. Fertig.

                  1 Antwort Letzte Antwort
                  0
                  • N Offline
                    N Offline
                    Nanouk
                    schrieb am zuletzt editiert von
                    #9

                    Halli hallo,

                    ich grab das mal wieder aus.

                    Könnte bitte jemand mal anhand irgendeines Radiosender ein Beispiel-Script mit dem dazugehörigen vis Widget Button posten.

                    Ich hänge hier einfach fest und müsste dringend was für den WAF tun.

                    Gruß Nanouk

                    1 Antwort Letzte Antwort
                    0
                    • P Offline
                      P Offline
                      pix
                      schrieb am zuletzt editiert von
                      #10

                      @Nanouk:

                      Könnte bitte jemand mal anhand irgendeines Radiosender ein Beispiel-Script mit dem dazugehörigen vis Widget Button posten.

                      Ich hänge hier einfach fest und müsste dringend was für den WAF tun. `
                      Hallo Nanouk

                      wie wäre es damit? Zwar kein Radio, aber Fernsehen ;)

                      http://forum.iobroker.net/viewtopic.php?f=35&t=2369

                      Gruß

                      Pix

                      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                      1 Antwort Letzte Antwort
                      0
                      • D Offline
                        D Offline
                        DerGraf123
                        schrieb am zuletzt editiert von
                        #11

                        Für meine Kombination aus Intentradio und TNES hab ein simples Script laufen:

                        var request = require('request');
                        
                        createState('javascript.0.RadioURL', 'aus', {name: 'Radio Buttons'});
                        
                        on({ id: "javascript.0.RadioURL", change: 'any'} , function (obj) {
                            if (obj.state.val.substr(0,4) == 'http') {
                                request.post({ 
                                    url:    'http://192.168.178.21:8765',
                                    form:   { radiourl: obj.state.val, station: "Webradio" }
                                }, function(error, response, body) { if (error) log(error, 'error'); });
                                log("Intentradio Play: " + obj.state.val,"info");
                            }
                            else {
                                request.post({url:'http://192.168.178.21:8765',form:{ intentradio: "stop" }},function(error, response, body) { if (error) log(error, 'error'); });
                                log("Intentradio Stop","info");
                        
                            }
                        });
                        

                        In VIS habe ich Radiobuttons erstellt, die die Webradio URL in dir "javascript.0.RadioURL" schreibt. Dazu ist noch ein Button der anstatt der URL ein einfaches "aus" als Wert schreibt.

                        Meine Gattin ist zufrieden ;-)

                        1 Antwort Letzte Antwort
                        0
                        • N Offline
                          N Offline
                          Nanouk
                          schrieb am zuletzt editiert von
                          #12

                          Hey,

                          Fernsehen kommt auf jeden Fall auf die Liste :-)

                          Jetzt muss aber erstmal das Radio funktionieren.

                          Ich habe das Skript von Der Graf genommen und das Widget von Pix.

                          var request = require('request');
                          
                          createState('javascript.0.RadioURL', 'aus', {name: 'Radio Buttons'});
                          
                          on({ id: "javascript.0.RadioURL", change: 'any'} , function (obj) {
                              if (obj.state.val.substr(0,4) == 'http') {
                                  request.post({ 
                                      url:    'http://192.168.123.4:8765',
                                      form:   { radiourl: obj.state.val, station: "Webradio" }
                                  }, function(error, response, body) { if (error) log(error, 'error'); });
                                  log("Intentradio Play: " + obj.state.val,"info");
                              }
                              else {
                                  request.post({url:'http://192.168.123.4:8765',form:{ intentradio: "stop" }},function(error, response, body) { if (error) log(error, 'error'); });
                                  log("Intentradio Stop","info");
                          
                              }
                          });
                          

                          Folgende Fehlermeldung bekomme ich:

                          TypeError: obj.state.val.substr is not a function at Object. (script.js.radio.radio_button_graf:6:23) at Object.subs.callback (D:\ioBroker\node_modules\iobroker.javascript\javascript.js:1251:48) at D:\ioBroker\node_modules\iobroker.javascript\javascript.js:571:48 at getObjectEnums (D:\ioBroker\node_modules\iobroker.javascript\javascript.js:2937:17) at checkPatterns (D:\ioBroker\node_modules\iobroker.javascript\javascript.js:567:17) at Object.utils.adapter.stateChange (D:\ioBroker\node_modules\iobroker.javascript\javascript.js:245:17) at Object.that.states.States.change (D:\ioBroker\node_modules\iobroker.js-controller\lib\adapter.js:2120:37) at Socket. (D:\ioBroker\node_modules\iobroker.js-controller\lib\states\statesInMemClient.js:45:30) at Socket.Emitter.emit (D:\ioBroker\node_modules\iobroker.js-controller\node_modules\socket.io-client\node_modules\component-emitter\index.js:131:20) at Socket.onevent (D:\ioBroker\node_modules\iobroker.js-controller\node_modules\socket.io-client\lib\socket.js:263:10) at Socket.onpacket (D:\ioBroker\node_modules\iobroker.js-controller\node_modules\socket.io-client\lib\socket.js:221:12)
                          

                          Kann mir da jemand weiterhelfen?

                          Gruß Nanouk

                          PS: Für was steht````
                          if (obj.state.val.substr(0,4) == 'http')

                          1 Antwort Letzte Antwort
                          0
                          • BluefoxB Offline
                            BluefoxB Offline
                            Bluefox
                            schrieb am zuletzt editiert von
                            #13

                            > if (obj.state.val && obj.state.val.substr(0,4) == 'http') {

                            Warum aber obj.state.val kein String ist, das musst du wissen.

                            1 Antwort Letzte Antwort
                            0
                            • D Offline
                              D Offline
                              DerGraf123
                              schrieb am zuletzt editiert von
                              #14

                              "obj.state.val" sollte den Inhalt des on() Objektes beinhalten. Da angehängte substr(0,4) soll dabei nur einen Teil zurückgeben. In diesem Fall die ersten 4 Zeichen. Da meine Buttons nur auf Streams zeigen, die mit "http://" oder "https://" beginnen, habe ich mich für substr entschieden.

                              Eine Prüfung auf Vorhandensein, wie es Bluefox vorgeschlagen hat, habe ich verzichtet, da wegen dem createState() das Objekt mit Inhalt eigentlich da sein sollte. Ich bin aber auch nur ein Javascript Rookie (Perl und PHP klappen da schon besser) und wenn Bluefox meint, dass Du das so probieren sollst, dann mach es. Er ist der Profi.

                              Als Widget habe ich pro Radiosender ein "Radiobuttons ValueList" genommen, da ich die Buttons vertikal angeordnet habe. ObjectID sind alle "javascript.0.RadioURL", In Werte kommt einfach die URL rein, mit Ausnahme der Aus-Funktion. Da habe ich als Wert "aus" eingetragen. Im TNES-Task RadioOn filter ich "radiourl" und übergebe die Variable "url: %tpe_radiourl" nach Play Intentradio. Im TNES-Task RadioOff filter ich nach "radiourl == aus" und führe Stop Intentradio aus. So läuft es bei mir.

                              Vielleicht guckst Du auch mal im iobroker.admin im Objekte-Tab, ob überhaupt das Objekt RadioURL unter javascript.0 erstellt wurde und, falls ja, ob der von Vis gesendete Wert auch richtig übergeben wurde.

                              Viel Erfolg

                              1 Antwort Letzte Antwort
                              0
                              • N Offline
                                N Offline
                                Nanouk
                                schrieb am zuletzt editiert von
                                #15

                                So,

                                die Fehlermeldungen sind weg.

                                Das lag am falschen Widget. Mit dem Radiobuttons Widget gibt es diese Fehler nicht mehr.

                                In ioBroker Objekte wird die URL auch eingetragen.

                                Nur Tasker / TNES schickt sie nicht weiter an Intentradio.

                                Da aber dieses Skript, welches ich auch irgendwo ausgegraben habe, funktioniert,

                                ` > var request = require('request');

                                request.post({

                                url: 'http://192.168.123.4:8765',

                                form: { title: "t4e", station: "Techno4Ever" }

                                }, function(error, response, body) {

                                if (error) log(error, 'error');

                                }); `

                                muss mein Fehler wohl noch irgendwie an "url: %tpe_radiourl" liegen, vermute ich.

                                Ich hab jetzt schon so viel versucht, und komme (mal wieder :D ) nicht weiter.

                                Gruß Nanouk

                                1 Antwort Letzte Antwort
                                0
                                • N Offline
                                  N Offline
                                  Nanouk
                                  schrieb am zuletzt editiert von
                                  #16

                                  Es funktioniert.

                                  Habe nichts geändert, aber auf einmal gehts!

                                  Vielen Dank für die Hilfe!

                                  Gruß Nanouk

                                  1 Antwort Letzte Antwort
                                  0
                                  Antworten
                                  • In einem neuen Thema antworten
                                  Anmelden zum Antworten
                                  • Älteste zuerst
                                  • Neuste zuerst
                                  • Meiste Stimmen


                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  811

                                  Online

                                  32.4k

                                  Benutzer

                                  81.5k

                                  Themen

                                  1.3m

                                  Beiträge
                                  Community
                                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                  ioBroker Community 2014-2025
                                  logo
                                  • Anmelden

                                  • Du hast noch kein Konto? Registrieren

                                  • Anmelden oder registrieren, um zu suchen
                                  • Erster Beitrag
                                    Letzter Beitrag
                                  0
                                  • Home
                                  • Aktuell
                                  • Tags
                                  • Ungelesen 0
                                  • Kategorien
                                  • Unreplied
                                  • Beliebt
                                  • GitHub
                                  • Docu
                                  • Hilfe