Ankündigung

Einklappen
Keine Ankündigung bisher.

Group Items durchlaufen

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

    Group Items durchlaufen

    Hallo

    Ich möchte eine Group Items mit Rules durchlaufen den Status des Items auslesen, mit 10 Multiplizieren
    und den Wert an ein anderes Item mit "postUpdate" übergeben .

    Items:
    Code:
    // Items fuer KNX to Modbus
    
    // KNX 
    Group:Number     knx_modbus        "Temperature [%.1f °C]" <temperature> (Status)
    Number Solarspeicher_oben   "Temperature [%.1f °C]" <temperature> (knx_modbus) {knx="0/0/15"}
    Number Solarspeicher_mitte  "Temperature [%.1f °C]" <temperature> (knx_modbus) {knx="0/0/16"}
    Number Solarspeicher_unten  "Temperature [%.1f °C]" <temperature> (knx_modbus) {knx="0/0/17"}
    
    // Modbus
    Group:Number     modbus_knx          "Temperature [%.1f °C]" <temperature>    (Status)
    Number modbus_Solarspeicher_oben  "Temperature [%.1f °C]" <temperature> (modbus_knx) { modbus="slave6:0"  , autoupdate="false"}
    Number modbus_Solarspeicher_mitte "Temperature [%.1f °C]" <temperature> (modbus_knx) { modbus="slave6:1"  , autoupdate="false"}
    Number modbus_Solarspeicher_unten "Temperature [%.1f °C]" <temperature> (modbus_knx) { modbus="slave6:2"  , autoupdate="false"}
    Rules:
    Code:
    import org.openhab.core.library.types.*
    import org.openhab.core.persistence.*
    import org.openhab.model.script.actions.*
    rule "knx_to_modbus"
    when
       System started or
       Time cron "0/1 * * * * ?"
    then
       knx_modbus?.members.forEach(element,index|
         // Item auslesen und mit mit 10 Multiplizieren 
         // var value = (element.state as DecimalType).intValue *10)
         // value in ein anderes Item einfügen
         // postUpdate("modbus" + element,value) 
       )
    end
    Das durchlaufen der Group knx_modbus geht, wenn ich in der forEach Schleife
    "postUpdate(element, 20.0 + (25.0 - (Math::random * 50.0).intValue) / 10.0)"
    einfüge bekommen auch alle Group knx_modbus Items einen anderen Wert zugewiesen.

    Ich möchte aber mit postUpdate die Items der Group modbus_knx den Wert übergeben.

    Ich probiere es schon ein paar Tage und komme nicht weiter.
    Google ist auch schon heiß gelaufen.

    Was muss ich in Rules ändern?
    Gruß NetFritz
    KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
    WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
    PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

    #2
    Müsste es nicht
    Code:
    postUpdate("modbus_" + element,value)
    heißen? Bei dir fehlt da anscheinend ein Unterstrich.

    Warum er aber die Original Items auch updated kann ich dir nicht sagen.
    Passiert das auch wenn du das so machst(Ist aber nur ein hilfloser Versuch!):
    Code:
    var value = (element.state as DecimalType).intValue )
    postUpdate("modbus_" + element,value*10)

    Kommentar


      #3
      Hallo
      @selbstmacher
      Passiert das auch wenn du das so machst
      Leider nein.

      Ein Problem hatte ich in der forEach Schleife
      mit den hinzufügen einer weiteren Zeile innerhalb der Schleife.

      Ich habe dann in der Xtend - Modernized Java Doku herausgefunden das dort die forEach Schleife
      nicht mit runden Klammern "( )" sondern mit eckigen Klammern "[ ]" erstellt wurde,
      dann kann ich auch in der forEach Schleife mehre Zeilen eingeben.

      Ist das schon immer so gewesen ?

      Meine Rules sieht jetzt so aus:
      Code:
      import org.openhab.core.library.types.*
      import org.openhab.core.persistence.*
      import org.openhab.model.script.actions.*
      var Number values = 0
      rule "knx_to_modbus"
      when
         System started or
         Time cron "0/1 * * * * ?"
      then
         knx_modbus?.members.forEach[element,index|
          logInfo("FILE","element " + element ) // element.name
          values = (element.state as DecimalType).intValue // *10
          logInfo("FILE","values " + values )
          // postUpdate(element,values)
        ]
      end
      logInfo Ausgabe :
      logInfo("FILE","element " + element )
      element Solarspeicher_mitte (Type=NumberItem, State=71.6)

      logInfo("FILE","element " + element.name )
      element Solarspeicher_mitte

      Wenn ich ein Item für postUpdate zusammenbaue dann müsste es in etwa so aussehen.
      "modbus_" + element.name + "(" + element.type + element.state + ")"
      was aber nicht geht.

      Frage, wie bekomme ich das Item für PostUpdate zusammen gebaut ?

      Gruß NetFritz
      KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
      WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
      PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

      Kommentar


        #4
        Hallo
        Habe bislang noch kein Erfolg gehabt.
        Code:
        element.name = "modbus_" + element.name
        geht auch nicht.
        Keiner eine Idee ?
        Gruß NetFritz
        KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
        WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
        PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

        Kommentar


          #5
          Hallo
          Items:
          Code:
          // Items fuer KNX to Modbus
          
          // KNX 
          Group  knx_modbus
          Number Solarspeicher_oben   "Temperature [%.1f]" (knx_modbus) {knx="1/3/20"}
          Number Solarspeicher_mitte  "Temperature [%.1f]" (knx_modbus) {knx="1/3/22"}
          Number Solarspeicher_unten  "Temperature [%.1f]" (knx_modbus) {knx="1/3/24"}
          
          // Modbus
          Group   modbus_knx
          Number modbus_Solarspeicher_oben  "Temperature [%.d]"  (modbus_knx) { modbus="slave6:0" }
          Number modbus_Solarspeicher_mitte "Temperature [%.d]"  (modbus_knx) { modbus="slave6:1" }
          Number modbus_Solarspeicher_unten "Temperature [%.d]"  (modbus_knx) { modbus="slave6:2" }
          Rules:
          Code:
          import org.openhab.core.library.types.*
          import org.openhab.core.persistence.*
          import org.openhab.model.script.actions.*
          var Number values = 0
          rule "knx_to_modbus"
          when
             System started or
             Time cron "0/1 * * * * ?"
          then
             knx_modbus?.members.forEach[element1,index|
               values = (element1.state as DecimalType).floatValue * 100
               modbus_knx?.members.forEach[element2|
                  if(element2.name.toString == "modbus_" + element1.name.toString){
                      postUpdate(element2,values) // geht nicht 
                      sendCommand(element2, 40)   // geht nicht
                  }
              sendCommand(modbus_Solarspeicher_oben, values) // geht wird in openhab.log so ausgegeben "2014-09-21 09:09:25.693 DEBUG o.o.b.m.internal.ModbusSlave[:197]- ModbusSlave: FC6 ref=10 value=4000"
              ]
            ]
          end
          Habe die Config nochmal geändert.
          Die Rules laufen jetzt ohne Fehlermeldung in openhab und Designer.
          Leider kommt auf der Codesys SPS nichts an.
          Wenn ich in sendCommand(element2, 40) oder (element2,values) stehen habe wird nicht per Modbus übertragen, ohne Fehlermeldung.

          Schreibe ich in sendCommand den Item Name so geht es, values wird zum Modbus übertragen.
          Code:
          sendCommand(modbus_Solarspeicher_oben, values)
          In openhab.log steht dann:
          Code:
          2014-09-21 09:25:30.043 DEBUG o.o.b.m.internal.ModbusSlave[:197]- ModbusSlave: FC6 ref=10 value=4600
          Schreibe ich im Designer
          Code:
          sendCommand(element2.name.toString, 40)
          so sagt er incompatible Types.

          Wie bekomme ich SendCommand so hin das auf den Modbus (openhab Bus) geschrieben wird ?

          Gruß NetFritz
          KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
          WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
          PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

          Kommentar


            #6
            Hallo
            Habe mal nach sendCommand in einer foreach Schleife gesucht und auch mehre gefunden.
            Z.B. hier https://knx-user-forum.de/openhab/30440-geschachteltes-if-rules.html
            Danach muss es so gehen.
            Könnte ewtl. so sein das das Modbus-Binding einen Fehler hat.
            Wie könnte ich das weiter testen ?
            Gruß netFritz
            KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
            WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
            PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

            Kommentar


              #7
              Hallo

              Wenn ich in den Items das Modbus-Binding gegen ein KNX-Binding tausche,
              werden die Werte auf den KNX-BUS geschrieben.

              Bei den Modbus-Binding kommt nichts an der Codesys-SPS an ,wenn
              sendCommand(element2,values) in der forEach-Schleife steht.

              Ein "sendCommand(modbus_Solarspeicher_oben, values)"
              in der inneren forEach-Schleife sendet den Values Wert per Modbus an die Codesy-SPS.
              In der openhab.log steht dann:
              Code:
              2014-09-22 14:07:23.643 DEBUG o.o.b.m.internal.ModbusSlave[:197]- ModbusSlave: FC6 ref=10 value=5512
              Ich gehe mal davon aus das das Modbus-Binding in diesem Fall ein Bug hat.

              Gruß NetFritz
              KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
              WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
              PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

              Kommentar


                #8
                Ich bekomme 231 angezeigt, hier der Log.
                17:37:01.637 INFO runtime.busevents[:26] - Temperature_GF_Toilet state updated to 231
                Code:
                Number Temperature_GF_Toilet 	"Temperature [%d °C]"	<temperature>	(Temperature, GF_Toilet) {modbus="slave3:1"}
                Bedeutet, es sind 23,1 °C
                Wie kann man es in der rules lösen, dass nicht 231,0°C angezeigt wird sondern 23,1°C?

                Kommentar


                  #9
                  Hallo

                  Hier im openhab Forum gab es schon mal so eine Frage wie man das löst.
                  Bitte mal danach suchen.

                  Als groben Lösungweg:
                  Ein zweites Item für das Ergebnis anlegen.
                  Dann in Rules das Modbus-Item auf "state" abfragen und durch 10 Dividieren.
                  Dann ein sendCommand an das Ergebnis-Item.

                  Vielleicht wäre es besser gewesen, das Du einen neuen Thred angefangen währst.

                  Gruß NetFritz
                  KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
                  WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
                  PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

                  Kommentar


                    #10
                    Hallo
                    Habe Heute hier mal nachgefragt ob es ein Bug sein kann.
                    https://groups.google.com/forum/#!to...ab/xPaWmvGp3kM
                    Gruß NetFritz
                    KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
                    WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
                    PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

                    Kommentar


                      #11
                      Hallo
                      Habe openhab 1.5.1 per apt-get upgrade installiert.
                      Nach anfänglichen Problemen läuft es jetzt auch mit Modbus.
                      Hier die Rules:
                      Code:
                      import org.openhab.core.library.types.*
                      import org.openhab.core.persistence.*
                      import org.openhab.model.script.actions.*
                      var Number values = 0
                      rule "knx_to_modbus"
                      when
                         System started or 
                         Time cron "0/1 * * * * ?"
                      then
                        knx_modbus?.members.forEach[element1,index1|
                            values = (element1.state as DecimalType).floatValue * 100
                            modbus_knx?.members.forEach[element2,index2|
                              if(element2.name.toString == "modbus_" + element1.name.toString){
                                  sendCommand(element2, values)
                              }
                           ]
                        ]
                      end
                      Gruß NetFritz
                      KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
                      WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
                      PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

                      Kommentar

                      Lädt...
                      X