Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. Anker Adapter

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Anker Adapter

    This topic has been deleted. Only users with topic management privileges can see it.
    • hollywoot
      hollywoot @Ivan Andric last edited by

      @ivan-andric
      schmeiß Dir in Deinen ioBroker einen MQTT-Server an und starte dann einen solix2mqtt-Container.
      Es ist wirklich einfacher als es auf den ersten Blick aussieht.

      docker run -d -e S2M_USER="user@domain.de" \
      -e S2M_PASSWORD="meinP4ssw0rt" \
      -e S2M_COUNTRY=DE \
      -e S2M_MQTT_URI=mqtt://meiniobroker-mqtt-server:meinPORT \
      -e S2M_MQTT_USERNAME="mqtt-user" \
      -e S2M_MQTT_PASSWORD="mqtt-passwort" \
      -e S2M_MQTT_CLIENT_ID="solix2mqtt" \
      -e S2M_MQTT_TOPIC=solix \
      -e S2M_VERBOSE=true \
      --name=solix2mqtt --restart always tomquist/solix2mqtt:latest
      
      A 1 Reply Last reply Reply Quote 0
      • A
        aherby @hollywoot last edited by

        Danke mit der Docker Variante hat es nun scheinbar funktioniert.
        Aber wie bekomme ich nun die Werte als Objekt in iobroker hin und im besten Fall wie kann ich dann die Werte ändern?

        E 1 Reply Last reply Reply Quote 0
        • E
          excalibur270 @aherby last edited by excalibur270

          @aherby Hier hänge ich jetzt auch. Habe im IOBroker bei meinem Mqtt jetzt den Ordner Solix drinnen. Aber leider steht da nur alive. keine weiteren Datenpunkte.
          Und sobald ich Putty schließe ist der Dienst auch beendet und Alive geht auf false

          Thomas Braun 1 Reply Last reply Reply Quote 0
          • Thomas Braun
            Thomas Braun Most Active @excalibur270 last edited by

            @excalibur270 sagte in Anker Adapter:

            Hier hänge ich jetzt auch.

            Mit dem docker?
            Ich mach das über einen service, natürlich ohne docker dann.

            E 1 Reply Last reply Reply Quote 0
            • E
              excalibur270 @Thomas Braun last edited by

              @thomas-braun nein ich habe die local Methode genommen. Wie gesagt. Solix taucht auf aber nur mit dem Status alive.
              Habe es mit eingeladenem Account und dem Hauptaccount von Anker versucht. Oder muss wie beim PSA noch ein Script laufen? Da bin ich bei meiner Suche nirgends drauf gestoßen.

              Thomas Braun 1 Reply Last reply Reply Quote 0
              • Thomas Braun
                Thomas Braun Most Active @excalibur270 last edited by Thomas Braun

                @excalibur270

                Wie sieht dein startup-Skript und die .service-Datei aus?
                Bei mir:

                echad@chet:~ $ cat /usr/lib/systemd/system/solix2mqtt.service
                [Unit]
                Description=Pushing Anker Solix data to mosquitto
                After=mosquitto.service
                Before=iobroker.service
                
                [Service]
                User=iobroker
                Group=iobroker
                ExecStart=/usr/local/bin/solix2mqtt/solix2mqtt.sh
                Type=simple
                # Restart=always
                
                
                [Install]
                WantedBy=multi-user.target
                #RequiredBy=network.target
                

                und

                echad@chet:~ $ cat /usr/local/bin/solix2mqtt/solix2mqtt.sh
                #!/bin/bash
                rm /usr/local/bin/solix2mqtt/auth.data;
                cd /usr/local/bin/solix2mqtt;
                S2M_USER="anker-app-user" S2M_PASSWORD="dessen_pw" S2M_COUNTRY=DE S2M_MQTT_URI=mqtt://host:1883 S2M_MQTT_USERNAME="iobroker" S2M_MQTT_PASSWORD="passwort" S2M_MQTT_CLIENT_ID="solix2mqtt" S2M_MQTT_TOPIC=solix S2M_VERBOSE=false npm run start
                
                E 2 Replies Last reply Reply Quote 0
                • E
                  excalibur270 @Thomas Braun last edited by

                  @thomas-braun Hey. Ich hab das nach der readme bei github gemacht. Das sieht iwie alles anders aus. ich denke ich werde das projekt auf eis legen. Dahingehend sind die kenntnisse nicht ausreichend.

                  Thomas Braun 1 Reply Last reply Reply Quote 0
                  • mickym
                    mickym Most Active last edited by

                    Wieder mal eine blöde Frage - ich nutze zwar dieses Teil nicht. Aber der Service redet mqtt - da brauche ich keinen Adapter. Ich werde das wohl nie verstehen.

                    Thomas Braun 1 Reply Last reply Reply Quote 0
                    • Thomas Braun
                      Thomas Braun Most Active @excalibur270 last edited by

                      @excalibur270 sagte in Anker Adapter:

                      Hey. Ich hab das nach der readme bei github gemacht.

                      Das ist ja auch richtig. Ist mein Weg auch. Aber damit das dann auch mit dem System gestartet wird muss man das noch an sein System anpassen. Deswegen lege ich das dann als Service an, der dann über systemd gestartet wird. Das überlebt dann auch ein Logout des Users.

                      1 Reply Last reply Reply Quote 0
                      • Thomas Braun
                        Thomas Braun Most Active @mickym last edited by

                        @mickym
                        Richtig, ist mqtt. Aber die Einrichtung ist etwas fummelig. Ich hab da auch länger für gebraucht, bis das richtig lief. Bei einem Adapter könntest du die Konfiguration halt über Eingabefelder führen. Und auch der Start wäre einfacher, wenn sich das in den ioBroker einfügen würde.

                        mickym 1 Reply Last reply Reply Quote 0
                        • mickym
                          mickym Most Active @Thomas Braun last edited by mickym

                          @thomas-braun sagte in Anker Adapter:

                          @mickym
                          Richtig, ist mqtt. Aber die Einrichtung ist etwas fummelig. Ich hab da auch länger für gebraucht, bis das richtig lief. Bei einem Adapter könntest du die Konfiguration halt über Eingabefelder führen. Und auch der Start wäre einfacher, wenn sich das in den ioBroker einfügen würde.

                          na dafür bist du jedesmal davon abhängig, dass der Adapter alles so interpretiert, wie das Original und eine zusätzliche Fehlerquelle. Davon halte ich genauso viel, wie du von einer GUI auf dem Server.
                          Zudem muss ja der Service trotzdem laufen- ist ja wie bei zigbee2mqtt und allen anderen in meinen Augen überflüssigen Adaptern, für Geräte, die mqtt sprechen.(ausser den mqtt Adaptern selbst natürlich)

                          Thomas Braun 1 Reply Last reply Reply Quote 0
                          • Thomas Braun
                            Thomas Braun Most Active @mickym last edited by Thomas Braun

                            @mickym

                            Ja, das ist der Nachteil von vorgeformten GUI- Lösungen. Du kannst nur das machen, was der Ersteller des GUI/des Adapters auch zugänglich macht.
                            Und eine zusätzliche Fehlerquelle und zusätzlicher Overhead ist es eigentlich auch, vollkommen korrekt.

                            Ist halt (tw. auch nur vermeintlich) einfacher zu bedienen/einzurichten.

                            1 Reply Last reply Reply Quote 1
                            • E
                              excalibur270 @Thomas Braun last edited by

                              @thomas-braun hey. ich habe das jetzt mal so nachgebaut auf mein System bezogen. Nachher mal ausprobieren obs dann läuft. Wo laufen die werte dann auf?

                              Thomas Braun 1 Reply Last reply Reply Quote 0
                              • Thomas Braun
                                Thomas Braun Most Active @excalibur270 last edited by

                                @excalibur270 sagte in Anker Adapter:

                                Wo laufen die werte dann auf?

                                Auf deinem mqtt-Broker. Musst du dann dort abholen, ich verwende dazu den mqtt-Adapter. Die Werte schleife ich dann noch durch ein Skript, das mir die Einzelwerte in entsprechende Datenpunkte legt.

                                E 2 Replies Last reply Reply Quote 0
                                • E
                                  excalibur270 @Thomas Braun last edited by excalibur270

                                  Das kam jetzt bei mir. Alles gemacht. Mosqitto intalliert und eingerichtet. Die Skripte auf meinen Pi angepasst. Ich lass das glaube ich lieber sein. Dafür fehlt der Sachverstand.

                                  > solix2mqtt@1.0.0 start
                                  > node ./bin/app.js
                                  
                                  node:internal/modules/cjs/loader:1143
                                    throw err;
                                    ^
                                  
                                  Error: Cannot find module '/home/pi/solix2mqtt/bin/app.js'
                                      at Module._resolveFilename (node:internal/modules/cjs/loader:1140:15)
                                      at Module._load (node:internal/modules/cjs/loader:981:27)
                                      at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_ma                                                                             in:128:12)
                                      at node:internal/main/run_main_module:28:49 {
                                    code: 'MODULE_NOT_FOUND',
                                    requireStack: []
                                  
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • E
                                    excalibur270 @Thomas Braun last edited by excalibur270

                                    @thomas-braun Jetzt kommt was an. Als Json.
                                    Magst beim Script dafür einmal helfen. Also nochmal?

                                    Thomas Braun mickym 2 Replies Last reply Reply Quote 0
                                    • Thomas Braun
                                      Thomas Braun Most Active @excalibur270 last edited by

                                      @excalibur270

                                      Sieht so aus:

                                      // where the mqtt messages arrive
                                      
                                      const mqttDatenpunktObjectId = 'mqtt.0.solix.site.NAMESETZEN.scenInfo';
                                      
                                      // where the states should appear
                                      
                                      const userDataFolder = '0_userdata.0.solix';
                                      
                                       
                                      
                                      // ############## end user config
                                      
                                       
                                      
                                      // receive
                                      
                                      on(mqttDatenpunktObjectId, (obj) => {
                                      
                                        const jsonString = obj.state.val;
                                      
                                        const jsonData = JSON.parse(jsonString);
                                      
                                       
                                      
                                        function createObjectsRecursively(parent, data) {
                                      
                                          for (const key in data) {
                                      
                                            const obj = data[key];
                                      
                                            const stateName = `${parent}.${key}`;
                                      
                                           
                                      
                                            if (typeof obj === 'object') {
                                      
                                              createObjectsRecursively(stateName, obj);
                                      
                                            } else {
                                      
                                             let value = obj;  
                                      
                                       
                                      
                                              // Check if the state already exists. If it does, just update the value.
                                      
                                              // If it does not exist create the states.
                                      
                                              if (!existsState(stateName)) {
                                      
                                                // If the state does not exist, create it and set the value
                                      
                                                createState(stateName, value, {
                                      
                                                  name: key,
                                      
                                                  type: typeof value,
                                      
                                                  role: "value",
                                      
                                                  read: true,
                                      
                                                  write: true
                                      
                                                });
                                      
                                                log(`Created state ${stateName}`);
                                      
                                                
                                      
                                              } else {
                                      
                                                setState(stateName, value, true);
                                      
                                              }
                                      
                                            }
                                      
                                          }
                                      
                                        }
                                      
                                         createObjectsRecursively(userDataFolder, jsonData);
                                      
                                      });
                                      
                                      E 2 Replies Last reply Reply Quote 0
                                      • mickym
                                        mickym Most Active @excalibur270 last edited by mickym

                                        @excalibur270 Als Alternative kannst Dir meinen NodeRed Flow anschauen, der legt Dir alle Datenpunkte automatisch an - egal ob Objekt, JSON, Array oder sonst was.

                                        https://forum.iobroker.net/topic/43856/json-oder-javascript-objekt-in-iobroker-datenpunkte-zerlegen

                                        Wenn Du aber lieber programmieren willst bzw. Codefragmente nutzen willst, dann nimm halt das Javascript.

                                        E 1 Reply Last reply Reply Quote 0
                                        • E
                                          excalibur270 @Thomas Braun last edited by

                                          @thomas-braun Daaaaaaaaaaaaaaaaaaaankeschön

                                          1 Reply Last reply Reply Quote 0
                                          • E
                                            excalibur270 @mickym last edited by

                                            @mickym Hey. Ja,das hatte ich auch schon gefunden.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            921
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            38
                                            230
                                            31202
                                            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