Ankündigung

Einklappen
Keine Ankündigung bisher.

Message mit 2 byte in 16 bit wandeln

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

    #16
    Hi,

    das coding sieht korrekt aus, was sagt denn das Log?

    Gruß, Waldemar

    Kommentar


      #17
      Hallo,

      das Log sagt bspw. wenn ich eine "3"
      Code:
      2019-08-05  22:23:23 WARNING  raumtemp.devices.onewire_gateway.ch1_error.sensor2_error Item raumtemp.devices.onewire_gateway.ch1_error.sensor2_error: value "2" does not match type bool. Via Eval raumtemp.devices.onewire_gateway.ch1_error.from_knx
      wenn ich beim item raumtemp.devices.onewire_gateway.ch1_error.from_kn x eine "3" setze.

      Kommentar


        #18
        mumpf

        Es liegt am eval.

        Nutzt man
        Code:
        "True if value & 0b00001000 else False"
        geht es, nutzt man
        Code:
        "value & 0b00001000"
        geht es nicht, bzw. kommt dann nur der erste fehlerhafte Sensor an.

        Kommentar


          #19
          Sorry,

          dann hab ich Dir was falschen empfohlen... Es sollte auch   "(value & 0b00001000) != 0"  gehen, ist etwas kürzer. Aber mach wie Du denkst.

          Gruß, Waldemar

          Kommentar


            #20
            Ok, danke.

            Kommentar


              #21
              Das Ergebnis vom Ausdruck den Waldemar ins Spiel gebracht hat, ist immer ein Integer. In lib/item.py findet sich die Ursache für das Verhalten und auch eine ToDo Anmerkung:

              Code:
              # TODO: Candidate for Utils.to_bool()
              # write testcase and replace
              # -> should castng be restricted like this or handled exactly like Utils.to_bool()?
              #    Example: _cast_bool(2) is False, Utils.to_bool(2) is True
              
              def _cast_bool(value):
                  if type(value) in [bool, int, float]:
                      if value in [False, 0]:
                          return False
                      elif value in [True, 1]:
                          return True
                      else:
                          raise ValueError
                  elif type(value) in [str, str]:
                      if value.lower() in ['0', 'false', 'no', 'off', '']:
                          return False
                      elif value.lower() in ['1', 'true', 'yes', 'on']:
                          return True
                      else:
                          raise ValueError
                  else:
                      raise TypeError
              Somit ergibt IMHO 0 --> False, 1 --> True, 2...n -> False

              Ich wäre dafür, das hier wie in Utils.to_bool() zu ändern. Sprich alles was nicht 0 ist auf True und 0 auf False.

              Kommentar


                #22
                Hi,

                danke für die Erklärung. Mir war nicht klar, dass es hier eine eigene cast-Funktion gibt, ich ging davon aus, dass das Standardverhalten hier gelten würde.
                Ich bin sicherlich kein python-Profi, aber bool(2) ist True, bool(0) ist False... In einem if wird der Ausdruck ja dementsprechend ausgewertet. Ich finde es auch nicht erwartungskonform, dass ein bool von einem int > 1 nicht True wird.

                Gruß, Waldemar

                Kommentar


                  #23
                  Daher hatte ich das im Quellcode schon mal kommentiert. Die eigene Cast Funktion rührt noch aus smarthome.py Zeiten.
                  Viele Grüße
                  Martin

                  Stay away from negative people. They have a problem for every solution.

                  Kommentar


                    #24
                    Wenn es keine Einwände gibt, dann sollten wir mit dem nächsten Release die Umwandlung Python erwartungskonform ändern wie damals schon von Msinn notiert.

                    Kommentar


                      #25
                      Hi Martin, sollte kein Vorwurf sein, sondern nur eine Bekräftigung für den Vorschlag von bmx.

                      Gruß, Waldemar

                      Kommentar


                        #26
                        Zitat von mumpf Beitrag anzeigen
                        Hi Martin, sollte kein Vorwurf sein, sondern nur eine Bekräftigung für den Vorschlag von bmx.
                        Hatte ich auch nicht so verstanden. Ich wollte nur erläutern woher das kommt.
                        Viele Grüße
                        Martin

                        Stay away from negative people. They have a problem for every solution.

                        Kommentar

                        Lädt...
                        X