Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

M-BUS energimåler til Home Assistant


Anbefalte innlegg

Hei godtfolk :-)

 

Eg har ein Siemens energimåler for avrekning av varmtvannsforbruk i sameiget. Denne har M-BUS interface, og eg vil gjerne ha lest ut data frå denne og sammenstilt det med data frå strømmålaren min for å få ein oversikt over samla energiforbruk. Det som er "in" no er jo å prøve å holde seg innanfor nettariffane, det vil ikkje fungere noko særleg for meg men eg vil alikavel prøve å holde meg under 2kW effekt. Varmtvannsforbruket (gulvvarme) er mest for moro samt å få automatisk avlesing så slepp eg å krype inn i skapet der målaren står sidan det kjem til å kome ei vaskeromsinnreiing foran den luka.

 

Tenkte at det kanskje er intressant for fleire her, dei som har luft/vann eller grunnvarmepumpe har ofte energimåler så kan vere greitt å få det med.

 

Eg har kjøpt ein M-BUS master/USB interface frå Kina som virka rett ut av boksen. link: https://www.aliexpress.com/item/1005004334740899.html

 

Eg kobla den til ein Raspberry og følgde litt den guiden her: https://www.hackster.io/hartmut-wendt/smartmetering-via-m-bus-and-raspberry-pi-a408d4 med unntak av at eg også måtte installere libtools med kommando før sudo ./build.sh

sudo apt-get install libtool automake

 

Så rettighet på USB interfacet, og deretter scan for M-BUS slaver:

chmod 666 /dev/ttyUSB0

root@raspberrypi:/home/xx/libmbus/bin# ./mbus-serial-scan -d -b 2400 /dev/ttyUSB0
Scanning primary addresses:
0 [2022-10-10 15:31:03Z] SEND (005): 10 40 00 40 16
[2022-10-10 15:31:03Z] RECV (001): E5
Found a M-Bus device at address 0

 

Så avlesing, dette er resultatet.

