Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. socket io - state lesen und setzen

    NEWS

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    socket io - state lesen und setzen

    This topic has been deleted. Only users with topic management privileges can see it.
    • G
      GiuseppeS @liv-in-sky last edited by

      @liv-in-sky
      Das kann ich jetzt leider nicht nachvollziehen, da es bei mir ja funktioniert.

      Evtl. ist es doch der Nebeneffekt wenn this weggelassen wird? Bei dir wird anscheinend nicht einmal die getStates Funktion ausgeführt.

      Test die oben dargestellte Schreibweise mit "this.servConn._socket.emit.....". Ein Post über der Kurzform.
      Bin mit html und Co auch kein Experte 🙇

      liv-in-sky 1 Reply Last reply Reply Quote 0
      • liv-in-sky
        liv-in-sky @GiuseppeS last edited by

        @GiuseppeS ich schlaf jetzt ersmal drüber - probiere morgen in aller ruhe nochmal - gebe dann bescheid - erstmal danke bis hier her

        G 1 Reply Last reply Reply Quote 0
        • G
          GiuseppeS @liv-in-sky last edited by GiuseppeS

          @liv-in-sky
          Dass bei dir die Konsole nichts zeigt ist echt hinderlich. Versuche mal die console.log über die getState Funktion zu ziehen. Einfach mal die Objekt ID ausgeben lassen zum Beispiel. Vielleicht ist da was gröberes faul. Ansonsten, ernst gemeinter Vorschlag: Rechner mit iobroker neu starten. Hatte schon die verrücktesten Fehler meiner Skripte, die unerklärlich waren. Nach Neustart: weg...

          EDIT:
          Evtl hat der Browser auch nicht den Inhalt korrekt geladen? Cache? Mit Strg+F5 Seite neu laden.
          Habe gerade meine Skripte geupdatet, keine Schwierigkeiten...

          1 Reply Last reply Reply Quote 0
          • G
            GiuseppeS last edited by

            @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-sky 1 Reply Last reply Reply Quote 0
            • liv-in-sky
              liv-in-sky @GiuseppeS last edited by

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

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

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

                G 1 Reply Last reply Reply Quote 0
                • ?
                  A Former User @GiuseppeS last edited by

                  @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 Reply Quote 0
                  • G
                    GiuseppeS @apollon77 last edited by

                    @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-sky ? 2 Replies Last reply Reply Quote 0
                    • liv-in-sky
                      liv-in-sky @GiuseppeS last edited by liv-in-sky

                      @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)

                      1 Reply Last reply Reply Quote 0
                      • ?
                        A Former User @GiuseppeS last edited by

                        @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-sky 1 Reply Last reply Reply Quote 0
                        • liv-in-sky
                          liv-in-sky @GiuseppeS last edited by liv-in-sky

                          @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

                          1 Reply Last reply Reply Quote 0
                          • liv-in-sky
                            liv-in-sky @Guest last edited by

                            @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

                            ? 1 Reply Last reply Reply Quote 0
                            • ?
                              A Former User @liv-in-sky last edited by

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

                              liv-in-sky 1 Reply Last reply Reply Quote 0
                              • liv-in-sky
                                liv-in-sky @Guest last edited by

                                @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

                                ? 1 Reply Last reply Reply Quote 0
                                • ?
                                  A Former User @liv-in-sky last edited by

                                  @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-sky 1 Reply Last reply Reply Quote 0
                                  • liv-in-sky
                                    liv-in-sky @Guest last edited by 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 ?

                                    ? 1 Reply Last reply Reply Quote 0
                                    • ?
                                      A Former User @liv-in-sky last edited by

                                      @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 😄

                                      liv-in-sky 1 Reply Last reply Reply Quote 0
                                      • liv-in-sky
                                        liv-in-sky @Guest last edited by 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

                                        ? 1 Reply Last reply Reply Quote 0
                                        • ?
                                          A Former User @liv-in-sky last edited by

                                          @liv-in-sky

                                          Danke:-)
                                          Ich arbeite mich da durch 🙂

                                          ? 1 Reply Last reply Reply Quote 0
                                          • ?
                                            A Former User @Guest last edited by

                                            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 Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            867
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            5
                                            36
                                            3754
                                            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