OH 2.5 MODBUS didnt write to Heatpump Register, predicted to become 0

Hi,

I have a question regarding the following problem with the modbus and my heatpump

  • Platform information:
    • Hardware: Rasperry 4

    • OS: openhabian

    • Java Runtime Environment: which java platform is used and what version

    • openHAB version: 2.5

      //Heliotherm Wärmepumpe

      Bridge modbus:tcp:Waermepumpe “Wärmepume” @ “Technikraum” [
      host=“192.168.178.33”,
      port=502,
      id=1
      ] {

      //Holding register // Read-write // 16 bits per register  
      //Read-write for holding registers. Reading 1 registers, with index 100-.
      Bridge poller Waermepumpe_RW [ 
          start=100,
          length=24, 
          refresh=60000, 
          type="holding" 
      ] {
          
              Thing data holding100 "Wärmepume_RW" @ "Technikraum"  [ readStart="100", readValueType="uint16"/*, writeStart="100", writeValueType="uint16", writeType="holding"*/ ]
              Thing data holding101 "Wärmepume_RW" @ "Technikraum"  [ readStart="101", readValueType="int16",readTransform="JS(divide10.js)"/*, writeStart="101", writeValueType="int16", writeType="holding", writeTransform="JS(multiply10.js)" */ ]
              Thing data holding102 "Wärmepume_RW" @ "Technikraum"  [ readStart="102", readValueType="int16",readTransform="JS(divide10.js)"/*, writeStart="102", writeValueType="int16", writeType="holding", writeTransform="JS(multiply10.js)" */]
              Thing data holding103 "Wärmepume_RW" @ "Technikraum"  [ readStart="103", readValueType="uint16"/*, writeStart="103", writeValueType="uint16", writeType="holding" */]
              Thing data holding104 "Wärmepume_RW" @ "Technikraum"  [ readStart="104", readValueType="int16",readTransform="JS(divide10.js)"/*, writeStart="104", writeValueType="int16", writeType="holding", writeTransform="JS(multiply10.js)" */]
              Thing data holding105 "Wärmepume_RW" @ "Technikraum"  [ readStart="105", readValueType="int16",readTransform="JS(divide10.js)"/*, writeStart="105", writeValueType="int16", writeType="holding", writeTransform="JS(multiply10.js)" */]
              Thing data holding106 "Wärmepume_RW" @ "Technikraum"  [ readStart="106", readValueType="int16",readTransform="JS(divide10.js)"/*, writeStart="106", writeValueType="int16", writeType="holding", writeTransform="JS(multiply10.js)" */]
              Thing data holding107 "Wärmepume_RW" @ "Technikraum"  [ readStart="107", readValueType="uint16"/*, writeStart="107", writeValueType="uint16", writeType="holding" */]
              Thing data holding108 "Wärmepume_RW" @ "Technikraum"  [ readStart="108", readValueType="int16",readTransform="JS(divide10.js)"/*, writeStart="108", writeValueType="int16", writeType="holding", writeTransform="JS(multiply10.js)" */]
              Thing data holding109 "Wärmepume_RW" @ "Technikraum"  [ readStart="109", readValueType="int16",readTransform="JS(divide10.js)"/*, writeStart="109", writeValueType="int16", writeType="holding", writeTransform="JS(multiply10.js)" */]
              Thing data holding110 "Wärmepume_RW" @ "Technikraum"  [ readStart="110", readValueType="uint16"/*, writeStart="110", writeValueType="uint16", writeType="holding" */]
              Thing data holding111 "Wärmepume_RW" @ "Technikraum"  [ readStart="111", readValueType="int16",readTransform="JS(divide10.js)"/*, writeStart="111", writeValueType="int16", writeType="holding", writeTransform="JS(multiply10.js)" */]
              Thing data holding112 "Wärmepume_RW" @ "Technikraum"  [ readStart="112", readValueType="uint16"/*, writeStart="112", writeValueType="uint16", writeType="holding" */]
              Thing data holding113 "Wärmepume_RW" @ "Technikraum"  [ readStart="113", readValueType="int16",readTransform="JS(divide10.js)"/*, writeStart="113", writeValueType="int16", writeType="holding", writeTransform="JS(multiply10.js)" */]
              Thing data holding114 "Wärmepume_RW" @ "Technikraum"  [ readStart="114", readValueType="int16",readTransform="JS(divide10.js)"/*, writeStart="114", writeValueType="int16", writeType="holding", writeTransform="JS(multiply10.js)" */]
              Thing data holding115 "Wärmepume_RW" @ "Technikraum"  [ readStart="115", readValueType="uint16"/*, writeStart="115", writeValueType="uint16", writeType="holding" */]
              Thing data holding116 "Wärmepume_RW" @ "Technikraum"  [ readStart="116", readValueType="int16",readTransform="JS(divide10.js)"/*, writeStart="116", writeValueType="int16", writeType="holding", writeTransform="JS(multiply10.js)" */]
              Thing data holding117 "Wärmepume_RW" @ "Technikraum"  [ readStart="117", readValueType="uint16", writeStart="117", writeValueType="uint16", writeType="holding"]
              Thing data holding125 "Wärmepume_RW" @ "Technikraum"  [ readStart="125", readValueType="uint16", writeStart="125", writeValueType="uint16", writeType="holding"]
              Thing data holding126 "Wärmepume_RW" @ "Technikraum"  [ readStart="126", readValueType="int16",readTransform="JS(divide10.js)"/*, writeStart="126", writeValueType="int16", writeType="holding", writeTransform="JS(multiply10.js)" */]  // 126 darf nicht beschrieben werden
              Thing data holding127 "Wärmepume_RW" @ "Technikraum"  [ readStart="127", readValueType="uint16"/*, writeStart="127", writeValueType="uint16", writeType="holding" */]
              Thing data holding128 "Wärmepume_RW" @ "Technikraum"  [ readStart="128", readValueType="uint16"/*, writeStart="128", writeValueType="uint16", writeType="holding" */]
              Thing data holding129 "Wärmepume_RW" @ "Technikraum"  [ readStart="129", readValueType="int16",readTransform="JS(divide10.js)"/*, writeStart="129", writeValueType="int16", writeType="holding", writeTransform="JS(multiply10.js)" */]
              Thing data holding130 "Wärmepume_RW" @ "Technikraum"  [ readStart="130", readValueType="uint16"/*, writeStart="130", writeValueType="uint16", writeType="holding" */]
              //Thing data holding131 "Wärmepume_RW" @ "Technikraum"  [ readStart="131", readValueType="int16",readTransform="JS(divide10.js)"/*, writeStart="131", writeValueType="int16", writeType="holding", writeTransform="JS(multiply10.js)" */]
              //Thing data holding132 "Wärmepume_RW" @ "Technikraum"  [ readStart="132", readValueType="uint16"/*, writeStart="132", writeValueType="uint16", writeType="holding" */]
              //Thing data holding133 "Wärmepume_RW" @ "Technikraum"  [ readStart="133", readValueType="int16",readTransform="JS(divide10.js)"/*, writeStart="133", writeValueType="int16", writeType="holding", writeTransform="JS(multiply10.js)" */]
              //Thing data holding134 "Wärmepume_RW" @ "Technikraum"  [ readStart="134", readValueType="uint16"/*, writeStart="134", writeValueType="uint", writeType="holding" */]
      
          }
      

      }

      rule “WP PV Anforderung AN”
      when
      Item WP_PV_Anforderung changed from OFF to ON
      then
      //if (Tag_Nacht.state==ON && (now.getHourOfDay() >= 16 && now.getHourOfDay() <= 20 ))
      {
      Modbus_Waermepumpe_PV_Anf.sendCommand(1)
      //createTimer(now.plusSeconds(5), [| logInfo(“Timer”, “My Timer!”)])
      Modbus_Waermepumpe_Leistungsaufnahmevorgabe.sendCommand(900)
      }
      end