root@raspberrypi:/home/xx/libmbus/bin# ./mbus-serial-request-data -d -b 2400 /dev/ttyUSB0 0
init_slaves: debug: sending init frame #1
[2022-10-10 15:32:40Z] SEND (005): 10 40 FD 3D 16
init_slaves: debug: sending init frame #2
[2022-10-10 15:32:40Z] SEND (005): 10 40 FD 3D 16
[2022-10-10 15:32:41Z] SEND (005): 10 5B 00 5B 16
[2022-10-10 15:32:42Z] RECV (232): 68 E2 E2 68 08 00 72 43 45 98 70 A7 32 07 04 00 00 00 00 09 74 04 09 70 08 0C 06 87 47 00 00 0C 14 33 22 11 00 0B 2D 12 00 00 0B 3B 66 03 00 0B 5A 58 03 00 0B 5E 30 03 00 0B 62 28 00 00 0C 78 43 45 98 70 89 10 71 15 3C 22 00 00 00 00 0C 22 07 32 01 00 0C 26 48 38 00 00 8C 90 10 06 00 00 00 00 9B 10 2D 62 01 00 9B 10 3B 44 13 00 9B 10 5A 70 03 00 9B 10 5E 85 04 00 94 10 AD 6F 0F 0F C4 22 94 10 BB 6F 00 0F DB 24 94 10 DA 6F 39 16 DB 22 94 10 DE 6F 2C 09 A8 24 4C 06 00 00 00 00 4C 14 00 00 00 00 7C 22 23 64 00 00 4C 26 00 00 00 00 CC 90 10 06 00 00 00 00 DB 10 2D 00 00 00 DB 10 3B 00 00 00 DB 10 5A 82 02 00 DB 10 5E 85 04 00 84 8F 0F 6D 00 00 E1 F1 04 6D 26 10 CA 2A 0F 19 07 00 62 01 8C 16
mbus_frame_print: Dumping M-Bus frame [type 4, 232 bytes]: 68 E2 E2 68 08 00 72 43 45 98 70 A7 32 07 04 00 00 00 00 09 74 04 09 70 08 0C 06 87 47 00 00 0C 14 33 22 11 00 0B 2D 12 00 00 0B 3B 66 03 00 0B 5A 58 03 00 0B 5E 30 03 00 0B 62 28 00 00 0C 78 43 45 98 70 89 10 71 15 3C 22 00 00 00 00 0C 22 07 32 01 00 0C 26 48 38 00 00 8C 90 10 06 00 00 00 00 9B 10 2D 62 01 00 9B 10 3B 44 13 00 9B 10 5A 70 03 00 9B 10 5E 85 04 00 94 10 AD 6F 0F 0F C4 22 94 10 BB 6F 00 0F DB 24 94 10 DA 6F 39 16 DB 22 94 10 DE 6F 2C 09 A8 24 4C 06 00 00 00 00 4C 14 00 00 00 00 7C 22 23 64 00 00 4C 26 00 00 00 00 CC 90 10 06 00 00 00 00 DB 10 2D 00 00 00 DB 10 3B 00 00 00 DB 10 5A 82 02 00 DB 10 5E 85 04 00 84 8F 0F 6D 00 00 E1 F1 04 6D 26 10 CA 2A 0F 19 07 00 62 01 8C 16
<?xml version="1.0" encoding="ISO-8859-1"?>
<MBusData>

    <SlaveInformation>
        <Id>70984543</Id>
        <Manufacturer>LUG</Manufacturer>
        <Version>7</Version>
        <ProductName>Landis &amp; Gyr Ultraheat T230</ProductName>
        <Medium>Heat: Outlet</Medium>
        <AccessNumber>0</AccessNumber>
        <Status>00</Status>
        <Signature>0000</Signature>
    </SlaveInformation>

    <DataRecord id="0">
        <Function>Instantaneous value</Function>
        <StorageNumber>0</StorageNumber>
        <Unit>Actuality Duration (seconds)</Unit>
        <Value>4</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="1">
        <Function>Instantaneous value</Function>
        <StorageNumber>0</StorageNumber>
        <Unit>Averaging Duration (seconds)</Unit>
        <Value>8</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="2">
        <Function>Instantaneous value</Function>
        <StorageNumber>0</StorageNumber>
        <Unit>Energy (kWh)</Unit>
        <Value>4787</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="3">
        <Function>Instantaneous value</Function>
        <StorageNumber>0</StorageNumber>
        <Unit>Volume (1e-2  m^3)</Unit>
        <Value>112233</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="4">
        <Function>Instantaneous value</Function>
        <StorageNumber>0</StorageNumber>
        <Unit>Power (100 W)</Unit>
        <Value>12</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="5">
        <Function>Instantaneous value</Function>
        <StorageNumber>0</StorageNumber>
        <Unit>Volume flow (m m^3/h)</Unit>
        <Value>366</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="6">
        <Function>Instantaneous value</Function>
        <StorageNumber>0</StorageNumber>
        <Unit>Flow temperature (1e-1 deg C)</Unit>
        <Value>358</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="7">
        <Function>Instantaneous value</Function>
        <StorageNumber>0</StorageNumber>
        <Unit>Return temperature (1e-1 deg C)</Unit>
        <Value>330</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="8">
        <Function>Instantaneous value</Function>
        <StorageNumber>0</StorageNumber>
        <Unit>Temperature Difference (1e-1  deg C)</Unit>
        <Value>28</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="9">
        <Function>Instantaneous value</Function>
        <StorageNumber>0</StorageNumber>
        <Unit>Fabrication number</Unit>
        <Value>70984543</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="10">
        <Function>Instantaneous value</Function>
        <StorageNumber>0</StorageNumber>
        <Tariff>1</Tariff>
        <Device>0</Device>
        <Unit>Averaging Duration (minutes)</Unit>
        <Value>15</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="11">
        <Function>Value during error state</Function>
        <StorageNumber>0</StorageNumber>
        <Unit>On time (hours)</Unit>
        <Value>0</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="12">
        <Function>Instantaneous value</Function>
        <StorageNumber>0</StorageNumber>
        <Unit>On time (hours)</Unit>
        <Value>13207</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="13">
        <Function>Instantaneous value</Function>
        <StorageNumber>0</StorageNumber>
        <Unit>Operating time (hours)</Unit>
        <Value>3848</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="14">
        <Function>Instantaneous value</Function>
        <StorageNumber>0</StorageNumber>
        <Tariff>5</Tariff>
        <Device>0</Device>
        <Unit>Energy (kWh)</Unit>
        <Value>0</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="15">
        <Function>Maximum value</Function>
        <StorageNumber>0</StorageNumber>
        <Tariff>1</Tariff>
        <Device>0</Device>
        <Unit>Power (100 W)</Unit>
        <Value>162</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="16">
        <Function>Maximum value</Function>
        <StorageNumber>0</StorageNumber>
        <Tariff>1</Tariff>
        <Device>0</Device>
        <Unit>Volume flow (m m^3/h)</Unit>
        <Value>1344</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="17">
        <Function>Maximum value</Function>
        <StorageNumber>0</StorageNumber>
        <Tariff>1</Tariff>
        <Device>0</Device>
        <Unit>Flow temperature (1e-1 deg C)</Unit>
        <Value>370</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="18">
        <Function>Maximum value</Function>
        <StorageNumber>0</StorageNumber>
        <Tariff>1</Tariff>
        <Device>0</Device>
        <Unit>Return temperature (1e-1 deg C)</Unit>
        <Value>485</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="19">
        <Function>Maximum value</Function>
        <StorageNumber>0</StorageNumber>
        <Tariff>1</Tariff>
        <Device>0</Device>
        <Unit>Power (100 W)</Unit>
        <Value>583274255</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="20">
        <Function>Maximum value</Function>
        <StorageNumber>0</StorageNumber>
        <Tariff>1</Tariff>
        <Device>0</Device>
        <Unit>Volume flow (m m^3/h)</Unit>
        <Value>618336000</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="21">
        <Function>Maximum value</Function>
        <StorageNumber>0</StorageNumber>
        <Tariff>1</Tariff>
        <Device>0</Device>
        <Unit>Flow temperature (1e-1 deg C)</Unit>
        <Value>584783417</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="22">
        <Function>Maximum value</Function>
        <StorageNumber>0</StorageNumber>
        <Tariff>1</Tariff>
        <Device>0</Device>
        <Unit>Return temperature (1e-1 deg C)</Unit>
        <Value>614992172</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="23">
        <Function>Instantaneous value</Function>
        <StorageNumber>1</StorageNumber>
        <Unit>Energy (kWh)</Unit>
        <Value>0</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="24">
        <Function>Instantaneous value</Function>
        <StorageNumber>1</StorageNumber>
        <Unit>Volume (1e-2  m^3)</Unit>
        <Value>0</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="25">
        <Function>Value during error state</Function>
        <StorageNumber>1</StorageNumber>
        <Unit>On time (hours)</Unit>
        <Value>6423</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="26">
        <Function>Instantaneous value</Function>
        <StorageNumber>1</StorageNumber>
        <Unit>Operating time (hours)</Unit>
        <Value>0</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="27">
        <Function>Instantaneous value</Function>
        <StorageNumber>1</StorageNumber>
        <Tariff>5</Tariff>
        <Device>0</Device>
        <Unit>Energy (kWh)</Unit>
        <Value>0</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="28">
        <Function>Maximum value</Function>
        <StorageNumber>1</StorageNumber>
        <Tariff>1</Tariff>
        <Device>0</Device>
        <Unit>Power (100 W)</Unit>
        <Value>0</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="29">
        <Function>Maximum value</Function>
        <StorageNumber>1</StorageNumber>
        <Tariff>1</Tariff>
        <Device>0</Device>
        <Unit>Volume flow (m m^3/h)</Unit>
        <Value>0</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="30">
        <Function>Maximum value</Function>
        <StorageNumber>1</StorageNumber>
        <Tariff>1</Tariff>
        <Device>0</Device>
        <Unit>Flow temperature (1e-1 deg C)</Unit>
        <Value>282</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="31">
        <Function>Maximum value</Function>
        <StorageNumber>1</StorageNumber>
        <Tariff>1</Tariff>
        <Device>0</Device>
        <Unit>Return temperature (1e-1 deg C)</Unit>
        <Value>485</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="32">
        <Function>Instantaneous value</Function>
        <StorageNumber>510</StorageNumber>
        <Tariff>0</Tariff>
        <Device>0</Device>
        <Unit>Time Point (time &amp; date)</Unit>
        <Value>2127-01-01T00:00:00</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="33">
        <Function>Instantaneous value</Function>
        <StorageNumber>0</StorageNumber>
        <Unit>Time Point (time &amp; date)</Unit>
        <Value>2022-10-10T16:38:00</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

    <DataRecord id="34">
        <Function>Manufacturer specific</Function>
        <Value>19 07 00 62 01</Value>
        <Timestamp>2022-10-10T15:32:42Z</Timestamp>
    </DataRecord>

