Added prototype of panasonic_heatpump

This commit is contained in:
ElVit
2025-01-28 08:45:38 +01:00
parent f4af16f917
commit ac3b0ad86d
6 changed files with 700 additions and 0 deletions
@@ -0,0 +1,129 @@
| Topic | SensorType | CodeGen Part 1 | CodeGen Part 2 |
| ----- | ------------- | ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| 0 | binary_sensor | id(top0).publish_state(getBoolState(getBit7and8(bytes[4]))); | \- platform: template<br>id: top0<br>name: "Heatpump State"<br>lambda: "return {};" |
| 1 | sensor | id(top1).publish_state(getPumpFlow(bytes[169], bytes[170])); | \- platform: template<br>id: top1<br>name: "Pump Flow"<br>unit_of_measurement: l/min<br>lambda: "return {};" |
| 2 | binary_sensor | id(top2).publish_state(getBoolState(getBit1and2(bytes[4]))); | \- platform: template<br>id: top2<br>name: "Force DHW State"<br>lambda: "return {};" |
| 3 | binary_sensor | id(top3).publish_state(getBoolState(getBit1and2(bytes[7]))); | \- platform: template<br>id: top3<br>name: "Quiet Mode Schedule"<br>lambda: "return {};" |
| 4 | text_sensor | id(top4).publish_state(getTextState(OpModeDesc, getOpMode(bytes[6]))); | \- platform: template<br>id: top4<br>name: "Operating Mode State"<br>lambda: "return {};" |
| 5 | sensor | id(top5).publish_state(getIntMinus128(bytes[143]) + getFractional(bytes[118], 0)); | \- platform: template<br>id: top5<br>name: "Main Inlet Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 6 | sensor | id(top6).publish_state(getIntMinus128(bytes[144]) + getFractional(bytes[118], 3)); | \- platform: template<br>id: top6<br>name: "Main Outlet Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 7 | sensor | id(top7).publish_state(getIntMinus128(bytes[153])); | \- platform: template<br>id: top7<br>name: "Main Target Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 8 | sensor | id(top8).publish_state(getIntMinus1(bytes[166])); | \- platform: template<br>id: top8<br>name: "Compressor Freq"<br>unit_of_measurement: Hz<br>lambda: "return {};" |
| 9 | sensor | id(top9).publish_state(getIntMinus128(bytes[42])); | \- platform: template<br>id: top9<br>name: "DHW Target Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 10 | sensor | id(top10).publish_state(getIntMinus128(bytes[141])); | \- platform: template<br>id: top10<br>name: "DHW Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 11 | sensor | id(top11).publish_state(getWord(bytes[182], bytes[183])); | \- platform: template<br>id: top11<br>name: "Operations Hours"<br>unit_of_measurement: h<br>lambda: "return {};" |
| 12 | sensor | id(top12).publish_state(getWord(bytes[179], bytes[180])); | \- platform: template<br>id: top12<br>name: "Operations Counter"<br>lambda: "return {};" |
| 13 | binary_sensor | id(top13).publish_state(getBoolState(getBit1and2(bytes[5]))); | \- platform: template<br>id: top13<br>name: "Main Schedule State"<br>lambda: "return {};" |
| 14 | sensor | id(top14).publish_state(getIntMinus128(bytes[142])); | \- platform: template<br>id: top14<br>name: "Outside Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 15 | sensor | id(top15).publish_state(getPower(bytes[194])); | \- platform: template<br>id: top15<br>name: "Heat Power Production"<br>unit_of_measurement: W<br>lambda: "return {};" |
| 16 | sensor | id(top16).publish_state(getPower(bytes[193])); | \- platform: template<br>id: top16<br>name: "Heat Power Consumption"<br>unit_of_measurement: W<br>lambda: "return {};" |
| 17 | text_sensor | id(top17).publish_state(getTextState(Powerfulmode, getRight3bits(bytes[7]))); | \- platform: template<br>id: top17<br>name: "Powerful Mode Time"<br>lambda: "return {};" |
| 18 | text_sensor | id(top18).publish_state(getTextState(Quietmode, getBit3and4and5(bytes[7]))); | \- platform: template<br>id: top18<br>name: "Quiet Mode Level"<br>lambda: "return {};" |
| 19 | text_sensor | id(top19).publish_state(getTextState(HolidayState, getBit3and4(bytes[5]))); | \- platform: template<br>id: top19<br>name: "Holiday Mode State"<br>lambda: "return {};" |
| 20 | text_sensor | id(top20).publish_state(getTextState(Valve, getBit7and8(bytes[111]))); | \- platform: template<br>id: top20<br>name: "ThreeWay Valve State"<br>lambda: "return {};" |
| 21 | sensor | id(top21).publish_state(getIntMinus128(bytes[158])); | \- platform: template<br>id: top21<br>name: "Outside Pipe Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 22 | sensor | id(top22).publish_state(getIntMinus128(bytes[99])); | \- platform: template<br>id: top22<br>name: "DHW Heat Delta"<br>unit_of_measurement: K<br>lambda: "return {};" |
| 23 | sensor | id(top23).publish_state(getIntMinus128(bytes[84])); | \- platform: template<br>id: top23<br>name: "Heat Delta"<br>unit_of_measurement: K<br>lambda: "return {};" |
| 24 | sensor | id(top24).publish_state(getIntMinus128(bytes[94])); | \- platform: template<br>id: top24<br>name: "Cool Delta"<br>unit_of_measurement: K<br>lambda: "return {};" |
| 25 | sensor | id(top25).publish_state(getIntMinus128(bytes[44])); | \- platform: template<br>id: top25<br>name: "DHW Holiday Shift Temp"<br>unit_of_measurement: K<br>lambda: "return {};" |
| 26 | binary_sensor | id(top26).publish_state(getBoolState(getBit5and6(bytes[111]))); | \- platform: template<br>id: top26<br>name: "Defrosting State"<br>lambda: "return {};" |
| 27 | sensor | id(top27).publish_state(getIntMinus128(bytes[38])); | \- platform: template<br>id: top27<br>name: "Z1 Heat Request Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 28 | sensor | id(top28).publish_state(getIntMinus128(bytes[39])); | \- platform: template<br>id: top28<br>name: "Z1 Cool Request Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 29 | sensor | id(top29).publish_state(getIntMinus128(bytes[75])); | \- platform: template<br>id: top29<br>name: "Z1 Heat Curve Target High Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 30 | sensor | id(top30).publish_state(getIntMinus128(bytes[76])); | \- platform: template<br>id: top30<br>name: "Z1 Heat Curve Target Low Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 31 | sensor | id(top31).publish_state(getIntMinus128(bytes[78])); | \- platform: template<br>id: top31<br>name: "Z1 Heat Curve Outside High Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 32 | sensor | id(top32).publish_state(getIntMinus128(bytes[77])); | \- platform: template<br>id: top32<br>name: "Z1 Heat Curve Outside Low Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 33 | sensor | id(top33).publish_state(getIntMinus128(bytes[156])); | \- platform: template<br>id: top33<br>name: "Room Thermostat Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 34 | sensor | id(top34).publish_state(getIntMinus128(bytes[40])); | \- platform: template<br>id: top34<br>name: "Z2 Heat Request Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 35 | sensor | id(top35).publish_state(getIntMinus128(bytes[41])); | \- platform: template<br>id: top35<br>name: "Z2 Cool Request Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 36 | sensor | id(top36).publish_state(getIntMinus128(bytes[145])); | \- platform: template<br>id: top36<br>name: "Z1 Water Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 37 | sensor | id(top37).publish_state(getIntMinus128(bytes[146])); | \- platform: template<br>id: top37<br>name: "Z2 Water Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 38 | sensor | id(top38).publish_state(getPower(bytes[196])); | \- platform: template<br>id: top38<br>name: "Cool Power Production"<br>unit_of_measurement: W<br>lambda: "return {};" |
| 39 | sensor | id(top39).publish_state(getPower(bytes[195])); | \- platform: template<br>id: top39<br>name: "Cool Power Consumption"<br>unit_of_measurement: W<br>lambda: "return {};" |
| 40 | sensor | id(top40).publish_state(getPower(bytes[198])); | \- platform: template<br>id: top40<br>name: "DHW Power Production"<br>unit_of_measurement: W<br>lambda: "return {};" |
| 41 | sensor | id(top41).publish_state(getPower(bytes[197])); | \- platform: template<br>id: top41<br>name: "DHW Power Consumption"<br>unit_of_measurement: W<br>lambda: "return {};" |
| 42 | sensor | id(top42).publish_state(getIntMinus128(bytes[147])); | \- platform: template<br>id: top42<br>name: "Z1 Water Target Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 43 | sensor | id(top43).publish_state(getIntMinus128(bytes[148])); | \- platform: template<br>id: top43<br>name: "Z2 Water Target Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 44 | text_sensor | id(top44).publish_state(getErrorInfo(bytes[113], bytes[114])); | \- platform: template<br>id: top44<br>name: "Error"<br>lambda: "return {};" |
| 45 | sensor | id(top45).publish_state(getIntMinus128(bytes[43])); | \- platform: template<br>id: top45<br>name: "Room Holiday Shift Temp"<br>unit_of_measurement: K<br>lambda: "return {};" |
| 46 | sensor | id(top46).publish_state(getIntMinus128(bytes[149])); | \- platform: template<br>id: top46<br>name: "Buffer Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 47 | sensor | id(top47).publish_state(getIntMinus128(bytes[150])); | \- platform: template<br>id: top47<br>name: "Solar Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 48 | sensor | id(top48).publish_state(getIntMinus128(bytes[151])); | \- platform: template<br>id: top48<br>name: "Pool Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 49 | sensor | id(top49).publish_state(getIntMinus128(bytes[154])); | \- platform: template<br>id: top49<br>name: "Main Hex Outlet Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 50 | sensor | id(top50).publish_state(getIntMinus128(bytes[155])); | \- platform: template<br>id: top50<br>name: "Discharge Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 51 | sensor | id(top51).publish_state(getIntMinus128(bytes[157])); | \- platform: template<br>id: top51<br>name: "Inside Pipe Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 52 | sensor | id(top52).publish_state(getIntMinus128(bytes[159])); | \- platform: template<br>id: top52<br>name: "Defrost Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 53 | sensor | id(top53).publish_state(getIntMinus128(bytes[160])); | \- platform: template<br>id: top53<br>name: "Eva Outlet Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 54 | sensor | id(top54).publish_state(getIntMinus128(bytes[161])); | \- platform: template<br>id: top54<br>name: "Bypass Outlet Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 55 | sensor | id(top55).publish_state(getIntMinus128(bytes[162])); | \- platform: template<br>id: top55<br>name: "Ipm Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 56 | sensor | id(top56).publish_state(getIntMinus128(bytes[139])); | \- platform: template<br>id: top56<br>name: "Z1 Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 57 | sensor | id(top57).publish_state(getIntMinus128(bytes[140])); | \- platform: template<br>id: top57<br>name: "Z2 Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 58 | text_sensor | id(top58).publish_state(getTextState(BlockedFree, getBit5and6(bytes[9]))); | \- platform: template<br>id: top58<br>name: "DHW Heater State"<br>lambda: "return {};" |
| 59 | text_sensor | id(top59).publish_state(getTextState(BlockedFree, getBit7and8(bytes[9]))); | \- platform: template<br>id: top59<br>name: "Room Heater State"<br>lambda: "return {};" |
| 60 | binary_sensor | id(top60).publish_state(getBoolState(getBit7and8(bytes[112]))); | \- platform: template<br>id: top60<br>name: "Internal Heater State"<br>lambda: "return {};" |
| 61 | binary_sensor | id(top61).publish_state(getBoolState(getBit5and6(bytes[112]))); | \- platform: template<br>id: top61<br>name: "External Heater State"<br>lambda: "return {};" |
| 62 | sensor | id(top62).publish_state(getIntMinus1Times10(bytes[173])); | \- platform: template<br>id: top62<br>name: "Fan1 Motor Speed"<br>unit_of_measurement: r/min<br>lambda: "return {};" |
| 63 | sensor | id(top63).publish_state(getIntMinus1Times10(bytes[174])); | \- platform: template<br>id: top63<br>name: "Fan2 Motor Speed"<br>unit_of_measurement: r/min<br>lambda: "return {};" |
| 64 | sensor | id(top64).publish_state(getIntMinus1Div5(bytes[163])); | \- platform: template<br>id: top64<br>name: "High Pressure"<br>unit_of_measurement: kgf/cm²<br>lambda: "return {};" |
| 65 | sensor | id(top65).publish_state(getIntMinus1Times50(bytes[171])); | \- platform: template<br>id: top65<br>name: "Pump Speed"<br>unit_of_measurement: r/min<br>lambda: "return {};" |
| 66 | sensor | id(top66).publish_state(getIntMinus1Times50(bytes[164])); | \- platform: template<br>id: top66<br>name: "Low Pressure"<br>unit_of_measurement: kgf/cm²<br>lambda: "return {};" |
| 67 | sensor | id(top67).publish_state(getIntMinus1Div5(bytes[165])); | \- platform: template<br>id: top67<br>name: "Compressor Current"<br>unit_of_measurement: A<br>lambda: "return {};" |
| 68 | binary_sensor | id(top68).publish_state(getBoolState(getBit5and6(bytes[5]))); | \- platform: template<br>id: top68<br>name: "Force Heater State"<br>lambda: "return {};" |
| 69 | binary_sensor | id(top69).publish_state(getBoolState(getBit5and6(bytes[117]))); | \- platform: template<br>id: top69<br>name: "Sterilization State"<br>lambda: "return {};" |
| 70 | sensor | id(top70).publish_state(getIntMinus128(bytes[100])); | \- platform: template<br>id: top70<br>name: "Sterilization Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 71 | sensor | id(top71).publish_state(getIntMinus1(bytes[101])); | \- platform: template<br>id: top71<br>name: "Sterilization Max Time"<br>unit_of_measurement: min<br>lambda: "return {};" |
| 72 | sensor | id(top72).publish_state(getIntMinus128(bytes[86])); | \- platform: template<br>id: top72<br>name: "Z1 Cool Curve Target High Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 73 | sensor | id(top73).publish_state(getIntMinus128(bytes[87])); | \- platform: template<br>id: top73<br>name: "Z1 Cool Curve Target Low Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 74 | sensor | id(top74).publish_state(getIntMinus128(bytes[89])); | \- platform: template<br>id: top74<br>name: "Z1 Cool Curve Outside High Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 75 | sensor | id(top75).publish_state(getIntMinus128(bytes[88])); | \- platform: template<br>id: top75<br>name: "Z1 Cool Curve Outside Low Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 76 | text_sensor | id(top76).publish_state(getTextState(HeatCoolModeDesc, getBit7and8(bytes[28]))); | \- platform: template<br>id: top76<br>name: "Heating Mode"<br>lambda: "return {};" |
| 77 | sensor | id(top77).publish_state(getIntMinus128(bytes[83])); | \- platform: template<br>id: top77<br>name: "Heating Off Outdoor Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 78 | sensor | id(top78).publish_state(getIntMinus128(bytes[85])); | \- platform: template<br>id: top78<br>name: "Heater On Outdoor Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 79 | sensor | id(top79).publish_state(getIntMinus128(bytes[95])); | \- platform: template<br>id: top79<br>name: "Heat To Cool Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 80 | sensor | id(top80).publish_state(getIntMinus128(bytes[96])); | \- platform: template<br>id: top80<br>name: "Cool To Heat Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 81 | text_sensor | id(top81).publish_state(getTextState(HeatCoolModeDesc, getBit5and6(bytes[28]))); | \- platform: template<br>id: top81<br>name: "Cooling Mode"<br>lambda: "return {};" |
| 82 | sensor | id(top82).publish_state(getIntMinus128(bytes[79])); | \- platform: template<br>id: top82<br>name: "Z2 Heat Curve Target High Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 83 | sensor | id(top83).publish_state(getIntMinus128(bytes[80])); | \- platform: template<br>id: top83<br>name: "Z2 Heat Curve Target Low Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 84 | sensor | id(top84).publish_state(getIntMinus128(bytes[82])); | \- platform: template<br>id: top84<br>name: "Z2 Heat Curve Outside High Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 85 | sensor | id(top85).publish_state(getIntMinus128(bytes[81])); | \- platform: template<br>id: top85<br>name: "Z2 Heat Curve Outside Low Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 86 | sensor | id(top86).publish_state(getIntMinus128(bytes[90])); | \- platform: template<br>id: top86<br>name: "Z2 Cool Curve Target High Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 87 | sensor | id(top87).publish_state(getIntMinus128(bytes[91])); | \- platform: template<br>id: top87<br>name: "Z2 Cool Curve Target Low Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 88 | sensor | id(top88).publish_state(getIntMinus128(bytes[93])); | \- platform: template<br>id: top88<br>name: "Z2 Cool Curve Outside High Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 89 | sensor | id(top89).publish_state(getIntMinus128(bytes[92])); | \- platform: template<br>id: top89<br>name: "Z2 Cool Curve Outside Low Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 90 | sensor | id(top90).publish_state(getWord(bytes[185], bytes[186])); | \- platform: template<br>id: top90<br>name: "Room Heater Operations Hours"<br>unit_of_measurement: h<br>lambda: "return {};" |
| 91 | sensor | id(top91).publish_state(getWord(bytes[188], bytes[189])); | \- platform: template<br>id: top91<br>name: "DHW Heater Operations Hours"<br>unit_of_measurement: h<br>lambda: "return {};" |
| 92 | text_sensor | id(top92).publish_state(getTextState(ModelNames, getModel(bytes, 129))); | \- platform: template<br>id: top92<br>name: "Heat Pump Model"<br>lambda: "return {};" |
| 93 | sensor | id(top93).publish_state(getIntMinus1(bytes[172])); | \- platform: template<br>id: top93<br>name: "Pump Duty"<br>lambda: "return {};" |
| 94 | text_sensor | id(top94).publish_state(getTextState(ZonesState, getBit1and2(bytes[6]))); | \- platform: template<br>id: top94<br>name: "Zones State"<br>lambda: "return {};" |
| 95 | sensor | id(top95).publish_state(getIntMinus1(bytes[45])); | \- platform: template<br>id: top95<br>name: "Max Pump Duty"<br>lambda: "return {};" |
| 96 | sensor | id(top96).publish_state(getIntMinus1(bytes[104])); | \- platform: template<br>id: top96<br>name: "Heater Delay Time"<br>unit_of_measurement: min<br>lambda: "return {};" |
| 97 | sensor | id(top97).publish_state(getIntMinus128(bytes[105])); | \- platform: template<br>id: top97<br>name: "Heater Start Delta"<br>unit_of_measurement: K<br>lambda: "return {};" |
| 98 | sensor | id(top98).publish_state(getIntMinus128(bytes[106])); | \- platform: template<br>id: top98<br>name: "Heater Stop Delta"<br>unit_of_measurement: K<br>lambda: "return {};" |
| 99 | binary_sensor | id(top99).publish_state(getBoolState(getBit5and6(bytes[24]))); | \- platform: template<br>id: top99<br>name: "Buffer Installed"<br>lambda: "return {};" |
| 100 | binary_sensor | id(top100).publish_state(getBoolState(getBit7and8(bytes[24]))); | \- platform: template<br>id: top100<br>name: "DHW Installed"<br>lambda: "return {};" |
| 101 | text_sensor | id(top101).publish_state(getTextState(SolarModeDesc, getBit3and4(bytes[24]))); | \- platform: template<br>id: top101<br>name: "Solar Mode"<br>lambda: "return {};" |
| 102 | sensor | id(top102).publish_state(getIntMinus128(bytes[61])); | \- platform: template<br>id: top102<br>name: "Solar On Delta"<br>unit_of_measurement: K<br>lambda: "return {};" |
| 103 | sensor | id(top103).publish_state(getIntMinus128(bytes[62])); | \- platform: template<br>id: top103<br>name: "Solar Off Delta"<br>unit_of_measurement: K<br>lambda: "return {};" |
| 104 | sensor | id(top104).publish_state(getIntMinus128(bytes[63])); | \- platform: template<br>id: top104<br>name: "Solar Frost Protection"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 105 | sensor | id(top105).publish_state(getIntMinus128(bytes[64])); | \- platform: template<br>id: top105<br>name: "Solar High Limit"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 106 | text_sensor | id(top106).publish_state(getTextState(PumpFlowRateMode, getBit3and4(bytes[29]))); | \- platform: template<br>id: top106<br>name: "Pump Flowrate Mode"<br>lambda: "return {};" |
| 107 | text_sensor | id(top107).publish_state(getTextState(LiquidType, getBit1(bytes[20]))); | \- platform: template<br>id: top107<br>name: "Liquid Type"<br>lambda: "return {};" |
| 108 | binary_sensor | id(top108).publish_state(getBoolState(getBit3and4(bytes[20]))); | \- platform: template<br>id: top108<br>name: "Alt External Sensor"<br>lambda: "return {};" |
| 109 | binary_sensor | id(top109).publish_state(getBoolState(getBit5and6(bytes[20]))); | \- platform: template<br>id: top109<br>name: "Anti Freeze Mode"<br>lambda: "return {};" |
| 110 | binary_sensor | id(top110).publish_state(getBoolState(getBit7and8(bytes[20]))); | \- platform: template<br>id: top110<br>name: "Optional PCB"<br>lambda: "return {};" |
| 111 | text_sensor | id(top111).publish_state(getTextState(ZonesSensorType, getSecondByte(bytes[22]))); | \- platform: template<br>id: top111<br>name: "Z1 Sensor Settings"<br>lambda: "return {};" |
| 112 | text_sensor | id(top112).publish_state(getTextState(ZonesSensorType, getFirstByte(bytes[22]))); | \- platform: template<br>id: top112<br>name: "Z2 Sensor Settings"<br>lambda: "return {};" |
| 113 | sensor | id(top113).publish_state(getIntMinus128(bytes[59])); | \- platform: template<br>id: top113<br>name: "Buffer Tank Delta"<br>unit_of_measurement: K<br>lambda: "return {};" |
| 114 | text_sensor | id(top114).publish_state(getTextState(ExtPadHeaterType, getBit3and4(bytes[25]))); | \- platform: template<br>id: top114<br>name: "External Pad Heater"<br>lambda: "return {};" |
| 115 | sensor | id(top115).publish_state(getIntMinus1Div50(bytes[125])); | \- platform: template<br>id: top115<br>name: "Water Pressure"<br>unit_of_measurement: bar<br>lambda: "return {};" |
| 116 | sensor | id(top116).publish_state(getIntMinus128(bytes[126])); | \- platform: template<br>id: top116<br>name: "Second Inlet Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 117 | sensor | id(top117).publish_state(getIntMinus128(bytes[127])); | \- platform: template<br>id: top117<br>name: "Economizer Outlet Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 118 | sensor | id(top118).publish_state(getIntMinus128(bytes[128])); | \- platform: template<br>id: top118<br>name: "Second Room Thermostat Temp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 119 | sensor | id(top119).publish_state(getIntMinus128(bytes[65])); | \- platform: template<br>id: top119<br>name: "Bivalent Heating Start Temperature"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 120 | sensor | id(top120).publish_state(getIntMinus128(bytes[66])); | \- platform: template<br>id: top120<br>name: "Bivalent Heating Parallel Adv Starttemp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 121 | sensor | id(top121).publish_state(getIntMinus128(bytes[68])); | \- platform: template<br>id: top121<br>name: "Bivalent Heating Parallel Adv Stoptemp"<br>unit_of_measurement: °C<br>lambda: "return {};" |
| 122 | sensor | id(top122).publish_state(getIntMinus1(bytes[67])); | \- platform: template<br>id: top122<br>name: "Bivalent Heating Parallel Adv Start Delay"<br>unit_of_measurement: min<br>lambda: "return {};" |
| 123 | sensor | id(top123).publish_state(getIntMinus1(bytes[69])); | \- platform: template<br>id: top123<br>name: "Bivalent Heating Parallel Adv Stop Delay"<br>unit_of_measurement: min<br>lambda: "return {};" |
| 124 | text_sensor | id(top124).publish_state(getTextState(Bivalent, getBivalent(bytes[26]))); | \- platform: template<br>id: top124<br>name: "Bivalent Heating Setting"<br>lambda: "return {};" |
| 125 | sensor | id(top125).publish_state(getIntMinus1(bytes[177])); | \- platform: template<br>id: top125<br>name: "2 Zone mixing valve 1 opening"<br>lambda: "return {};" |
| 126 | sensor | id(top126).publish_state(getIntMinus1(bytes[178])); | \- platform: template<br>id: top126<br>name: "2 Zone mixing valve 2 opening"<br>lambda: "return {};" |
+236
View File
@@ -0,0 +1,236 @@
#include "decode.h"
int getBit1(uint8_t input)
{
return (input >> 7);
}
int getBit1and2(uint8_t input)
{
return ((input >> 6) - 1);
}
int getBit3and4(uint8_t input)
{
return (((input >> 4) & 0b11) - 1);
}
int getBit5and6(uint8_t input)
{
return (((input >> 2) & 0b11) - 1);
}
int getBit7and8(uint8_t input)
{
return ((input & 0b11) - 1);
}
int getBit3and4and5(uint8_t input)
{
return (((input >> 3) & 0b111) - 1);
}
int getLeft5bits(uint8_t input)
{
return ((input >> 3) - 1);
}
int getRight3bits(uint8_t input)
{
return ((input & 0b111) - 1);
}
int getIntMinus1(uint8_t input)
{
int value = (int)input - 1;
return value;
}
int getIntMinus128(uint8_t input)
{
int value = (int)input - 128;
return value;
}
float getIntMinus1Div5(uint8_t input)
{
return ((((float)input - 1) / 5), 1);
}
float getIntMinus1Div50(uint8_t input)
{
return ((((float)input - 1) / 50), 2);
}
int getIntMinus1Times10(uint8_t input)
{
int value = (int)input - 1;
return (value * 10);
}
int getIntMinus1Times50(uint8_t input)
{
int value = (int)input - 1;
return (value * 50);
}
int getFirstByte(uint8_t input)
{
return ((input >> 4) - 1);
}
int getSecondByte(uint8_t input)
{
return ((input & 0b1111) - 1);
}
int getWord(uint8_t low, uint8_t hi)
{
return ((hi << 8) + low) - 1;
}
int getUintt16(uint8_t input1, uint8_t input2)
{
uint16_t value = static_cast<uint16_t>((input2 << 8) | input1);
return (value - 1);
}
// TOP15, TOP16, TOP38, TOP39, TOP40, TOP41 //
int getPower(uint8_t input)
{
int value = ((int)input - 1) * 200;
return value;
}
// TOP4 //
int getOpMode(uint8_t input)
{
switch ((int)(input & 0b111111))
{
case 18:
return 0;
case 19:
return 1;
case 25:
return 2;
case 33:
return 3;
case 34:
return 4;
case 35:
return 5;
case 41:
return 6;
case 26:
return 7;
case 42:
return 8;
default:
return -1;
}
}
// TOP124 //
int getBivalent(uint8_t input)
{
switch ((int)input)
{
case 0x55:
return 0;
case 0x56:
return 1;
case 0x57:
return 2;
case 0x58:
return 3;
case 0x59:
return 4;
case 0x5A:
return 5;
default:
return -1;
}
}
// TOP92 //
int getModel(std::vector<uint8_t> &data, uint8_t index)
{
uint8_t model[10] = { data[index], data[index+1], data[index+2], data[index+3], data[index+4], data[index+5], data[index+6], data[index+7], data[index+8], data[index+9] };
int result = -1;
int size = sizeof(KnownModels) / sizeof(KnownModels[0]);
for (unsigned int i = 0 ; i < size; i++)
{
if (memcmp(model, KnownModels[i], 10) == 0)
{
result = i;
break;
}
}
return result;
}
// TOP1 //
// input1 = data[169]
// input2 = data[170]
float getPumpFlow(uint8_t input1, uint8_t input2)
{
int PumpFlow2 = (int)input2;
float PumpFlow1 = (((float)input1 - 1) / 256);
float PumpFlow = PumpFlow2 + PumpFlow1;
return PumpFlow;
}
// TOP5, TOP6 //
float getFractional(uint8_t input, uint8_t shift)
{
float result;
int fractional = (int)((input >> shift) & 0b111) - 1;
result = fractional * 0.25;
return result;
}
// TOP44 //
// errorType = data[113]
// errorNumber = data[114]
std::string getErrorInfo(uint8_t errorType, uint8_t errorNumber)
{
int error_type = (int)(errorType);
int error_number = ((int)(errorNumber)) - 17;
char error_string[10];
switch (error_type)
{
case 177: // B1=F type error
sprintf(error_string, "F%02X", error_number);
break;
case 161: // A1=H type error
sprintf(error_string, "H%02X", error_number);
break;
default:
sprintf(error_string, "No error");
break;
}
return error_string;
}
bool getBoolState(uint8_t input)
{
return input != 0;
}
std::string getTextState(const char **array, int index)
{
int size = atoi(array[0]);
if ((index < 0) || (index >= size))
{
return "UNKNOWN";
}
return array[index + 1];
}
+173
View File
@@ -0,0 +1,173 @@
#pragma once
#include <cstdint>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#define NUMBER_OF_MODELS 51
#define NUMBER_OF_TOPICS 127
#define NUMBER_OF_TOPICS_EXTRA 6
#define NUMBER_OF_OPT_TOPICS 7
#define MAX_TOPIC_LEN 42
int getBit1(uint8_t input);
int getBit1and2(uint8_t input);
int getBit3and4(uint8_t input);
int getBit5and6(uint8_t input);
int getBit7and8(uint8_t input);
int getBit3and4and5(uint8_t input);
int getLeft5bits(uint8_t input);
int getRight3bits(uint8_t input);
int getIntMinus1(uint8_t input);
int getIntMinus128(uint8_t input);
float getIntMinus1Div5(uint8_t input);
float getIntMinus1Div50(uint8_t input);
int getIntMinus1Times10(uint8_t input);
int getIntMinus1Times50(uint8_t input);
int getFirstByte(uint8_t input);
int getSecondByte(uint8_t input);
int getWord(uint8_t hi, uint8_t low);
int getUintt16(uint8_t input1, uint8_t input2);
int getPower(uint8_t input);
int getOpMode(uint8_t input);
int getModel(std::vector<uint8_t> &data, uint8_t index);
int getBivalent(uint8_t input);
float getPumpFlow(uint8_t input1, uint8_t input2);
float getFractional(uint8_t input, uint8_t shift);
std::string getErrorInfo(uint8_t errorType, uint8_t errorNumber);
bool getBoolState(uint8_t input);
std::string getTextState(const char **array, int index);
static const char *DisabledEnabled[] = {"2", "Disabled", "Enabled"};
static const char *BlockedFree[] = {"2", "Blocked", "Free"};
static const char *OffOn[] = {"2", "Off", "On"};
static const char *InactiveActive[] = {"2", "Inactive", "Active"};
static const char *PumpFlowRateMode[] = {"2", "DeltaT", "Max flow"};
static const char *HolidayState[] = {"3", "Off", "Scheduled", "Active"};
static const char *OpModeDesc[] = {"9", "Heat", "Cool", "Auto(heat)", "DHW", "Heat+DHW", "Cool+DHW", "Auto(heat)+DHW", "Auto(cool)", "Auto(cool)+DHW"};
static const char *Powerfulmode[] = {"4", "Off", "30min", "60min", "90min"};
static const char *Quietmode[] = {"4", "Off", "Level 1", "Level 2", "Level 3"};
static const char *Valve[] = {"2", "Room", "DHW"};
static const char *MixingValve[] = {"4", "Off", "Increase","Nothing","Decrease"};
static const char *ZonesState[] = {"3", "Zone1 active", "Zone2 active", "Zone1 and zone2 active"};
static const char *HeatCoolModeDesc[] = {"2", "Comp. Curve", "Direct"};
static const char *SolarModeDesc[] = {"3", "Disabled", "Buffer", "DHW"};
static const char *ZonesSensorType[] = {"4", "Water Temperature", "External Thermostat", "Internal Thermostat", "Thermistor"};
static const char *LiquidType[] = {"2", "Water", "Glycol"};
static const char *ExtPadHeaterType[] = {"3", "Disabled", "Type-A","Type-B"};
static const char *Bivalent[] = {"6", "Off", "Alternativ", "A-Off", "Parallel", "P-Off", "Parallel Advanced"};
static const char *ModelNames[] =
{
"51", //string representation of number of known models (last model number + 1)
"WH-MDC05H3E5", //0
"WH-MDC07H3E5", //1
"IDU:WH-SXC09H3E5, ODU:WH-UX09HE5", //2
"IDU:WH-SDC09H3E8, ODU:WH-UD09HE8", //3
"IDU:WH-SXC09H3E8, ODU:WH-UX09HE8", //4
"IDU:WH-SXC12H9E8, ODU:WH-UX12HE8", //5
"IDU:WH-SXC16H9E8, ODU:WH-UX16HE8", //6
"IDU:WH-SDC05H3E5, ODU:WH-UD05HE5", //7
"IDU:WH-SDC0709J3E5, ODU:WH-UD09JE5", //8
"WH-MDC05J3E5", //9
"WH-MDC09H3E5", //10
"WH-MXC09H3E5", //11
"IDU:WH-ADC0309J3E5, ODU:WH-UD09JE5", //12
"IDU:WH-ADC0916H9E8, ODU:WH-UX12HE8", //13
"IDU:WH-SQC09H3E8, ODU:WH-UQ09HE8", //14
"IDU:WH-SDC09H3E5, ODU:WH-UD09HE5", //15
"IDU:WH-ADC0309H3E5, ODU:WH-UD09HE5", //16
"IDU:WH-ADC0309J3E5, ODU:WH-UD05JE5", //17
"IDU:WH-SDC0709J3E5, ODU:WH-UD07JE5", //18
"IDU:WH-SDC07H3E5-1, ODU:WH-UD07HE5-1", //19
"WH-MDC07J3E5", //20
"WH-MDC09J3E5", //21
"IDU:WH-SDC0305J3E5, ODU:WH-UD05JE5", //22
"WH-MXC09J3E8", //23
"WH-MXC12J9E8", //24
"IDU:WH-ADC1216H6E5, ODU:WH-UD12HE5", //25
"IDU:WH-ADC0309J3E5C, ODU:WH-UD07JE5", //26
"WH-MDC07J3E5", //27
"WH-MDC05J3E5", //28
"IDU:WH-UQ12HE8, ODU:WH-SQC12H9E8", //29
"IDU:WH-SXC12H6E5, ODU:WH-UX12HE5", //30
"WH-MDC09J3E5", //31
"WH-MXC09J3E5", //32
"IDU:WH-ADC1216H6E5C ODU:WH-UD12HE5", //33
"IDU:WH-ADC0509L3E5 ODU:WH-WDG07LE5", //34
"IDU:WH-SXC09H3E8 ODU:WH-UX09HE8", //35
"IDU:WH-ADC0309K3E5AN ODU:WH-UDZ07KE5", //36
"IDU:WH-SDC0309K3E5 ODU:WH-UDZ05KE5", //37
"IDU:WH-SDC0509L3E5 ODU:WH-WDG09LE5", //38
"IDU:WH-SDC12H9E8 ODU:WH-UD12HE8", //39
"IDU:WH-SDC0309K3E5, ODU:WH-UDZ07KE5", //40
"IDU:WH-ADC0916H9E8, ODU:WH-UX16HE8", //41
"IDU:WH-ADC0912H9E8, ODU:WH-UX12HE8", //42
"WH-MXC16J9E8", //43
"WH-MXC12J6E5", //44
"IDU:WH-SQC09H3E8, ODU:WH-UQ09HE8", //45
"IDU:WH-ADC0309K3E5 ODU:WH-UDZ09KE5", //46
"IDU:WH-ADC0916H9E8, ODU:WH-UX12HE8", //47
"IDU:WH-SDC0509L3E5 ODU:WH-WDG07LE5", //48
"IDU:WH-SXC09H3E5, ODU:WH-UX09HE5", //49
"IDU:WH-SXC12H9E8, ODU:WH-UX12HE8", //50
};
// stores the bytes #129 to #138 of known models in the same order as the ModelNames above
static const uint8_t KnownModels[NUMBER_OF_MODELS][10] =
{
0xE2, 0xCF, 0x0B, 0x13, 0x33, 0x32, 0xD1, 0x0C, 0x16, 0x33, //0
0xE2, 0xCF, 0x0B, 0x14, 0x33, 0x42, 0xD1, 0x0B, 0x17, 0x33, //1
0xE2, 0xCF, 0x0D, 0x77, 0x09, 0x12, 0xD0, 0x0B, 0x05, 0x11, //2
0xE2, 0xCF, 0x0C, 0x88, 0x05, 0x12, 0xD0, 0x0B, 0x97, 0x05, //3
0xE2, 0xCF, 0x0D, 0x85, 0x05, 0x12, 0xD0, 0x0C, 0x94, 0x05, //4
0xE2, 0xCF, 0x0D, 0x86, 0x05, 0x12, 0xD0, 0x0C, 0x95, 0x05, //5
0xE2, 0xCF, 0x0D, 0x87, 0x05, 0x12, 0xD0, 0x0C, 0x96, 0x05, //6
0xE2, 0xCE, 0x0D, 0x71, 0x81, 0x72, 0xCE, 0x0C, 0x92, 0x81, //7
0x62, 0xD2, 0x0B, 0x43, 0x54, 0x42, 0xD2, 0x0B, 0x72, 0x66, //8
0xC2, 0xD3, 0x0B, 0x33, 0x65, 0xB2, 0xD3, 0x0B, 0x94, 0x65, //9
0xE2, 0xCF, 0x0B, 0x15, 0x33, 0x42, 0xD1, 0x0B, 0x18, 0x33, //10
0xE2, 0xCF, 0x0B, 0x41, 0x34, 0x82, 0xD1, 0x0B, 0x31, 0x35, //11
0x62, 0xD2, 0x0B, 0x45, 0x54, 0x42, 0xD2, 0x0B, 0x47, 0x55, //12
0xE2, 0xCF, 0x0C, 0x74, 0x09, 0x12, 0xD0, 0x0D, 0x95, 0x05, //13
0xE2, 0xCF, 0x0B, 0x82, 0x05, 0x12, 0xD0, 0x0C, 0x91, 0x05, //14
0xE2, 0xCF, 0x0C, 0x55, 0x14, 0x12, 0xD0, 0x0B, 0x15, 0x08, //15
0xE2, 0xCF, 0x0C, 0x43, 0x00, 0x12, 0xD0, 0x0B, 0x15, 0x08, //16
0x62, 0xD2, 0x0B, 0x45, 0x54, 0x32, 0xD2, 0x0C, 0x45, 0x55, //17
0x62, 0xD2, 0x0B, 0x43, 0x54, 0x42, 0xD2, 0x0C, 0x46, 0x55, //18
0xE2, 0xCF, 0x0C, 0x54, 0x14, 0x12, 0xD0, 0x0B, 0x14, 0x08, //19
0xC2, 0xD3, 0x0B, 0x34, 0x65, 0xB2, 0xD3, 0x0B, 0x95, 0x65, //20
0xC2, 0xD3, 0x0B, 0x35, 0x65, 0xB2, 0xD3, 0x0B, 0x96, 0x65, //21
0x62, 0xD2, 0x0B, 0x41, 0x54, 0x32, 0xD2, 0x0C, 0x45, 0x55, //22
0x32, 0xD4, 0x0B, 0x87, 0x84, 0x73, 0x90, 0x0C, 0x84, 0x84, //23
0x32, 0xD4, 0x0B, 0x88, 0x84, 0x73, 0x90, 0x0C, 0x85, 0x84, //24
0xE2, 0xCF, 0x0B, 0x75, 0x09, 0x12, 0xD0, 0x0C, 0x06, 0x11, //25
0x42, 0xD4, 0x0B, 0x83, 0x71, 0x42, 0xD2, 0x0C, 0x46, 0x55, //26
0xC2, 0xD3, 0x0C, 0x34, 0x65, 0xB2, 0xD3, 0x0B, 0x95, 0x65, //27
0xC2, 0xD3, 0x0C, 0x33, 0x65, 0xB2, 0xD3, 0x0B, 0x94, 0x65, //28
0xE2, 0xCF, 0x0B, 0x83, 0x05, 0x12, 0xD0, 0x0D, 0x92, 0x05, //29
0xE2, 0xCF, 0x0C, 0x78, 0x09, 0x12, 0xD0, 0x0B, 0x06, 0x11, //30
0xC2, 0xD3, 0x0C, 0x35, 0x65, 0xB2, 0xD3, 0x0B, 0x96, 0x65, //31
0x32, 0xD4, 0x0B, 0x99, 0x77, 0x62, 0x90, 0x0B, 0x01, 0x78, //32
0x42, 0xD4, 0x0B, 0x15, 0x76, 0x12, 0xD0, 0x0B, 0x10, 0x11, //33
0xE2, 0xD5, 0x0C, 0x29, 0x99, 0x83, 0x92, 0x0C, 0x28, 0x98, //34
0xE2, 0xCF, 0x0D, 0x85, 0x05, 0x12, 0xD0, 0x0E, 0x94, 0x05, //35
0xE2, 0xD5, 0x0D, 0x36, 0x99, 0x02, 0xD6, 0x0F, 0x67, 0x95, //36
0xE2, 0xD5, 0x0B, 0x08, 0x95, 0x02, 0xD6, 0x0E, 0x66, 0x95, //37
0xE2, 0xD5, 0x0B, 0x34, 0x99, 0x83, 0x92, 0x0C, 0x29, 0x98, //38
0xE2, 0xCF, 0x0C, 0x89, 0x05, 0x12, 0xD0, 0x0C, 0x98, 0x05, //39
0xE2, 0xD5, 0x0B, 0x08, 0x95, 0x02, 0xD6, 0x0E, 0x67, 0x95, //40
0xE2, 0xCF, 0x0C, 0x74, 0x09, 0x12, 0xD0, 0x0C, 0x96, 0x05, //41
0xE2, 0xCF, 0x0C, 0x74, 0x09, 0x12, 0xD0, 0x0E, 0x95, 0x05, //42
0x32, 0xD4, 0x0B, 0x89, 0x84, 0x73, 0x90, 0x0C, 0x86, 0x84, //43
0x32, 0xD4, 0x0B, 0x00, 0x78, 0x62, 0x90, 0x0B, 0x02, 0x78, //44
0xE2, 0xCF, 0x0B, 0x82, 0x05, 0x12, 0xD0, 0x0D, 0x91, 0x05, //45
0xE2, 0xD5, 0x0D, 0x99, 0x94, 0x02, 0xD6, 0x0D, 0x68, 0x95, //46
0xE2, 0xCF, 0x0C, 0x74, 0x09, 0x12, 0xD0, 0x0C, 0x95, 0x05, //47
0xE2, 0xD5, 0x0B, 0x34, 0x99, 0x83, 0x92, 0x0C, 0x28, 0x98, //48
0xE2, 0xCF, 0x0D, 0x77, 0x09, 0x12, 0xD0, 0x0C, 0x05, 0x11, //49
0xE2, 0xCF, 0x0D, 0x86, 0x05, 0x12, 0xD0, 0x0E, 0x95, 0x05, //50
};
Binary file not shown.
@@ -0,0 +1,162 @@
substitutions:
mdns_name: panasonic-heatpump
device_name: Panasonic Heatpump
device_description: Reads/Controls your Panasonic Aquarea Heatpump over UART
pin_rx_hp: GPIO4 # heatpump reads data (RX) on this pin (green)
pin_tx_hp: GPIO3 # heatpump sends data (TX) on this pin (yellow)
pin_tx_cz: GPIO1 # WiFi module sends data (TX) on this pin (blue)
pin_rx_cz: GPIO0 # WiFi module reads data (RX) on this pin (white)
# CN-CNT Pinout (from top to bottom)
# 1 - +5V (250mA)
# 2 - 0-5V TX (from heatpump)
# 3 - 0-5V RX (to heatpump)
# 4 - +12V (250mA)
# 5 - GND
esp32:
board: esp32-c3-devkitm-1
variant: ESP32C3
framework:
type: arduino
esphome:
name: $mdns_name
friendly_name: $device_name
comment: $device_description
includes:
- prototypes/panasonic_heatpump/decode.h
- prototypes/panasonic_heatpump/decode.cpp
ota:
platform: esphome
password: !secret ota_password
id: ota_pass
api:
encryption:
key: !secret ha_api_key
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "${device_name} Fallback"
password: !secret fallback_password
web_server:
port: 80
auth:
username: !secret webserver_username
password: !secret webserver_password
captive_portal:
improv_serial:
logger:
level: DEBUG
uart:
- id: uart_hp
# switch rx and tx to read what the heatpump is sending
tx_pin: $pin_rx_hp
rx_pin: $pin_tx_hp
baud_rate: 9600
data_bits: 8
parity: EVEN
stop_bits: 1
debug:
direction: RX
dummy_receiver: true # needed if no uart component is available
after:
bytes: 203
sequence:
- lambda: |-
ESP_LOGD("custom", "Heatpump:");
UARTDebug::log_hex(direction, bytes, ',');
if (bytes.size() == 203)
{
id(top0).publish_state(getBoolState(getBit7and8(bytes[4])));
id(top1).publish_state(getPumpFlow(bytes[169], bytes[170]));
id(top2).publish_state(getBoolState(getBit1and2(bytes[4])));
id(top3).publish_state(getBoolState(getBit1and2(bytes[7])));
id(top4).publish_state(getTextState(OpModeDesc, getOpMode(bytes[6])));
// ...
// (for more topics see heishamon_decode.xlsx or code-gen-result.md)
}
- uart.write: # Write rx to tx.
id: uart_cz
data: !lambda return bytes;
- id: uart_cz
# switch rx and tx to read what the WiFi module is sending
tx_pin: $pin_rx_cz
rx_pin: $pin_tx_cz
baud_rate: 9600
data_bits: 8
parity: EVEN
stop_bits: 1
debug:
direction: RX
dummy_receiver: true # needed if no uart component is available
after:
bytes: 111
sequence:
- lambda: |-
ESP_LOGD("custom", "CZ-TAW1:");
UARTDebug::log_hex(direction, bytes, ',');
- uart.write: # Write rx to tx.
id: uart_hp
data: !lambda return bytes;
sensor:
- platform: wifi_signal
name: WiFi Signal
- platform: template
id: top1
name: "Pump Flow"
unit_of_measurement: l/min
lambda: "return {};"
# ...
# (for more topics see heishamon_decode.xlsx or code-gen-result.md)
text_sensor:
- platform: version
hide_timestamp: true
name: ESPHome Version
- platform: wifi_info
ip_address:
name: IP Addresse
icon: mdi:ip
- platform: template
id: top4
name: "Operating Mode State"
lambda: "return {};"
# ...
# (for more topics see heishamon_decode.xlsx or code-gen-result.md)
binary_sensor:
- platform: status
name: Status
- platform: template
id: top0
name: "Heatpump State"
lambda: "return {};"
- platform: template
id: top2
name: "Force DHW State"
lambda: "return {};"
- platform: template
id: top3
name: "Quiet Mode Schedule"
lambda: "return {};"
# ...
# (for more topics see heishamon_decode.xlsx or code-gen-result.md)
button:
- platform: restart
name: Restart
Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB