Ankündigung

Einklappen
Keine Ankündigung bisher.

OneWire Plugin - Probleme mit einigen Sensoren

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

    OneWire Plugin - Probleme mit einigen Sensoren

    Hallo,

    leider ist mein OneWire Bus nicht ganz stabil. Nicht jeder Sensor ist immer da, aber nach einer Weile findet sich dann doch jeder Sensor.
    Allerdings werden die Sensoren in SH nicht, oder sehr selten aktualisiert:
    Code:
    2018-10-02 23:41:28;1-Wire: 28.3AC71B030000 with sensors: T10, T, T11, T9, T12
    2018-10-02 23:41:28;1-Wire: 28.8AC81B030000 with sensors: T10, T, T11, T9, T12
    2018-10-02 23:41:28;1-Wire: 28.F29C1B030000 with sensors: T10, T, T11, T9, T12
    2018-10-02 23:41:28;1-Wire: 28.D2C61B030000 with sensors: T10, T, T11, T9, T12
    2018-10-02 23:41:28;1-Wire: 28.D24AE0020000 with sensors: T10, T, T11, T9, T12
    2018-10-02 23:41:28;1-Wire: 28.EC931B030000 with sensors: T10, T, T11, T9, T12
    2018-10-02 23:41:28;1-Wire: 28.F412E0020000 with sensors: T10, T, T11, T9, T12
    2018-10-02 23:41:28;1-Wire: 28.14B51B030000 with sensors: T10, T, T11, T9, T12
    2018-10-02 23:41:28;1-Wire: 28.309E1B030000 with sensors: T10, T, T11, T9, T12
    2018-10-02 23:41:28;1-Wire: Starting I/O detection
    2018-10-02 23:41:39;1-Wire: problem reading 28.EC931B030000 /bus.0/28.EC931B030000/temperature10: no payload for /uncached/bus.0/28.EC931B030000/temperature10
    2018-10-02 23:41:39;1-Wire: path not found for Daten.Aussen_temp
    2018-10-02 23:41:39;1-Wire: problem reading 28.3BCD1B030000 /bus.0/28.3BCD1B030000/temperature10: No connection to owserver.
    2018-10-02 23:41:39;1-Wire: connected to 192.168.177.3:4304
    2018-10-02 23:43:36;1-Wire: problem reading 28.EC931B030000 /bus.0/28.EC931B030000/temperature10: no payload for /uncached/bus.0/28.EC931B030000/temperature10
    2018-10-02 23:43:36;1-Wire: path not found for Daten.Aussen_temp
    2018-10-02 23:43:36;1-Wire: problem reading 3A.778F07000000
    2018-10-02 23:43:36;1-Wire: problem reading 28.3BCD1B030000 /bus.0/28.3BCD1B030000/temperature10: No connection to owserver.
    2018-10-02 23:43:36;1-Wire: problem reading 3A.778F07000000
    2018-10-02 23:43:39;1-Wire: connected to 192.168.177.3:4304
    2018-10-02 23:45:36;1-Wire: problem reading 28.EC931B030000 /bus.0/28.EC931B030000/temperature10: no payload for /uncached/bus.0/28.EC931B030000/temperature10
    2018-10-02 23:45:36;1-Wire: path not found for Daten.Aussen_temp
    2018-10-02 23:45:37;1-Wire: problem reading 28.3BCD1B030000 /bus.0/28.3BCD1B030000/temperature10: No connection to owserver.
    2018-10-02 23:45:40;1-Wire: connected to 192.168.177.3:4304
    2018-10-02 23:47:37;1-Wire: problem reading 28.EC931B030000 /bus.0/28.EC931B030000/temperature10: no payload for /uncached/bus.0/28.EC931B030000/temperature10
    2018-10-02 23:47:37;1-Wire: path not found for Daten.Aussen_temp
    2018-10-02 23:47:37;1-Wire: problem reading 28.3BCD1B030000 /bus.0/28.3BCD1B030000/temperature10: No connection to owserver.
    2018-10-02 23:47:39;1-Wire: connected to 192.168.177.3:4304
    2018-10-02 23:49:38;1-Wire: problem reading 28.EC931B030000 /bus.0/28.EC931B030000/temperature10: no payload for /uncached/bus.0/28.EC931B030000/temperature10
    2018-10-02 23:49:38;1-Wire: path not found for Daten.Aussen_temp
    2018-10-02 23:49:38;1-Wire: problem reading 28.3BCD1B030000 /bus.0/28.3BCD1B030000/temperature10: No connection to owserver.
    2018-10-02 23:49:39;1-Wire: connected to 192.168.177.3:4304
    2018-10-02 23:50:51;1-Wire: unknown sensor 2D.02A1C70B0000 DS2431
    2018-10-02 23:50:52;1-Wire: unknown sensor 2D.0AA1C70B0000 DS2431
    Ich habe das Gefühl, dass sobald es zu einem "No connection to owserver" kommt, die weiteren Items nicht mehr abgearbeitet werden. Kann das sein?

    Der Fehler "no payload for..." stammt ja aus diesem code:
    Code:
     if length == 0:
        self._lock.release()
        if cmd != 3:
            raise owex('no payload for {0}'.format(path))
        return
    (https://github.com/smarthomeNG/plugi...init__.py#L144)

    owex(msg) ist ja das gleiche wie exception(msg)
    Ich kenne mich da nicht gut genug aus. Was macht das raise owex(msg)? Was passiert im code als nächstes?
    Ich frage mich, wo und warum close() ausgeführt wird. Denn dies ist m.W. die einzige möglichkeit, dass self.connected = False werden kann.

    Meine Befürchtung ist, dass immer wieder beim gleichen Item die Abfrage fehlschlägt und damit die darauf folgenden Items nie abgefragt werden.

    Ich habe gerade das momentan problematische Item entfernt und das bestätigt meine Befürchtung:
    Code:
    2018-10-03 00:12:00;1-Wire: connected to 192.168.177.3:4304
    2018-10-03 00:12:14;1-Wire: unknown sensor 2D.02A1C70B0000 DS2431
    2018-10-03 00:12:14;1-Wire: unknown sensor 2D.0AA1C70B0000 DS2431
    2018-10-03 00:12:15;1-Wire: sensor 26.CFA82E010000 voltage: 5.0
    2018-10-03 00:12:15;1-Wire: 26.CFA82E010000 with sensors: V
    2018-10-03 00:12:16;1-Wire: sensor 26.4AA02E010000 voltage: 5.0
    2018-10-03 00:12:16;1-Wire: 26.4AA02E010000 with sensors: T, L, H, VDD
    2018-10-03 00:12:16;1-Wire: 3A.E19307000000 with sensors: OB, OA, IA, IB
    2018-10-03 00:12:16;1-Wire: 28.D5FEAA030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:16;1-Wire: 28.55C11B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:16;1-Wire: 28.E94AE0020000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:16;1-Wire: 28.FACE1B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:16;1-Wire: 28.62C41B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:16;1-Wire: 28.28C21B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:16;1-Wire: 28.88A61B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:16;1-Wire: 28.00A61B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:17;1-Wire: unknown sensor 2D.B378C70B0000 DS2431
    2018-10-03 00:12:18;1-Wire: sensor 26.3FBE30010000 voltage: 5.01
    2018-10-03 00:12:18;1-Wire: 26.3FBE30010000 with sensors: V
    2018-10-03 00:12:19;1-Wire: sensor 26.07BE30010000 voltage: 5.0
    2018-10-03 00:12:19;1-Wire: 26.07BE30010000 with sensors: T, L, H, VDD
    2018-10-03 00:12:21;1-Wire: sensor 26.EDA82E010000 voltage: 5.0
    2018-10-03 00:12:21;1-Wire: 26.EDA82E010000 with sensors: V
    2018-10-03 00:12:22;1-Wire: sensor 26.46AF30010000 voltage: 5.0
    2018-10-03 00:12:22;1-Wire: 26.46AF30010000 with sensors: T, L, H, VDD
    2018-10-03 00:12:22;1-Wire: 3A.778F07000000 with sensors: OB, OA, IA, IB
    2018-10-03 00:12:22;1-Wire: 3A.DE8E07000000 with sensors: OB, OA, IA, IB
    2018-10-03 00:12:22;1-Wire: 3A.AA2A08000000 with sensors: OB, OA, IA, IB
    2018-10-03 00:12:22;1-Wire: 28.BFBA1B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:22;1-Wire: 28.67DE1B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:22;1-Wire: 28.3BCD1B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:22;1-Wire: 28.F3BE1B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:22;1-Wire: 28.43DF1B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:22;1-Wire: 28.219A1B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:22;1-Wire: 28.5ED7AA030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:22;1-Wire: 28.F633E0020000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:22;1-Wire: 28.86AE1B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:22;1-Wire: 28.7A921B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:22;1-Wire: 28.3AC71B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:22;1-Wire: 28.8AC81B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:22;1-Wire: 28.F29C1B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:22;1-Wire: 28.D2C61B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:22;1-Wire: 28.F412E0020000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:22;1-Wire: 28.309E1B030000 with sensors: T, T9, T10, T12, T11
    2018-10-03 00:12:23;1-Wire: Starting I/O detection
    2018-10-03 00:12:30;1-Wire: path not found for Daten.Aussen_hum
    2018-10-03 00:12:30;1-Wire: path not found for Daten.Aussen_temp
    2018-10-03 00:12:32;1-Wire: path not found for Daten.Keller_hum
    2018-10-03 00:12:37;1-Wire: path not found for Daten.Kessel_Ruecklauf
    2018-10-03 00:12:41;1-Wire: path not found for Daten.Kinderbad_temp
    2018-10-03 00:12:42;1-Wire: path not found for Daten.Kessel
    2018-10-03 00:12:45;1-Wire: path not found for Daten.Kessel_Vorlauf
    2018-10-03 00:12:45;1-Wire: path not found for og.Schlafzimmer.heizung.ist
    2018-10-03 00:12:49;1-Wire: sensor cycle takes 22.3266921043396 seconds
    Der Zyklus ist nun durchgelaufen. Das hat vorher nicht funktioniert -und zwar nicht einmal am ganzen Tag.

    Es wäre gut, wenn wir das Plugin dahingehend ändern können, dass es *während* eines Cycles ein Reconnect versucht, bzw. wenn es die Verbindung garnicht erst aufgeben würde (denn self.close() muss m.M. aufgerufen werden).

    Übersehe ich etwas?

    Gruß,
    Hendrik
    Zuletzt geändert von henfri; 02.10.2018, 23:16.

    #2
    Moin,

    ich weiß, nicht jeder hat onewire.
    Aber vielleicht kann mir jemand bzgl. des Codes weiterhelfen?

    Gruß,
    Hendrik

    Kommentar


      #3
      Es gibt die lib/network.py, damit könnte man das onewire umstricken. Es wäre.gut zu wissen, welcher Sensor bei Dir zum Abbruch führt und wie Deine Topologie aussieht.

      Kommentar


        #4
        Hallo Bernd,

        vielen Dank für deine Antwort. Ich habe gerade eclipse, pydev und remote-debugging ans Laufen gebracht. Dank deiner Anleitung ganz ohne Rotwein.
        Ich habe mehrere problematische Sensoren:
        Code:
        grep problem ./var/log/ow_busmonitor.log | cut -d' ' -f 5 |sort -u
        26.A1B930010000
        28.14B51B030000
        28.1FCE1B030000
        28.88A61B030000
        28.D2C61B030000
        28.F412E0020000
        3A.778F07000000
        Aber nur drei kommen vor, wenn keine Verbindung besteht:
        Code:
        grep "No connection" ./var/log/ow_busmonitor.log | cut -d' ' -f 5 |sort -u
        28.88A61B030000
        28.D2C61B030000
        28.F412E0020000
        Allerdings glaube ich, dass dies die Sensoren sind, die *nach* dem sensor abgefragt werden, der zum Abbruch führt, denn die "No connection" logzeile kommt hier her:

        Code:
            def _request(self, path, cmd=10, value=None):
        ...
                if not self.connected:
                    raise owex("No connection to owserver.")
        Dass die Verbindung nicht besteht, kommt eher hierher:
        Code:
                        except Exception as e:
                            self.logger.warning("1-Wire: problem reading {} {}: {}".format(addr, path, e))
                            if not self.connected:
                                return
                            else:
                                #pydevd.settrace("192.168.177.20")
                                self.close()
                                break
        Die Topologie ist so, wie sie nicht sein sollte. Ein Stern.

        Was schwebt dir vor bezüglich der lib/network.py?

        Gruß,
        Hendrik

        Kommentar


          #5
          Wieviel Meter hat denn Dein Stern ???

          Also bis 2x 17 Meter, ca. 20 DS18B20 und BM DS9490 hatte ich absolut keine Probleme.

          Kannst Du keinen zweiten Busmaster bzw. den großen Busmaster nehmen ??
          Gruß, JG

          Kommentar


            #6
            Hallo,

            ich weiß nicht, wie lang die Kabel sind. Sie gehen durch das ganze Haus.
            Ich habe schon den Professional BM mit zwei Kanälen.
            Ich bin recht sicher, dass ich kein Problem hätte, wenn sh.py den Sensor-Cycle nicht beim ersten Problem abbrechen würde.

            Gruß,
            Hendrik

            Kommentar


              #7
              Hallo,

              ich denke, dies sollte mein Problem lösen:
              Code:
                  def _sensor_cycle(self):
                      if not self.connected:
                          return
                      start = time.time()
                      for addr in self._sensors:
                          if not self.alive:
                              self.logger.info("1-Wire: Self not alive".format(addr))
                              break
                          for key in self._sensors[addr]:
                              item = self._sensors[addr][key]['item']
                              path = self._sensors[addr][key]['path']
                              if path is None:
                                  self.logger.info("1-Wire: path not found for {0}".format(item.id()))
                                  continue
                              try:
                                  value = self.read('/uncached' + path).decode()
                                  if key.startswith('T') and value == '85.0000':
                                      self.logger.info("1-Wire: problem reading {0}. Wiring problem?".format(addr))
                                      temperror=True
                                      continue
                                  else:
                                      temperror=False
                                  value = float(value)
                              except Exception as e:
                                  self.logger.warning("1-Wire: problem reading {} {}: {}. Trying to continue with next sensor".format(addr, path, e))
                                  #if not self.connected:
                                  #    return
                                  #else:
                                  #    self.close()
                                  #    break
                              else:  #only if no exception
                                  if key == 'L':  # light lux conversion
                                      if value > 0:
                                          value = round(10 ** ((float(value) / 47) * 1000))
                                      else:
                                          value = 0
                                  elif key == 'VOC':
                                      value = value * 310 + 450
                                  if not temperror: item(value, '1-Wire', path)
                                  
                      cycletime = time.time() - start
                      self.logger.debug("1-Wire: sensor cycle takes {0} seconds".format(cycletime))
              spricht da etwas gegen?
              Ich würde gerne etwas mehr Statistik machen.
              Dazu würde ich gerne drei Sub-Items hinzufügen:
              OW_Item habe ich heute.
              Zusätzlich gäbe es:
              OW_Item.successful
              OW_Item.not_successful
              OW_Item.successrate

              Jetzt muss ich natürlich prüfen, ob es das Item gibt.
              Mit get_children() finde ich alle Children. Aber wie prüfe ich den Namen des Child?
              Oder gibt es eine bessere option?

              Was mir vorschwebt:
              Code:
              try:
                ...
              except:
                if exists(Item.not_successful):
                   Item.not_successful(Item.not_successful()+1)
              else:
                if exists(Item.successful):
                   Item.successful(Item.successful()+1)
              Gruß,
              Hendrik
              Zuletzt geändert von henfri; 04.10.2018, 21:40.

              Kommentar


                #8
                Läuft das owfs lokal auf dem gleichen Rechner wie SmartHomeNG oder auf dem Prof.Busmaster?

                Kommentar


                  #9
                  Hallo Bernd,

                  owfs läuft auf dem Rechner, an dem der Prof-Busmaster angeschlossen ist. Smarthome-ng läuft auf dem gleichen Rechner -aber in einem Docker-Container.

                  Was hältst du von meiner Anpassung oben?

                  Gruß,
                  Hendrik

                  Kommentar


                    #10
                    Ist das Problem auf beiden Kanälen des Professional BM ??
                    Gruß, JG

                    Kommentar


                      #11
                      Den Code kann ich mir derzeit nicht anschauen, nächste Woche vielleicht.
                      ​​​​

                      Kommentar


                        #12
                        Hallo,

                        ja, das Problem habe ich auf beiden Kanälen des Busmasters.

                        @Bernd: Das wäre nett. Ich würde wohl auch einen PR machen. Ich denke, das sollte so besser sein als vorher. Ich kann mir zumindest kein Scenario vorstellen, bei dem es ein Problem machen würde.

                        Gruß,
                        Hendrik

                        Kommentar


                          #13
                          Hier mein Pull Request:
                          https://github.com/smarthomeNG/plugins/pull/169

                          Kommentar

                          Lädt...
                          X