</MBusData>

 

Det eg tenker her er at verdiane må formatterast til Celsius osv. Så kunne presenterast likt med strømforbruket, sanntidsforbruk, timeforbruk, målerstand osv.

 

I tillegg hadde det vore gull med ein opsjon for å kunne levere målerdata med ein http request kvar mnd. for å få automatisk avlesing (det er 25 leiligheter her med kvar sin målar og skal byggast 50 til så at ingen har tenkt på automatisk avlesing er jo noko som kan forbedrast.) Tenker at målernummer og målerstand skulle vere nok info.

 

Nokon glupe som kan kome lenger her, eller har gode innspel til ein tech freak som kan litt om alt men ikkje nok om noko?

Endret av TurboJens
  • Like 1
Lenke til kommentar
Del på andre sider

Eg har i utganspunktet ikkje tenkt å ha denne Raspberryen i eit produksjonsmiljø, eg brukar den mest til å leike. Har ein Intel NUC ståande som køyrer HA OS, hadde vore gull å kunne plugga USB interfacet rett i den.

 

Men sånne små kort med wifi er jo ikkje så dumt til dette, ex. noko ESP greier for dei som har god greie på slikt :-)

Lenke til kommentar
Del på andre sider

Eg har brukt node-red for å få dette til MQTT i json format. Men denne meldinga inneheld svært mykje informasjon. Nokon som har gode forslag for å få dette inn i HA som sensor? Eg slit ærleg talt litt med den mqtt konfigen som må gjerast i configurations.yaml. Nokon som har kunnskapen til å hjelpe meg? Under er deler av det eg får via MQTT.

 

Eg er intressert i nokre få av desse, vil ha MålerID (SlaveInformation "Id" evt. Id=9, value) samt målerstand (Id=2, value), avgitt effekt (Id=4, value), tur, retur og diff temp (id 6, 7 og 8)

 

{
  "MBusData": {
    "SlaveInformation": {
      "Id": "70984543",
      "Manufacturer": "LUG",
      "Version": "7",
      "ProductName": "Landis & Gyr Ultraheat T230",
      "Medium": "Heat: Outlet",
      "AccessNumber": "9",
      "Status": "00",
      "Signature": "0000"
    },
    "DataRecord": [
      {
        "id": "0",
        "Function": "Instantaneous value",
        "StorageNumber": "0",
        "Unit": "Actuality Duration (seconds)",
        "Value": "4",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "1",
        "Function": "Instantaneous value",
        "StorageNumber": "0",
        "Unit": "Averaging Duration (seconds)",
        "Value": "8",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "2",
        "Function": "Instantaneous value",
        "StorageNumber": "0",
        "Unit": "Energy (kWh)",
        "Value": "4792",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "3",
        "Function": "Instantaneous value",
        "StorageNumber": "0",
        "Unit": "Volume (1e-2  m^3)",
        "Value": "112421",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "4",
        "Function": "Instantaneous value",
        "StorageNumber": "0",
        "Unit": "Power (100 W)",
        "Value": "14",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "5",
        "Function": "Instantaneous value",
        "StorageNumber": "0",
        "Unit": "Volume flow (m m^3/h)",
        "Value": "449",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "6",
        "Function": "Instantaneous value",
        "StorageNumber": "0",
        "Unit": "Flow temperature (1e-1 deg C)",
        "Value": "338",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "7",
        "Function": "Instantaneous value",
        "StorageNumber": "0",
        "Unit": "Return temperature (1e-1 deg C)",
        "Value": "312",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "8",
        "Function": "Instantaneous value",
        "StorageNumber": "0",
        "Unit": "Temperature Difference (1e-1  deg C)",
        "Value": "26",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "9",
        "Function": "Instantaneous value",
        "StorageNumber": "0",
        "Unit": "Fabrication number",
        "Value": "70984543",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "10",
        "Function": "Instantaneous value",
        "StorageNumber": "0",
        "Tariff": "1",
        "Device": "0",
        "Unit": "Averaging Duration (minutes)",
        "Value": "15",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "11",
        "Function": "Value during error state",
        "StorageNumber": "0",
        "Unit": "On time (hours)",
        "Value": "0",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "12",
        "Function": "Instantaneous value",
        "StorageNumber": "0",
        "Unit": "On time (hours)",
        "Value": "13215",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "13",
        "Function": "Instantaneous value",
        "StorageNumber": "0",
        "Unit": "Operating time (hours)",
        "Value": "3856",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "14",
        "Function": "Instantaneous value",
        "StorageNumber": "0",
        "Tariff": "5",
        "Device": "0",
        "Unit": "Energy (kWh)",
        "Value": "0",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "15",
        "Function": "Maximum value",
        "StorageNumber": "0",
        "Tariff": "1",
        "Device": "0",
        "Unit": "Power (100 W)",
        "Value": "162",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "16",
        "Function": "Maximum value",
        "StorageNumber": "0",
        "Tariff": "1",
        "Device": "0",
        "Unit": "Volume flow (m m^3/h)",
        "Value": "1344",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "17",
        "Function": "Maximum value",
        "StorageNumber": "0",
        "Tariff": "1",
        "Device": "0",
        "Unit": "Flow temperature (1e-1 deg C)",
        "Value": "370",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "18",
        "Function": "Maximum value",
        "StorageNumber": "0",
        "Tariff": "1",
        "Device": "0",
        "Unit": "Return temperature (1e-1 deg C)",
        "Value": "485",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "19",
        "Function": "Maximum value",
        "StorageNumber": "0",
        "Tariff": "1",
        "Device": "0",
        "Unit": "Power (100 W)",
        "Value": "583274255",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "20",
        "Function": "Maximum value",
        "StorageNumber": "0",
        "Tariff": "1",
        "Device": "0",
        "Unit": "Volume flow (m m^3/h)",
        "Value": "618336000",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "21",
        "Function": "Maximum value",
        "StorageNumber": "0",
        "Tariff": "1",
        "Device": "0",
        "Unit": "Flow temperature (1e-1 deg C)",
        "Value": "584783417",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "22",
        "Function": "Maximum value",
        "StorageNumber": "0",
        "Tariff": "1",
        "Device": "0",
        "Unit": "Return temperature (1e-1 deg C)",
        "Value": "614992172",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "23",
        "Function": "Instantaneous value",
        "StorageNumber": "1",
        "Unit": "Energy (kWh)",
        "Value": "0",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "24",
        "Function": "Instantaneous value",
        "StorageNumber": "1",
        "Unit": "Volume (1e-2  m^3)",
        "Value": "0",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "25",
        "Function": "Value during error state",
        "StorageNumber": "1",
        "Unit": "On time (hours)",
        "Value": "6423",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "26",
        "Function": "Instantaneous value",
        "StorageNumber": "1",
        "Unit": "Operating time (hours)",
        "Value": "0",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "27",
        "Function": "Instantaneous value",
        "StorageNumber": "1",
        "Tariff": "5",
        "Device": "0",
        "Unit": "Energy (kWh)",
        "Value": "0",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "28",
        "Function": "Maximum value",
        "StorageNumber": "1",
        "Tariff": "1",
        "Device": "0",
        "Unit": "Power (100 W)",
        "Value": "0",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "29",
        "Function": "Maximum value",
        "StorageNumber": "1",
        "Tariff": "1",
        "Device": "0",
        "Unit": "Volume flow (m m^3/h)",
        "Value": "0",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "30",
        "Function": "Maximum value",
        "StorageNumber": "1",
        "Tariff": "1",
        "Device": "0",
        "Unit": "Flow temperature (1e-1 deg C)",
        "Value": "282",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "31",
        "Function": "Maximum value",
        "StorageNumber": "1",
        "Tariff": "1",
        "Device": "0",
        "Unit": "Return temperature (1e-1 deg C)",
        "Value": "485",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "32",
        "Function": "Instantaneous value",
        "StorageNumber": "510",
        "Tariff": "0",
        "Device": "0",
        "Unit": "Time Point (time & date)",
        "Value": "2127-01-01T00:00:00",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "33",
        "Function": "Instantaneous value",
        "StorageNumber": "0",
        "Unit": "Time Point (time & date)",
        "Value": "2022-10-11T00:11:00",
        "Timestamp": "2022-10-10T23:05:32Z"
      },
      {
        "id": "34",
        "Function": "Manufacturer specific",
        "Value": "19 07 00 62 01",
        "Timestamp": "2022-10-10T23:05:32Z"
      }
    ]
  }
}

 

