Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. socket io - state lesen und setzen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

socket io - state lesen und setzen

Scheduled Pinned Locked Moved JavaScript
javascript
36 Posts 5 Posters 6.0k Views 12 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G GiuseppeS

    @liv-in-sky
    In deinem dargestellten Skript steht folgendes:

    var objID = "_userdata.0.buttonTest";
    

    Müsste das nicht so lauten? (0 zu Beginn)

    var objID = "0_userdata.0.buttonTest";
    
    liv-in-skyL Offline
    liv-in-skyL Offline
    liv-in-sky
    wrote on last edited by
    #18

    @GiuseppeS da hast du recht - hatte ich aber schon ausgerauscht - deshalb "drüber schlafen" - die konzentration läßt nach

    nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

    1 Reply Last reply
    0
    • apollon77A Offline
      apollon77A Offline
      apollon77
      wrote on last edited by
      #19

      Warum nehmt ihr getStates? Ich meinte oben getState (Einzahl). Dann wäre es direkt gegangen ;-)

      Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

      • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
      • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
      G 1 Reply Last reply
      0
      • G GiuseppeS

        Ich hatte vor kurzem hier im Forum mal die Lösung gesehen, dass "setState" aus VIS heraus nach diesem Schema funktioniert:

        this.servConn._socket.emit('setState', objID, !states[objID].val);
        

        Gerade habe ich es aber gemäß Doku getestet. Das funktioniert demnach auch:

        servConn.setState(objID, !states[objID].val);
        

        Habe daher den obigen Code Schnipsel angepasst und so läufts auch:

        <button value="true" onClick="setOnClickCustom(this.value)">BtnDevice</button>
         
        <script>
        function setOnClickCustom(val) {
            var objID = "0_userdata.0.Tasker_Bool";
            servConn.getStates(objID, (error, states) => {
                console.log(states);
                servConn.setState(objID, !states[objID].val);
            });
        }
        </script>
        

        Ich bin mir jetzt absolut unsicher, welchen Einfluss die "lange" Schreibweise hat oder ob es sonstige Nebenwirkungen gibt, wenn "this" in diesem Fall nicht genutzt wird. Bin auch kein ITler und mit JS erst seit iobroker unterwegs. Aber diese Möglichkeiten mit iobroker, VIS und Co. sind einfach genial.

        ? Offline
        ? Offline
        A Former User
        wrote on last edited by
        #20

        @GiuseppeS said in socket io - state lesen und setzen:

        So, habe meine Test-Tabelle damit angepasst und ja, der DP wechselt zwischen true und false hin und her.
        Muss ich noch was machen, damit auch die Anzeige auf dem Button sich mit anpasst?
        Oder ist das noch nicht vorgesehen ? ;-)

        @apollon77 @liv-in-sky Ich werde den Beitrag weiter verfolgen: ich bin mir sicher, ihr tunt das noch weiter auf :)

        1 Reply Last reply
        0
        • apollon77A apollon77

          Warum nehmt ihr getStates? Ich meinte oben getState (Einzahl). Dann wäre es direkt gegangen ;-)

          G Offline
          G Offline
          GiuseppeS
          wrote on last edited by
          #21

          @apollon77 sagte in socket io - state lesen und setzen:

          Warum nehmt ihr getStates? Ich meinte oben getState (Einzahl). Dann wäre es direkt gegangen ;-)

          Ganz einfach, Unwissenheit. Auf der socket.io Readme im Github Repo steht nur was von getStates, nichts bzgl. getState. Da scheint bei @liv-in-sky aber irgendwas weiterhin nicht zu passen, weil es bei ihm anscheinend weiterhin nicht funktioniert.

          @HeinrichB
          Hier wurde die grundsätzliche Vorgehensweise diskutiert. Den Text für den Button kann man ja individuell ergänzen.
          Bei der Zeile mit setState einfach darunter noch einmal setState Funktion aufrufen. Dort dann den gewünschten Text in eine objID schreiben. True / False Anzeige klappt wie das togglen an sich. Aber richtige freie Texte, da wirst du wohl noch eine Bedingung einfügen müssen.

          liv-in-skyL ? 2 Replies Last reply
          0
          • G GiuseppeS

            @apollon77 sagte in socket io - state lesen und setzen:

            Warum nehmt ihr getStates? Ich meinte oben getState (Einzahl). Dann wäre es direkt gegangen ;-)

            Ganz einfach, Unwissenheit. Auf der socket.io Readme im Github Repo steht nur was von getStates, nichts bzgl. getState. Da scheint bei @liv-in-sky aber irgendwas weiterhin nicht zu passen, weil es bei ihm anscheinend weiterhin nicht funktioniert.

            @HeinrichB
            Hier wurde die grundsätzliche Vorgehensweise diskutiert. Den Text für den Button kann man ja individuell ergänzen.
            Bei der Zeile mit setState einfach darunter noch einmal setState Funktion aufrufen. Dort dann den gewünschten Text in eine objID schreiben. True / False Anzeige klappt wie das togglen an sich. Aber richtige freie Texte, da wirst du wohl noch eine Bedingung einfügen müssen.

            liv-in-skyL Offline
            liv-in-skyL Offline
            liv-in-sky
            wrote on last edited by liv-in-sky
            #22

            @GiuseppeS

            moin - alles gut - jetzt läuft es auch bei mir - nochmals dank für deine hilfe und bemühungen

            @apollon77 mal eine theoretische frage: das ganze könnte man doch auch mit rest api also dem simpleapi adapter lösen - wahrscheinlich etwas umständlicher - müßte aber funktionieren
            achja wegen getstates vs. getstate - selbe antwort wie @GiuseppeS - war das erste mal, dass ich socket kommunikation angewendet habe - bisher habe ich alles über simpleapi gmacht, was von außerhalb iobroker kommt (z.b. tasker)

            nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

            1 Reply Last reply
            0
            • G GiuseppeS

              @apollon77 sagte in socket io - state lesen und setzen:

              Warum nehmt ihr getStates? Ich meinte oben getState (Einzahl). Dann wäre es direkt gegangen ;-)

              Ganz einfach, Unwissenheit. Auf der socket.io Readme im Github Repo steht nur was von getStates, nichts bzgl. getState. Da scheint bei @liv-in-sky aber irgendwas weiterhin nicht zu passen, weil es bei ihm anscheinend weiterhin nicht funktioniert.

              @HeinrichB
              Hier wurde die grundsätzliche Vorgehensweise diskutiert. Den Text für den Button kann man ja individuell ergänzen.
              Bei der Zeile mit setState einfach darunter noch einmal setState Funktion aufrufen. Dort dann den gewünschten Text in eine objID schreiben. True / False Anzeige klappt wie das togglen an sich. Aber richtige freie Texte, da wirst du wohl noch eine Bedingung einfügen müssen.

              ? Offline
              ? Offline
              A Former User
              wrote on last edited by
              #23

              @GiuseppeS said in socket io - state lesen und setzen:

              Hier wurde die grundsätzliche Vorgehensweise diskutiert. Den Text für den Button kann man ja individuell ergänzen.

              Das ist schon klar, mir ging es darum, ob dies vom Konzept schon gehen sollte oder ich dafür sorgen muss.

              Bei der Zeile mit setState einfach darunter noch einmal setState Funktion aufrufen. Dort dann den gewünschten Text in eine objID schreiben. True / False Anzeige klappt wie das togglen an sich. Aber richtige freie Texte, da wirst du wohl noch eine Bedingung einfügen müssen.

              Gut, dann steuere ich die Buttonbeschriftung passend dynamisch

              Wenn ich je Button einen anderen DP antriggern will und nicht nur den einen DP setzen will, muss ich dann das Skript duplizieren?

              Danke

              liv-in-skyL 1 Reply Last reply
              0
              • G GiuseppeS

                Ich hatte vor kurzem hier im Forum mal die Lösung gesehen, dass "setState" aus VIS heraus nach diesem Schema funktioniert:

                this.servConn._socket.emit('setState', objID, !states[objID].val);
                

                Gerade habe ich es aber gemäß Doku getestet. Das funktioniert demnach auch:

                servConn.setState(objID, !states[objID].val);
                

                Habe daher den obigen Code Schnipsel angepasst und so läufts auch:

                <button value="true" onClick="setOnClickCustom(this.value)">BtnDevice</button>
                 
                <script>
                function setOnClickCustom(val) {
                    var objID = "0_userdata.0.Tasker_Bool";
                    servConn.getStates(objID, (error, states) => {
                        console.log(states);
                        servConn.setState(objID, !states[objID].val);
                    });
                }
                </script>
                

                Ich bin mir jetzt absolut unsicher, welchen Einfluss die "lange" Schreibweise hat oder ob es sonstige Nebenwirkungen gibt, wenn "this" in diesem Fall nicht genutzt wird. Bin auch kein ITler und mit JS erst seit iobroker unterwegs. Aber diese Möglichkeiten mit iobroker, VIS und Co. sind einfach genial.

                liv-in-skyL Offline
                liv-in-skyL Offline
                liv-in-sky
                wrote on last edited by liv-in-sky
                #24

                @GiuseppeS sagte in socket io - state lesen und setzen:

                zitat:
                Bin auch kein ITler und mit JS erst seit iobroker unterwegs. Aber diese Möglichkeiten mit iobroker, VIS und Co. sind einfach genial.

                kann ich nur unterstützen - die jungs machen einen klasse job

                nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                1 Reply Last reply
                0
                • ? A Former User

                  @GiuseppeS said in socket io - state lesen und setzen:

                  Hier wurde die grundsätzliche Vorgehensweise diskutiert. Den Text für den Button kann man ja individuell ergänzen.

                  Das ist schon klar, mir ging es darum, ob dies vom Konzept schon gehen sollte oder ich dafür sorgen muss.

                  Bei der Zeile mit setState einfach darunter noch einmal setState Funktion aufrufen. Dort dann den gewünschten Text in eine objID schreiben. True / False Anzeige klappt wie das togglen an sich. Aber richtige freie Texte, da wirst du wohl noch eine Bedingung einfügen müssen.

                  Gut, dann steuere ich die Buttonbeschriftung passend dynamisch

                  Wenn ich je Button einen anderen DP antriggern will und nicht nur den einen DP setzen will, muss ich dann das Skript duplizieren?

                  Danke

                  liv-in-skyL Offline
                  liv-in-skyL Offline
                  liv-in-sky
                  wrote on last edited by
                  #25

                  @HeinrichB ich denke nicht - man sollte den datenpunkt als variable in das script übergeben können und nicht erst im scipt definieren - wie erwähnt wir waren erst beim grundsätzlichen - jetzt kommt die umsetzung

                  nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                  ? 1 Reply Last reply
                  0
                  • liv-in-skyL liv-in-sky

                    @HeinrichB ich denke nicht - man sollte den datenpunkt als variable in das script übergeben können und nicht erst im scipt definieren - wie erwähnt wir waren erst beim grundsätzlichen - jetzt kommt die umsetzung

                    ? Offline
                    ? Offline
                    A Former User
                    wrote on last edited by
                    #26

                    @liv-in-sky Alles klar. Ich bin schon "ruhig" und lese/lerne. Danke

                    liv-in-skyL 1 Reply Last reply
                    0
                    • ? A Former User

                      @liv-in-sky Alles klar. Ich bin schon "ruhig" und lese/lerne. Danke

                      liv-in-skyL Offline
                      liv-in-skyL Offline
                      liv-in-sky
                      wrote on last edited by
                      #27

                      @HeinrichB momentan wird ein "this,value" an das script übergeben

                      <button value="true" onClick="setOnClickCustom(this.value)">BtnDevice</button>
                      

                      in der function dann (val)

                      function setOnClickCustom(val) {
                      

                      so kann auch der datenpunkt übergeben werden, der ja in der tabelle auch verwendet wird

                      nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                      ? 1 Reply Last reply
                      0
                      • liv-in-skyL liv-in-sky

                        @HeinrichB momentan wird ein "this,value" an das script übergeben

                        <button value="true" onClick="setOnClickCustom(this.value)">BtnDevice</button>
                        

                        in der function dann (val)

                        function setOnClickCustom(val) {
                        

                        so kann auch der datenpunkt übergeben werden, der ja in der tabelle auch verwendet wird

                        ? Offline
                        ? Offline
                        A Former User
                        wrote on last edited by
                        #28

                        @liv-in-sky

                        Hallo

                        also this.value ist ja der Wert value (oben value=true) und der wird in der setOnClick.... auf einen DP gesetzt. Soweit ja auch verstanden.

                        Wenn ich nun zwei Geräte habe und dann immer nur value=true übergeben, dann habe ich eine 2:1 Zuordnung und nicht auflösbar.

                        Aber wie gesagt:Das sind nur fragen und ich will Eure Umsetzung nicht stören. Ich werde jetzt erstmal passiv weiter mitlesen, wie Eure Umsetzungen laufen

                        Danke

                        liv-in-skyL 1 Reply Last reply
                        0
                        • ? A Former User

                          @liv-in-sky

                          Hallo

                          also this.value ist ja der Wert value (oben value=true) und der wird in der setOnClick.... auf einen DP gesetzt. Soweit ja auch verstanden.

                          Wenn ich nun zwei Geräte habe und dann immer nur value=true übergeben, dann habe ich eine 2:1 Zuordnung und nicht auflösbar.

                          Aber wie gesagt:Das sind nur fragen und ich will Eure Umsetzung nicht stören. Ich werde jetzt erstmal passiv weiter mitlesen, wie Eure Umsetzungen laufen

                          Danke

                          liv-in-skyL Offline
                          liv-in-skyL Offline
                          liv-in-sky
                          wrote on last edited by liv-in-sky
                          #29

                          @HeinrichB ich habe das this.value nicht mehr drin - brauche ich momentan nicht

                          wie der wert momentan ist, wird im script ja gelesen (getStates) und dann getoggelt (setState)
                          bei mir steht meist ON OFF drin in der tabelle und nicht true /false

                          ein problemchen ist noch, dass die eigentliche tabelle erst den geschalteten wert anzeigt, wenn das schedule wieder läuft, was die tabelle erzeugt

                          ich habe ein iobroker- java-script - das erzeugt eine tabelle - diese tabelle beinhaltet unser neues script mit dem button - wenn ich nun den button drücke, bleibt der wert in der tabelle unverändert - erst wenn das iobroker script wieder durch den schedule eine neue tabelle erzeugt, wird der neue wert angezeigt

                          damit das aber sofort angezeigt wird, müßte man wohl einen triggerpunkt auf true setzen , damit das iobroker javascript sofort läuft und eine neue tabelle erstellt
                          @GiuseppeS siehst du das ähnlich ?

                          nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                          ? 1 Reply Last reply
                          0
                          • liv-in-skyL liv-in-sky

                            @HeinrichB ich habe das this.value nicht mehr drin - brauche ich momentan nicht

                            wie der wert momentan ist, wird im script ja gelesen (getStates) und dann getoggelt (setState)
                            bei mir steht meist ON OFF drin in der tabelle und nicht true /false

                            ein problemchen ist noch, dass die eigentliche tabelle erst den geschalteten wert anzeigt, wenn das schedule wieder läuft, was die tabelle erzeugt

                            ich habe ein iobroker- java-script - das erzeugt eine tabelle - diese tabelle beinhaltet unser neues script mit dem button - wenn ich nun den button drücke, bleibt der wert in der tabelle unverändert - erst wenn das iobroker script wieder durch den schedule eine neue tabelle erzeugt, wird der neue wert angezeigt

                            damit das aber sofort angezeigt wird, müßte man wohl einen triggerpunkt auf true setzen , damit das iobroker javascript sofort läuft und eine neue tabelle erstellt
                            @GiuseppeS siehst du das ähnlich ?

                            ? Offline
                            ? Offline
                            A Former User
                            wrote on last edited by
                            #30

                            @liv-in-sky Mir geht es nicht um den Text als solches, mir geht es darum, wenn ich eine Tabelle mit N Geräten habe und die alle mit dem Button an/aus (on/off etc) geschaltet werden sollen. In der Skriptfunktion steht aber genau EIN statischer DP drin, auf den alles dann geht: also N:1 Zuordnung

                            Oder ich kapiere es nicht :-D

                            liv-in-skyL 1 Reply Last reply
                            0
                            • ? A Former User

                              @liv-in-sky Mir geht es nicht um den Text als solches, mir geht es darum, wenn ich eine Tabelle mit N Geräten habe und die alle mit dem Button an/aus (on/off etc) geschaltet werden sollen. In der Skriptfunktion steht aber genau EIN statischer DP drin, auf den alles dann geht: also N:1 Zuordnung

                              Oder ich kapiere es nicht :-D

                              liv-in-skyL Offline
                              liv-in-skyL Offline
                              liv-in-sky
                              wrote on last edited by liv-in-sky
                              #31

                              @HeinrichB die statische var des datenpunktes löscht du raus und statt dessen kommt er über eine variable

                              nur zur veranschaulichung:

                              ....	<button style="border:none; background-color:transparent; color:white; font-size:1em; text-align:left" value="toggle" onclick="setOnDblClickCustom("0_userdata.0.Tasker_Bool")">{toggle}</button>
                              	</td>
                                </tr>  
                              
                              </table>
                               
                              <script>
                              function setOnDblClickCustom(objID) {
                                //  var objID = "0_userdata.0.Tasker_Bool";
                                  servConn.getStates(objID, (error, states) => {
                                      console.log(states);
                                      servConn.setState(objID, !states[objID].val);
                                  });
                              }
                              
                              
                              </script>
                              

                              oben beim aufruf ist jetzt der datenpunkt drin und wird übergeben an setOnDblClickCustom
                              unten im script gibt es keine statische def der variablen objID mehr

                              nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                              ? 1 Reply Last reply
                              0
                              • liv-in-skyL liv-in-sky

                                @HeinrichB die statische var des datenpunktes löscht du raus und statt dessen kommt er über eine variable

                                nur zur veranschaulichung:

                                ....	<button style="border:none; background-color:transparent; color:white; font-size:1em; text-align:left" value="toggle" onclick="setOnDblClickCustom("0_userdata.0.Tasker_Bool")">{toggle}</button>
                                	</td>
                                  </tr>  
                                
                                </table>
                                 
                                <script>
                                function setOnDblClickCustom(objID) {
                                  //  var objID = "0_userdata.0.Tasker_Bool";
                                    servConn.getStates(objID, (error, states) => {
                                        console.log(states);
                                        servConn.setState(objID, !states[objID].val);
                                    });
                                }
                                
                                
                                </script>
                                

                                oben beim aufruf ist jetzt der datenpunkt drin und wird übergeben an setOnDblClickCustom
                                unten im script gibt es keine statische def der variablen objID mehr

                                ? Offline
                                ? Offline
                                A Former User
                                wrote on last edited by
                                #32

                                @liv-in-sky

                                Danke:-)
                                Ich arbeite mich da durch :)

                                ? 1 Reply Last reply
                                0
                                • ? A Former User

                                  @liv-in-sky

                                  Danke:-)
                                  Ich arbeite mich da durch :)

                                  ? Offline
                                  ? Offline
                                  A Former User
                                  wrote on last edited by
                                  #33

                                  So, ich habe mal bisschen was ausprobiert und nun etwas entwickelt, dass xakt macht,
                                  was ich brauche. Mag etwas handfest sein und unelegant, aber ich kann alles aus dem
                                  Skript in der HTML-Tabelle ansprechen.
                                  Geht alles sicher alles eleganter, aber ich weiss halt nun, wo ich selbst was anpassen kann :)

                                  Danke an @liv-in-sky und @GiuseppeS

                                  <table border="1">
                                    <tr>
                                      <td class="HeaderFormat" align="center">Gerät</td>      
                                      <td class="HeaderFormat" align="center"><b>Heute</b></td>
                                      <td class="HeaderFormat" align="center"><b>Gestern</b></td>    
                                      <td class="HeaderFormat" align="center"><b>Gesamt</b></td>
                                      <td>
                                      <button value="true" onClick="setOnClickCustom(value, 'unit')">{v:0_userdata.0.TestDPUnit;v == "true" ? "An":"Aus"}</button>
                                  	</td>
                                    </tr>  
                                    <tr>
                                      <td class="LineFormat" align="center"><b>SolarHaus</b></td>
                                      <td class="LineFormat" align="center"><b>{hs100.0.192_168_2_112.totalNow}kWh</b></td>
                                      <td class="LineFormat" align="center"><b>{0_userdata.0.daily_earning_solar_house}kWh</b></td>
                                      <td class="LineFormat" align="center"><b>{0_userdata.0.total_earning_solar_house}kWh</b></td>
                                      <td>
                                      <button value="true" onClick="setOnClickCustom(value, 'solar')">{v:0_userdata.0.TestDPSolar;v == "true" ? "An":"Aus"}</button>
                                  	</td> 
                                    </tr>
                                  </table>
                                   
                                  <script>
                                  function setOnClickCustom(val, device) {
                                      var objID;
                                      if (device == "unit") {
                                          objID = "0_userdata.0.TestDPUnit";
                                      }
                                      if (device == "solar") {
                                          objID = "0_userdata.0.TestDPSolar";
                                      }
                                      servConn.getStates(objID, (error, states) => {
                                          console.log(states);
                                          servConn.setState(objID, !states[objID].val);
                                      });
                                  }
                                  </script>
                                  
                                  G 1 Reply Last reply
                                  0
                                  • ? A Former User

                                    So, ich habe mal bisschen was ausprobiert und nun etwas entwickelt, dass xakt macht,
                                    was ich brauche. Mag etwas handfest sein und unelegant, aber ich kann alles aus dem
                                    Skript in der HTML-Tabelle ansprechen.
                                    Geht alles sicher alles eleganter, aber ich weiss halt nun, wo ich selbst was anpassen kann :)

                                    Danke an @liv-in-sky und @GiuseppeS

                                    <table border="1">
                                      <tr>
                                        <td class="HeaderFormat" align="center">Gerät</td>      
                                        <td class="HeaderFormat" align="center"><b>Heute</b></td>
                                        <td class="HeaderFormat" align="center"><b>Gestern</b></td>    
                                        <td class="HeaderFormat" align="center"><b>Gesamt</b></td>
                                        <td>
                                        <button value="true" onClick="setOnClickCustom(value, 'unit')">{v:0_userdata.0.TestDPUnit;v == "true" ? "An":"Aus"}</button>
                                    	</td>
                                      </tr>  
                                      <tr>
                                        <td class="LineFormat" align="center"><b>SolarHaus</b></td>
                                        <td class="LineFormat" align="center"><b>{hs100.0.192_168_2_112.totalNow}kWh</b></td>
                                        <td class="LineFormat" align="center"><b>{0_userdata.0.daily_earning_solar_house}kWh</b></td>
                                        <td class="LineFormat" align="center"><b>{0_userdata.0.total_earning_solar_house}kWh</b></td>
                                        <td>
                                        <button value="true" onClick="setOnClickCustom(value, 'solar')">{v:0_userdata.0.TestDPSolar;v == "true" ? "An":"Aus"}</button>
                                    	</td> 
                                      </tr>
                                    </table>
                                     
                                    <script>
                                    function setOnClickCustom(val, device) {
                                        var objID;
                                        if (device == "unit") {
                                            objID = "0_userdata.0.TestDPUnit";
                                        }
                                        if (device == "solar") {
                                            objID = "0_userdata.0.TestDPSolar";
                                        }
                                        servConn.getStates(objID, (error, states) => {
                                            console.log(states);
                                            servConn.setState(objID, !states[objID].val);
                                        });
                                    }
                                    </script>
                                    
                                    G Offline
                                    G Offline
                                    GiuseppeS
                                    wrote on last edited by
                                    #34

                                    @HeinrichB
                                    Deine Buttons übergeben den Wert "true". Ist aber unnötig, da unten in der Funktion nicht weiter verarbeitet.
                                    Stattdessen kannst du den value der Buttons auf "unit" bzw. "solar" ändern, und diesen übergeben.

                                    @liv-in-sky
                                    Weil ich mit dynamischen Tabellen arbeite und viele Buttons darin nutze habe ich es anders gelöst:
                                    Buttons übergeben als value eine eindeutige "ID". Diese ID wird innerhalb der Tabelle mit der dblClick-Function inkl. setState in einer objID geschrieben.
                                    In meinem Javascript (nicht VIS), dass die dynamische Tabelle erzeugt, reagiere ich auf die Aktualisierung der objID und führe entsprechend Aktionen aus (z.B.: wenn ID == Btn-Row1-Col2 dann toggle objID_XY und generiere Tabelle).

                                    • Auf diese Art stehen mir alle Javascript-Funktionen unkompliziert zur Verfügung (außerhalb VIS in Scrip-Engine Adapter)
                                    • Mein HTML-Code beinhaltet bei X Buttons nicht X Funktionen sondern immer nur eine Funktion
                                    • Ich benötige nur eine objID, in die der Button-Value (= Button-ID) geschrieben wird

                                    Was eleganteres ist mir nicht eingefallen.

                                    Aber in diesem Thread wurde die Fragestellung des Eröffnungspost geklärt. Im Thread, in dem wir gestern gestartet waren, hatte ich meinen Tabellenaufbau grob dargestellt.

                                    ? 1 Reply Last reply
                                    0
                                    • G GiuseppeS

                                      @HeinrichB
                                      Deine Buttons übergeben den Wert "true". Ist aber unnötig, da unten in der Funktion nicht weiter verarbeitet.
                                      Stattdessen kannst du den value der Buttons auf "unit" bzw. "solar" ändern, und diesen übergeben.

                                      @liv-in-sky
                                      Weil ich mit dynamischen Tabellen arbeite und viele Buttons darin nutze habe ich es anders gelöst:
                                      Buttons übergeben als value eine eindeutige "ID". Diese ID wird innerhalb der Tabelle mit der dblClick-Function inkl. setState in einer objID geschrieben.
                                      In meinem Javascript (nicht VIS), dass die dynamische Tabelle erzeugt, reagiere ich auf die Aktualisierung der objID und führe entsprechend Aktionen aus (z.B.: wenn ID == Btn-Row1-Col2 dann toggle objID_XY und generiere Tabelle).

                                      • Auf diese Art stehen mir alle Javascript-Funktionen unkompliziert zur Verfügung (außerhalb VIS in Scrip-Engine Adapter)
                                      • Mein HTML-Code beinhaltet bei X Buttons nicht X Funktionen sondern immer nur eine Funktion
                                      • Ich benötige nur eine objID, in die der Button-Value (= Button-ID) geschrieben wird

                                      Was eleganteres ist mir nicht eingefallen.

                                      Aber in diesem Thread wurde die Fragestellung des Eröffnungspost geklärt. Im Thread, in dem wir gestern gestartet waren, hatte ich meinen Tabellenaufbau grob dargestellt.

                                      ? Offline
                                      ? Offline
                                      A Former User
                                      wrote on last edited by
                                      #35

                                      @GiuseppeS said in socket io - state lesen und setzen:

                                      Deine Buttons übergeben den Wert "true". Ist aber unnötig, da unten in der Funktion nicht weiter verarbeitet.
                                      Stattdessen kannst du den value der Buttons auf "unit" bzw. "solar" ändern, und diesen übergeben.

                                      Danke. Läuft :)

                                      1 Reply Last reply
                                      0
                                      • MicM Offline
                                        MicM Offline
                                        Mic
                                        Developer
                                        wrote on last edited by
                                        #36

                                        Danke für die Infos hier.
                                        Hier ein Anwendungsbeispiel: https://forum.iobroker.net/topic/30552/tipp-in-vis-in-html-widget-getstate-nutzen-zur-anzeige

                                        1 Reply Last reply
                                        0
                                        Reply
                                        • Reply as topic
                                        Log in to reply
                                        • Oldest to Newest
                                        • Newest to Oldest
                                        • Most Votes


                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        791

                                        Online

                                        32.7k

                                        Users

                                        82.4k

                                        Topics

                                        1.3m

                                        Posts
                                        Community
                                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                        ioBroker Community 2014-2025
                                        logo
                                        • Login

                                        • Don't have an account? Register

                                        • Login or register to search.
                                        • First post
                                          Last post
                                        0
                                        • Home
                                        • Recent
                                        • Tags
                                        • Unread 0
                                        • Categories
                                        • Unreplied
                                        • Popular
                                        • GitHub
                                        • Docu
                                        • Hilfe