Ankündigung

Einklappen
Keine Ankündigung bisher.

Beaglebone Cape / DLMS eHZ

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Beaglebone Cape / DLMS eHZ

    Hallo,

    versuche einen itron ACE3000 anzubinden und versuche in smarthomeNG folgendes:
    Code:
    [dlms]
        class_name = DLMS
        class_path = plugins.dlms
        serialport = /dev/ttyS1
    #    baudrate = 1200
        update_cycle = 100
    #    use_checksum = False
    #    reset_baudrate = False
    #    no_waiting = True
    das ergebnis ist:
    Code:
    2016-05-22  05:18:35 DEBUG    DLMS         dlms: update
    2016-05-22  05:18:35 DEBUG    DLMS         dlms: (re)set baudrate to 300 Baud
    2016-05-22  05:18:38 WARNING  DLMS         dlms: read timeout! - response=b''
    ein einziges mal hatte er mit selben einstellungen auch schonmal daten, da kamen dann aber beim folgenden update
    Code:
    index out of range
    errors im log.

    Jemand eine Idee wie man sich da noch herantasten könnte?

    Danke!

    #2
    habe gerade gefunden, dass ich wohl d0 erst initialisieren muss:
    https://wiki.volkszaehler.org/hardwa...e3000_type_260

    Für die Kommunikation mittels d0-Protokoll muss zuerst eine Initialisierungs-Sequenz „/?!“ mit 300bd, 7E1 und „LF+CR“ geschickt werden, um ihn zum Antworten zu bewegen. Die Baudrate kann bei dem Zähler nicht geändert werden und bleibt bei 300bd.
    jemand eine idee wie man das mit DLMS machen kann?

    Kommentar


      #3
      die initialisierungs-sequenz wird immer hardcoded vom DLMS gesetzt:
      Code:
      self._init_seq = bytes('/?!\r\n', 'ascii')
      daran liegts also nicht.

      das `index out of range` wird in DLMS
      Code:
      try:
                  if self._reset_baudrate:
                      self._serial.baudrate = 300
                      logger.debug("dlms: (re)set baudrate to 300 Baud")
                  self._serial.write(self._init_seq)
                  self._serial.drainOutput()
                  self._serial.flushInput()
                  response = bytes()
                  prev_length = 0
                  while self.alive:
                      response += self._serial.read()
                      length = len(response)
                      # break if timeout or newline-character
                      if (response[-1] == 0x0a):
                          break
                      if (length == prev_length):
                          logger.warning("dlms: read timeout! - response={}".format(response))
                          return
                      prev_length = length
              except Exception as e:
                  logger.warning("dlms: {0}".format(e))
      am
      Code:
      response[-1]
      liegen, wenn keine daten uebertragen wurden (mutmaßung) ...

      Kommentar


        #4
        testen kann man den smartmeter auf der shell uebrigens so:
        Code:
        echo -e "\x2f\x3f\x21\x0d\x0a" > /dev/ttyS1 && tail -f /dev/ttyS1
        sendet die initialisierung '/?!' als hex-codiert und liest dann die gesamte response ein (quit per ctrl+c)

        das sieht dan so aus:
        Code:
        echo -e "\x2f\x3f\x21\x0d\x0a" > /dev/ttyS1 && tail -f /dev/ttyS1
        F.F(00)
        C.1(xxx          )
        C.5.0(00)
        1.8.0(043743.9*kWh)
        !
        D
        Zuletzt geändert von hotzen; 04.09.2017, 20:22.

        Kommentar


          #5
          komme weiter, nochmal ordentliches
          Code:
          git pull
          auf den smarthome plugins, dann pySerial neu installiert per
          Code:
          sudo apt-get remove python3-serial
          sudo pip3 install pyserial
          jetzt kommt wenigstens was an, allerdings checksum-errors:
          Code:
          2017-09-06  22:44:58 WARNING  DLMS         checksum/protocol error: response=0x2 0x46 0x2e 0x46 0x28 0x30 0x30 0x29 0xd 0xa 0x43 0x2e 0x31 0x28 0x33 0x32 0x33 0x37 0x31 0x36 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x29 0xd 0xa 0x43 0x2e 0x35 0x2e 0x30 0x28 0x30 0x30 0x29 0xd 0xa 0x31 0x2e 0x38 0x2e 0x30 0x28 0x30 0x34 0x33 0x37 0x37 0x38 0x2e 0x38 0x2a 0x6b 0x57 0x68 0x29 0xd 0xa 0x21 0xd 0xa 0x3 0x4d 0x7f checksum=127
          trotz
          Code:
          use_checksum = False
          in plugin.conf

          Kommentar


            #6
            Code:
            use_checksum = False
            wird im aktuellen DLMS plugin komplett ignoriert.
            habe es jetzt per PullRequest wieder ausgewertet: https://github.com/smarthomeNG/plugins/pull/72

            funktioniert damit bei mir wieder.

            /closed

            Kommentar

            Lädt...
            X