Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. [gelöst] SMI260 via WMBus Stick steuern

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] SMI260 via WMBus Stick steuern

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

      Ich hab da so ne kleine Solaranlage mit Batteriespeicher. Die deckt mir etwas den Grundbedarf und speichert den Rest in Akkus.

      Meinen Wechselrichter (SMI 260) kann man mit einem Stick und einer bescheidenen Software streuern - unter Win…

      Ich will erreichen, dass das ich die Ausgabe-Leistung des WR dynamisch über Iobroker anpassen kann, leider kenn ich mich mit Kommunikationsprotokollen nicht ausreichend aus.

      Ich habe gelesen, dass manche sich die gesendeten Befehle gesnifft haben und diese dann alternativ via Bash unter Linux absenden.

      Gesnifft hab ich - leider hab ich jetzt nur Alt-griechisch vor mir.

      Hat jemand das ganze schonmal umgesetzt oder kennt sich jemand aus mit dem Protokoll und kann mir da unter die Arme greifen?

      1 Reply Last reply Reply Quote 0
      • D
        DavidFD last edited by

        Nochmal mein aktuelle Zwischenstand.

        Gesniffte Kommunikation sieht so aus:

        8819_gesnifft.png

        Wenn ich das ganze Analog mit pySerial abschicke, dann zeigt mein Com Monitor die ausgehende Kommnukation identisch an, leider passiert aber nichts. Wo mach ich den Fehler?

        import serial
        
        s = serial.Serial(
            port='COM4',\
            baudrate=9600,\
            parity=serial.PARITY_EVEN,\
            stopbits=serial.STOPBITS_ONE,\
            bytesize=serial.EIGHTBITS,\
                timeout=2)
        
        command=b"\xA5\x81\x0F\x00\x34\x13"
        s.write(command)
        s.read()
        
        command=b"\xA5\x82\x01\x10\x5B\xB4\xB0\x62\x98\x00\x00\x01\x02\x51\x0C\x79\x00\x00\x00\x00\x50\x1D"
        s.write(command)
        s.read()
        
        command=b"\xA5\x82\x01\x13\x5B\xB4\xB0\x62\x98\x00\x00\x01\x02\x51\x0C\x79\x00\x00\x00\x00\x00\xFF\xA7\x58\x27"
        s.write(command)
        s.read()
        
        command=b"\xA5\x82\x01\x24\x44\xB4\xB0\x62\x98\x00\x00\x01\x02\x51\x0C\x79\x00\x00\x00\x00\x12\x2B\x0B\x00\x02\x7C\x07\x69\x68\x70\x5F\x73\x6F\x63\xE8\x03\x01\xFD\x66\x01\x06\x78"
        s.write(command)
        s.read()
        
        command=b"\xA5\x82\x01\x10\x5B\xB4\xB0\x62\x98\x00\x00\x01\x02\x51\x0C\x79\x00\x00\x00\x00\x50\x1D"
        s.write(command)
        s.read()
        
        command=b"\xA5\x82\x01\x13\x5B\xB4\xB0\x62\x98\x00\x00\x01\x02\x51\x0C\x79\x00\x00\x00\x00\x00\xFF\xA7\x58\x27"
        s.write(command)
        s.read()
        
        s.close()
        exit()
        
        
        1 Reply Last reply Reply Quote 0
        • D
          DavidFD last edited by

          habs jetzt zum laufen gebracht.

          Knackpunkt war die Parity, diese hatte ich falsch gesetzt und darum kamen die Befehle nicht an.

          Mein Testscript läuft jetzt so:

          import serial, time, sys
          
          watt =  int(sys.argv[1])
          
          print watt
          
          s = serial.Serial('/dev/ttyUSB1', 57600, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE,1)
          
          command=b"\xA5\x81\x0F\x00\x34\x13"
          command1=b"\xA5\x82\x01\x24\x44\xB4\xB0\x62\x98\x00\x00\x01\x02\x51\x0C\x79\x00\x00\x00\x00\x12\x2B\x0A\x00\x02\x7C\x07\x69\x68\x70\x5F\x73\x6F\x63\xE8\x03\x01\xFD\x66\x01\xE1\x80"
          
          s.write(command)
          s.readline()
          
          command=b"\xA5\x82\x01\x10\x5B\xB4\xB0\x62\x98\x00\x00\x01\x02\x51\x0C\x79\x00\x00\x00\x00\x50\x1D"
          
          s.write(command)
          s.readline()
          
          command=b"\xA5\x82\x01\x13\x5B\xB4\xB0\x62\x98\x00\x00\x01\x02\x51\x0C\x79\x00\x00\x00\x00\x00\xFF\xA7\x58\x27"
          
          s.write(command)
          s.readline()
          
          ##switch off
          if watt == 0:
                  print "ausschalten"
                  command=b"\xA5\x82\x01\x24\x44\xB4\xB0\x62\x98\x00\x00\x01\x02\x51\x0C\x79\x00\x00\x00\x00\x12\x2B\x00\x00\x02\x7C\x07\x69\x68\x70\x5F\x73\x6F\x63\xE8\x03\x01\xFD\x66\x00\xF8\x97"
          
          ## 20 Watt
          if watt == 20:
                  print "20 Watt"
                  command=b"\xA5\x82\x01\x24\x44\xB4\xB0\x62\x98\x00\x00\x01\x02\x51\x0C\x79\x00\x00\x00\x00\x12\x2B\x14\x00\x02\x7C\x07\x69\x68\x70\x5F\x73\x6F\x63\xE8\x03\x01\xFD\x66\x01\x51\x8B"
          
          ## 10 Watt 
          if watt == 10:
                  print "10 Watt"
                  command=b"\xA5\x82\x01\x24\x44\xB4\xB0\x62\x98\x00\x00\x01\x02\x51\x0C\x79\x00\x00\x00\x00\x12\x2B\x0A\x00\x02\x7C\x07\x69\x68\x70\x5F\x73\x6F\x63\xE8\x03\x01\xFD\x66\x01\xE1\x80"
          
          ## 50Watt 
          if watt == 50:
                  print "50 Watt"
                  command=b"\xA5\x82\x01\x24\x44\xB4\xB0\x62\x98\x00\x00\x01\x02\x51\x0C\x79\x00\x00\x00\x00\x12\x2B\x32\x00\x02\x7C\x07\x69\x68\x70\x5F\x73\x6F\x63\xE8\x03\x01\xFD\x66\x01\x2E\x6C"
          
          ## 75 Watt
          if watt == 75:
                  print "75 Watt"
                  command=b"\xA5\x82\x01\x24\x44\xB4\xB0\x62\x98\x00\x00\x01\x02\x51\x0C\x79\x00\x00\x00\x00\x12\x2B\x4B\x00\x02\x7C\x07\x69\x68\x70\x5F\x73\x6F\x63\xE8\x03\x01\xFD\x66\x01\x09\xBA"
          
          s.write(command)
          s.readline()
          
          s.close()
          
          

          die Befehle hab ich mir mit "Serial Port Monitor" für die einzelnen Leistungsstufen aufgezeichnet.

          Jetzt kann ich meinen Wechselrichter endlich dem Stromverbrauch und der Sonnensituation dynamisch anpassen.

          Bei Fragen, gern PN oder hier.

          1 Reply Last reply Reply Quote 0
          • M
            maestrone last edited by

            Hallo DavidFD

            Danke für deine Arbeit… habe die gleichen WR (4 Stück) in Netzkopplung an 260 Watt Paneelen.

            Fragen: Du beeinflusst scheinbar mit diesem Code die Leistungsabgabe der WR (DC > AC). Hast du eine Methode herausgefunden wie die produzierte Leistung im Netzbetrieb ausgelesen werden kann? Auch interessant wäre die Unterscheidung von verschiedenen WR.

            Hast du dafür einen Ansatz, wäre die Lösung eines grossen Problems bei mir...

            Grüsse

            Maestrone

            Nebenbei: Dein publizierter Code ist javascript oder? Sorry bin absoluter Beginner

            D 1 Reply Last reply Reply Quote 0
            • Mahe3006
              Mahe3006 last edited by

              Hallo DavidFD,
              ich habe deinen Beitrag zum SMI260 gelesen.
              Sieht sehr interessant aus und hat mein Interesse geweckt.
              Hast du dein Script noch erweitert?
              Ich möchte mir gerne 2 Stück von den Wechselrichtern holen und in meine vorhanden Hausanlage aus Batteriewechselrichter einbauen. Die Dinger sollen dann zur Nullkompensation werkeln.
              In deinem Script bis du bis 70Watt Ausgangsleistung gegangen. Hast du auch die Werte für bis Max-Watt?
              Der WR gibt sicherlich noch andere Statusinformationen aus, hast du darauf auch mal einen Blick geworfen?
              Ich hoffe ich nerve nicht zu sehr mit meinen Fragen.
              Sonnige Grüße aus NRW.
              Marc

              D 1 Reply Last reply Reply Quote 0
              • D
                DavidFD @maestrone last edited by

                @maestrone Der Code ist Python. Python läuft auf den Linuxkisten wunderbar und ist meist schon vorhanden.

                Ein Auslesen der Leistungsabgabe habe ich gar nicht probiert. Da stecke ich nicht tief genug in der Materie.

                1 Reply Last reply Reply Quote 0
                • D
                  DavidFD @Mahe3006 last edited by DavidFD

                  @Mahe3006 Hey, habs leider erst jetzt gesehen.

                  Die höheren Werte müsstest du dir selbst auslesen, da immer ein Zufallsanteil der zu deinem WR passt im Paket drin sein müsste.

                  Das Script hab ich mir noch ein bisschen erweitert, dass es mir immer nach meinem Verbrauch das anpasst und die Akkus im idealen Status hat. Jetzt sind wir aber umgezogen und ich habe es aktuell noch gar nicht in Betrieb - kommt aber hoffentlich bald wieder 😉

                  Die Statusmeldungen vom WR hab ich mir gar nicht genauer angeschaut (Kommunkationprotokolle sind für mich bömische Dörfer). Ich habe mir einen Laderegler ( https://amzn.to/2O0sKLp ) mit Schnittstelle im gut dokumentierten Modbus Protokoll gekauft und diesen dann ausgelesen.

                  Die Leistungswerte etc haben mit dem SMI gut hingehauen und ich konnte damit auch Ladezustand der Akkus, Eingangsleistung Solar, Ausgangsleistung an den WR messen. Dafür hab ich mir ein kleines Script gebastelt, dass mir die Daten via MQTT an Iobroker gesandt hat.

                  Bei Fragen, gern Fragen

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate
                  FAQ Cloud / IOT
                  HowTo: Node.js-Update
                  HowTo: Backup/Restore
                  Downloads
                  BLOG

                  414
                  Online

                  31.7k
                  Users

                  79.8k
                  Topics

                  1.3m
                  Posts

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