Ankündigung

Einklappen
Keine Ankündigung bisher.

Datentyp Wandlungsproblem

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

    Datentyp Wandlungsproblem

    Ich benötige mal wieder Hilfe und konnte mir nichts funktionierendes ergoogeln.

    Ich habe eine einen Temperaturwert von KNX als DPT 9.001. zb. 22.3°C. Den muss ich mal 10 nehmen und als 223 als DPT 7.001 auf den KNX Bus zu meiner Heizung schicken. Hab mir versucht eine passende Rule zu stricken und verschiedene Varianten probiert aber noch kein funktionierendes Ergebnis.

    Meine Items:
    PHP-Code:
    Number Klima_OG_Temperatur   "OG Temperatur [%.1f °C]" <temperature> (gKlimagChartgHK1)    { knx="<9.001:5/2/0"}
    Number Heiz_SmartRTC_TempOG "Raumtemperatur OG für SMart RTC [%.1f °C] " knx="2/0/92"
    Meine Rule:
    PHP-Code:
    var Number temp 0
    rule 
    "RTC"
    when
    Time cron 
    "0 0/1 * 1/1 * ? *"
    //Item Klima_OG_Temperatur changed
    then
    temp 
    = (Klima_OG_Temperatur.state as Number) * 10
    Heiz_SmartRTC_TempOG
    .postUpdate(temp.intValue)
    end 
    Aktuell habe ich an der Heizung einen Sensorfehler und sie zeigt mir eine Raumtemperatur von 62,3°C an




    #2
    Hallo Donnerknall,

    ich habe schon etwas ähnliches gemacht. Ich versuche mal ungetestet es auf deinen Fall umzusetzen:
    Code:
    rule "RTC"
    when
    Time cron "0 0/1 * 1/1 * ? *"
    //Item Klima_OG_Temperatur changed
    then
    var double temp = (Klima_OG_Temperatur.state as DecimalType).doubleValue
    temp = temp *10
    Heiz_SmartRTC_TempOG.postUpdate(temp)
    end
    Eventuell kann es sein, daß du dem Heiz_SmartRTC_TempOG noch den Typ mitgeben mußt:
    Code:
    Number Heiz_SmartRTC_TempOG "Raumtemperatur OG für SMart RTC [%.1f °C] " { knx="7.001:2/0/92"}
    Gruß
    Heiko

    Kommentar


      #3
      Muss der Wert tatsächlich minütlich auf den Bus geschickt werden? Eigentlich sollte das Ganze sehr einfach sein:

      Code:
      Number Klima_OG_Temperatur   "OG Temperatur [%.1f °C]" <temperature> (gKlima, gChart, gHK1)    { knx="<9.001:5/2/0"}
      Number Heiz_SmartRTC_TempOG "Raumtemperatur OG für SMart RTC [%.1f °C] " { knx="2/0/92"}
      Code:
      rule "temperatur umrechnen"
      when
          Item Klima_OG_Temperatur changed
      then
          if(!(Klima_OG_Temperatur.state instanceof Number)) return;
          Heiz_SmartRTC_TempOG.sendCommand(((Klima_OG_Temperatur.state as Number) *10).intValue)
      end
      Wichtig ist halt, sendCommand() zu nutzen, nicht postUpdate(), denn postUpdate() schickt nichts an den Bus.
      Die Abfrage sollte man einbauen, falls das Item, welches Du nutzt, mal keinen gültigen Wert liefert, hast Du sonst einen hässlichen Fehler im Log.
      Wenn Du den Wert tatsächlich zwingend minütlich schicken willst, nimm eine normale cron:
      Code:
      Time cron "30 * * * * ?" //Trigger nicht zur vollen Minute, um Kollisionen mit anderen Time crons zu vermeiden
      Du kannst überall Sterne setzen, falls der Stelle keine Beachtung geschenkt werden soll, bis auf den Wochentag, dort muss ein Fragezeichen stehen. Falls Der Wochentag eine Rolle spielt, muss der Tag im Monat mit einem Fragezeichen versehen werden. Das Jahr ist optional und muss nicht mit einem Stern versehen werden.

      Kommentar


        #4
        Die rule funktioniert soweit. Nur leider kommt an der Heizung nicht der richtige Wert an. Im Gruppenmonitor sehe ich 2 Byte mit dem Wert 230,08. In der Heizung landet aber 63,8. Laut Beschreibung der Schnittstelle ist der Datenpunkt Unsigned 16 bit, DPT7.001.

        Kommentar


          #5
          Naja, dann musst Du im Zweifel den DPT mit angeben, also
          Code:
           
           Number Heiz_SmartRTC_TempOG "Raumtemperatur OG für SMart RTC [%.1f °C] " { knx="7.001:2/0/92"}

          Kommentar


            #6
            So funktionierts Danke!

            Kommentar

            Lädt...
            X