Ankündigung

Einklappen
Keine Ankündigung bisher.

Timestart mit veränderbarem Interval

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

    Timestart mit veränderbarem Interval

    Hi,

    ich möchte für einen Timer gerne statt der Version:
    Code:
            MeinTimer = createTimer(now.plusSeconds(11)) [|
              // tue was du tun must
          ]
    für die "11" gerne den Inhalt eines Number Items einsetzen, bekomme aber die Typekonvertierung nicht hin.

    as DecimalType funktioniert nicht... vermutlich weil das kein Integer ist. Aber wie bekomme ich aus

    Code:
        Number MeinSekundenWert
    den richtigen Wert?

    Gruß
    Peter

    #2
    Probier mal ((MeinSekundenWert.state as DecimalType).intValue)

    Kommentar


      #3
      Hallo Udo1toni,

      so funktionierts, danke dafür.

      Aber kannst du mir vielleicht erklären, was ich da tue und wie ich auf so ein Konstrukt selber kommen könnte?

      Soweit ich das bisher verstehe, liefert "MeinSekundenWert.state" ein "number". Das wäre ja grundsätzlich schonmal nicht falsch, paßt aber vom Type nicht, weil "createTimer" wohl gerne ein Integer möchte. Insoweit verstehe ich das ".intValue", aber warum kann ich das nicht ohne "as DecimalType" anhänge? Bzw. was tut tut das "as DecimalType" eigendlich genau?

      Gruß
      Peter

      Kommentar


        #4
        Leider gibt es bei Items kein .intValue (im Gegensatz zu .toString).
        Das Ganze hängt mit der Vererbung von Methoden und Attributen durch die Klassen zusammen. Also jedes Item hat einen Status, der vom Typ State ist. Und jedes Objekt hat eine Methode .toString, die eine Zeichenkette ergibt, aber nicht unbedingt eine Methode .intValue. Um nun den State als Zahl zu verstehen, wird der Typ gecastet (mit as DezimalType), Du schreibst damit also der Rule Engine vor, den Inhalt als Dezimalzahl zu betrachten. Das kann schief gehen (z.B. wenn das Item uninitialized ist), dann gibt es eine NullPointerException, weil der Cast misslingt (cannot cast ... ), weshalb man, falls nicht sicher ist, ob das Item immer gültige Werte hat, am besten vorher ein if(myItem.state typeof DezimalType)... einfügt, oder vor dem Casten einen default zuweist, falls der State des Items nicht nach DezimalType gecastet werden kann: if(!(myItem.state typeof DezimalType))myItem.postUpdate(0)
        Im Gegensatz dazu kann man immer ohne Fehler einen String aus dem State machen, das wird nie schief gehen, deshalb gibt es dafür auch eine Methode.

        Wenn Du nun erfolgreich den Typ gecastet hast, ist das Ganze Element vom Typ Number, und für Objekte vom Typ Number gibt es eine Methode .intValue.
        Wenn Du den Designer nutzt, kannst Du Dir alle möglichen korrekten Ergänzungen mit <strg> + <Leerzeichen> anzeigen lassen. Mit der Zeit bekommt man ein Gefühl dafür, wonach man suchen muss... Oder man liest ein Buch über Java bzw. xtend (nee, hab ich bisher auch nicht gemacht...)

        Im englischen Forum hat rlkoshak einen sehr guten Artikel geschrieben, der die Sache mit der Vererbung erläutert, dabei geht es darum, warum die Action sendCommand(Item,Wert) bzw. postUpdate(Item,Wert) manchmal nicht funktioniert, die Methode Item.sendCommand(Wert) aber doch, ohne weiteres Zutun, obwohl doch beides identisch funktionieren sollte.

        Kommentar


          #5
          Zitat von udo1toni Beitrag anzeigen
          Das Ganze hängt mit der Vererbung von Methoden und Attributen durch die Klassen zusammen
          ...
          Wenn Du nun erfolgreich den Typ gecastet hast, ist das Ganze Element vom Typ Number, und für Objekte vom Typ Number gibt es eine Methode .intValue.
          Es wird Zeit dass du an der Doku von openHAB mitschreibst ...

          Kommentar


            #6
            Wenn es irgendwann mal eine offizielle deutsche Anleitung gibt, kann ich das gerne versuchen, im Allgemeinen erkläre ich total kompliziert (bin immer entsetzt, wenn ich mein Geschreibsel im Nachhinein lese) auf englisch geht's nur mit Wörterbuch nebendran, das ist oft ziemlich anstrengend...

            Kommentar


              #7
              Zitat von udo1toni Beitrag anzeigen
              im Allgemeinen erkläre ich total kompliziert
              Na, da liegst du aber völlig falsch. Korrekte Selbsteinschätzung ist immer schwierig
              Jedenfalls habe ich von deinen diversen Erläuterungen (egal ob hier oder im englischen Forum) schon jede Menge gelernt, weil diese immer genau den Punkt treffen.

              Thanks for that and keep up that good stuff ...

              Gruß, Sigi

              Kommentar


                #8
                Hi,

                Ich kann mich da sihui nur anschließen: Deine Selbsteinschätzung ist voll daneben:-)

                Eine Menge meiner Fragen wurden von dir beantwortet und die Antworten waren IMMER hilfreich. Selbst mögliche Gegenfragen haben mich weitergebracht. So jetst stopp, sonst rutsche ich noch auf meiner Schleimspur aus.

                Deshalb hier noch eine weitere Rückfrage: Muß ich xtend wirklich so verstehen, wie der Name andeutet? Eine Erweiterung zu Java oder ist es eine Java ähnliche Sprache. Hintergrund der Frage ist: Erst Java lernen und dann xtend oder gleich mit xtend anfangen?
                Wie ich die Wikipedia hier verstehe ist: Es ist beides; aufbauend bzw integriert Java und auch was ganz anderes.

                Und wenn gleich xtend lernen...gibts da einen netten Einstieg? Tutorial? Einführungsbuch oder ähnliches?

                Gruß
                Peter

                Kommentar


                  #9
                  Puh, und da fragst Du ausgerechnet mich... Naja, wie sagt man so schön? Unter den Blinden ist der Einäugige König...

                  Soweit ich es verstanden habe, setzt die openHAB-DSL (Domain Specific Language) auf xtend auf, welches wiederum als Framework von Eclipse bereitgestellt wird, oder so ähnlich.

                  Wenn ich an irgendeiner Stelle nicht weiter weiß, nutze ich meist erstmal Tante Google mit dem Stichwort Java, Das Modell ist ja doch sehr nah dran, das Problem dabei ist aber, die richtigen Schlüsselwörter für das eigene Problem zu finden, und dann gibt es auch gerne mal ein paar "kleine" Unterschiede, aber zumindest hab ich dann schon eine Marschrichtung.

                  Und in der Zwischenzeit ist vor allem das englische Forum ein Füllhorn an Informationen, manchmal sind es so viele, dass man gar nicht weiß, wo anfangen

                  Kommentar


                    #10
                    Zitat von sihui Beitrag anzeigen

                    Es wird Zeit dass du an der Doku von openHAB mitschreibst ...
                    Macht er doch schon - eigentlich muss nur jemand seine Antworten mit seinem Einverständnis in die deutsche Doku kopieren, die sind 1:1 verwendbar...

                    ​​​​
                    Synology DS216j, OpenHAB2 2.1.0.008-DSM6 Snapshot (conf verlinkt nach /volume1/public/openhab2/conf)

                    Kommentar


                      #11

                      Kommentar

                      Lädt...
                      X