2021-01-07 10:10:11.278 [ome.event.ItemCommandEvent] - Item ‘WP_PV_Anforderung’ received command ON

2021-01-07 10:10:11.286 [vent.ItemStateChangedEvent] - WP_PV_Anforderung changed from OFF to ON

2021-01-07 10:10:11.579 [ome.event.ItemCommandEvent] - Item ‘Modbus_Waermepumpe_PV_Anf’ received command 1

2021-01-07 10:10:11.585 [nt.ItemStatePredictedEvent] - Modbus_Waermepumpe_PV_Anf predicted to become 1

2021-01-07 10:10:11.590 [ome.event.ItemCommandEvent] - Item ‘Modbus_Waermepumpe_Leistungsaufnahmevorgabe’ received command 900

2021-01-07 10:10:11.603 [vent.ItemStateChangedEvent] - Modbus_Waermepumpe_PV_Anf changed from 0 to 1

2021-01-07 10:10:11.605 [nt.ItemStatePredictedEvent] - Modbus_Waermepumpe_Leistungsaufnahmevorgabe predicted to become 0

why does item Modbus_Waermepumpe_Leistungsaufnahmevorgabe’ received command 900 changes to predicted to become 0? I absolutely have no clue…

This will be an effect of the Autoupdate feature when working with an Item that has some problem, usually that is linked to a broken channel. See last example.