Lenke til kommentar
Del på andre sider

Informasjonen som du finner her vil du ha stor nytte av:

https://www.home-assistant.io/docs/mqtt/discovery/

HA er kresen på hvordan du setter sammen discovery topic:

<discovery_prefix>/<component>/[<node_id>/]<object_id>/config

Standard er "homeassistant/<component>/<object_id>/config
component kan f.eks være "sensor", "binary_sendor" osv.

 

Viktig (sitat):

"The <node_id> level can be used by clients to only subscribe to their own (command) topics by using one wildcard topic like <discovery_prefix>/+/<node_id>/+/set.

Best practice for entities with a unique_id is to set <object_id> to unique_id and omit the <node_id>."

 

Du kan også ha hjelp i å se på koden her:
https://github.com/iotux/ElWiz/blob/master/elwiz.js

 

Funksjonene hassDevice() // linje 273
og hassAnnounce() // linje 301

 

Funksjonen hassDevice() blir på en måte en "mal" som brukes for alle sensorene. Du må selvfølgelig gjøre dine tilpasninger.

Den delen som er innrykket ekstra: "dev: {}" er lik for alle sensorene. Denne er viktig å ha med når du annonserer hver enkelt sensor (id: #) for å få samlet alle sensorene under "en hatt". Det ser ut som det er "SlaveInformation" som skal inn i "dev: {}". Det må du få inn med nøkler som HA kjenner igjen.

Det er også viktig å sette retain til true for at HA auto discovery skal virke.


Jeg vet ikke om jeg har forklart det tydelig nok her, men du kan forsøke

Endret av iotux
skirveleif
Lenke til kommentar
Del på andre sider

Takk for tida di @iotux! Eg såg litt på det du hadde laga ang. ElWiz som eg og intresserar meg for. @Kim123 ja eg har hatt det til MQTT heile tida, det var enkel sak i node-red.

 

Eg fekk det til i går trur eg, har ikkje gjort slik som du skriv, men lagt kvar enkelt verdi inn som egen sensor: (Har etterpå lagt inn uniqe_id og sånn at det fungerar bedre.)

 

mqtt:
  sensor:
    - name: "Målerstand"
      force_update: true
      state_topic: "Varmtvann"
      unit_of_measurement: "kWh"
      value_template: "{{ value_json.MBusData.DataRecord[2].Value }}"
    - name: "Effekt"
      state_topic: "Varmtvann"
      unit_of_measurement: "W"
      value_template: "{{ (value_json.MBusData.DataRecord[4].Value| int*100) }}"
    - name: "Tur"
      state_topic: "Varmtvann"
      unit_of_measurement: "°C"
      value_template: "{{ (value_json.MBusData.DataRecord[6].Value| float/10) }}"
    - name: "Retur"
      state_topic: "Varmtvann"
      unit_of_measurement: "°C"
      value_template: "{{ (value_json.MBusData.DataRecord[7].Value| float/10) }}"
    - name: "Delta T"
      state_topic: "Varmtvann"
      unit_of_measurement: "°C"
      value_template: "{{ (value_json.MBusData.DataRecord[8].Value| float/10) }}"
    - name: "Målernummer"
      force_update: true
      state_topic: "Varmtvann"
      value_template: "{{ value_json.MBusData.DataRecord[9].Value }}"

 

Som gir dette resultatet når eg viser det i dashbordet. Så sånn sett må eg seie meg godt fornøgd. Læringskurven er bratt, men det er jo kjekt når det går bra :-)

 

