Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Einsteigerfragen
    4. Einbindung von Geräten
    5. Aktoren vom Lightmanager Air schalten - Tipp gesucht

    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

    Aktoren vom Lightmanager Air schalten - Tipp gesucht

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

      Ich verwende einen Lightmanager Air von jbmedia. Um die Geräte dort zu schalten, kann ich einen HTTP Befehl absetzen, pro Gerät sind es (mindestens) 3 unterschiedliche HTTP Befehle (on/off/toggle). Die IP-Adresse ist immer die selbe, die Daten nach der IP unterscheiden dann zwischen den Geräten sowie zwischen on/off/toggle. Bei aktuell 50 Geräten sind das 150 unterschiedliche HTTP Befehle.
      Auch gibt es dort sogenannte "Marker" welche mit den true/false States im ioBroker verglichen werden können. Diese kann ich schon erfolgreich mit einem blockly Script auslesen und ich ioBroker taugliche true/false Werte schreiben. Das heißt ich hab den aktuellen on/off Status meiner Aktoren.

      Nun zum eigentlichen Problem bei welchem ich einen Lösungsansatz suche:
      Ich möchte per VIS diese Aktoren schalten und die Zustände jeweils korrekt anzeigen lassen.

      Meine Idee war folgende aber ich schaff es nicht diese Umzusetzen:
      Ich würde gerne einen Schalter in der VIS integrieren, welcher mir Anhand der via Blockly aktualisierten true/false states den Status anzeigt.
      Bei Klick auf den Schalter soll dann aber nicht nur dieser Datenpunkt geändert werden, sondern beim Ausschalten sowie Einschalten jeweils ein unterschiedlicher HTTP Befehl abgesetzt werden, um die Aktoren zu schalten.

      Was ich versucht hab ist anhand der true/false Objekte (welche ja alle 3 Sek aktualisiert werden) via Blockly Skript zu triggern und jeweils den korrekten HTTP Befehl abzuschicken. Hat nicht funktioniert, da die Lampe alle 3 Sek an/aus geschalten wird. Da war zwar sicher noch irgendwo ein Fehler drinn, aber das ist auch nicht die beste Lösung, da ich dann für alle 50 Geräte ein Skript erstellen müsste, was einen erheblichen Aufwand bedeutet, wenn da Geräte hinzu kommen oder welche aussortiert werden.

      Diese 150 Datenpunkte welche für die HTTP Befehle benötigt werden sind in einer XML gespeichert, und können sicher irgendwie mit einem Skript (mit eurer Hilfe) in einem Objektbaum importiert werden. (Aber dazu kommt dann die Frage, wenn ich soweit bin.)
      Das würde aber (laut meinem aktuellen Wissensstand) nur dann Sinn machen, wenn ich zusätzliche Daten des VIS-Schalters an das Blockly Übergeben kann, um nach dem korrekten Datenpunkt des benötigten HTTP Befehls zu "suchen".

      Viel Text, aber so könnt ihr mir, einem blutjungen Anfänger, hoffentlich besser helfen.
      Danke schonmal

      Asgothian netzkeks 2 Replies Last reply Reply Quote 0
      • Asgothian
        Asgothian Developer @rtwl last edited by

        @rtwl sagte in Aktoren vom Lightmanager Air schalten - Tipp gesucht:

        Was ich versucht hab ist anhand der true/false Objekte (welche ja alle 3 Sek aktualisiert werden) via Blockly Skript zu triggern und jeweils den korrekten HTTP Befehl abzuschicken. Hat nicht funktioniert, da die Lampe alle 3 Sek an/aus geschalten wird. Da war zwar sicher noch irgendwo ein Fehler drinn, aber das ist auch nicht die beste Lösung, da ich dann für alle 50 Geräte ein Skript erstellen müsste, was einen erheblichen Aufwand bedeutet, wenn da Geräte hinzu kommen oder welche aussortiert werden.

        Da gibt es eine elegante Möglichkeit. Diese setzt voraus das aus der ID des Datenpunktes im Blockly der zu sendende HTML Befehl erzeugt werden kann.

        Alternativ kannst du eine Tabelle definieren die für die einzelnen Datenpunkte die HTML Befehle speichert.

        Dann musst du nur noch einen einzigen Trigger bauen, den du entweder mit einem Selektor oder von Hand mit den 50 states füllst.

        Im Trigger kannst du dann die ObjektID und den State des auslösenden Triggers für die Aktion nutzen:

        Screen Shot 2022-02-26 at 12.14.12 .png

        Wichtig: die Bausteine object ID und state value sind der gleiche Baustein (links im Trigger Bereich zu sehen) mit unterschiedlichen Einstellungen. Die beinhalten zum einen den Wert des States der den Trigger ausgelöst hat bzw. die Objekt ID des States der den Trigger ausgelöst hat.

        Was in der Funktion steht hängt davon ab

        • wie deine Datenpunkte aussehen
        • ob man daraus direkt das html machen kann
        rtwl 1 Reply Last reply Reply Quote 0
        • rtwl
          rtwl @Asgothian last edited by

          @asgothian
          Vielen Dank für deine Antwort.
          Ich bin leider noch nicht so ganz fit mit ioBroker und den ganzen Möglichkeiten.

          Hier mal eine kurze Erklärung was ich alles von dem Lightmanager an Daten bekomme, und was ich aktuell versucht hab. Vielleicht hast du damit eine spezifische Antwort/Lösung für mich.

          .
          Den Status der Lampen bekomme ich in folgendem Format, welche ich mir (wie erwähnt) schon als true/false Werte per Blockly alle 3 Sek importiere:

            {
          "marker state":   "0000010011100000000010000000010000000000000000000000000000011000"
          }
          

          Dieser Status der Lampen wird dann auch direkt im HTTP Request zum schalten der Lampen geändert.

          Die config.xml sieht (in Kurzform) so aus:

          <lightman>
           <zone>
            <zonename>Wohnzimmer</zonename>
             <actuators>
              <actuator>
               <name>Wandregal</name>
               <type>trust</type>
               <steps>0</steps>
               <commandlist>
                <command>
                 <name>on</name>
                 <param>cmd=on,typ,it,did,0446,aid,6,acmd,1,seq,6,smk,20,1&id=6</param>
                </command>
                <command>
                 <name>toggle</name>
                 <param>cmd=toggle,typ,it,did,0446,aid,6,acmd,2,seq,6,smk,20,2&id=6</param>
                </command>
                <command>
                 <name>off</name>
                 <param>cmd=off,typ,it,did,0446,aid,6,acmd,0,seq,6,smk,20,0&id=6</param>
                </command>
               </commandlist>
              </actuator>
              <actuator>
               <name>Schreibtisch</name>
               <type>trust</type>
               <steps>0</steps>
               <commandlist>
                <command>
                 <name>on</name>
                 <param>cmd=on,typ,it,did,0486,aid,5,acmd,1,seq,6,smk,26,1&id=5</param>
                </command>
                <command>
                 <name>toggle</name>
                 <param>cmd=toggle,typ,it,did,0486,aid,5,acmd,2,seq,6,smk,26,2&id=5</param>
                </command>
                <command>
                 <name>off</name>
                 <param>cmd=off,typ,it,did,0486,aid,5,acmd,0,seq,6,smk,26,0&id=5</param>
               </command>
              </commandlist>
             </actuator>
            </actuators>
           </zone>
          </lightman>
          

          Vermutlich kommt bald ein Thread von mir wie ich diese in folgender Form in ioBroker als Objekte importieren/aktualisieren kann. Diese hier hab ich mir als Test manuell angelegt und so denke ich wäre es auch am Besten um die HTTP Befehle "zusammenzubasteln":
          1003da00-e520-485f-9164-9964aa14d4e2-image.png

          Um das ganze via Skript steuern zu können, hab ich mir diese beiden Objekte angelegt um sie via VIS zu ändern und daraus via Blockly den Request zusammenzusetzen:
          58fd006d-cd29-4202-95d3-846beb8f567f-image.png

          Im Blockly nimm ich als Trigger das Objekt "aktor". Was auch super funktioniert.
          3bd960a9-d43d-4fc7-850a-ded4d5819c9c-image.png

          Mein Hauptproblem ist aktuell das Ändern/Aktualisieren der beiden Objekte "aktor" sowie "befehl" via VIS. Leider gibt es einfach kein Widget welches ich nutzen kann um den "aktor" bei Klick identisch zu lassen, den "befehl" aber pro klick auf on/off zu wechseln.
          Auch ist dabei das Problem, dass die States (true/false) nur alle 3 Sek aktualisiert werden (und das ist eventuell schon eine etwas zu kurze Zeitspanne) um den Status "live" pro Klick auf der VIS zu visualisieren. Dazu aber mehr hier in diesem Thread: https://forum.iobroker.net/topic/52843/welches-vis-widget-um-zwei-drei-datenpunkte-zu-setzen?_=1646161662617

          Ja, das ist mein aktueller Stand bei der halb nativen Integration vom Lightmanager in ioBroker.
          Vielleicht hast du, oder jemand anderes noch eine Idee.
          Vielen Dank schonmal

          1 Reply Last reply Reply Quote 0
          • netzkeks
            netzkeks @rtwl last edited by

            @rtwl sagte in Aktoren vom Lightmanager Air schalten - Tipp gesucht:

            Auch gibt es dort sogenannte "Marker" welche mit den true/false States im ioBroker verglichen werden können. Diese kann ich schon erfolgreich mit einem blockly Script auslesen und ich ioBroker taugliche true/false Werte schreiben. Das heißt ich hab den aktuellen on/off Status meiner Aktoren.

            Hallo rtwl,
            ich bin vor ein paar Tagen neu mit iobroker angefangen
            und nutze zu Hause auch den Lightmanager von jbmedia.
            Mein erstes Ziel ist ein "smarten Wecker" mit einem rp4 inkl. Touchdisplay zu bauen.

            Ich bekomme grad das Auslesen der http://192.168.xxx.xxx/params.json nicht hin.
            Könntest du mir evtl. bitte dein blockly zeigen, wie du die einzelnen Marker aus dem String für einen iobroker Datenpunkt separierst?

            Schöne Grüße
            netzkeks

            rtwl 1 Reply Last reply Reply Quote 0
            • rtwl
              rtwl @netzkeks last edited by

              @netzkeks

              Hej netzkeks,

              gerne stelle ich dir mein Blockly Skript zur Verfügung.

              Damit das Skript funktioniert, muss man zuerst alle gewünschten Marker als Objekt anlegen und zwar unter 0_userdata.0.Marker
              mit dem Namen marker1 bis marker64 oder eben nur jene die man benötigt. wie in meinem Beispiel nur diese 4.
              Hast du schon einen anderen Pfad für deine Marker, musst du im Blockly den Pfad ändern

              133d36d0-b29c-4ae6-b65d-03656c22c48b-image.png

              So sieht das Blockly aus:
              7fa7805e-0105-4ceb-9532-f88abdaf820b-image.png

              Der Zeitplan ist bei mir auf "jede Minute" gestellt. Du kannst dort das Intervall der Abfrage ändern.

              <xml xmlns="https://developers.google.com/blockly/xml">
               <variables>
                 <variable id="6+4HaVi_Jhv-KQRg%l4#">id</variable>
                 <variable id="{1GZgD#IK,X|G)R~sqlj">val</variable>
                 <variable id="(3^,w6|rT0TMtzCrCQIy">path</variable>
                 <variable id=",udE#{`hVIxlSUY{n4O7">all_marker</variable>
                 <variable id="pFevTHx![8,Wx,5Es_:q">i</variable>
                 <variable id="Lx=u3w$c:bO#(/xDX-LQ">result</variable>
               </variables>
               <block type="procedures_defcustomnoreturn" id="?NMGapp8O`Tm?=p,id.w" x="-1837" y="-938">
                 <mutation statements="false">
                   <arg name="id" varid="6+4HaVi_Jhv-KQRg%l4#"></arg>
                   <arg name="val" varid="{1GZgD#IK,X|G)R~sqlj"></arg>
                 </mutation>
                 <field name="NAME">setExistsState</field>
                 <field name="SCRIPT">aWYoZXhpc3RzU3RhdGUoaWQpKSBzZXRTdGF0ZShpZCwgdmFsLCB0cnVlKTs=</field>
                 <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
               </block>
               <block type="variables_set" id="^8r03$Mqfv1D{c,TJbny" x="-1837" y="-888">
                 <field name="VAR" id="(3^,w6|rT0TMtzCrCQIy">path</field>
                 <value name="VALUE">
                   <block type="text" id="~603h3F,63}!TmtZ;,J4">
                     <field name="TEXT">0_userdata.0.Marker</field>
                   </block>
                 </value>
                 <next>
                   <block type="schedule" id="m37@R3u{w9TT,w{wVI;P">
                     <field name="SCHEDULE">* * * * *</field>
                     <statement name="STATEMENT">
                       <block type="request" id="jj1_Ec$3LOf]+57pOXJ1">
                         <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="true"></mutation>
                         <field name="WITH_STATEMENT">TRUE</field>
                         <field name="LOG"></field>
                         <value name="URL">
                           <shadow type="text" id="07^=.8Qp@pR3@~+4Qi=x">
                             <field name="TEXT">http://192.168.0.23/params.json</field>
                           </shadow>
                         </value>
                         <statement name="STATEMENT">
                           <block type="variables_set" id="L_4v6=_WsPuHeA#^CM]$">
                             <field name="VAR" id=",udE#{`hVIxlSUY{n4O7">all_marker</field>
                             <value name="VALUE">
                               <block type="get_attr" id="/`B=3g05gWZvoHxwgp,L">
                                 <value name="PATH">
                                   <shadow type="text" id="fb];WD1ihAcw?V,VIJJ,">
                                     <field name="TEXT"></field>
                                   </shadow>
                                   <block type="text" id="_/yjx|ME`$.Dx{^x;(EN">
                                     <field name="TEXT">marker state</field>
                                   </block>
                                 </value>
                                 <value name="OBJECT">
                                   <block type="convert_json2object" id="4I^[p)5Qtp(lrv)pUZ#s">
                                     <value name="VALUE">
                                       <block type="variables_get" id="/i{@,-SO4g?D9A?_{t.L">
                                         <field name="VAR" id="Lx=u3w$c:bO#(/xDX-LQ">result</field>
                                       </block>
                                     </value>
                                   </block>
                                 </value>
                               </block>
                             </value>
                             <next>
                               <block type="controls_for" id="o,J;4PJDGujyax!dxl,/">
                                 <field name="VAR" id="pFevTHx![8,Wx,5Es_:q">i</field>
                                 <value name="FROM">
                                   <shadow type="math_number" id="L]VaJ_3n|VS|=7Cx}4Ni">
                                     <field name="NUM">1</field>
                                   </shadow>
                                 </value>
                                 <value name="TO">
                                   <shadow type="math_number" id="W=bdQv|!C3;Swxy?B^]0">
                                     <field name="NUM">64</field>
                                   </shadow>
                                 </value>
                                 <value name="BY">
                                   <shadow type="math_number" id="~)bS;El34$sRfcb{Pz`,">
                                     <field name="NUM">1</field>
                                   </shadow>
                                 </value>
                                 <statement name="DO">
                                   <block type="procedures_callcustomnoreturn" id="*Vztn:6PrAGd0OTeOGnv">
                                     <mutation name="setExistsState">
                                       <arg name="id"></arg>
                                       <arg name="val"></arg>
                                     </mutation>
                                     <value name="ARG0">
                                       <block type="text_join" id="-+I9_sH?fRg]hI@U,kBP" inline="true">
                                         <mutation items="3"></mutation>
                                         <value name="ADD0">
                                           <block type="variables_get" id="][:vB_=AEvwTyEcFM`rl">
                                             <field name="VAR" id="(3^,w6|rT0TMtzCrCQIy">path</field>
                                           </block>
                                         </value>
                                         <value name="ADD1">
                                           <block type="text" id="Y.;;2b9NvzPNniIvSf2Q">
                                             <field name="TEXT">.marker</field>
                                           </block>
                                         </value>
                                         <value name="ADD2">
                                           <block type="variables_get" id="f*Pa_Sq0?,8ITv2iZ$=[">
                                             <field name="VAR" id="pFevTHx![8,Wx,5Es_:q">i</field>
                                           </block>
                                         </value>
                                       </block>
                                     </value>
                                     <value name="ARG1">
                                       <block type="logic_ternary" id="Gsq/@LgZ=J1AToOXo0[4">
                                         <value name="IF">
                                           <block type="logic_compare" id="_$F4jmH@umi3P=!B30zm">
                                             <field name="OP">EQ</field>
                                             <value name="A">
                                               <block type="text_charAt" id="w|Bo,08J1UM8tAks}X=Y">
                                                 <mutation at="true"></mutation>
                                                 <field name="WHERE">FROM_START</field>
                                                 <value name="VALUE">
                                                   <block type="variables_get" id="nUqwx}JYOg[=MLqR6r5b">
                                                     <field name="VAR" id=",udE#{`hVIxlSUY{n4O7">all_marker</field>
                                                   </block>
                                                 </value>
                                                 <value name="AT">
                                                   <block type="variables_get" id="2%5pMf|g+h#w1C~F0i!Q">
                                                     <field name="VAR" id="pFevTHx![8,Wx,5Es_:q">i</field>
                                                   </block>
                                                 </value>
                                               </block>
                                             </value>
                                             <value name="B">
                                               <block type="text" id="{xEHi|%-yKZ6e#8RH6$p">
                                                 <field name="TEXT">1</field>
                                               </block>
                                             </value>
                                           </block>
                                         </value>
                                         <value name="THEN">
                                           <block type="logic_boolean" id="oHnUPgZ2Fu)Tnw_-e~jM">
                                             <field name="BOOL">TRUE</field>
                                           </block>
                                         </value>
                                         <value name="ELSE">
                                           <block type="logic_boolean" id="T3eIY[WMI4H;]$];7vrH">
                                             <field name="BOOL">FALSE</field>
                                           </block>
                                         </value>
                                       </block>
                                     </value>
                                   </block>
                                 </statement>
                               </block>
                             </next>
                           </block>
                         </statement>
                       </block>
                     </statement>
                   </block>
                 </next>
               </block>
              </xml>
              

              netzkeks 1 Reply Last reply Reply Quote 0
              • netzkeks
                netzkeks @rtwl last edited by

                @rtwl sagte in Aktoren vom Lightmanager Air schalten - Tipp gesucht:

                gerne stelle ich dir mein Blockly Skript zur Verfügung.

                Super funktioniert!
                Vielen Dank für das Bereitstellen deines Skripts.

                False/true wird bei den unterschiedlichen "markerxx" richtig gesetzt.
                Bei dem "marker" steht bei dir der ganze String, bei mir nur "null"
                objekte.JPG
                Woran liegt das? Ist das wichtig?
                Ist der Zustandstyp (liste) beim "marker" bzw. (logikwert) bei "markerxx" entscheidend?

                rtwl 1 Reply Last reply Reply Quote 0
                • rtwl
                  rtwl @netzkeks last edited by

                  @netzkeks sagte in Aktoren vom Lightmanager Air schalten - Tipp gesucht:

                  Woran liegt das? Ist das wichtig?

                  das war noch eine Altlast für das Erstellen des Skript damals. Du kannst ''marker'' löschen. Hab ich auch gerade.

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  873
                  Online

                  31.9k
                  Users

                  80.3k
                  Topics

                  1.3m
                  Posts

                  3
                  7
                  363
                  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