Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement VWZ Live Monitor readings & Test Menu #316

Merged
merged 1 commit into from
Feb 11, 2024

Conversation

kjoglum
Copy link
Contributor

@kjoglum kjoglum commented Feb 13, 2023

Following up on PR #160 to implement values from VWZ (heat pump controller).

@kjoglum
Copy link
Contributor Author

kjoglum commented Feb 23, 2023

Made some adjustments, and additions for VWZ test menu, believe the PR is ready for evaluation/merge.

@Geg0r
Copy link

Geg0r commented Mar 1, 2023

Tried your PR and I can tell that I receive some additional and valid values for my setup, thx

@wimleers
Copy link

wimleers commented May 9, 2023

Does one need to do something to trigger the live monitor? I've applied this PR and see new fields appear, but none of them appear to be updating?

Examples from http://mist.local:8080/data:

…
   "YieldTotal": {
    "name": "YieldTotal",
    "passive": false,
    "write": false,
    "lastup": 0
   },
…
   "Hc1FlowTemp": {
    "name": "Hc1FlowTemp",
    "passive": false,
    "write": false,
    "lastup": 0
   },
   "Hc1HeatCurve": {
    "name": "Hc1HeatCurve",
    "passive": false,
    "write": false,
    "lastup": 0
   },
   "Hc1HeatCurveAdaption": {
    "name": "Hc1HeatCurveAdaption",
    "passive": false,
    "write": false,
    "lastup": 0
   },
   "Hc1MaxFlowTempDesired": {
    "name": "Hc1MaxFlowTempDesired",
    "passive": false,
    "write": false,
    "lastup": 0
   },
   "Hc1MinFlowTempDesired": {
    "name": "Hc1MinFlowTempDesired",
    "passive": false,
    "write": false,
    "lastup": 0
   },
…

Since there's no heating/cooling demand nor domestic hot water demand, I suspect many values are expected to not update. But the yield should be updated?

@kjoglum
Copy link
Contributor Author

kjoglum commented May 9, 2023

@wimleers
Regarding yield, you should ask the question outside this PR, as this PR is not related. For additional data covered by this PR, one is required to send a corresponding write message to retrieve value.

@wimleers
Copy link

wimleers commented May 9, 2023

Thanks for the incredibly fast response! 🤯

For additional data covered by this PR, one is required to send a corresponding write message to retrieve value.

So this PR does not decode any additional messages already being transmitted on the bus?

Your comment at #160 (comment) suggests I should do

ebusctl read -v LiveMonitor

Is that right?

The tricky thing is that I'm running ebusd in Docker and hence don't have easy access to ebusctl 😬 I just tried compiling it and it failed on macOS: john30/ebusd#673 (comment) 😞 🤷

@wimleers
Copy link

wimleers commented May 9, 2023

I got a great hint from somebody in a Dutch forum (you know who you are!): to use http://mist.local:8080/data/hmu?maxage=60 instead.

That worked!

Output:

{
 "hmu": {
  "messages": {   "CompressorExitTemp": {
    "name": "CompressorExitTemp",
    "passive": false,
    "write": false,
    "lastup": 1683665710,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "CompressorIntakeTemp": {
    "name": "CompressorIntakeTemp",
    "passive": false,
    "write": false,
    "lastup": 1683665710,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "CompressorSpeed": {
    "name": "CompressorSpeed",
    "passive": false,
    "write": false,
    "lastup": 1683665710,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "CondensateTemp": {
    "name": "CondensateTemp",
    "passive": false,
    "write": false,
    "lastup": 1683665710,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "ConsumptionThisYear10": {
    "name": "ConsumptionThisYear10",
    "passive": false,
    "write": false,
    "lastup": 1683665711,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "ConsumptionThisYear11": {
    "name": "ConsumptionThisYear11",
    "passive": false,
    "write": false,
    "lastup": 1683665711,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "ConsumptionThisYear12": {
    "name": "ConsumptionThisYear12",
    "passive": false,
    "write": false,
    "lastup": 1683665711,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "ConsumptionThisYear1": {
    "name": "ConsumptionThisYear1",
    "passive": false,
    "write": false,
    "lastup": 1683665711,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "ConsumptionThisYear2": {
    "name": "ConsumptionThisYear2",
    "passive": false,
    "write": false,
    "lastup": 1683665711,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "ConsumptionThisYear3": {
    "name": "ConsumptionThisYear3",
    "passive": false,
    "write": false,
    "lastup": 1683665711,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "ConsumptionThisYear4": {
    "name": "ConsumptionThisYear4",
    "passive": false,
    "write": false,
    "lastup": 1683665712,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "ConsumptionThisYear5": {
    "name": "ConsumptionThisYear5",
    "passive": false,
    "write": false,
    "lastup": 1683665712,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "ConsumptionThisYear6": {
    "name": "ConsumptionThisYear6",
    "passive": false,
    "write": false,
    "lastup": 1683665712,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "ConsumptionThisYear7": {
    "name": "ConsumptionThisYear7",
    "passive": false,
    "write": false,
    "lastup": 1683665712,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "ConsumptionThisYear8": {
    "name": "ConsumptionThisYear8",
    "passive": false,
    "write": false,
    "lastup": 1683665713,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "ConsumptionThisYear9": {
    "name": "ConsumptionThisYear9",
    "passive": false,
    "write": false,
    "lastup": 1683665713,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "ConsumptionTotal": {
    "name": "ConsumptionTotal",
    "passive": false,
    "write": false,
    "lastup": 1683665713,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "CurrentCompressorUtil": {
    "name": "CurrentCompressorUtil",
    "passive": false,
    "write": false,
    "lastup": 1683665713,
    "zz": 8,
    "fields": {
     "0": {"name": "", "value": -1}
    }
   },
   "CurrentConsumedPower": {
    "name": "CurrentConsumedPower",
    "passive": false,
    "write": false,
    "lastup": 1683665713,
    "zz": 8,
    "fields": {
     "0": {"name": "", "value": -0.1}
    }
   },
   "currenterror": {
    "name": "currenterror",
    "passive": false,
    "write": false,
    "lastup": 1683665714,
    "zz": 8,
    "fields": {
     "0": {"name": "error", "value": null},
     "1": {"name": "error", "value": null},
     "2": {"name": "error", "value": null},
     "3": {"name": "error", "value": null},
     "4": {"name": "error", "value": null}
    }
   },
   "CurrentYieldPower": {
    "name": "CurrentYieldPower",
    "passive": false,
    "write": false,
    "lastup": 1683665714,
    "zz": 8,
    "fields": {
     "0": {"name": "", "value": -0.1}
    }
   },
   "DateTime": {
    "name": "DateTime",
    "passive": false,
    "write": false,
    "lastup": 1683665714,
    "zz": 8,
    "fields": {
     "dcfstate": {"value": "nosignal"},
     "btime": {"value": "-:-:-"},
     "bdate": {"value": "-.-.-"},
     "temp2": {"value": null}
    }
   },
   "DeliveryFlow": {
    "name": "DeliveryFlow",
    "passive": false,
    "write": false,
    "lastup": 1683665714,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "EEVPosition": {
    "name": "EEVPosition",
    "passive": false,
    "write": false,
    "lastup": 1683665714,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "EEVTemp": {
    "name": "EEVTemp",
    "passive": false,
    "write": false,
    "lastup": 1683665714,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "EnergyCool": {
    "name": "EnergyCool",
    "passive": false,
    "write": false,
    "lastup": 1683665715,
    "zz": 8,
    "fields": {
     "energy": {"value": 2303}
    }
   },
   "EnergyHc": {
    "name": "EnergyHc",
    "passive": false,
    "write": false,
    "lastup": 1683665715,
    "zz": 8,
    "fields": {
     "energy": {"value": 2303}
    }
   },
   "EvapTemp": {
    "name": "EvapTemp",
    "passive": false,
    "write": false,
    "lastup": 1683665715,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "FlowTempIn": {
    "name": "FlowTempIn",
    "passive": false,
    "write": false,
    "lastup": 1683665715,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "FlowTempOut": {
    "name": "FlowTempOut",
    "passive": false,
    "write": false,
    "lastup": 1683665715,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "HighPressure": {
    "name": "HighPressure",
    "passive": false,
    "write": false,
    "lastup": 1683665715,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "Hours": {
    "name": "Hours",
    "passive": false,
    "write": false,
    "lastup": 1683665716,
    "zz": 8,
    "fields": {
     "energy": {"value": 2303}
    }
   },
   "HoursCool": {
    "name": "HoursCool",
    "passive": false,
    "write": false,
    "lastup": 1683665716,
    "zz": 8,
    "fields": {
     "energy": {"value": 2303}
    }
   },
   "HoursHc": {
    "name": "HoursHc",
    "passive": false,
    "write": false,
    "lastup": 1683665716,
    "zz": 8,
    "fields": {
     "energy": {"value": 2303}
    }
   },
   "LiveMonitorAirIntake": {
    "name": "LiveMonitorAirIntake",
    "passive": false,
    "write": false,
    "lastup": 1683665717,
    "zz": 8,
    "fields": {
     "temperature": {"value": 12.94}
    }
   },
   "LiveMonitorCompressorModulation": {
    "name": "LiveMonitorCompressorModulation",
    "passive": false,
    "write": false,
    "lastup": 1683665717,
    "zz": 8,
    "fields": {
     "percentage": {"value": 0}
    }
   },
   "LiveMonitorCurrentSupply": {
    "name": "LiveMonitorCurrentSupply",
    "passive": false,
    "write": false,
    "lastup": 1683665718,
    "zz": 8,
    "fields": {
     "temperature": {"value": 36.75}
    }
   },
   "LiveMonitorDesiredSupply": {
    "name": "LiveMonitorDesiredSupply",
    "passive": false,
    "write": false,
    "lastup": 1683665718,
    "zz": 8,
    "fields": {
     "temperature": {"value": 20.00}
    }
   },
   "LiveMonitorMain": {
    "name": "LiveMonitorMain",
    "passive": false,
    "write": false,
    "lastup": 1683665718,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "LiveMonitorPowerConsumption": {
    "name": "LiveMonitorPowerConsumption",
    "passive": false,
    "write": false,
    "lastup": 1683665719,
    "zz": 8,
    "fields": {
     "energy": {"value": 0.0}
    }
   },
   "LiveMonitorPowerGenerated": {
    "name": "LiveMonitorPowerGenerated",
    "passive": false,
    "write": false,
    "lastup": 1683665719,
    "zz": 8,
    "fields": {
     "energy": {"value": 0.0}
    }
   },
   "SetMode": {
    "name": "SetMode",
    "passive": true,
    "write": true,
    "lastup": 1683665726,
    "zz": 8,
    "fields": {
     "hcmode": {"value": "auto"},
     "flowtempdesired": {"value": 0.0},
     "hwctempdesired": {"value": null},
     "hwcflowtempdesired": {"value": null},
     "disablehc": {"value": 1},
     "disablehwctapping": {"value": 1},
     "disablehwcload": {"value": 1},
     "remoteControlHcPump": {"value": 0},
     "releaseBackup": {"value": 0},
     "releaseCooling": {"value": 0}
    }
   },
   "State": {
    "name": "State",
    "passive": false,
    "write": false,
    "lastup": 1683665727,
    "zz": 8,
    "fields": {
     "0": {"name": "energy", "value": 0},
     "1": {"name": "energy", "value": 17},
     "2": {"name": "onoff", "value": 192},
     "3": {"name": "state", "value": 0}
    }
   },
   "Status01": {
    "name": "Status01",
    "passive": false,
    "write": false,
    "lastup": 1683665726,
    "zz": 8,
    "fields": {
     "0": {"name": "temp1", "value": 36.5},
     "1": {"name": "temp1", "value": 31.0},
     "2": {"name": "temp2", "value": null},
     "3": {"name": "temp1", "value": null},
     "4": {"name": "temp1", "value": null},
     "5": {"name": "pumpstate", "value": "off"}
    }
   },
   "Status02": {
    "name": "Status02",
    "passive": false,
    "write": false,
    "lastup": 1683665719,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "Status16": {
    "name": "Status16",
    "passive": false,
    "write": false,
    "lastup": 1683665719,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "Status": {
    "name": "Status",
    "passive": false,
    "write": false,
    "lastup": 1683665719,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "WaterThroughput": {
    "name": "WaterThroughput",
    "passive": false,
    "write": false,
    "lastup": 1683665720,
    "zz": 8,
    "fields": {
     "0": {"name": "", "value": 43}
    }
   },
   "YieldThisYear10": {
    "name": "YieldThisYear10",
    "passive": false,
    "write": false,
    "lastup": 1683665720,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "YieldThisYear11": {
    "name": "YieldThisYear11",
    "passive": false,
    "write": false,
    "lastup": 1683665721,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "YieldThisYear12": {
    "name": "YieldThisYear12",
    "passive": false,
    "write": false,
    "lastup": 1683665721,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "YieldThisYear1": {
    "name": "YieldThisYear1",
    "passive": false,
    "write": false,
    "lastup": 1683665722,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "YieldThisYear2": {
    "name": "YieldThisYear2",
    "passive": false,
    "write": false,
    "lastup": 1683665722,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "YieldThisYear3": {
    "name": "YieldThisYear3",
    "passive": false,
    "write": false,
    "lastup": 1683665722,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "YieldThisYear4": {
    "name": "YieldThisYear4",
    "passive": false,
    "write": false,
    "lastup": 1683665722,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "YieldThisYear5": {
    "name": "YieldThisYear5",
    "passive": false,
    "write": false,
    "lastup": 1683665722,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "YieldThisYear6": {
    "name": "YieldThisYear6",
    "passive": false,
    "write": false,
    "lastup": 1683665722,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "YieldThisYear7": {
    "name": "YieldThisYear7",
    "passive": false,
    "write": false,
    "lastup": 1683665722,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "YieldThisYear8": {
    "name": "YieldThisYear8",
    "passive": false,
    "write": false,
    "lastup": 1683665723,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "YieldThisYear9": {
    "name": "YieldThisYear9",
    "passive": false,
    "write": false,
    "lastup": 1683665723,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   },
   "YieldTotal": {
    "name": "YieldTotal",
    "passive": false,
    "write": false,
    "lastup": 1683665723,
    "zz": 8,
    "decodeerror": "ERR: invalid position"
   }
  }
 },
 "global": {
  "version": "23.1.23.1",
  "updatecheck": "OK, broadcast.csv: different version available, memory.csv: different version available, vaillant/08.hmu.csv: different version available, vaillant/15.basv.csv: different version available, vaillant/broadcast.csv: different version available, vaillant/errors.inc: different version available, vaillant/general.csv: different version available, vaillant/hcmode.inc: different version available",
  "signal": true,
  "symbolrate": 22,
  "maxsymbolrate": 181,
  "minarbitrationmicros": 1,
  "maxarbitrationmicros": 123,
  "minsymbollatency": 5,
  "maxsymbollatency": 46,
  "qq": 49,
  "reconnects": 0,
  "masters": 5,
  "messages": 539,
  "lastup": 1683665727
 }
}

As you can see, lots of decoding errors. But also some actually working values! 😊

What additional information do you need from me? What next steps do you want me to take?

@kjoglum
Copy link
Contributor Author

kjoglum commented May 9, 2023

@wimleers
You are mixing your issue into a PR for totally different data values. I.e. you have issues with yield which already is implemented in the master branch. This PR covers different Live Monitor values desired added to the main branch. So you should create a separate Issue, not mixing issue comments in a unrelated PR. This PR relates to line 7-13, 25-26 and 30-51. For these lines you need to send corresponding write values to get read values.

E.g.:
ebusctl write -c hmu ReadLiveMonitorMain 00321f followed by
ebusctl read -v LiveMointorMain will give you the desired supply temperature as given by hmu.

Alternatively:
ebusctl write -c hmu ReadEEVPosition followed by
ebusctl read -v EEVPosition will give you the EEV position.

@wimleers
Copy link

Sorry — I didn't mean to mix things up. I just saw a bunch of "yield"-mentioning lines changed in your PR. So I jumped to that one first. Apologies for the distraction.

Let me try to get this back on track 😊

I'm especially interested in 7–13 and 30–51. So that's ReadFlowTempOut, FlowTempOut, ReadFlowTempIn, FlowTempIn, …, CompressorSpeed Looking at the output I shared above for those values, you see:

✅ 7–13

Key Value
LiveMonitorDesiredSupply 20.0
LiveMonitorCurrentSupply 36.75
LiveMonitorPowerConsumption 0.0
LiveMonitorPowerGenerated 0.0
LiveMonitorCompressorModulation 0
LiveMonitorAirIntake 12.94

Clearly these work fine! 🥳

❌ 30–51

Key Value
EEVPosition ERR: invalid position
FlowTempOut ERR: invalid position
FlowTempIn ERR: invalid position
DeliveryFlow ERR: invalid position
CompressorExitTemp ERR: invalid position
CompressorIntakeTemp ERR: invalid position
EEVTemp ERR: invalid position
HighPressure ERR: invalid position
CondensateTemp ERR: invalid position
EvapTemp ERR: invalid position
CompressorSpeed ERR: invalid position

What can I be doing wrong to get ERR: invalid position?

I'm using the latest version of ebusd, version 23.1: https://github.com/john30/ebusd/releases/tag/23.1

That string originates from https://github.com/john30/ebusd/blob/23.1/src/lib/ebus/result.cpp#L39. grepping the codebase reveals:

I see 4 possible explanations — maybe you can think of more:

  1. The configuration in the CSV file is incorrect.
  2. The CSV file is correct, but it is actually not compatible with my devices: Vaillant aroTHERM 75/5 + uniTOWER split - VWL IS 78/5. They're reported as
  3. I've misconfigured ebusd.
  4. The ebusd adapter is not working correctly.

I personally suspect the root cause is 1. The configuration in the CSV file is incorrect., because only 08.hmu.csv is being updated. But http://mist.local:8080/data/scan.08 returns:

{
  "scan.08": {
    "messages": {
      "": {
        "name": "",
        "passive": false,
        "write": false,
        "lastup": 1683803790,
        "zz": 8,
        "fields": {
          "MF": {
            "value": "Vaillant"
          },
          "ID": {
            "value": "HMU00"
          },
          "SW": {
            "value": "0522"
          },
          "HW": {
            "value": "5103"
          }
        }
      },
      "id": {
        "name": "id",
        "passive": false,
        "write": false,
        "lastup": 0
      }
    }
  },
  "global": {
…
  }
}

… no mention of "VWZ" ☝️ … but I do see a mention of "VWZ" under http://mist.local:8080/data/scan.76:

{
  "scan.76": {
    "messages": {
      "": {
        "name": "",
        "passive": false,
        "write": false,
        "lastup": 1683663282,
        "zz": 118,
        "fields": {
          "MF": {
            "value": "Vaillant"
          },
          "ID": {
            "value": "VWZ00"
          },
          "SW": {
            "value": "0522"
          },
          "HW": {
            "value": "5103"
          }
        }
      },
      "id": {
        "name": "id",
        "passive": false,
        "write": false,
        "lastup": 1683763260,
        "zz": 118,
        "fields": {
          "prefix": {
            "value": "21"
          },
          "year": {
            "value": "22"
          },
          "week": {
            "value": "33"
          },
          "product": {
            "value": "0010022070"
          },
          "supplier": {
            "value": "3100"
          },
          "counter": {
            "value": "006482"
          },
          "suffix": {
            "value": "N8"
          }
        }
      }
    }
  },
  "global": {
…
  }
}

Any chance we need a new 76.*.csv file for me and perhaps some other file for you, for lines 30–51?

How to know which one it is? I'm very eager to help you land this! 😊

@kjoglum
Copy link
Contributor Author

kjoglum commented May 11, 2023

@wimleers
The issue must be related to explanation (2), i.e. equipment combination/compatibility. CSV file is confirmed working for combination aroTherm / VWZ AI, apparently not for aroTherm / uniTower combination.

@wimleers
Copy link

Doesn't that mean that lines 30–51 should be moved out of 08.hmu.csv and into a more specific .csv file?

@kjoglum
Copy link
Contributor Author

kjoglum commented May 11, 2023

08 is the only device reporting these values om the bus. And in fact, 08 already contains some uniTower values which give the same error (invalid position) for VWZ AI. So I believe these need to co-exist in 08.

@wimleers
Copy link

08 already contains some uniTower values which give the same error (invalid position) for VWZ AI.

To me that suggests that those values are also misplaced.

I wish I understood enough already about the architecture to make an informed suggestion where that should be placed 😅

@kjoglum
Copy link
Contributor Author

kjoglum commented May 13, 2023

I am neither familiar with the architecture behind, just been able to decode messages on the bus. The issue must be that VWZ AI and uniTower both are types of HMU, using 08 as slave address, even though they appear to have different functionality/data. Possible also related to values of interest being replicas of actual button presses on the HMU’s, whereas VWZ AI and uniTower have different menu setup.

On the other hand, I do not see why this should be an issue? Why can we not have a 08 csv file covering both, even though some values would be unavailable across VWZ AI/uniTower..?

@wimleers
Copy link

wimleers commented May 16, 2023

I do not see why this should be an issue? Why can we not have a 08 csv file covering both, even though some values would be unavailable across VWZ AI/uniTower..?

"unavailable" would be fine, but ERR: invalid position is an error — don't you think that's a problem?

EDIT: based on this output, I think we should be able to distinguish HMU and VWZ?

ebusd  | 2023-05-16 09:26:43.444 [bus notice] scan 08: ;Vaillant;HMU00;0522;5103
ebusd  | 2023-05-16 09:26:43.444 [update notice] store 08 ident: done
ebusd  | 2023-05-16 09:26:43.444 [update notice] received scan-read scan.08  QQ=00: Vaillant;HMU00;0522;5103
…
ebusd  | 2023-05-16 09:26:51.863 [main notice] read scan config file vaillant/08.hmu.csv for ID "hmu00", SW0522, HW5103

and

ebusd  | 2023-05-16 09:27:00.165 [bus notice] scan 76: ;Vaillant;VWZ00;0522;5103
ebusd  | 2023-05-16 09:27:00.165 [update notice] store 76 ident: done
ebusd  | 2023-05-16 09:27:00.165 [update notice] sent scan-read scan.76  QQ=31: Vaillant;VWZ00;0522;5103
ebusd  | 2023-05-16 09:27:00.165 [bus notice] scan 76: ;Vaillant;VWZ00;0522;5103
ebusd  | 2023-05-16 09:27:00.320 [update notice] sent unknown MS cmd: 3176b5090124 / 09003231323233333030
ebusd  | 2023-05-16 09:27:00.474 [update notice] sent scan-read scan.76 id QQ=31: 
ebusd  | 2023-05-16 09:27:00.518 [update notice] received update-read broadcast outsidetemp QQ=10: 17.289
ebusd  | 2023-05-16 09:27:00.625 [update notice] sent scan-read scan.76 id QQ=31: 
ebusd  | 2023-05-16 09:27:00.778 [update notice] sent scan-read scan.76 id QQ=31: 21;22;33;0010022070;3100;006482;N8
ebusd  | 2023-05-16 09:27:00.778 [bus notice] scan 76: ;21;22;33;0010022070;3100;006482;N8
ebusd  | 2023-05-16 09:27:00.812 [main error] unable to load scan config 76: no file from vaillant with prefix 76 found
ebusd  | 2023-05-16 09:27:00.812 [main error] scan config 76: ERR: element not found

@wimleers
Copy link

wimleers commented May 16, 2023

See my in-progress review at #330 (comment) — that PR works far better for my system.

@kjoglum Could you please test that PR so we can start the work to merge combine these two PRs?

EDIT: at #330 (comment) I posted an initial proposal for how to combine the two PRs.

@kjoglum
Copy link
Contributor Author

kjoglum commented May 17, 2023

@wimleers
Uncertain how the combination PR would maintain interests for the VWZ AI / aroTherm combination? Write messages are required to mimic menu button press before getting read values, which I do not see in the combination PR. I.e. using MQTT to send specific write message code to be able to retrieve associated read value.

Example 1:
To get LiveMonitor values as decoded under B51A 05 0032XX for my setup, without getting ERR: invalid position in decode when running ebusctl read, I first need to send ReadLiveMonitor 0032XX write message as included in this PR (B51A 05 0032XX). E.g. ReadLiveMonitor 003224 will give me read value for LiveMonitorPowerConsumption, whereas ReadLiveMonitor 003220 will give me read value for LiveMonitorCurrentSupply.

image

Note:
The equivalent LiveMonitor read values you supposedly have identified between PRs also are found under different IDs: 05FF32 for PR#330 (which is kept for your new PR) vs 050032 for this PR.

Example 2:
To get EEV temp as decoded under B514 05 3b for my setup, without getting ERR: invalid position in decode when running ebusctl read, I first need to send ReadEEVTemp write message as included in this PR (B514 05 3b), then being able to get read value for EEVTemp.

image

Note:
Same here, equivalent values seems to be decoded under different IDs.

Also see missing values for PBSB 503.

So maybe existing PRs (316 and 330) can be merged without conflicts, as they are using different IDs? Covering different use case / equipment setup. Although, to allow both systems to "live" within same file, without "killing" similar equipment setups as mine, PR #330 would be required to subdivide IDs below main categories. E.g.:
Main category: B51A 05 (as used in this PR).
Subid CompressorUtilization: r,,CompressorUtilization,,,,,FF3225,,,UIN,10,%,,,,,,,,,,,,,,,,,,,. Thus not combining everything into ID 05FF32

Having the main category B51A 05, the equivalent line in this PR would still work for LiveMonitorCompressorModulation: r,,LiveMonitorCompressorModulation,D1B,,,,003225,,,IGN:3,,,,percentage,,D1B,,,,,,,,,,,,,,,.

@kjoglum kjoglum force-pushed the master branch 3 times, most recently from 0d12e4c to 69a6db2 Compare August 27, 2023 08:59
Copy link
Owner

@john30 john30 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

merge with upstream is missing

@Dzanar
Copy link

Dzanar commented Jan 21, 2024

I have a Vaillant VWL75/5AS heat pump with VWZ AI. When I used this configuration file to read parameters while heating domestic hot water, the pump behaved strangely. It turns off every now and then, and then restarts in hot water heating mode. I am using MQTT to read parameters.

@copacetic82
Copy link

@kjoglum Thanks...yes I am using central config files, seems these files were automatically updated about 2 days ago, after which I am missing the CurrentConsumedPower and CurrentYieldPower.

I did suspect thes were moved to LiveMonitorPowerConsumption and LiveMonitorPowerGenerated, but during the last 2 days these values were near 0, which could not have been true. But I have rebooted and upgraded ebusd today and it seems they now show more realistic values. So let me observe for the next couple of days...

@copacetic82
Copy link

copacetic82 commented Feb 13, 2024

@kjoglum unfortunately no success yet, and I dont think waiting any longer will change the outcome. It showed me a more or less realistic reading once today (dont know why), and afterwards it only shows a consumption of max 0,1KW. See the screenshots below for a comparison of a normal day with old and new config file (both days with similar outside temperature and heating requirements)

Everytime I checked with "ebusd ebusctl find -v" I get a reading between 0.0 and 0.1, so its definitely not a homeassistant or MQTT issue:
hmu LiveMonitorPowerConsumption = energy=0.1
hmu LiveMonitorPowerGenerated = energy=0.0

old
new

@kjoglum
Copy link
Contributor Author

kjoglum commented Feb 13, 2024

@copacetic82
Again, strange, as the decode is set up more or less identical for new/old values.

Do you have a MQTT config for requesting/retrieving CurrentConsumedPower values, which then needs to be changed to request/retrieve LiveMonitorPowerConsumption?

Pretty sure if you run ebusctl write -c hmu ReadLiveMonitor FF3224, or the MQTT equivalent mosquitto_pub -m 'FF3224' -t 'ebusd/hmu/ReadLiveMonitor/set at frequent interval (to trigger value request), you should get the same log trend for LiveMonitorPowerConsumption

@copacetic82
Copy link

@kjoglum I am using the automatic homeassistant discovery, so homeassistant is using the following MQTT LiveMonitor topics:

{
  "unique_id": "ebusd_hmu_LiveMonitorPowerConsumption_energy",
  "name": "LiveMonitorPowerConsumption energy",
  "device": {
    "identifiers": "ebusd_hmu",
    "manufacturer": "ebusd.eu",
    "name": "ebusd hmu",
    "via_device": "ebusd",
    "sw_version": "23.3",
    "suggested_area": "Heating"
  },
  "value_template": "{{value_json[\"energy\"].value}}",
  "state_topic": "ebusd/hmu/LiveMonitorPowerConsumption",
  "unit_of_measurement": "kW",
  "state_class": "measurement",
  "device_class": "power"
}

{
"unique_id": "ebusd_hmu_LiveMonitorPowerGenerated_energy",
"name": "LiveMonitorPowerGenerated energy",
"device": {
"identifiers": "ebusd_hmu",
"manufacturer": "ebusd.eu",
"name": "ebusd hmu",
"via_device": "ebusd",
"sw_version": "23.3",
"suggested_area": "Heating"
},
"value_template": "{{value_json["energy"].value}}",
"state_topic": "ebusd/hmu/LiveMonitorPowerGenerated",
"unit_of_measurement": "kW",
"state_class": "measurement",
"device_class": "power"
}

In comparison to Current*Power:

{
  "unique_id": "ebusd_hmu_CurrentConsumedPower_0",
  "name": "CurrentConsumedPower ",
  "device": {
    "identifiers": "ebusd_hmu",
    "manufacturer": "ebusd.eu",
    "name": "ebusd hmu",
    "via_device": "ebusd",
    "sw_version": "23.3",
    "suggested_area": "Heating"
  },
  "value_template": "{{value_json[\"0\"].value}}",
  "state_topic": "ebusd/hmu/CurrentConsumedPower",
  "unit_of_measurement": "kW",
  "state_class": "measurement",
  "device_class": "power"
}

{
  "unique_id": "ebusd_hmu_CurrentYieldPower_0",
  "name": "CurrentYieldPower ",
  "device": {
    "identifiers": "ebusd_hmu",
    "manufacturer": "ebusd.eu",
    "name": "ebusd hmu",
    "via_device": "ebusd",
    "sw_version": "23.3",
    "suggested_area": "Heating"
  },
  "value_template": "{{value_json[\"0\"].value}}",
  "state_topic": "ebusd/hmu/CurrentYieldPower",
  "unit_of_measurement": "kW",
  "state_class": "measurement",
  "device_class": "power"
}

I did read the LiveMOnitor Values directly from ebusd while the heatpump was actually runnig. So in my opinion ebusd is not getting the correct values, or is not updating the values frequently enough. Strangely enough I got another "spike" shortly after midnight, so the MQTT config seems to be working:

image

I will try the commands you mentioned when I have more time.

@copacetic82
Copy link

@kjoglum Thank you for your help. Executing "ebusctl write -c hmu ReadLiveMonitor FF3224" repeatedly does indeed show realistic values. How is the new implementation intended to work? Do I manually have to trigger a read? Wont be a problem, I could write an automation for this, but dont know if this this is the way it is supposed to work.

image

@kjoglum
Copy link
Contributor Author

kjoglum commented Feb 15, 2024

@copacetic82
Good to hear! For me and my setup, I did not receive any automatic updates for CurrentConsumedPower without triggering read, so in an openHAB environment, I have openHAB sending frequent MQTT writes corresponding to mosquitto_pub -m 'FF3224' -t 'ebusd/hmu/ReadLiveMonitor/set, thus triggering automatic read for LiveMonitorPowerConsumption.

@copacetic82
Copy link

@kjoglum In the past I never had to trigger updates of CurrentConsumedPower. However the value always seemed to be a bit off. e.g I could hear the heatpump running outside, but the value was 0. I tested with an automation, triggering a LiveMonirot update every 20-30sec...the readings now seem to be more accurate than ever, thank you! ;) The only issue I am having now is that the "LiveMonitorPowerGenerated" sometimes has spikes of very high values (600-800KW), which I cant believe are true, and which mess up the whole graph. The usual values shown are 5-9KW as expected. Do you also observe this?

image

image

@kjoglum
Copy link
Contributor Author

kjoglum commented Feb 17, 2024

@copacetic82
Good to hear that the config works for you as well.

Haven´t been using the LiveMonitorPowerGenerated myself, as I might recall having some spike issues as well. Have activated MQTT, and will follow up on the response.

@kjoglum
Copy link
Contributor Author

kjoglum commented Feb 17, 2024

@copacetic82
I have now been triggering LiveMonitorPowerGenerated values as well, and although not getting the value spikes you get, I have similar effect in a smaller scale, i.e. 25 kW. Having both LiveMonitorPowerConsumption and LiveMonitorPowerGenerated in the same graph (different axis), the spikes seem to appear at the same time as the deicing mode of the heat pump. Uncertain why/what causes this effect, but even though unrealistic values, is seems to be the value sent on the bus.

image

@copacetic82
Copy link

@kjoglum Thanks for checking! If you have the same issue it must be a Vaillant thing. I can possibly do something about this in homeassistant by using filters. But consumption is most important for me, so I might just live with this. Thanks again for your help! :)

@dfeist
Copy link

dfeist commented Feb 23, 2024

@kjoglum Why did this PR remove "EnergyIntegral", accident?

@kjoglum
Copy link
Contributor Author

kjoglum commented Feb 23, 2024

@dfeist
Seems to have been accidentally removed in the process of merging this PR with changes made in PR# 330. Will correct the mistake and create new PR.

@Tgroon
Copy link

Tgroon commented Feb 25, 2024

I have a aroTHERM plus VWL 105/6A fw: 9.01 heat pump. When I used this configuration file to read parameters the pump behaved strangely. The pump turned off for no reason and turned on again after a while.
obrázok

@kjoglum
Copy link
Contributor Author

kjoglum commented Feb 26, 2024

@MiroBehrik
You state that heat pump "turns off" - Does the heat pump actually turn off, or are you basing the statement on the values you read from the bus (i.e. potential missing values)? And if actually turning off, could it be due to no heating demands in that period?

Also, are you sending frequent MQTT write requests to retrieve data?

No changes made to the config files which would turn off the pump.

@Tgroon
Copy link

Tgroon commented Feb 27, 2024

Yes, the compressor will turn off. The MQTT reading frequency is once every 2 min

new 08.hmu.csv
obrázok
obrázok

odl 08.hmu.csv
obrázok
obrázok

@dfeist
Copy link

dfeist commented Feb 27, 2024

@MiroBehrik Seen john30/ebusd#1205 ? Looks like same issue.

@kjoglum
Copy link
Contributor Author

kjoglum commented Feb 27, 2024

@MiroBehrik @dfeist
Comment in #1205 seems to be the likely explanation, i.e. the result of this PR introducing additional write parameters (to manually trigger read values), and how hassio config file/integration is set up to interact with parameters by default. Might seem like hassio config is causing a write message which shuts down compressor.

This is not an issue for openHAB integration, running "manual" MQTT topics to write/trigger read values. Although unfamiliar about how the hassio config/integration works, and why this issue occurs.

@ProdanAS
Copy link

I've managed to see what went on in my HP, when the ebus started sending the request for values. The CalculatedFlowTemp, dropped from 60 to 20 for a fraction of a minute, witch caused the HP, to shutdown due to no heating needs, a little while after, the Calculated value returned to 60, and the compressor started, then this kept happening for ever.

Skærmbillede 2024-02-22 kl  15 16 21 Skærmbillede 2024-02-22 kl  15 16 15 Skærmbillede 2024-02-22 kl  15 14 32 Skærmbillede 2024-02-22 kl  15 14 08 Skærmbillede 2024-02-22 kl  15 14 03 Skærmbillede 2024-02-22 kl  15 13 49

Maybe this will help someone. Let me know if I can be of assistance with testing.

john30 added a commit that referenced this pull request Mar 1, 2024
john30 added a commit that referenced this pull request Mar 1, 2024
john30 added a commit that referenced this pull request Mar 1, 2024
@john30 john30 added invalid and removed run checks labels Mar 1, 2024
@john30
Copy link
Owner

john30 commented Mar 1, 2024

there was quite some mess around this PR and it is now reverted. better extract the changes to a separate file for inclusion for those interested in it @kjoglum

@jkunczik
Copy link

jkunczik commented Mar 4, 2024

An update from john30/ebusd/issues/1205: We found the culprit. All Home Assistant integrations (MQTT and ebusdpy) actively poll read values. Either the HMU or the controller doesn't take kindly if one of the introduced read values in the updated 08.hmu.csv (we still don't know which) is actively polled by another master, which then leads to a full stop of the heat pump. An issue was opened at ebuspy CrazYoshi/ebusdpy#10 (for the core integration) and a pull request was opened john30/ebusd#1213 to prevent MQTT from actively polling.

After these issues have been addressed, I think the configuration could be merged into master, again.

@john30
Copy link
Owner

john30 commented Jul 18, 2024

an extension to message definitions is not supposed to break thousands of running integrations, so clearly changing the polling mechanims on either ebusd or another integration (like ebusdpy) is definitely not the right approach.
someone needs to identify which of the definitions is the root cause (e.g. by bisection).
until this is solved, this PR cannot be merged

@john30
Copy link
Owner

john30 commented Dec 22, 2024

looking at this again more closely due to merge activities, I'm pretty sure that the new messages categorized as read but actually starting the live monitoring caused the trouble earlier this year.
it is now reworked and merged in fa74d0c with those problematic messages put into service or installer level only and the ones activating the live monitor ensured to be write messages. this way one can actively choose by ebusd start params if those are supposed to be included or not.
some things still need to be sorted out, e.g. the duplication of b51a 05b43400 and b51a 05ff3400 which is now done with a "Stat" prefix to the non-ff ones. but I guess the other PRs have this addressed as well, so might be resolved after those are merged.

@john30
Copy link
Owner

john30 commented Dec 29, 2024

please check the next generated csvs with ebusd 24.1 (or current source) as described there or by using a local clone of https://github.com/eBUS/ebus.github.io and using the "next" folder in there

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.