305248906_810208140225986_8772449984859695740_n.png

 

Det som irriterar meg no er at HA ikkje viser historikk for sensoren. Det fekk eg opp til å begynne med når eg testa men så forsvann det. Under "History" er det berre tomt...

 

Endret av TurboJens
Lenke til kommentar
Del på andre sider

TurboJens skrev (35 minutter siden):

Det som irriterar meg no er at HA ikkje viser historikk for sensoren. Det fekk eg opp til å begynne med når eg testa men så forsvann det. Under "History" er det berre tomt...

Ja, dette var ikkje så innvikla. Viste seg etter eit lite google søk at nokon hadde opplevd det same og tilfeldigvis med samme browser som eg bruka, Brave der må ein skru av Shields for Home Assistant. Då var det jo fleire ting som begynte å fungere, blandt anna at eg fekk mørkt tema og at historikk begynte å fungere igjen (både den lille på kvar sensor og History sida.

Ny feil følger, kjem eit prefiks på fløde verdien, men nokon gongar virkar det og andre gongar ikkje.. hjelpes.

 

309214838_1483821822121816_8178851309233356089_n.png

Lenke til kommentar
Del på andre sider

Ser ut som en feilmelding fra flowmåleren. Jeg ville ha laget en {%if%} statment på den aktuelle mqtt verdien, slik hvis {%if ‘F’ in sensor.tag%} 0 {%else%} sensor.tag {%endif%}

 

litt krøkkete å skrive på tlf men du skjønner kanskje hva jeg mener. Da vil du ikke få null, men 0 istedenfor

Evt sjekket den aktuelle feilmeldingen. Jeg tipper negativ verdi, at den teller bakover

Lenke til kommentar
Del på andre sider

Kim123 skrev (2 timer siden):

Ser ut som en feilmelding fra flowmåleren. Jeg ville ha laget en {%if%} statment på den aktuelle mqtt verdien, slik hvis {%if ‘F’ in sensor.tag%} 0 {%else%} sensor.tag {%endif%}

 

litt krøkkete å skrive på tlf men du skjønner kanskje hva jeg mener. Da vil du ikke få null, men 0 istedenfor

Evt sjekket den aktuelle feilmeldingen. Jeg tipper negativ verdi, at den teller bakover

Eg fekk faktisk samme feil på målerstand innimellom og, men sette verdiane til float og etter det har det vore i orden. Men då blir alle heiltall presentert med .0 på slutten og det irriterar meg ein del.

Lenke til kommentar
Del på andre sider

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.