Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Wert eines Number-Item in eine Variable schreiben

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

    - √ - Wert eines Number-Item in eine Variable schreiben

    Hallo,

    möchte eine Regel erstellen, in der ich den Wert eines Number Item weiter verarbeiten möchte. Leide habe, obwohl ich mit dem Designer arbeite) bis dato noch keine Möglichkeit/Lösung gefunden den Wert des Item als Zahl zu bekommen.

    Die nicht funktionierende Regel dieht wie folgt aus:
    Code:
    rule Test
    when
      Time cron "0/1 * * * * ?" // Abfrage alle Sekunde
    then
       var Number Zaehler               // kann auch eine andere Ganzzahl sein
       Zaehler = NumberItem.state    // funktioniert nicht, irgendwie fehlt mir etwas wie .toInteger !!!!!
    end
    Bitte um Hilfe, vermutlich ist es für erfahrene Java-Programmierer die einfachste sache der Welt. :-)

    Gruß
    mepi0011

    #2
    versuche mal (beispielsweise)

    Code:
    var zaehler = NumberItem.state.intValue
    (wobei NumberItem ein Item vom Typ Number ist)

    Gruß,

    Thomas E.-E.
    Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

    Kommentar


      #3
      Hallo Thomas,

      funktioniert leider nicht!

      Der Designer gibt mir folgenden Fehler aus:

      Couldn't resolve reference to JvmIdentifiableElement 'intValue'.

      Gruß
      Pierre

      Kommentar


        #4
        ah, dann bitte:

        Code:
        var Number zaehler = NumberItem.state as DecimalType
        womit Du ein Objekt vom Typ "Number" in der Hand hast, oder

        Code:
        var int zaehler = (NumberItem.state as DecimalType).intValue
        womit Du wirklich "nur noch" ein int hast.

        Hier kommt es dann ein bißchen auf Deine folgenden Anforderungen an, was man mit dem Zähler machen möchte.
        Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

        Kommentar


          #5
          irgendetwas mach ich falsch!

          Bei der ersten Lösung erhalte ich folgende fehler:

          Multiple markers at this line
          - Couldn't resolve reference to JvmType 'DecimalType'.
          - Incompatible types. Expected java.lang.Number but was void


          bei der zweifen folgend:

          Multiple markers at this line
          - Couldn't resolve reference to JvmIdentifiableElement 'intValue'.
          - Couldn't resolve reference to JvmType 'DecimalType'.


          Muss ich da noch etwas importieren (org.openhab.model....) ?

          Kommentar


            #6
            [QUOTE=mepi0011;283085Muss ich da noch etwas importieren (org.openhab.model....) ?[/QUOTE]

            öhh, ja:

            Code:
            import org.openhab.core.library.types.*
            Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

            Kommentar


              #7
              Hallo,

              nun kommt keine fehler Meldung mehr!

              Welch ein Wunder: kaum macht man es richtig, funktioniert es!

              Danke für die schnelle Hilfe

              Gruß
              Pierre

              Kommentar


                #8
                Hallo,

                leider funktioniert es doch nicht!

                Der Designer zeigt keinen Fehler mehr an, aber die Ausgabe von openHAB bringt noch einen.

                Die Regel sieht nun wie folgt aus
                Code:
                import org.openhab.core.library.types.*
                
                rule Betriebsstundenzaehler
                when
                  Time cron "0/15 * * * * ?" // Abfrage alle 15 Sekunde 
                then
                  if (Licht_UG_Esszimmer_Decke.state == ON) {
                      var int Zaehler = (Betriebsstundenzaehler_Esszimmer_Decke.state as DecimalType).intValue
                    Zaehler= Zaehler + 15
                    Betriebsstundenzaehler_Esszimmer_Decke.postUpdate(Zaehler)
                    }
                  if (Licht_UG_Esszimmer_Tisch.state == ON) {
                      var int Zaehler = (Betriebsstundenzaehler_Esszimmer_Tisch.state as DecimalType).intValue
                    Zaehler= Zaehler + 15
                    Betriebsstundenzaehler_Esszimmer_Tisch.postUpdate(Zaehler)
                  } 
                end
                openHAB zeigt mir bei eingeschaltetem Licht (egal welches) folgenden Fehler an:

                Code:
                22:27:28.012 ERROR o.o.m.r.i.e.ExecuteRuleJob[:77] - Error during the execution of rule Betriebsstundenzaehler
                java.lang.ClassCastException: Cannot cast org.openhab.core.types.UnDefType to org.openhab.core.library.types.DecimalType
                        at java.lang.Class.cast(Class.java:3007)
                Dei Fehlerausgabe erhalte ich ach wenn ich die Regel wie folgt änere:

                Code:
                var Number Zaehler = Betriebsstundenzaehler_Esszimmer_Decke.state as DecimalType
                Bitte um Hilfe!!!

                Gruß
                Pierre

                Kommentar


                  #9
                  ah, ok!

                  Jedes Item hat beim Systemstart den Typ "UndefType" und wird dann im Verlaufe der Applikationsnutzung mit dem "richtigen" Typen besetzt, nämlich dann, wenn ein Wert gesetzt wird.

                  In Deinem Fall fehlt also noch eine Regel, die Initialisierung der Items vornimmt oder Du fängst das in der Regel entsprechend ab.

                  Variante 1 lautet also:

                  Code:
                  rule "Initialisiere Betriebsstundenzaehler"
                  when
                  	System started
                  then
                  	// sollte noch kein Default-Wert gesetzt sein, holen wir das hier einmalig 
                  	// nach ... danach sollte der Wert aus db4o kommen!
                  	if (Betriebsstundenzaehler_Esszimmer_Decke.state == Uninitialized) {
                  		Betriebsstundenzaehler_Esszimmer_Decke.postUpdate(0)
                  	}
                  	...
                  end
                  und Variante 2

                  Code:
                  import org.openhab.core.library.types.*
                  
                  rule Betriebsstundenzaehler
                  when
                    Time cron "0/15 * * * * ?" // Abfrage alle 15 Sekunde 
                  then
                    if (Licht_UG_Esszimmer_Decke.state == ON) {
                        var int Zaehler = 0
                        if (Betriebsstundenzaehler_Esszimmer_Decke.state instanceof DecimalType) {
                             zaehler = (Betriebsstundenzaehler_Esszimmer_Decke.state as DecimalType).intValue
                        }
                      Zaehler= Zaehler + 15
                      Betriebsstundenzaehler_Esszimmer_Decke.postUpdate(Zaehler)
                      }
                      ...
                  end
                  hth,

                  Thomas E.-E.
                  Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

                  Kommentar

                  Lädt...
                  X