So, why might the channel be broken?

but

This data Thing is not included in its parent poller Thing’s range of registers. It is broken.
I’m surprised you don’t see some config log about this in your openhab.log?

Of course we don’t yet know what your problem Item is actually linked to, there may be something else at work.

Thanks for the fast reply. The numbering isnt from 100 - 130. There are some numbers missing. Therefore only 24 are physical.

Items are:

`Number      Modbus_Waermepumpe_Betriebsart    "Betriebsart [%d]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding100:number" }`

    Number      Modbus_Waermepumpe_HKR_SOLL_RAUM    "Raumsolltemperatur [%.1f °C]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding101:number" }

    Number      Modbus_Waermepumpe_HKR_SOLL_    "HKR Solltemperatur [%.1f °C]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding102:number" }

    Number      Modbus_Waermepumpe_HKR_SOLL_aktiv    "HKR Solltemperatur aktiv [%d]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding103:number" }

    Number      Modbus_Waermepumpe_RLT_Kuehlen    "RLT min Kuehlen [%.1f °C]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding104:number" }

    Number      Modbus_Waermepumpe_WW_Normaltemp    "WW Normaltemperatur [%.1f °C]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding105:number" }

    Number      Modbus_Waermepumpe_WW_Minimaltemp    "WW Minimaltemperatur [%.1f °C]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding106:number" }

    Number      Modbus_Waermepumpe_MKR1_Betriebsart    "MKR1 Betriebsart [%d]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding107:number" }

    Number      Modbus_Waermepumpe_MKR1_SOLL_RAUM    "MKR1 Raumsolltemperatur [%.1f °C]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding108:number" }

    Number      Modbus_Waermepumpe_MKR1_SOLL_    "MKR1 Solltemperatur [%.1f °C]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding109:number" }

    Number      Modbus_Waermepumpe_MKR1_SOLL_aktiv    "MKR1 Solltemperatur aktiv [%d]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding110:number" }

    Number      Modbus_Waermepumpe_MKR1_RLT_Kuehlen    "MKR1 RLT min Kuehlen [%.1f °C]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding111:number" }

    Number      Modbus_Waermepumpe_MKR2_Betriebsart    "MKR2 Betriebsart [%d]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding112:number" }

    Number      Modbus_Waermepumpe_MKR2_SOLL_RAUM    "MKR2 Raumsolltemperatur [%.1f °C]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding113:number" }

    Number      Modbus_Waermepumpe_MKR2_SOLL_    "MKR2 Solltemperatur [%.1f °C]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding114:number" }

    Number      Modbus_Waermepumpe_MKR2_SOLL_aktiv    "MKR2 Solltemperatur aktiv [%d]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding115:number" }

    Number      Modbus_Waermepumpe_MKR2_RLT_Kuehlen    "MKR2 RLT min Kuehlen [%.1f °C]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding116:number" }

    Number      Modbus_Waermepumpe_PV_Anf    "PV Anforderung [%d]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding117:number" }

    Number      Modbus_Waermepumpe_Leistungsaufnahmevorgabe    "Leistungsaufnahmevorgabe [%.1f W]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding125:number" }

    Number      Modbus_Waermepumpe_Verdichterdrehzahlvorgabe    "Verdichterdrehzahlvorgabe [%d %%]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding126:number" }

    Number      Modbus_Waermepumpe_Ext_Anf    "Ext. Anforderung [%d]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding127:number" }

    Number      Modbus_Waermepumpe_Entstoeren    "Entstoeren [%d]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding128:number" }

    Number      Modbus_Waermepumpe_Aussentemperatur    "Aussentemperatur [%.1f °C]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding129:number" }

    Number      Modbus_Waermepumpe_Aussentemperatur_aktiv    "Aussentemperatur aktiv [%d]"  (gWp) { channel="modbus:data:Waermepumpe:Waermepumpe_RW:holding130:number" }

Poller Thing doesn’t know that. Poller Thing does what you told it to.

This instructs the poller to fetch all registers 100 to 124 in a block in one transfer. There are no gaps, but you do not have to “use” all the registers fetched in any data Thing.

This data Thing cannot work, because the register it asks for is never fetched by the poller.

You can make this into a write-only data Thing, by leaving out the read parameters. data Things can write to any address/type and do not need to be included in any read poller.

thanks Ill try it and give response then.

Thanks, after correction and restart of the service it works!

1 Like