Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. (gelöst) Zwei Fragen zu VIS und Javascript (JS Job stopt ./. Parameter von VIS an JS übergeben)

    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

    (gelöst) Zwei Fragen zu VIS und Javascript (JS Job stopt ./. Parameter von VIS an JS übergeben)

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

      Hallo zusammen,

      ich spiele (sofern meine Kinder und meine Frau mir Zeit lässt) seit kurzer Zeit mit dem ioBroker und bin richtig zufrieden mit der Lösung!

      In den letzten Tagen habe ich nun mit der automatisierten Bearbeitung des Anwesenheitsstatus im Haus beschäftigt.

      In einem Eigenen Objekt pro Familienmitglied wird ein Logikwert (true | false) gespeichert

      eigene-objekte.0.status.anwesenheit.anwesend_familie
      eigene-objekte.0.status.anwesenheit.anwesend_philipp
      eigene-objekte.0.status.anwesenheit.anwesend_
      

      Die Werte möchte ich über mehrere Wege manipulieren. Ich möchte über einen Button jedem Mitglied die einfache Möglichkeit geben beim Verlassen des Hauses seinen Zustand zu ändern.

      Dafür habe ich mir (ersta mal für jedes Familienmitglied ein JS gebaut - Ich weiß noch nicht wie ich parameter an JS übergeben kann)

      /* 
      Setzten den Wert eines Objekts um so dass dieser später interpretiert werden kann.
      
      Invertiert den Wert einfach auf true oder false
      
      Version 0.0.1
      */
      
      var logging = true;
      var person =  'philipp';
      
      state = getState('eigene-objekte.0.status.anwesenheit.anwesend_' +person).val;
      
      if (logging) log('Aktueller Zustand: ' + state);
      
      if (state) {
          setstate = false
          setState('eigene-objekte.0.status.anwesenheit.anwesend_' + person, setstate);
          if (logging) log('Zustand geändert auf : ' + setstate);
      }
      if (!state) {
          setstate = true
          setState('eigene-objekte.0.status.anwesenheit.anwesend_' + person, setstate);
          if (logging) log('Zustand geändert auf : ' + setstate);
      }
      
      

      Das script läuft einwandfrei wenn ich es manuell "aktualisiere" etc.

      Nun habe ich mir im VIS einen Button gebaut und diesen auf das JS verlinkt (siehe unten rechts):
      3490_check_anonym.png

      Der Status wird auch abgefragt und das entsprechende Symbol angezeigt.

      Klicke ich nun auf einen der vier Buttons wird das JS gestoppt.

      javascript.0	2017-09-22 13:32:39.994	info	Stop script script.js.Eigene-Scripte.Anwesenheit.anw_philipp
      
      

      Beendet:

      ~~![](</s><URL url=)https://img2.picload.org/image/dgaorcdw/script.png" />

      Manuell macht er es 1A

      ~~![](</s><URL url=)https://img3.picload.org/image/dgaorcol/script2.png" />

      Geändert zum zweiten Mal:

      ~~![](</s><URL url=)https://img2.picload.org/image/dgaorcll/script3.png" />

      Frage 1) Was mache ich falsch

      Frage 2) Wie kann ich über den Button einen Wert an das JS übergeben? Aktuell habe ich vier Scripte (für Jedes Familienmitglied eines). Gerne würde ich aber den Namen an das Script übergeben udn diesen später dann verwenden. Halt eben in einem script.

      LG

      Philipp

      Hier noch mein Widget vom Button

      [{"tpl":"tplJquiButtonState","data":{"oid":"javascript.0.scriptEnabled.Eigene-Scripte.Anwesenheit.anw_luise","g_fixed":true,"g_visibility":false,
      "g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,
      "g_css_border":false,"g_gestures":false,"g_signals":true,"visibility-cond":"==",
      "visibility-val":1,"visibility-groups-action":"hide","buttontext":"","signals-cond-0":"==",
      "signals-val-0":true,"signals-icon-0":"/vis.0/Meine_Images/control_all_green.png",
      "signals-icon-size-0":"67","signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,
      "signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":"false",
      "signals-icon-1":"/vis.0/Meine_Images/control_all_red.png","signals-icon-size-1":"67",
      "signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,
      "signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png",
      "signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,
      "signals-hide-edit-2":false,"html_append":"","name":"Anzeige_Anwesenheit_Status_Luise",
      "signals-oid-0":"eigene-objekte.0.status.anwesenheit.anwesend_luise",
      "signals-oid-1":"eigene-objekte.0.status.anwesenheit.anwesend_luise"},
      "style":{"left":"798px","top":"862px","width":"67px","height":"67px"},
      "widgetSet":"jqui"}]
      ````~~~~~~
      1 Reply Last reply Reply Quote 0
      • R
        rayman last edited by

        oh man, ganz einfach das mit dem js script das stoppt.

        wenn man dem button kein value mitgibt, dann beendet er anscheinend das script..

        als value gebe ich nun true mit.

        und tata es geht 😃

        Bleibt noch die Frage wie ich über den VIS Button einen Parameter übergeben bekomme.

        Mein Kopf glüht.

        ![](</s><URL url=)https://img3.picload.org/image/dgaodgow/jawohl.png" />

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

          @rayman:

          ![](</s><URL url=)https://img3.picload.org/image/dgaodgow/jawohl.png" /> ` ~~Wofür brauchst du eigentlich die Skripte? Kannst doch in VIS direkt in den jeweiligen Anwesenheits-Datenpunkt schreiben anstatt scriptEnabled.

          So kannst du auch in Abhängigkeit vom Wert des Datenpunkts die Anwesenheit visualisieren. Frag mich jetzt aber nicht wie, ich benutze VIS nicht.

          Parameter an Skripte übergeben ist so nicht gedacht. Das Skript ist ein in sich geschlossenes Programm, das jedoch auf Änderungen an Datenpunkten reagieren kann.~~

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

            Hallo.

            genau so ist es. Eigentlich wird ein Skript nicht bei Bedarf gestartet. Es sollte immer laufen. Es überwacht die gelisteten Objekte auf Änderung/Aktualisierung und reagiert dann. Oder es führt Aktionen nach Zeitsteuerungen aus.

            AlCalzone hat den richtigen Weg gewiesen. Schreibe in VIS direkt in die Datenpunkte oder nutze ein Boolean-Toggle Widget (zB Metro-Toggle).

            Dann brauchst du für die Ausführung der Aktionen (also der Logs, Mitteilungen etc.) noch einen Trigger. Das ist die on-Funktion. Ohne diese Subscription werden die Werte nur bei Skriptstart eingelesen. Sie sollen aber immer bei Änderung oder Änderung eingelesen und verarbeitet werden:

            /* 
            Setzten den Wert eines Objekts um so dass dieser später interpretiert werden kann.
            
            Invertiert den Wert einfach auf true oder false
            
            Version 0.0.1
            */
            
            var logging = true;
            var person =  'philipp';
            
            // ich bennene state in idState um.
            idState = getState('eigene-objekte.0.status.anwesenheit.anwesend_' +person).val;
            
            on(idState, function (obj) {
                var status; // variable anlegen, name status ist besser als setstate
                if (logging) log('Aktueller Zustand: ' + obj.state.val);
                if (obj.state.val) { // wenn true
                    status = false;
                    setState(idState, status);
                }
                if (!obj.state.val) { // wenn false, man könnte auch else nehmen
                    status = true;
                    setState(idState, status);
                }
                if (logging) log('Zustand geändert auf : ' + status); // einmal am Ende reicht
            }
            
            

            Es geht noch kürzer, aber ich will nicht zu viele Änderungen auf einmal vornehmen…

            Gruß

            Pix

            1 Reply Last reply Reply Quote 0
            • R
              rayman last edited by

              Hallo zusammen,

              danke für das Feedback. Entschuldigt bitte die späte Rückmeldung. Ich wurde gestern kurz nach dem Post sehr ungemütlich von der Familie entführt 🙂 und komme erst jetzt wieder an den PC.

              Ich schaue mir das mal an mit der "Vereinfachung" das hört sich logisch an.

              > . Schreibe in VIS direkt in die Datenpunkte oder nutze ein Boolean-Toggle Widget (zB Metro-Toggle).

              Das werde ich probieren und eine Rückmeldung geben.

              Gruß

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

                @rayman:

                Hallo zusammen,

                ich spiele (sofern meine Kinder und meine Frau mir Zeit lässt) seit kurzer Zeit mit dem ioBroker und bin richtig zufrieden mit der Lösung!

                In den letzten Tagen habe ich nun mit der automatisierten Bearbeitung des Anwesenheitsstatus im Haus beschäftigt.

                In einem Eigenen Objekt pro Familienmitglied wird ein Logikwert (true | false) gespeichert

                eigene-objekte.0.status.anwesenheit.anwesend_familie
                eigene-objekte.0.status.anwesenheit.anwesend_philipp
                eigene-objekte.0.status.anwesenheit.anwesend_
                

                Die Werte möchte ich über mehrere Wege manipulieren. Ich möchte über einen Button jedem Mitglied die einfache Möglichkeit geben beim Verlassen des Hauses seinen Zustand zu ändern.

                Dafür habe ich mir (ersta mal für jedes Familienmitglied ein JS gebaut - Ich weiß noch nicht wie ich parameter an JS übergeben kann) `
                Ich finde deine View klasse!

                Darf ich die Publishen (z.B. Facebook)? Unter welchen Bedienungen?

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

                  gibt es einen Grund für das Script?

                  Du kannst auch einfach so die States anlegen (meinetwegen via Skript) und dann einfach nur z.B. metro tile toggle nutzen um hin und her zu schalten. Dafür braucht es kein Skript.

                  Edit: sorry, habe vor lauter Bildern nicht gesehe, dass schon lange geantwortet wurde

                  1 Reply Last reply Reply Quote 0
                  • R
                    rayman last edited by

                    @Bluefox:

                    Ich finde deine View klasse!

                    Darf ich die Publishen (z.B. Facebook)? Unter welchen Bedienungen? `

                    Hi,

                    Kannst du gerne verwenden. Ich bin noch in den Feinarbeiten und somit wird es alle paar Tage etwas anders aussehen. Aber vom Prinzip her ist das Layout fertig.

                    Ich stelle keine Bedingungen.

                    1 Reply Last reply Reply Quote 0
                    • R
                      rayman last edited by

                      @tempestas:

                      gibt es einen Grund für das Script?

                      Du kannst auch einfach so die States anlegen (meinetwegen via Skript) und dann einfach nur z.B. metro tile toggle nutzen um hin und her zu schalten. Dafür braucht es kein Skript.

                      Edit: sorry, habe vor lauter Bildern nicht gesehe, dass schon lange geantwortet wurde `

                      Hi,

                      ich habe es mir tatsächlich sehr umständlich gemacht.

                      Für das ganze VIS brauche ich mehr Zeit. Woher nehmen wenn nicht vorhanden 😄

                      1 Reply Last reply Reply Quote 0
                      • A
                        AingTii last edited by

                        Hallo Zusammen,

                        da hätte ich mal noch ne Frage zu.

                        Zum einen, gibt es einen VIS Button mit 3 Stati senkrecht?

                        zum anderen gibt es oder am besten kann ich dem Button auch eigene Zustände anheften?

                        also nicht True, False etc. sondern so dass ein Skript dann auch Auf, Zu, Stop, Warten etc.

                        erfassen kann?

                        Dann die Frage, wenn ich nun 10 Rolläden steuern möchte, müsste ich für jeden Rollladen ein eigenes Skript

                        anlegen oder könnte ich den einen Datenpunkt mit z.B 30 verschiedenn Stati berschreiben

                        und das Skript nimtm den Status udn schreibt ihn ins Log oder sendet ihn?

                        Beispiel:

                        Rollladen1Up

                        Rollladen1Stop

                        Rollladen1Down

                        Rollladen2Up

                        ….

                        Danke

                        Gruß jens

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        898
                        Online

                        31.9k
                        Users

                        80.2k
                        Topics

                        1.3m
                        Posts

                        6
                        10
                        3079
                        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