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. Hardware
  4. WMZ Sharky 775 einbinden

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    688

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

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

WMZ Sharky 775 einbinden

Scheduled Pinned Locked Moved Hardware
24 Posts 11 Posters 5.2k Views 11 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.
  • D darkblu

    Hallo @sharky ,
    das ist schade - weil ich bin so eher der cpoy paste Anwender und hoffte, ich könnte von deinem Wissen partizipieren.
    Aber gut, D1 Minis habe ich noch hier rumfliegen und den "Volkszähler" gibt es ja auch schon für unter 20 Euro.
    Dann probiere ich das mal in den Weihnachtsferien aus.

    Wenn ich das richtig deute, steht ja in dem Skript, dass die wakeup sequence mit 8N1 ausgeführt wird
    und anschließend auf 8E1 gewechselt wird.

    Ich werde berichten.

    S Offline
    S Offline
    sharky
    wrote on last edited by
    #21

    Hallo @darkblu,
    ich bin gespannt auf Deine Ergebnisse. Soweit ich weiß, gibt es auch Micropython für den ESP32, vielleicht kann man das Programm ohne größere Änderung übernehmen? Mein Zeitbudget ist leider etwas knapp, da kann ich leider nicht noch eine weitere Plattform angehen.

    W D 2 Replies Last reply
    0
    • S sharky

      Hallo @darkblu,
      ich bin gespannt auf Deine Ergebnisse. Soweit ich weiß, gibt es auch Micropython für den ESP32, vielleicht kann man das Programm ohne größere Änderung übernehmen? Mein Zeitbudget ist leider etwas knapp, da kann ich leider nicht noch eine weitere Plattform angehen.

      W Offline
      W Offline
      wavoigt
      wrote on last edited by
      #22

      @sharky
      Also mittlerweile gibt es funktionierende Tasmota Scripts für den Sharky 775 und den Hichi Lesekopf:
      https://www.mikrocontroller.net/topic/438972#new
      (nach "Sharky" suchen, so ab 23.08.2023)

      1 Reply Last reply
      0
      • S sharky

        Hallo @darkblu,
        ich bin gespannt auf Deine Ergebnisse. Soweit ich weiß, gibt es auch Micropython für den ESP32, vielleicht kann man das Programm ohne größere Änderung übernehmen? Mein Zeitbudget ist leider etwas knapp, da kann ich leider nicht noch eine weitere Plattform angehen.

        D Offline
        D Offline
        darkblu
        wrote on last edited by darkblu
        #23

        @sharky ,
        ja also… die Ergebnisse waren dann gleich null.
        Der Hichi Lesekopf empfängt bei mir leider nix.
        In meinem WMZ ist auch nur eine Diode, ich habe leider keine Position für den Hichi gefunden.
        Ich habe den Diehl ICM-T F775.
        Zum gegencheck habe ich ihn kurz an meinen Stromzähler gestöpselt und sofort sprudelten die Daten.
        Hab dann erstmal entnervt aufgegeben.

        Wie @wavoigt schreibt, habe ich mich auch bei mikrocontroller.net durchgearbeitet

        Raspi 4, 4GB für Influxdb 1.8 und Grafana
        Raspi 5, 8 GB für ioBroker

        1 Reply Last reply
        0
        • S sharky

          @flispy Ich nehme mal an, dass der Volkszähler eine normale serielle Schnittstelle bereitstellt (also "COMxxx" unter Windows bzw. "/dev/ttyUSBxxx" unter Linux). Dann kannst Du das folgende Programm mal ausprobieren, Du musst nur ganz unten ggf. das "/dev/ttyUSB0" in Zeile 86 durch das in Deinem Fall richtige ersetzen. Außerdem muss mit

          pip install pySerial
          

          noch die Bibliothek für serielle Schnittstellen für Python installiert werden.

          Keine Erfolgsgarantie, ich habe es nur so trocken heruntergeschrieben ...

          import serial
          import time
          import binascii
          
          
          # === mbus_checksum ===============================================================================
          def mbus_checksum(data, skip):
              sum = 0
              for i in range(0, len(data)):
                  if i >= skip:
                      sum = sum + int(data[i])
              return bytearray([sum & 255])
          
          
          # === check_result ================================================================================
          def check_result(where, ser):
              result = ser.read(1)
              if result == b'\xe5':
                  return True
              else:
                  if result is None:
                      return True
                  else:
                      print(f'{where}: bad answer: {binascii.hexlify(bytearray(result), " ")}')
                      return False
          
          
          # === get_data ====================================================================================
          def get_data(ser):
              # 2.5: at 2400, 8N1 to send 2.2s of alternating bits
              ser.write(b'\x55' * 528)
          
              # time.sleep(2.0) # 2.0s sleep -> 0.8s break -> 1.2s until the buffer is empty ...
              time.sleep(1.2 + 170.0 / 2400.0)
          
              # 2.3: change parity
              ser.parity=serial.PARITY_EVEN
          
              # 2.7.1: do selection, use jokers for serial, manufacturer, ID, medium
              # 17 chars, 0.08s outgoing
              selection = b'\x68\x0B\x0B\x68\x53\xFD\x52\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF'
              ser.write(selection)
              ser.write(mbus_checksum(selection, 4))
              ser.write(b'\x16')
              # result arrives after 0.19s - 0.30s
              check_result('Selection', ser)
          
              # 3.1: do application reset 0x50 (to read instant values)
              # 10 chars, 0.05s outgoing
              app_reset = b'\x68\x04\x04\x68\x53\xFD\x50\x50'
              ser.write(app_reset)
              ser.write(mbus_checksum(app_reset, 4))
              ser.write(b'\x16')
              # result arrives after 0.08s
              check_result('Application reset', ser)
          
              # 3.2: do read data
              # 5 chars, 0.02s
              read_data = b'\x10\x7B\xFD'
              ser.write(read_data)
              ser.write(mbus_checksum(read_data, 1))
              ser.write(b'\x16')
              # result arrives after 0.07s, is 0.71s long (ca. 173 bytes)
              result = ser.read(200)  # 173 bytes plus some reserves
              if result is None:
                  print('No data received')
              else:
                  # debug output (hex dump) of received data
                  print(f'user data bytes: {binascii.hexlify(bytearray(result), " ")}')
          
                  # 2.7.2: do deselection
                  # 5 chars, 0.02s
                  deselection = b'\x10\x40\xfd'
                  ser.write(deselection)
                  ser.write(mbus_checksum(deselection, 0))
                  ser.write(b'\x16')
                  check_result('Deselection', ser)
          
                  # return bytes received
              return result
          
          
          # === main ========================================================================================
          print('Starting up ...\n')
          # 2.5: 2400, 8N1 to send 2.2s of alternating bits, long timeout due to slow response by Ultramess
          ser = serial.Serial("/dev/ttyUSB0", baudrate=2400, bytesize=8, parity=serial.PARITY_NONE, stopbits=1, timeout=0.5)
          
          while True:
              print('Reading #0')
              result = get_data(ser)
          
              time.sleep(5.0)
          
          Thorsten NiemannT Offline
          Thorsten NiemannT Offline
          Thorsten Niemann
          wrote on last edited by
          #24

          @sharky said in WMZ Sharky 775 einbinden:

          @flispy Ich nehme mal an, dass der Volkszähler eine normale serielle Schnittstelle bereitstellt (also "COMxxx" unter Windows bzw. "/dev/ttyUSBxxx" unter Linux). Dann kannst Du das folgende Programm mal ausprobieren, Du musst nur ganz unten ggf. das "/dev/ttyUSB0" in Zeile 86 durch das in Deinem Fall richtige ersetzen. Außerdem muss mit

          pip install pySerial
          

          noch die Bibliothek für serielle Schnittstellen für Python installiert werden.

          Keine Erfolgsgarantie, ich habe es nur so trocken heruntergeschrieben ...

          import serial
          import time
          import binascii
          
          
          # === mbus_checksum ===============================================================================
          def mbus_checksum(data, skip):
              sum = 0
              for i in range(0, len(data)):
                  if i >= skip:
                      sum = sum + int(data[i])
              return bytearray([sum & 255])
          
          
          # === check_result ================================================================================
          def check_result(where, ser):
              result = ser.read(1)
              if result == b'\xe5':
                  return True
              else:
                  if result is None:
                      return True
                  else:
                      print(f'{where}: bad answer: {binascii.hexlify(bytearray(result), " ")}')
                      return False
          
          
          # === get_data ====================================================================================
          def get_data(ser):
              # 2.5: at 2400, 8N1 to send 2.2s of alternating bits
              ser.write(b'\x55' * 528)
          
              # time.sleep(2.0) # 2.0s sleep -> 0.8s break -> 1.2s until the buffer is empty ...
              time.sleep(1.2 + 170.0 / 2400.0)
          
              # 2.3: change parity
              ser.parity=serial.PARITY_EVEN
          
              # 2.7.1: do selection, use jokers for serial, manufacturer, ID, medium
              # 17 chars, 0.08s outgoing
              selection = b'\x68\x0B\x0B\x68\x53\xFD\x52\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF'
              ser.write(selection)
              ser.write(mbus_checksum(selection, 4))
              ser.write(b'\x16')
              # result arrives after 0.19s - 0.30s
              check_result('Selection', ser)
          
              # 3.1: do application reset 0x50 (to read instant values)
              # 10 chars, 0.05s outgoing
              app_reset = b'\x68\x04\x04\x68\x53\xFD\x50\x50'
              ser.write(app_reset)
              ser.write(mbus_checksum(app_reset, 4))
              ser.write(b'\x16')
              # result arrives after 0.08s
              check_result('Application reset', ser)
          
              # 3.2: do read data
              # 5 chars, 0.02s
              read_data = b'\x10\x7B\xFD'
              ser.write(read_data)
              ser.write(mbus_checksum(read_data, 1))
              ser.write(b'\x16')
              # result arrives after 0.07s, is 0.71s long (ca. 173 bytes)
              result = ser.read(200)  # 173 bytes plus some reserves
              if result is None:
                  print('No data received')
              else:
                  # debug output (hex dump) of received data
                  print(f'user data bytes: {binascii.hexlify(bytearray(result), " ")}')
          
                  # 2.7.2: do deselection
                  # 5 chars, 0.02s
                  deselection = b'\x10\x40\xfd'
                  ser.write(deselection)
                  ser.write(mbus_checksum(deselection, 0))
                  ser.write(b'\x16')
                  check_result('Deselection', ser)
          
                  # return bytes received
              return result
          
          
          # === main ========================================================================================
          print('Starting up ...\n')
          # 2.5: 2400, 8N1 to send 2.2s of alternating bits, long timeout due to slow response by Ultramess
          ser = serial.Serial("/dev/ttyUSB0", baudrate=2400, bytesize=8, parity=serial.PARITY_NONE, stopbits=1, timeout=0.5)
          
          while True:
              print('Reading #0')
              result = get_data(ser)
          
              time.sleep(5.0)
          

          Hallo, ich versuchte gerade dein Skript an meinem CF Echo 2 anzupassen doch leider verstehe ein paar Sachen in deinen Skript nicht.

          Wieso sieht das mit dem time.sleep so komisch aus, warum wird hier addiert und dividiert? Ich denke hier soll doch nur eine Wartezeit generiert werden oder?

          Zur Zeit erhalte ich immer einen Fehler beim Check-result, das bedeutet doch auch das die Daten nicht richtig sein können oder? Oder können diese dennoch stimmen?

          Hast du eine Ahnung wie ich die Daten richtig parsen kann also die Daten wie verbrauch heraus lesen kann?
          Das Skript hat nur auf jeden Fall schon sehr viel weitergeholfen.

          Gruß Thorsten Niemann

          1 Reply Last reply
          0

          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

          With your input, this post could be even better 💗

          Register Login
          Reply
          • Reply as topic
          Log in to reply
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes


          Support us

          ioBroker
          Community Adapters
          Donate

          512

          Online

          32.7k

          Users

          82.6k

          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