Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit "Codeblock"

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

    #16
    Hi Marcus,

    ok, mea culpa. Liefere ich heute Abend nach.

    Gruß, Waldemar
    OpenKNX www.openknx.de

    Kommentar


      #17
      Zitat von callidomus Beitrag anzeigen
      DiMa : der Codeblock von Dir passt nicht zu der Fehlermeldung, das ist ein anderes Item. Bitte poste den Codeblock passend zu der Fehlermeldung.
      Sehe ich auch so, siehe mein OP Ist aber das gleiche Item (eg.wc.pm.schalten). Dass die Fehlermeldung dazu m.E. gar nicht passt, schrub ich ja bereits.

      Ich probier's aber nachher nochmal und poste dann direkt einen grep von .../log/core.

      Kommentar


        #18
        Jetzt verstehe ich gar nichts mehr: Alles funktioniert. Hier ein screenshot vom codeblock:

        Bildschirmfoto 2016-09-13 um 18.50.02.png

        Kann mir irgendwer sagen, ob es einen Unterschied zu #8 gibt, den ich einfach nicht sehe???

        Kommentar


          #19
          Hi Marcus,

          mein Test gestern war nicht war nicht hinreichend bzw. ich habe nicht gut genug nachgedacht.

          Ich hatte folgende Definition (angelehnt an sh.py conf files - die Einrückungen waren richtig...):
          Code:
              [[Forum]]
                  #Test.Forum
                  type = bool
                  code = if value:
                             cd.Test.Forum.Out(255)
                         else:
                             cd.Test.Forum.Out(0)
                  [[[Out]]]
                      #Test.Forum.Out
                      type = num
          Mein eigentlicher Fehler: Ich ging davon aus, dass value vom Typ bool ist, es ist aber der Typ, den der caller vorgibt. Und beim CLI scheint das ein string zu sein. Somit evaluiert mein if immer zu true und setzt Out einmalig auf 255.
          Die Lücke, die ich sehe: Man bekommt es mit dem CLI nicht hin, den code-Ausdruck zum betreten des else-Falls zu bewegen (hab ich zumindest nicht geschafft, leerstring wird abgewiesen).
          Das ist verwirrend und hat zu meinem vorschnellen Urteil geführt.

          Gruß, Waldemar
          OpenKNX www.openknx.de

          Kommentar


            #20
            Hallo Waldemar,

            die Lücke sehe ich in dem Codeblock. Dort muss die Behandlung der Werte erfolgen.

            Ich könnte value als Wert des Items interpretieren ('casten'), aber dann würde es an anderer Stelle Probleme geben wenn der Wert nicht zu dem Itemtyp passt.

            Wenn man im CLI '0' eingibt, dann müsste die If Abfrage 'False' ergeben.

            Bis bald

            Marcus

            Kommentar


              #21
              Hallo Dirk,

              Zitat von DiMa Beitrag anzeigen
              Kann mir irgendwer sagen, ob es einen Unterschied zu #8 gibt, den ich einfach nicht sehe???
              der einzige Unterschied, den ich erkennen kann, ist der Kommentar. Der spielt aber keine Rolle.

              Da es jetzt funktioniert, kann ich nicht mehr herausfinden wo der Unterschied ist. (Ich hätte direkt in die Datenbank gesehen was dort steht)

              Bis bald

              Marcus

              Kommentar


                #22
                Danke für die Rückmeldung. Ist ja gut, dass es funktioniert, fuchst mich aber schon, dass ich keine Ahnung habe, was ich vorher falsch gemacht habe...

                Noch 'ne Frage: Kann ich im Codeblock bzw. Logiken ganz allgemein auch items vom Typ komplex nutzen und falls ja, trenne ich Werte auch durch Semikolon wie in der GUI, oder muss ich bei cd.<itempfad)() dann ein Komma nehmen?

                Ahso, ich möchte auch gerne time.sleep() benutzen... Geht das in einem Codeblock (import zulässig bzw. ist time "vorgeladen")? Alternativ: Hat callidomus eine Funktion zum "Warten"?

                Kommentar


                  #23
                  Guten Morgen Marcus,

                  zuerstmal: Ich wollte mit meinen Ausführungen nur begründen, warum ich zu der fehlerhaften Behauptung kam, dass der mehrzeilige codeblock nicht richtig funktioniert. Ich wollte nicht unbedingt gleich, dass Du da was machst.

                  Zitat von callidomus Beitrag anzeigen
                  Wenn man im CLI '0' eingibt, dann müsste die If Abfrage 'False' ergeben.
                  Das geht leider nicht, weil nur der Leerstring zu False evaluiert. Eine 1 oder 0 im CLI wird scheinbar als '1' oder '0' (also als strings) verarbeitet. Und die Standard-Konvertierung bei Strings ist: '' (Leerstring) -> False, sonst True. Und der Leerstring selbst (hab ich auch gleich ausprobiert) wird von CLI abgewiesen - vielleicht wäre das ein Ansetzpunkt.

                  Ansonsten plädiere ich auf gar keinen Fall für einen Cast in Deiner Engine, wenn überhaupt, dann im CLI. Oder Du wertest im CLI beim Update die Notation aus, z.B. 1000 als Zahl, '1000' als String, True als bool, 'True' als String etc.

                  Zitat von callidomus Beitrag anzeigen
                  die Lücke sehe ich in dem Codeblock. Dort muss die Behandlung der Werte erfolgen.
                  Natürlich stimme ich Dir zu, dass der Codeblock korrekt auf die erwarteten Werte zu reagieren kann. Wenn ich aber weiß, dass ein Item immer von einem anderen bool-Item getriggert wird (im obigen Fall hatte ich diese Annahme), dann schreibt man den Codeblock so, dass er einen bool-value evaluiert (wie oben). Wenn jetzt was nicht funktioniert, nimmt man den CLI, um das auszuprobieren (oder gar schon vorher, um vorab zu testen). Jetzt kann man im CLI gar keinen bool beim up-Befehl notieren, der wird immer als string an das Item geschickt. Hier liegt das Problem! Wenn ich das als User alles nicht weiß, denke ich, dass meine Logik nicht funktioniert oder dass irgendwas mit dem Codeblock nicht funktioniert.

                  Gruß, Waldemar
                  OpenKNX www.openknx.de

                  Kommentar

                  Lädt...
                  X