Het MHI L/L warmtepomp/airco topic

Pagina: 1 ... 6 ... 38 Laatste
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • JoepW
  • Registratie: Juli 2007
  • Laatst online: 13:34

JoepW

iRacer & Home Assistant

Chatslet schreef op vrijdag 6 oktober 2023 @ 00:38:
[...]


Zijn alle binnenunits van hetzelfde type? Bij sommige binnen units moet je onderstaande waarde iets ophogen:

#define NoFramesPerOpDataCycle 400
De unit met ‘problemen’ is een afwijkende staande unit van het type ‘SRF25ZS-W’.
Waar kan ik de door jou genoemde waarde instellen?

iRacing Profiel -|- Mijn RaceRig -|- Mijn stream


Acties:
  • +1 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
@JoepW bij MHI-AC-CTRL staat dat in MHI-AC-Ctrl-core.h of dat ook zo is bij de ESPhome versie weet ik niet. Kwestie van zoeken.

Acties:
  • 0 Henk 'm!

  • JoepW
  • Registratie: Juli 2007
  • Laatst online: 13:34

JoepW

iRacer & Home Assistant

Chatslet schreef op vrijdag 6 oktober 2023 @ 08:06:
@JoepW bij MHI-AC-CTRL staat dat in MHI-AC-Ctrl-core.h of dat ook zo is bij de ESPhome versie weet ik niet. Kwestie van zoeken.
Dat zal wel lukken dat zoeken (y)
Heb je enig idee welke waarde ik zou moeten proberen?
En een vraag door groot gebrek aan kennis op dit gebied: Kan ik schade veroorzaken met een veel te lage of hoge waarde?

iRacing Profiel -|- Mijn RaceRig -|- Mijn stream


Acties:
  • +1 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
@JoepW Die 400 staat voor het aantal frames dat er op de airco wordt gewacht om data te verwerken. 20 frames duurt 1 seconde dus die 400 staat voor 20 seconden. Ik zou zeggen hoog eens met 20 seconden op en kijk eens wat er gebeurt. Als het dan werkt zou je het in stapjes kunnen verlagen totdat je op het punt zit dat het nog net werkt. Schade kun je er verder niet mee doen. Het is gewoon een time-out.

Edit: Je hebt niet toevallig problemen met wifi daar? https://github.com/absalom-muc/MHI-AC-Ctrl/issues/144

[ Voor 12% gewijzigd door Chatslet op 06-10-2023 09:30 ]


Acties:
  • 0 Henk 'm!

  • JoepW
  • Registratie: Juli 2007
  • Laatst online: 13:34

JoepW

iRacer & Home Assistant

Dat zeker niet. Ik heb een zeer goed dekkend wifi netwerk (ook op de locatie van deze unit) met door het hele huis wired access points.
Chatslet schreef op vrijdag 6 oktober 2023 @ 09:13:
@JoepW Die 400 staat voor het aantal frames dat er op de airco wordt gewacht om data te verwerken. 20 frames duurt 1 seconde dus die 400 staat voor 20 seconden. Ik zou zeggen hoog eens met 20 seconden op en kijk eens wat er gebeurt. Als het dan werkt zou je het in stapjes kunnen verlagen totdat je op het punt zit dat het nog net werkt. Schade kun je er verder niet mee doen. Het is gewoon een time-out.
Ik heb net de waarde 800 geprobeerd.
Effect is nog steeds af en toe "[W] [mhi_ac_ctrl:145] mhi_ac_ctrl_core.loop error: -2" en nu ook af en toe "[W] [mhi_ac_ctrl:145] mhi_ac_ctrl_core.loop error: -1"

Zie daar dus geen echte verbetering.

Wel reageert de unit met vertraging op input vanuit de web interface.

Ik moet nu op pad. Vanmiddag ga ik wat verder testen.

(Ik zal ook eens de module herpositioneren in de airco)

iRacing Profiel -|- Mijn RaceRig -|- Mijn stream


Acties:
  • 0 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
@JoepW Probeer ook eens module plus kabel te wisselen met een unit waar het wel werkt. Dan kun je in ieder geval hardware problemen uitsluiten.

Acties:
  • 0 Henk 'm!

  • jobr
  • Registratie: Januari 2009
  • Laatst online: 18-05 18:57
JoepW schreef op vrijdag 6 oktober 2023 @ 09:53:
Ik heb net de waarde 800 geprobeerd.
Dat is zinloos. Die waarde aanpassen gaat het niet oplossen. Mooi op de standaard waarde laten staan.
Probeer ook eens alleen de esp te verwisselen met degene die deze fouten niet geeft. Zal ook wel niet helpen maar wie weet.

Acties:
  • 0 Henk 'm!

  • jobr
  • Registratie: Januari 2009
  • Laatst online: 18-05 18:57
Chatslet schreef op vrijdag 6 oktober 2023 @ 00:38:
Bij sommige binnen units moet je onderstaande waarde iets ophogen:

#define NoFramesPerOpDataCycle 400
Gaat checksum fouten niet oplossen

Acties:
  • 0 Henk 'm!

  • JoepW
  • Registratie: Juli 2007
  • Laatst online: 13:34

JoepW

iRacer & Home Assistant

jobr schreef op vrijdag 6 oktober 2023 @ 16:08:
[...]


Dat is zinloos. Die waarde aanpassen gaat het niet oplossen. Mooi op de standaard waarde laten staan.
Probeer ook eens alleen de esp te verwisselen met degene die deze fouten niet geeft. Zal ook wel niet helpen maar wie weet.
Je hebt idd gelijk.
En een foutloze module (van een hangende airco) in staande unit geeft dezelfde foutmelding.
Dus…. Het ligt dus aan de unit.

iRacing Profiel -|- Mijn RaceRig -|- Mijn stream


Acties:
  • 0 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
JoepW schreef op vrijdag 6 oktober 2023 @ 17:25:
[...]

Je hebt idd gelijk.
En een foutloze module (van een hangende airco) in staande unit geeft dezelfde foutmelding.
Dus…. Het ligt dus aan de unit.
Ik heb sinds een aantal dagen de SRF35ZS-W, kan je samenvatten welk probleem je tegenaan loopt? Dan kan ik het hier checken.

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • 0 Henk 'm!

  • JoepW
  • Registratie: Juli 2007
  • Laatst online: 13:34

JoepW

iRacer & Home Assistant

@Taro Deze post geeft het probleem aan met de nieuwe fw en geeft ook een foutmelding weer die ik altijd al heb met deze unit met de ‘oudere fw’s: JoepW in "Het MHI L/L warmtepomp/airco topic"

iRacing Profiel -|- Mijn RaceRig -|- Mijn stream


Acties:
  • 0 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
JoepW schreef op vrijdag 6 oktober 2023 @ 21:59:
@Taro Deze post geeft het probleem aan met de nieuwe fw en geeft ook een foutmelding weer die ik altijd al heb met deze unit met de ‘oudere fw’s: JoepW in "Het MHI L/L warmtepomp/airco topic"
Ok, ik ben op dit moment bezig een HA OS versie te installeren ipv de HA Docker versie, met als doel de Esphome firmware & MHI_AC_CTRL naar de nieuwste versie te kunnen updaten, maar met de huidige versie werkt aansturen via HA prima op de SRF35ZS-W:
Afbeeldingslocatie: https://tweakers.net/i/5edVSjs7hQG3c6uwWMH_NZtz1Vw=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/DHTz64I2U547ux4nIefEmv75.png?f=user_large

De buitenunit gaat aan en de binnenunit gaat ook aan de slag.

Helaas is de webinterface gedisabled sinds ik ze aan HA heb gekoppeld, dus kan nu lastig iets aanpassen, maar hopelijk morgen wel.

Huidige versie:
ESPHome: 2023.4.4 Sep 1 2023
MHI_AC_CTRL: Versie van 01-09-2023

Ik heb daarnaast 3x SRK20ZS-W2,0 die prima werken, maar een SRK60ZSX-W6,0 in de woonkamer die steeds errorcode 1 (=True of code 1?) geeft:
Afbeeldingslocatie: https://tweakers.net/i/bXVx0fXsc3Syw-YZiRbd8vEhsec=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/1yaIe7CCa02d5MxmdOqTS3bP.png?f=user_large

Enig idee wat dat kan zijn? Ben dus nu bezig met HA OS, dan kan ik ook ESPHome en firmware updaten, mogelijk lost dat het al op.

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • 0 Henk 'm!

  • JoepW
  • Registratie: Juli 2007
  • Laatst online: 13:34

JoepW

iRacer & Home Assistant

Taro schreef op vrijdag 6 oktober 2023 @ 22:21:
[...]

Ok, ik ben op dit moment bezig een HA OS versie te installeren ipv de HA Docker versie, met als doel de Esphome firmware & MHI_AC_CTRL naar de nieuwste versie te kunnen updaten, maar met de huidige versie werkt aansturen via HA prima op de SRF35ZS-W:
[Afbeelding]

De buitenunit gaat aan en de binnenunit gaat ook aan de slag.

Helaas is de webinterface gedisabled sinds ik ze aan HA heb gekoppeld, dus kan nu lastig iets aanpassen, maar hopelijk morgen wel.

Huidige versie:
ESPHome: 2023.4.4 Sep 1 2023
MHI_AC_CTRL: Versie van 01-09-2023

Ik heb daarnaast 3x SRK20ZS-W2,0 die prima werken, maar een SRK60ZSX-W6,0 in de woonkamer die steeds errorcode 1 (=True of code 1?) geeft:
[Afbeelding]

Enig idee wat dat kan zijn? Ben dus nu bezig met HA OS, dan kan ik ook ESPHome en firmware updaten, mogelijk lost dat het al op.
Bij mij werken alle airco’s prima en ik stuur ze al ruim een jaar aan via HA tbv koelen en verwarmen.
Enige is die error (iets met timing) met het staande model. Maar ook die werkt prima met FW release zonder de l/r aanpassing.
Dus voor mij is op dit moment conclusie qua versies:
- De l/r versie op de 3 hangende units
- De versie zonder l/r op de staande unit, en daar die timing error accepteren.

iRacing Profiel -|- Mijn RaceRig -|- Mijn stream


Acties:
  • 0 Henk 'm!

  • LinuZZ
  • Registratie: Januari 2004
  • Laatst online: 18-07 05:53
Taro schreef op vrijdag 6 oktober 2023 @ 22:21:
[...]

Ok, ik ben op dit moment bezig een HA OS versie te installeren ipv de HA Docker versie, met als doel de Esphome firmware & MHI_AC_CTRL naar de nieuwste versie te kunnen updaten, maar met de huidige versie werkt aansturen via HA prima op de SRF35ZS-W:
[Afbeelding]

De buitenunit gaat aan en de binnenunit gaat ook aan de slag.

Helaas is de webinterface gedisabled sinds ik ze aan HA heb gekoppeld, dus kan nu lastig iets aanpassen, maar hopelijk morgen wel.
web_server:
port: 80

Toevoegen aan je esphome yaml file zou dit moeten fixen
Huidige versie:
ESPHome: 2023.4.4 Sep 1 2023
MHI_AC_CTRL: Versie van 01-09-2023

Ik heb daarnaast 3x SRK20ZS-W2,0 die prima werken, maar een SRK60ZSX-W6,0 in de woonkamer die steeds errorcode 1 (=True of code 1?) geeft:
[Afbeelding]

Enig idee wat dat kan zijn? Ben dus nu bezig met HA OS, dan kan ik ook ESPHome en firmware updaten, mogelijk lost dat het al op.
4 maanden geleden heb ik Protection error state toegevoegd die een text sensor toevoegt aan de esphome versie, daar krijg je een text waarde van de foutmelding. Ik denk dat je error "Discharge pipe temperature protection control" is, als de foutmelding daadwerkelijk 1 is. Wat je hier verder mee kan weet ik dan weer niet, maar je zou de grafieken van de temperaturen kunnen vergelijken met je andere units om te zien of daar iets vreemds aan de hand is.

enphase 8300wp (3460 ZO, 2740 ZW, 2100 NO), 2x20 vacuümbuizen op 300l SWW, Panasonic WH-MXC12J9E8, gasloos sinds Juni 2022 Stromer st3 voor woon-werk


Acties:
  • 0 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
LinuZZ schreef op zaterdag 7 oktober 2023 @ 05:10:
[...]


web_server:
port: 80

Toevoegen aan je esphome yaml file zou dit moeten fixen
Klopt, maar ik kan er op het moment nog niet bij, tenzij ik ze fysiek aansluit :)
4 maanden geleden heb ik Protection error state toegevoegd die een text sensor toevoegt aan de esphome versie, daar krijg je een text waarde van de foutmelding. Ik denk dat je error "Discharge pipe temperature protection control" is, als de foutmelding daadwerkelijk 1 is. Wat je hier verder mee kan weet ik dan weer niet, maar je zou de grafieken van de temperaturen kunnen vergelijken met je andere units om te zien of daar iets vreemds aan de hand is.
Ik heb ze allemaal pas sinds woensdagmiddag hangen en nog niet in gebruik, dus vergelijken lukt nog niet. Op 8 november komt Liander langs voor een meterkast verzwaring, dan krijgen ze allemaal een eigen aansluiting in de meterkast, nu liggen er als tijdelijke oplossing 3 losse stekkers in de garage die ik kan rouleren :) En het is nog niet nodig geweest te koelen of verwarmen.

Vandaag kom ik hopelijk weer een stapje verder, maar ik zie dat de HA import nog steeds bezig is, dus maar even wat anders proberen.

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • 0 Henk 'm!

  • Willempie27
  • Registratie: Augustus 2017
  • Laatst online: 11:40
@Taro Is er niet daadwerkelijk een error? Knippert het lampje op de unit?

Acties:
  • 0 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
Willempie27 schreef op zaterdag 7 oktober 2023 @ 09:20:
@Taro Is er niet daadwerkelijk een error? Knippert het lampje op de unit?
De unit gaat uit, geen knipperende lampjes. Vermoed dat de unit zelf in orde is, maar dat er met de custom module wat aan de hand is.

Maar ik sta nog in de debug stand, HA OS import inmiddels bezig, zal als hopelijk later vandaag alles van een update is voorzien even de balans opmaken en delen.

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • 0 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
Vandaag een ESPHome update doorgevoerd en nu zijn de states/sensors leeg bij 1 van de units, daarom nog niet bij de anderen doorgevoerd, enig idee?
Afbeeldingslocatie: https://tweakers.net/i/3AXvypLWL9k0tVrl5v8vMvdadL4=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/G7OV3ZBRIqN1GCDf4H4hO6c5.png?f=user_large

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • 0 Henk 'm!

  • LinuZZ
  • Registratie: Januari 2004
  • Laatst online: 18-07 05:53
Taro schreef op zaterdag 7 oktober 2023 @ 19:41:
Vandaag een ESPHome update doorgevoerd en nu zijn de states/sensors leeg bij 1 van de units, daarom nog niet bij de anderen doorgevoerd, enig idee?
[Afbeelding]
Kun je de esphome yaml file delen? Eventueel samen met de inhoud van de mhi-ac-ctrl.h file

enphase 8300wp (3460 ZO, 2740 ZW, 2100 NO), 2x20 vacuümbuizen op 300l SWW, Panasonic WH-MXC12J9E8, gasloos sinds Juni 2022 Stromer st3 voor woon-werk


Acties:
  • 0 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
LinuZZ schreef op zaterdag 7 oktober 2023 @ 20:03:
[...]


Kun je de esphome yaml file delen? Eventueel samen met de inhoud van de mhi-ac-ctrl.h file
De yaml voor deze unit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
## Code from https://github.com/ginkage/MHI-AC-Ctrl-ESPHome/blob/master/lr_mhi_ac_ctrl.yaml @ 01-09-2023
## Small modifications done:
  # Added webserver, fallback password and captive portal


substitutions:
  # Unique device ID in HA
  deviceid: "mhi_woonkamer"
  # Unique device name in HA (sensor names will be prefixed by this name)
  devicename: "MHI Woonkamer"

esphome:
  name: "mhi-woonkamer"
  platform: ESP8266
  board: d1_mini
  platformio_options:
    # Run CPU at 160Mhz to fix mhi_ac_ctrl_core.loop error: -2
    board_build.f_cpu: 160000000L
  includes:
    - mhi_ac_ctrl.h
    - MHI-AC-Ctrl-core.h
    - MHI-AC-Ctrl-core.cpp

wifi:
  ssid: !secret wifi_ssid_iot
  password: !secret wifi_password_iot
  fast_connect: on   
  
# WiFi fallback hotspot configuration when configured WiFi network is not available
  ap:
    ssid: "${devicename} - Fallback AP"
    # password: ""

# Enable Web server
web_server:
  port: 80


# Enable captive portal functionality in fallback hotspot mode 
captive_portal:

logger:
  level: DEBUG
  baud_rate: 0

globals:
  - id: room_temp_api_timeout
    type: int
    restore_value: no
    initial_value: '120'

ota:

climate:
  - platform: custom
    lambda: |-
      auto mhi_ac_ctrl = new MhiAcCtrl();
      App.register_component(mhi_ac_ctrl);
      return {mhi_ac_ctrl};

    climates:
      - name: "${devicename}"
        id: ${deviceid}

api:
  reboot_timeout: 0s
  services:
    # Call the set_api_room_temperature service from HA to override the room temperature
    # If a new value has not been received after room_temp_api_timeout seconds, it will fall back to internal sensor
    - service: set_api_room_temperature
      variables:
        value: float
      then:
        - lambda: |-
            return ((MhiAcCtrl*)id(${deviceid}))->set_room_temperature(value);
    # Call the set_vanes service from HA to set the vane position
    # Needed because the ESPHome Climate class does not support this natively
    # Possible values: 1-4: static positions, 5: swing, 0: unknown
    - service: set_vanes
      variables:
        value: int
      then:
        - lambda: |-
            return ((MhiAcCtrl*)id(${deviceid}))->set_vanes(value);

sensor:
  - platform: uptime
    name: ${devicename} Uptime
  - platform: wifi_signal
    name: ${devicename} WiFi Signal
    update_interval: 60s
  - platform: custom
    lambda: |-
      return ((MhiAcCtrl*)id(${deviceid}))->get_sensors();

    # Sensor names in HA, you can change these if you want
    # Don't delete them or change their position in the list
    sensors:
      - name: ${devicename} error code
      - name: ${devicename} outdoor temperature
      - name: ${devicename} return air temperature
      - name: ${devicename} outdoor unit fan speed
      - name: ${devicename} indoor unit fan speed
      - name: ${devicename} current power
        device_class: "current"
        state_class: "measurement"
      - name: ${devicename} compressor frequency
      - name: ${devicename} indoor unit total run time
      - name: ${devicename} compressor total run time
      - name: ${devicename} vanes
      - name: ${devicename} energy used
      - name: ${devicename} Indoor (U-bend) HE temp 1
      - name: ${devicename} Indoor (capillary) HE temp 2
      - name: ${devicename} Indoor (suction header) HE temp 3
      - name: ${devicename} Outdoor HE temp
      - name: ${devicename} Outdoor unit exp. valve
      - name: ${devicename} Outdoor unit discharge pipe
      - name: ${devicename} Outdoor unit discharge pipe super heat
      - name: ${devicename} Protection error state

binary_sensor:
  - platform: custom
    lambda: |-
      return ((MhiAcCtrl*)id(${deviceid}))->get_binary_sensors();

    binary_sensors:
      - name: ${devicename} defrost

text_sensor:
  - platform: version
    name: ${devicename} ESPHome Version
  - platform: wifi_info
    ip_address:
      name: ${devicename} IP
    ssid:
      name: ${devicename} SSID
    bssid:
      name: ${devicename} BSSID



En mhi-ac-ctrl.h:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
#include "MHI-AC-Ctrl-core.h"
#define ROOM_TEMP_MQTT 1
#include <vector>
#include <string>

static const std::vector<std::string> protection_states = {
    "Normal",
    "Discharge pipe temperature protection control",
    "Discharge pipe temperature anomaly",
    "Current safe control of inverter primary current",
    "High pressure protection control",
    "High pressure anomaly",
    "Low pressure protection control",
    "Low pressure anomaly",
    "Anti-frost prevention control",
    "Current cut",
    "Power transistor protection control",
    "Power transistor anomaly (Overheat)",
    "Compression ratio control",
    "-",
    "Condensation prevention control",
    "Current safe control of inverter secondary current",
    "Stop by compressor rotor lock",
    "Stop by compressor startup failure"
};

static const char* TAG = "mhi_ac_ctrl";

unsigned long room_temp_api_timeout_ms = millis();

class MhiAcCtrl : public climate::Climate,
                  public Component,
                  public CallbackInterface_Status {
public:
    void setup() override
    {
        this->power_ = power_off;
        this->current_temperature = NAN;
        // restore set points
        auto restore = this->restore_state_();
        if (restore.has_value()) {
            restore->apply(this);
        } else {
            // restore from defaults
            this->mode = climate::CLIMATE_MODE_OFF;
            // initialize target temperature to some value so that it's not NAN
            this->target_temperature = roundf(clamp(
                this->current_temperature, this->minimum_temperature_, this->maximum_temperature_));
            this->fan_mode = climate::CLIMATE_FAN_AUTO;
            this->swing_mode = climate::CLIMATE_SWING_OFF;
        }
        // Never send nan to HA
        if (isnan(this->target_temperature))
            this->target_temperature = 20;

        error_code_.set_icon("mdi:alert-circle");

        outdoor_temperature_.set_icon("mdi:thermometer");
        outdoor_temperature_.set_unit_of_measurement("°C");
        outdoor_temperature_.set_accuracy_decimals(2);

        return_air_temperature_.set_icon("mdi:thermometer");
        return_air_temperature_.set_unit_of_measurement("°C");
        return_air_temperature_.set_accuracy_decimals(2);

        outdoor_unit_fan_speed_.set_icon("mdi:fan");

        indoor_unit_fan_speed_.set_icon("mdi:fan");

        compressor_frequency_.set_icon("mdi:sine-wave");
        compressor_frequency_.set_unit_of_measurement("Hz");
        compressor_frequency_.set_accuracy_decimals(1);

        indoor_unit_total_run_time_.set_icon("mdi:clock");
        indoor_unit_total_run_time_.set_unit_of_measurement("h");

        compressor_total_run_time_.set_icon("mdi:clock");
        compressor_total_run_time_.set_unit_of_measurement("h");

        current_power_.set_icon("mdi:current-ac");
        current_power_.set_unit_of_measurement("A");
        current_power_.set_accuracy_decimals(2);

        defrost_.set_icon("mdi:snowflake-melt");

        vanes_pos_.set_icon("mdi:air-filter");

        indoor_unit_thi_r1_.set_icon("mdi:thermometer");
        indoor_unit_thi_r1_.set_unit_of_measurement("°C");
        indoor_unit_thi_r1_.set_accuracy_decimals(2);

        indoor_unit_thi_r2_.set_icon("mdi:thermometer");
        indoor_unit_thi_r2_.set_unit_of_measurement("°C");
        indoor_unit_thi_r2_.set_accuracy_decimals(2);

        indoor_unit_thi_r3_.set_icon("mdi:thermometer");
        indoor_unit_thi_r3_.set_unit_of_measurement("°C");
        indoor_unit_thi_r3_.set_accuracy_decimals(2);

        outdoor_unit_tho_r1_.set_icon("mdi:thermometer");
        outdoor_unit_tho_r1_.set_unit_of_measurement("°C");
        outdoor_unit_tho_r1_.set_accuracy_decimals(2);

        outdoor_unit_expansion_valve_.set_icon("mdi:valve");
        outdoor_unit_expansion_valve_.set_unit_of_measurement("pulse");
        outdoor_unit_expansion_valve_.set_accuracy_decimals(0);

        outdoor_unit_discharge_pipe_.set_icon("mdi:thermometer");
        outdoor_unit_discharge_pipe_.set_unit_of_measurement("°C");
        outdoor_unit_discharge_pipe_.set_accuracy_decimals(1);

        outdoor_unit_discharge_pipe_super_heat_.set_icon("mdi:thermometer");
        outdoor_unit_discharge_pipe_super_heat_.set_unit_of_measurement("°C");
        outdoor_unit_discharge_pipe_super_heat_.set_accuracy_decimals(1);

        protection_state_.set_icon("mdi:shield-alert-outline");

        protection_state_number_.set_icon("mdi:shield-alert-outline");

        energy_used_.set_icon("mdi:lightning-bolt");
        energy_used_.set_unit_of_measurement("kWh");
        energy_used_.set_accuracy_decimals(2);

        mhi_ac_ctrl_core.MHIAcCtrlStatus(this);
        mhi_ac_ctrl_core.init();
    }

    void loop() override
    {
        if(millis() - room_temp_api_timeout_ms >= id(room_temp_api_timeout)*1000) {
            mhi_ac_ctrl_core.set_troom(0xff);  // use IU temperature sensor
            room_temp_api_timeout_ms = millis();
            ESP_LOGD("mhi_ac_ctrl", "did not receive a room_temp_api value, using IU temperature sensor");
        }

        int ret = mhi_ac_ctrl_core.loop(100);
        if (ret < 0)
            ESP_LOGW("mhi_ac_ctrl", "mhi_ac_ctrl_core.loop error: %i", ret);
    }

    void dump_config() override
    {
        LOG_CLIMATE("", "MHI-AC-Ctrl Climate", this);
        ESP_LOGCONFIG(TAG, "  Min. Temperature: %.1f°C", this->minimum_temperature_);
        ESP_LOGCONFIG(TAG, "  Max. Temperature: %.1f°C", this->maximum_temperature_);
        ESP_LOGCONFIG(TAG, "  Supports HEAT: %s", YESNO(true));
        ESP_LOGCONFIG(TAG, "  Supports COOL: %s", YESNO(true));
    }

    void cbiStatusFunction(ACStatus status, int value) override
    {
        static int mode_tmp = 0xff;
        ESP_LOGD("mhi_ac_ctrl", "received status=%i value=%i power=%i", status, value, this->power_);

        if (this->power_ == power_off) {
            // Workaround for status after reboot
            this->mode = climate::CLIMATE_MODE_OFF;
            this->publish_state();
        }

        switch (status) {
        case status_power:
            if (value == power_on) {
                this->power_ = power_on;
                // output_P(status, (TOPIC_POWER), PSTR(PAYLOAD_POWER_ON));
                cbiStatusFunction(status_mode, mode_tmp);
            } else {
                // output_P(status, (TOPIC_POWER), (PAYLOAD_POWER_OFF));
                // output_P(status, PSTR(TOPIC_MODE), PSTR(PAYLOAD_MODE_OFF));
                this->power_ = power_off;
                this->mode = climate::CLIMATE_MODE_OFF;
                this->publish_state();
            }
            break;
        case status_mode:
            mode_tmp = value;
        case opdata_mode:
        case erropdata_mode:
            switch (value) {
            case mode_auto:
                // if (status != erropdata_mode)
                //    output_P(status, PSTR(TOPIC_MODE), PSTR(PAYLOAD_MODE_AUTO));
                // else
                //    output_P(status, PSTR(TOPIC_MODE), PSTR(PAYLOAD_MODE_STOP));
                //    break;
                if (status != erropdata_mode && this->power_ > 0) {
                    this->mode = climate::CLIMATE_MODE_HEAT_COOL;
                } else {
                    this->mode = climate::CLIMATE_MODE_OFF;
                }
                break;
            case mode_dry:
                // output_P(status, PSTR(TOPIC_MODE), PSTR(PAYLOAD_MODE_DRY));
                this->mode = climate::CLIMATE_MODE_DRY;
                break;
            case mode_cool:
                // output_P(status, PSTR(TOPIC_MODE), PSTR(PAYLOAD_MODE_COOL));
                this->mode = climate::CLIMATE_MODE_COOL;
                break;
            case mode_fan:
                // output_P(status, PSTR(TOPIC_MODE), PSTR(PAYLOAD_MODE_FAN));
                this->mode = climate::CLIMATE_MODE_FAN_ONLY;
                break;
            case mode_heat:
                // output_P(status, PSTR(TOPIC_MODE), PSTR(PAYLOAD_MODE_HEAT));
                this->mode = climate::CLIMATE_MODE_HEAT;
                break;
            default:
                ESP_LOGD("mhi_ac_ctrl", "unknown status mode value %i", value);
            }
            this->publish_state();
            break;
        case status_fan:
            switch (value) {
            case 0:
                this->fan_mode = climate::CLIMATE_FAN_LOW;
                break;
            case 1:
                this->fan_mode = climate::CLIMATE_FAN_MEDIUM;
                break;
            case 2:
                this->fan_mode = climate::CLIMATE_FAN_HIGH;
                break;
            case 6:
                this->fan_mode = climate::CLIMATE_FAN_DIFFUSE;
                break;
            case 7:
                this->fan_mode = climate::CLIMATE_FAN_AUTO;
                break;
            }
            this->publish_state();
            break;
        case status_vanes:
            switch (value) {
            case vanes_unknown:
                this->swing_mode = climate::CLIMATE_SWING_OFF;
                break;
            case vanes_1:
                this->swing_mode = climate::CLIMATE_SWING_HORIZONTAL;
                break;
            case vanes_2:
                this->swing_mode = climate::CLIMATE_SWING_HORIZONTAL;
                break;
            case vanes_3:
                this->swing_mode = climate::CLIMATE_SWING_OFF;
                break;
            case vanes_4:
                this->swing_mode = climate::CLIMATE_SWING_VERTICAL;
                break;
            case vanes_swing:
                this->swing_mode = climate::CLIMATE_SWING_BOTH;
                break;
            }
            this->publish_state();
            break;
        case status_troom:
            // dtostrf((value - 61) / 4.0, 0, 2, strtmp);
            // output_P(status, PSTR(TOPIC_TROOM), strtmp);
            this->current_temperature = (value - 61) / 4.0;
            this->publish_state();
            break;
        case status_tsetpoint:
            // itoa(value, strtmp, 10);
            // output_P(status, PSTR(TOPIC_TSETPOINT), strtmp);
            this->target_temperature = (value & 0x7f)/ 2.0;
            this->publish_state();
            break;
        case status_errorcode:
        case erropdata_errorcode:
            // itoa(value, strtmp, 10);
            // output_P(status, PSTR(TOPIC_ERRORCODE), strtmp);
            error_code_.publish_state(value);
            break;
        case opdata_return_air:
        case erropdata_return_air:
            // dtostrf(value * 0.25f - 15, 0, 2, strtmp);
            // output_P(status, PSTR(TOPIC_RETURNAIR), strtmp);
            return_air_temperature_.publish_state(value * 0.25f - 15);
            break;
        case opdata_thi_r1:
            // Indoor Heat exchanger temperature 1 (U-bend)
           indoor_unit_thi_r1_.publish_state(0.327f * value - 11.4f);
           break;
        case erropdata_thi_r1:
            // itoa(0.327f * value - 11.4f, strtmp, 10); // only rough approximation
            // output_P(status, PSTR(TOPIC_THI_R1), strtmp);
            break;
        case opdata_thi_r2:
            // Indoor Heat exchanger temperature 2 (capillary)
            indoor_unit_thi_r2_.publish_state(0.327f * value - 11.4f);
            break;
        case erropdata_thi_r2:
            // itoa(0.327f * value - 11.4f, strtmp, 10); // formula for calculation not known
            // output_P(status, PSTR(TOPIC_THI_R2), strtmp);
            break;
        case opdata_thi_r3:
            // Indoor Heat exchanger temperature 3 (suction header)
            indoor_unit_thi_r3_.publish_state(0.327f * value - 11.4f);
            break;
        case erropdata_thi_r3:
            // itoa(0.327f * value - 11.4f, strtmp, 10); // only rough approximation
            // output_P(status, PSTR(TOPIC_THI_R3), strtmp);
            break;
        case opdata_iu_fanspeed:
        case erropdata_iu_fanspeed:
            // itoa(value, strtmp, 10);
            // output_P(status, PSTR(TOPIC_IU_FANSPEED), strtmp);
            indoor_unit_fan_speed_.publish_state(value);
            break;
        case opdata_total_iu_run:
        case erropdata_total_iu_run:
            // itoa(value * 100, strtmp, 10);
            // output_P(status, PSTR(TOPIC_TOTAL_IU_RUN), strtmp);
            indoor_unit_total_run_time_.publish_state(value * 100);
            break;
        case erropdata_outdoor:
        case opdata_outdoor:
            // dtostrf((value - 94) * 0.25f, 0, 2, strtmp);
            // output_P(status, PSTR(TOPIC_OUTDOOR), strtmp);
            outdoor_temperature_.publish_state((value - 94) * 0.25f);
            break;
        case opdata_tho_r1:
            // Indoor Heat exchanger temperature 3 (suction header)
            outdoor_unit_tho_r1_.publish_state(0.327f * value - 11.4f);
            break;
        case erropdata_tho_r1:
            // itoa(0.327f * value - 11.4f, strtmp, 10); // formula for calculation not known
            // output_P(status, PSTR(TOPIC_THO_R1), strtmp);
            break;
        case opdata_comp:
        case erropdata_comp:
            // dtostrf(
            //    highByte(value) * 25.6f + 0.1f * lowByte(value), 0, 2, strtmp); // to be confirmed
            // output_P(status, PSTR(TOPIC_COMP), strtmp);
            compressor_frequency_.publish_state(highByte(value) * 25.6f + 0.1f * lowByte(value));
            break;
        case erropdata_td:
        case opdata_td:
            if (value < 0x2)
                outdoor_unit_discharge_pipe_.publish_state(30);
            else
                outdoor_unit_discharge_pipe_.publish_state(value / 2 + 32);
            break;
        case opdata_ct:
        case erropdata_ct:
            // dtostrf(value * 14 / 51.0f, 0, 2, strtmp);
            // output_P(status, PSTR(TOPIC_CT), strtmp);
            current_power_.publish_state(value * 14 / 51.0f);
            break;
        case opdata_tdsh:
            outdoor_unit_discharge_pipe_super_heat_.publish_state(value);
            // itoa(value, strtmp, 10); // formula for calculation not known
            // output_P(status, PSTR(TOPIC_TDSH), strtmp);
            break;
        case opdata_protection_no:
            if (value < protection_states.size())
                protection_state_.publish_state(protection_states[value]);
            protection_state_number_.publish_state(value);
            // itoa(value, strtmp, 10);
            // output_P(status, PSTR(TOPIC_PROTECTION_NO), strtmp);
            break;
        case opdata_ou_fanspeed:
        case erropdata_ou_fanspeed:
            // itoa(value, strtmp, 10);
            // output_P(status, PSTR(TOPIC_OU_FANSPEED), strtmp);
            outdoor_unit_fan_speed_.publish_state(value);
            break;
        case opdata_defrost:
            // if (value)
            //     output_P(status, PSTR(TOPIC_DEFROST), PSTR(PAYLOAD_OP_DEFROST_ON));
            // else
            //     output_P(status, PSTR(TOPIC_DEFROST), PSTR(PAYLOAD_OP_DEFROST_OFF));
            defrost_.publish_state(value != 0);
            break;
        case opdata_total_comp_run:
        case erropdata_total_comp_run:
            // itoa(value * 100, strtmp, 10);
            // output_P(status, PSTR(TOPIC_TOTAL_COMP_RUN), strtmp);
            compressor_total_run_time_.publish_state(value * 100);
            break;
        case opdata_ou_eev1:
            outdoor_unit_expansion_valve_.publish_state(value);
            break;
        case erropdata_ou_eev1:
            // itoa(value, strtmp, 10);
            // output_P(status, PSTR(TOPIC_OU_EEV1), strtmp);
            break;
        case opdata_tsetpoint:
        case erropdata_tsetpoint:
            break;
        case opdata_kwh:
            // https://github.com/absalom-muc/MHI-AC-Ctrl/pull/135
            // This item is counting the kWh from the point where the AC is powered On
            energy_used_.publish_state(value * 0.25);
            break;
        case opdata_unknown:
            // skip these values as they are not used currently
            break;
        }
    }

    std::vector<Sensor *> get_sensors() {
        return {
            &error_code_,
            &outdoor_temperature_,
            &return_air_temperature_,
            &outdoor_unit_fan_speed_,
            &indoor_unit_fan_speed_,
            &current_power_,
            &compressor_frequency_,
            &indoor_unit_total_run_time_,
            &compressor_total_run_time_,
            &vanes_pos_,
            &energy_used_,
            &indoor_unit_thi_r1_,
            &indoor_unit_thi_r2_,
            &indoor_unit_thi_r3_,
            &outdoor_unit_tho_r1_,
            &outdoor_unit_expansion_valve_,
            &outdoor_unit_discharge_pipe_,
            &outdoor_unit_discharge_pipe_super_heat_,
            &protection_state_number_
        };
    }

    std::vector<TextSensor *> get_text_sensors() {
        return { &protection_state_ };
    }

    std::vector<BinarySensor *> get_binary_sensors() {
        return { &defrost_ };
    }

    void set_room_temperature(float value) {
        if ((value > -10) & (value < 48)) {
            room_temp_api_timeout_ms = millis();  // reset timeout
            byte tmp = value*4+61;
            mhi_ac_ctrl_core.set_troom(value*4+61);
            ESP_LOGD("mhi_ac_ctrl", "set room_temp_api: %f %i %i", value, (byte)(value*4+61), (byte)tmp);
        }
    }

    void set_vanes(int value) {
        mhi_ac_ctrl_core.set_vanes(value);
        ESP_LOGD("mhi_ac_ctrl", "set vanes: %i", value);
    }

protected:
    /// Transmit the state of this climate controller.
    void control(const climate::ClimateCall& call) override
    {
        if (call.get_mode().has_value()) {
            this->mode = *call.get_mode();

            power_ = power_on;
            switch (this->mode) {
            case climate::CLIMATE_MODE_OFF:
                power_ = power_off;
                break;
            case climate::CLIMATE_MODE_COOL:
                mode_ = mode_cool;
                break;
            case climate::CLIMATE_MODE_HEAT:
                mode_ = mode_heat;
                break;
            case climate::CLIMATE_MODE_DRY:
                mode_ = mode_dry;
                break;
            case climate::CLIMATE_MODE_FAN_ONLY:
                mode_ = mode_fan;
                break;
            case climate::CLIMATE_MODE_HEAT_COOL:
            default:
                mode_ = mode_auto;
                break;
            }

            mhi_ac_ctrl_core.set_power(power_);
            mhi_ac_ctrl_core.set_mode(mode_);
        }

        if (call.get_target_temperature().has_value()) {
            this->target_temperature = *call.get_target_temperature();

            tsetpoint_ = clamp(this->target_temperature, minimum_temperature_, maximum_temperature_);

            mhi_ac_ctrl_core.set_tsetpoint((byte)(2 * tsetpoint_));
        }

        if (call.get_fan_mode().has_value()) {
            this->fan_mode = *call.get_fan_mode();

            switch (*this->fan_mode) {
            case climate::CLIMATE_FAN_LOW:
                fan_ = 0;
                break;
            case climate::CLIMATE_FAN_MEDIUM:
                fan_ = 1;
                break;
            case climate::CLIMATE_FAN_HIGH:
                fan_ = 2;
                break;
            case climate::CLIMATE_FAN_DIFFUSE:
                fan_ = 6;
                break;
            case climate::CLIMATE_FAN_AUTO:
            default:
                fan_ = 7;
                break;
            }

            mhi_ac_ctrl_core.set_fan(fan_);
        }

        if (call.get_swing_mode().has_value()) {
            this->swing_mode = *call.get_swing_mode();

            switch (this->swing_mode) {
            case climate::CLIMATE_SWING_BOTH:
                vanes_ = vanes_swing;
                break;
            case climate::CLIMATE_SWING_VERTICAL:
                vanes_ = vanes_4;
                break;
            case climate::CLIMATE_SWING_HORIZONTAL:
                vanes_ = vanes_1;
                break;
            default:
            case climate::CLIMATE_SWING_OFF:
                vanes_ = vanes_3;
                break;
            }
            
            mhi_ac_ctrl_core.set_vanes(vanes_);
        }

        this->publish_state();
    }

    /// Return the traits of this controller.
    climate::ClimateTraits traits() override
    {
        auto traits = climate::ClimateTraits();
        traits.set_supports_current_temperature(true);
        traits.set_supported_modes({ CLIMATE_MODE_OFF, CLIMATE_MODE_HEAT_COOL, CLIMATE_MODE_COOL, CLIMATE_MODE_HEAT, CLIMATE_MODE_DRY, CLIMATE_MODE_FAN_ONLY });
        traits.set_supports_two_point_target_temperature(false);
        traits.set_visual_min_temperature(this->minimum_temperature_);
        traits.set_visual_max_temperature(this->maximum_temperature_);
        traits.set_visual_temperature_step(this->temperature_step_);
        traits.set_supported_fan_modes({ CLIMATE_FAN_AUTO, CLIMATE_FAN_LOW, CLIMATE_FAN_MEDIUM, CLIMATE_FAN_HIGH, CLIMATE_FAN_DIFFUSE });
        traits.set_supported_swing_modes({ CLIMATE_SWING_OFF, CLIMATE_SWING_BOTH, CLIMATE_SWING_VERTICAL, CLIMATE_SWING_HORIZONTAL });
        return traits;
    }

    float minimum_temperature_ { 18.0f };
    float maximum_temperature_ { 30.0f };
    float temperature_step_ { 0.5f };

    ACPower power_;
    ACMode mode_;
    float tsetpoint_;
    uint fan_;
    ACVanes vanes_;

    MHI_AC_Ctrl_Core mhi_ac_ctrl_core;

    Sensor error_code_;
    Sensor outdoor_temperature_;
    Sensor return_air_temperature_;
    Sensor outdoor_unit_fan_speed_;
    Sensor indoor_unit_fan_speed_;
    Sensor compressor_frequency_;
    Sensor indoor_unit_total_run_time_;
    Sensor compressor_total_run_time_;
    Sensor current_power_;
    BinarySensor defrost_;
    Sensor vanes_pos_;
    Sensor energy_used_;
    Sensor indoor_unit_thi_r1_;
    Sensor indoor_unit_thi_r2_;
    Sensor indoor_unit_thi_r3_;
    Sensor outdoor_unit_tho_r1_;
    Sensor outdoor_unit_expansion_valve_;
    Sensor outdoor_unit_discharge_pipe_;
    Sensor outdoor_unit_discharge_pipe_super_heat_;
    Sensor protection_state_number_;
    TextSensor protection_state_;
};

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • 0 Henk 'm!

  • LinuZZ
  • Registratie: Januari 2004
  • Laatst online: 18-07 05:53
Taro schreef op zaterdag 7 oktober 2023 @ 20:11:
[...]

De yaml voor deze unit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
## Code from https://github.com/ginkage/MHI-AC-Ctrl-ESPHome/blob/master/lr_mhi_ac_ctrl.yaml @ 01-09-2023
## Small modifications done:
  # Added webserver, fallback password and captive portal


substitutions:
  # Unique device ID in HA
  deviceid: "mhi_woonkamer"
  # Unique device name in HA (sensor names will be prefixed by this name)
  devicename: "MHI Woonkamer"

esphome:
  name: "mhi-woonkamer"
  platform: ESP8266
  board: d1_mini
  platformio_options:
    # Run CPU at 160Mhz to fix mhi_ac_ctrl_core.loop error: -2
    board_build.f_cpu: 160000000L
  includes:
    - mhi_ac_ctrl.h
    - MHI-AC-Ctrl-core.h
    - MHI-AC-Ctrl-core.cpp

wifi:
  ssid: !secret wifi_ssid_iot
  password: !secret wifi_password_iot
  fast_connect: on   
  
# WiFi fallback hotspot configuration when configured WiFi network is not available
  ap:
    ssid: "${devicename} - Fallback AP"
    # password: ""

# Enable Web server
web_server:
  port: 80


# Enable captive portal functionality in fallback hotspot mode 
captive_portal:

logger:
  level: DEBUG
  baud_rate: 0

globals:
  - id: room_temp_api_timeout
    type: int
    restore_value: no
    initial_value: '120'

ota:

climate:
  - platform: custom
    lambda: |-
      auto mhi_ac_ctrl = new MhiAcCtrl();
      App.register_component(mhi_ac_ctrl);
      return {mhi_ac_ctrl};

    climates:
      - name: "${devicename}"
        id: ${deviceid}

api:
  reboot_timeout: 0s
  services:
    # Call the set_api_room_temperature service from HA to override the room temperature
    # If a new value has not been received after room_temp_api_timeout seconds, it will fall back to internal sensor
    - service: set_api_room_temperature
      variables:
        value: float
      then:
        - lambda: |-
            return ((MhiAcCtrl*)id(${deviceid}))->set_room_temperature(value);
    # Call the set_vanes service from HA to set the vane position
    # Needed because the ESPHome Climate class does not support this natively
    # Possible values: 1-4: static positions, 5: swing, 0: unknown
    - service: set_vanes
      variables:
        value: int
      then:
        - lambda: |-
            return ((MhiAcCtrl*)id(${deviceid}))->set_vanes(value);

sensor:
  - platform: uptime
    name: ${devicename} Uptime
  - platform: wifi_signal
    name: ${devicename} WiFi Signal
    update_interval: 60s
  - platform: custom
    lambda: |-
      return ((MhiAcCtrl*)id(${deviceid}))->get_sensors();

    # Sensor names in HA, you can change these if you want
    # Don't delete them or change their position in the list
    sensors:
      - name: ${devicename} error code
      - name: ${devicename} outdoor temperature
      - name: ${devicename} return air temperature
      - name: ${devicename} outdoor unit fan speed
      - name: ${devicename} indoor unit fan speed
      - name: ${devicename} current power
        device_class: "current"
        state_class: "measurement"
      - name: ${devicename} compressor frequency
      - name: ${devicename} indoor unit total run time
      - name: ${devicename} compressor total run time
      - name: ${devicename} vanes
      - name: ${devicename} energy used
      - name: ${devicename} Indoor (U-bend) HE temp 1
      - name: ${devicename} Indoor (capillary) HE temp 2
      - name: ${devicename} Indoor (suction header) HE temp 3
      - name: ${devicename} Outdoor HE temp
      - name: ${devicename} Outdoor unit exp. valve
      - name: ${devicename} Outdoor unit discharge pipe
      - name: ${devicename} Outdoor unit discharge pipe super heat
      - name: ${devicename} Protection error state

binary_sensor:
  - platform: custom
    lambda: |-
      return ((MhiAcCtrl*)id(${deviceid}))->get_binary_sensors();

    binary_sensors:
      - name: ${devicename} defrost

text_sensor:
  - platform: version
    name: ${devicename} ESPHome Version
  - platform: wifi_info
    ip_address:
      name: ${devicename} IP
    ssid:
      name: ${devicename} SSID
    bssid:
      name: ${devicename} BSSID



En mhi-ac-ctrl.h:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
#include "MHI-AC-Ctrl-core.h"
#define ROOM_TEMP_MQTT 1
#include <vector>
#include <string>

static const std::vector<std::string> protection_states = {
    "Normal",
    "Discharge pipe temperature protection control",
    "Discharge pipe temperature anomaly",
    "Current safe control of inverter primary current",
    "High pressure protection control",
    "High pressure anomaly",
    "Low pressure protection control",
    "Low pressure anomaly",
    "Anti-frost prevention control",
    "Current cut",
    "Power transistor protection control",
    "Power transistor anomaly (Overheat)",
    "Compression ratio control",
    "-",
    "Condensation prevention control",
    "Current safe control of inverter secondary current",
    "Stop by compressor rotor lock",
    "Stop by compressor startup failure"
};

static const char* TAG = "mhi_ac_ctrl";

unsigned long room_temp_api_timeout_ms = millis();

class MhiAcCtrl : public climate::Climate,
                  public Component,
                  public CallbackInterface_Status {
public:
    void setup() override
    {
        this->power_ = power_off;
        this->current_temperature = NAN;
        // restore set points
        auto restore = this->restore_state_();
        if (restore.has_value()) {
            restore->apply(this);
        } else {
            // restore from defaults
            this->mode = climate::CLIMATE_MODE_OFF;
            // initialize target temperature to some value so that it's not NAN
            this->target_temperature = roundf(clamp(
                this->current_temperature, this->minimum_temperature_, this->maximum_temperature_));
            this->fan_mode = climate::CLIMATE_FAN_AUTO;
            this->swing_mode = climate::CLIMATE_SWING_OFF;
        }
        // Never send nan to HA
        if (isnan(this->target_temperature))
            this->target_temperature = 20;

        error_code_.set_icon("mdi:alert-circle");

        outdoor_temperature_.set_icon("mdi:thermometer");
        outdoor_temperature_.set_unit_of_measurement("°C");
        outdoor_temperature_.set_accuracy_decimals(2);

        return_air_temperature_.set_icon("mdi:thermometer");
        return_air_temperature_.set_unit_of_measurement("°C");
        return_air_temperature_.set_accuracy_decimals(2);

        outdoor_unit_fan_speed_.set_icon("mdi:fan");

        indoor_unit_fan_speed_.set_icon("mdi:fan");

        compressor_frequency_.set_icon("mdi:sine-wave");
        compressor_frequency_.set_unit_of_measurement("Hz");
        compressor_frequency_.set_accuracy_decimals(1);

        indoor_unit_total_run_time_.set_icon("mdi:clock");
        indoor_unit_total_run_time_.set_unit_of_measurement("h");

        compressor_total_run_time_.set_icon("mdi:clock");
        compressor_total_run_time_.set_unit_of_measurement("h");

        current_power_.set_icon("mdi:current-ac");
        current_power_.set_unit_of_measurement("A");
        current_power_.set_accuracy_decimals(2);

        defrost_.set_icon("mdi:snowflake-melt");

        vanes_pos_.set_icon("mdi:air-filter");

        indoor_unit_thi_r1_.set_icon("mdi:thermometer");
        indoor_unit_thi_r1_.set_unit_of_measurement("°C");
        indoor_unit_thi_r1_.set_accuracy_decimals(2);

        indoor_unit_thi_r2_.set_icon("mdi:thermometer");
        indoor_unit_thi_r2_.set_unit_of_measurement("°C");
        indoor_unit_thi_r2_.set_accuracy_decimals(2);

        indoor_unit_thi_r3_.set_icon("mdi:thermometer");
        indoor_unit_thi_r3_.set_unit_of_measurement("°C");
        indoor_unit_thi_r3_.set_accuracy_decimals(2);

        outdoor_unit_tho_r1_.set_icon("mdi:thermometer");
        outdoor_unit_tho_r1_.set_unit_of_measurement("°C");
        outdoor_unit_tho_r1_.set_accuracy_decimals(2);

        outdoor_unit_expansion_valve_.set_icon("mdi:valve");
        outdoor_unit_expansion_valve_.set_unit_of_measurement("pulse");
        outdoor_unit_expansion_valve_.set_accuracy_decimals(0);

        outdoor_unit_discharge_pipe_.set_icon("mdi:thermometer");
        outdoor_unit_discharge_pipe_.set_unit_of_measurement("°C");
        outdoor_unit_discharge_pipe_.set_accuracy_decimals(1);

        outdoor_unit_discharge_pipe_super_heat_.set_icon("mdi:thermometer");
        outdoor_unit_discharge_pipe_super_heat_.set_unit_of_measurement("°C");
        outdoor_unit_discharge_pipe_super_heat_.set_accuracy_decimals(1);

        protection_state_.set_icon("mdi:shield-alert-outline");

        protection_state_number_.set_icon("mdi:shield-alert-outline");

        energy_used_.set_icon("mdi:lightning-bolt");
        energy_used_.set_unit_of_measurement("kWh");
        energy_used_.set_accuracy_decimals(2);

        mhi_ac_ctrl_core.MHIAcCtrlStatus(this);
        mhi_ac_ctrl_core.init();
    }

    void loop() override
    {
        if(millis() - room_temp_api_timeout_ms >= id(room_temp_api_timeout)*1000) {
            mhi_ac_ctrl_core.set_troom(0xff);  // use IU temperature sensor
            room_temp_api_timeout_ms = millis();
            ESP_LOGD("mhi_ac_ctrl", "did not receive a room_temp_api value, using IU temperature sensor");
        }

        int ret = mhi_ac_ctrl_core.loop(100);
        if (ret < 0)
            ESP_LOGW("mhi_ac_ctrl", "mhi_ac_ctrl_core.loop error: %i", ret);
    }

    void dump_config() override
    {
        LOG_CLIMATE("", "MHI-AC-Ctrl Climate", this);
        ESP_LOGCONFIG(TAG, "  Min. Temperature: %.1f°C", this->minimum_temperature_);
        ESP_LOGCONFIG(TAG, "  Max. Temperature: %.1f°C", this->maximum_temperature_);
        ESP_LOGCONFIG(TAG, "  Supports HEAT: %s", YESNO(true));
        ESP_LOGCONFIG(TAG, "  Supports COOL: %s", YESNO(true));
    }

    void cbiStatusFunction(ACStatus status, int value) override
    {
        static int mode_tmp = 0xff;
        ESP_LOGD("mhi_ac_ctrl", "received status=%i value=%i power=%i", status, value, this->power_);

        if (this->power_ == power_off) {
            // Workaround for status after reboot
            this->mode = climate::CLIMATE_MODE_OFF;
            this->publish_state();
        }

        switch (status) {
        case status_power:
            if (value == power_on) {
                this->power_ = power_on;
                // output_P(status, (TOPIC_POWER), PSTR(PAYLOAD_POWER_ON));
                cbiStatusFunction(status_mode, mode_tmp);
            } else {
                // output_P(status, (TOPIC_POWER), (PAYLOAD_POWER_OFF));
                // output_P(status, PSTR(TOPIC_MODE), PSTR(PAYLOAD_MODE_OFF));
                this->power_ = power_off;
                this->mode = climate::CLIMATE_MODE_OFF;
                this->publish_state();
            }
            break;
        case status_mode:
            mode_tmp = value;
        case opdata_mode:
        case erropdata_mode:
            switch (value) {
            case mode_auto:
                // if (status != erropdata_mode)
                //    output_P(status, PSTR(TOPIC_MODE), PSTR(PAYLOAD_MODE_AUTO));
                // else
                //    output_P(status, PSTR(TOPIC_MODE), PSTR(PAYLOAD_MODE_STOP));
                //    break;
                if (status != erropdata_mode && this->power_ > 0) {
                    this->mode = climate::CLIMATE_MODE_HEAT_COOL;
                } else {
                    this->mode = climate::CLIMATE_MODE_OFF;
                }
                break;
            case mode_dry:
                // output_P(status, PSTR(TOPIC_MODE), PSTR(PAYLOAD_MODE_DRY));
                this->mode = climate::CLIMATE_MODE_DRY;
                break;
            case mode_cool:
                // output_P(status, PSTR(TOPIC_MODE), PSTR(PAYLOAD_MODE_COOL));
                this->mode = climate::CLIMATE_MODE_COOL;
                break;
            case mode_fan:
                // output_P(status, PSTR(TOPIC_MODE), PSTR(PAYLOAD_MODE_FAN));
                this->mode = climate::CLIMATE_MODE_FAN_ONLY;
                break;
            case mode_heat:
                // output_P(status, PSTR(TOPIC_MODE), PSTR(PAYLOAD_MODE_HEAT));
                this->mode = climate::CLIMATE_MODE_HEAT;
                break;
            default:
                ESP_LOGD("mhi_ac_ctrl", "unknown status mode value %i", value);
            }
            this->publish_state();
            break;
        case status_fan:
            switch (value) {
            case 0:
                this->fan_mode = climate::CLIMATE_FAN_LOW;
                break;
            case 1:
                this->fan_mode = climate::CLIMATE_FAN_MEDIUM;
                break;
            case 2:
                this->fan_mode = climate::CLIMATE_FAN_HIGH;
                break;
            case 6:
                this->fan_mode = climate::CLIMATE_FAN_DIFFUSE;
                break;
            case 7:
                this->fan_mode = climate::CLIMATE_FAN_AUTO;
                break;
            }
            this->publish_state();
            break;
        case status_vanes:
            switch (value) {
            case vanes_unknown:
                this->swing_mode = climate::CLIMATE_SWING_OFF;
                break;
            case vanes_1:
                this->swing_mode = climate::CLIMATE_SWING_HORIZONTAL;
                break;
            case vanes_2:
                this->swing_mode = climate::CLIMATE_SWING_HORIZONTAL;
                break;
            case vanes_3:
                this->swing_mode = climate::CLIMATE_SWING_OFF;
                break;
            case vanes_4:
                this->swing_mode = climate::CLIMATE_SWING_VERTICAL;
                break;
            case vanes_swing:
                this->swing_mode = climate::CLIMATE_SWING_BOTH;
                break;
            }
            this->publish_state();
            break;
        case status_troom:
            // dtostrf((value - 61) / 4.0, 0, 2, strtmp);
            // output_P(status, PSTR(TOPIC_TROOM), strtmp);
            this->current_temperature = (value - 61) / 4.0;
            this->publish_state();
            break;
        case status_tsetpoint:
            // itoa(value, strtmp, 10);
            // output_P(status, PSTR(TOPIC_TSETPOINT), strtmp);
            this->target_temperature = (value & 0x7f)/ 2.0;
            this->publish_state();
            break;
        case status_errorcode:
        case erropdata_errorcode:
            // itoa(value, strtmp, 10);
            // output_P(status, PSTR(TOPIC_ERRORCODE), strtmp);
            error_code_.publish_state(value);
            break;
        case opdata_return_air:
        case erropdata_return_air:
            // dtostrf(value * 0.25f - 15, 0, 2, strtmp);
            // output_P(status, PSTR(TOPIC_RETURNAIR), strtmp);
            return_air_temperature_.publish_state(value * 0.25f - 15);
            break;
        case opdata_thi_r1:
            // Indoor Heat exchanger temperature 1 (U-bend)
           indoor_unit_thi_r1_.publish_state(0.327f * value - 11.4f);
           break;
        case erropdata_thi_r1:
            // itoa(0.327f * value - 11.4f, strtmp, 10); // only rough approximation
            // output_P(status, PSTR(TOPIC_THI_R1), strtmp);
            break;
        case opdata_thi_r2:
            // Indoor Heat exchanger temperature 2 (capillary)
            indoor_unit_thi_r2_.publish_state(0.327f * value - 11.4f);
            break;
        case erropdata_thi_r2:
            // itoa(0.327f * value - 11.4f, strtmp, 10); // formula for calculation not known
            // output_P(status, PSTR(TOPIC_THI_R2), strtmp);
            break;
        case opdata_thi_r3:
            // Indoor Heat exchanger temperature 3 (suction header)
            indoor_unit_thi_r3_.publish_state(0.327f * value - 11.4f);
            break;
        case erropdata_thi_r3:
            // itoa(0.327f * value - 11.4f, strtmp, 10); // only rough approximation
            // output_P(status, PSTR(TOPIC_THI_R3), strtmp);
            break;
        case opdata_iu_fanspeed:
        case erropdata_iu_fanspeed:
            // itoa(value, strtmp, 10);
            // output_P(status, PSTR(TOPIC_IU_FANSPEED), strtmp);
            indoor_unit_fan_speed_.publish_state(value);
            break;
        case opdata_total_iu_run:
        case erropdata_total_iu_run:
            // itoa(value * 100, strtmp, 10);
            // output_P(status, PSTR(TOPIC_TOTAL_IU_RUN), strtmp);
            indoor_unit_total_run_time_.publish_state(value * 100);
            break;
        case erropdata_outdoor:
        case opdata_outdoor:
            // dtostrf((value - 94) * 0.25f, 0, 2, strtmp);
            // output_P(status, PSTR(TOPIC_OUTDOOR), strtmp);
            outdoor_temperature_.publish_state((value - 94) * 0.25f);
            break;
        case opdata_tho_r1:
            // Indoor Heat exchanger temperature 3 (suction header)
            outdoor_unit_tho_r1_.publish_state(0.327f * value - 11.4f);
            break;
        case erropdata_tho_r1:
            // itoa(0.327f * value - 11.4f, strtmp, 10); // formula for calculation not known
            // output_P(status, PSTR(TOPIC_THO_R1), strtmp);
            break;
        case opdata_comp:
        case erropdata_comp:
            // dtostrf(
            //    highByte(value) * 25.6f + 0.1f * lowByte(value), 0, 2, strtmp); // to be confirmed
            // output_P(status, PSTR(TOPIC_COMP), strtmp);
            compressor_frequency_.publish_state(highByte(value) * 25.6f + 0.1f * lowByte(value));
            break;
        case erropdata_td:
        case opdata_td:
            if (value < 0x2)
                outdoor_unit_discharge_pipe_.publish_state(30);
            else
                outdoor_unit_discharge_pipe_.publish_state(value / 2 + 32);
            break;
        case opdata_ct:
        case erropdata_ct:
            // dtostrf(value * 14 / 51.0f, 0, 2, strtmp);
            // output_P(status, PSTR(TOPIC_CT), strtmp);
            current_power_.publish_state(value * 14 / 51.0f);
            break;
        case opdata_tdsh:
            outdoor_unit_discharge_pipe_super_heat_.publish_state(value);
            // itoa(value, strtmp, 10); // formula for calculation not known
            // output_P(status, PSTR(TOPIC_TDSH), strtmp);
            break;
        case opdata_protection_no:
            if (value < protection_states.size())
                protection_state_.publish_state(protection_states[value]);
            protection_state_number_.publish_state(value);
            // itoa(value, strtmp, 10);
            // output_P(status, PSTR(TOPIC_PROTECTION_NO), strtmp);
            break;
        case opdata_ou_fanspeed:
        case erropdata_ou_fanspeed:
            // itoa(value, strtmp, 10);
            // output_P(status, PSTR(TOPIC_OU_FANSPEED), strtmp);
            outdoor_unit_fan_speed_.publish_state(value);
            break;
        case opdata_defrost:
            // if (value)
            //     output_P(status, PSTR(TOPIC_DEFROST), PSTR(PAYLOAD_OP_DEFROST_ON));
            // else
            //     output_P(status, PSTR(TOPIC_DEFROST), PSTR(PAYLOAD_OP_DEFROST_OFF));
            defrost_.publish_state(value != 0);
            break;
        case opdata_total_comp_run:
        case erropdata_total_comp_run:
            // itoa(value * 100, strtmp, 10);
            // output_P(status, PSTR(TOPIC_TOTAL_COMP_RUN), strtmp);
            compressor_total_run_time_.publish_state(value * 100);
            break;
        case opdata_ou_eev1:
            outdoor_unit_expansion_valve_.publish_state(value);
            break;
        case erropdata_ou_eev1:
            // itoa(value, strtmp, 10);
            // output_P(status, PSTR(TOPIC_OU_EEV1), strtmp);
            break;
        case opdata_tsetpoint:
        case erropdata_tsetpoint:
            break;
        case opdata_kwh:
            // https://github.com/absalom-muc/MHI-AC-Ctrl/pull/135
            // This item is counting the kWh from the point where the AC is powered On
            energy_used_.publish_state(value * 0.25);
            break;
        case opdata_unknown:
            // skip these values as they are not used currently
            break;
        }
    }

    std::vector<Sensor *> get_sensors() {
        return {
            &error_code_,
            &outdoor_temperature_,
            &return_air_temperature_,
            &outdoor_unit_fan_speed_,
            &indoor_unit_fan_speed_,
            &current_power_,
            &compressor_frequency_,
            &indoor_unit_total_run_time_,
            &compressor_total_run_time_,
            &vanes_pos_,
            &energy_used_,
            &indoor_unit_thi_r1_,
            &indoor_unit_thi_r2_,
            &indoor_unit_thi_r3_,
            &outdoor_unit_tho_r1_,
            &outdoor_unit_expansion_valve_,
            &outdoor_unit_discharge_pipe_,
            &outdoor_unit_discharge_pipe_super_heat_,
            &protection_state_number_
        };
    }

    std::vector<TextSensor *> get_text_sensors() {
        return { &protection_state_ };
    }

    std::vector<BinarySensor *> get_binary_sensors() {
        return { &defrost_ };
    }

    void set_room_temperature(float value) {
        if ((value > -10) & (value < 48)) {
            room_temp_api_timeout_ms = millis();  // reset timeout
            byte tmp = value*4+61;
            mhi_ac_ctrl_core.set_troom(value*4+61);
            ESP_LOGD("mhi_ac_ctrl", "set room_temp_api: %f %i %i", value, (byte)(value*4+61), (byte)tmp);
        }
    }

    void set_vanes(int value) {
        mhi_ac_ctrl_core.set_vanes(value);
        ESP_LOGD("mhi_ac_ctrl", "set vanes: %i", value);
    }

protected:
    /// Transmit the state of this climate controller.
    void control(const climate::ClimateCall& call) override
    {
        if (call.get_mode().has_value()) {
            this->mode = *call.get_mode();

            power_ = power_on;
            switch (this->mode) {
            case climate::CLIMATE_MODE_OFF:
                power_ = power_off;
                break;
            case climate::CLIMATE_MODE_COOL:
                mode_ = mode_cool;
                break;
            case climate::CLIMATE_MODE_HEAT:
                mode_ = mode_heat;
                break;
            case climate::CLIMATE_MODE_DRY:
                mode_ = mode_dry;
                break;
            case climate::CLIMATE_MODE_FAN_ONLY:
                mode_ = mode_fan;
                break;
            case climate::CLIMATE_MODE_HEAT_COOL:
            default:
                mode_ = mode_auto;
                break;
            }

            mhi_ac_ctrl_core.set_power(power_);
            mhi_ac_ctrl_core.set_mode(mode_);
        }

        if (call.get_target_temperature().has_value()) {
            this->target_temperature = *call.get_target_temperature();

            tsetpoint_ = clamp(this->target_temperature, minimum_temperature_, maximum_temperature_);

            mhi_ac_ctrl_core.set_tsetpoint((byte)(2 * tsetpoint_));
        }

        if (call.get_fan_mode().has_value()) {
            this->fan_mode = *call.get_fan_mode();

            switch (*this->fan_mode) {
            case climate::CLIMATE_FAN_LOW:
                fan_ = 0;
                break;
            case climate::CLIMATE_FAN_MEDIUM:
                fan_ = 1;
                break;
            case climate::CLIMATE_FAN_HIGH:
                fan_ = 2;
                break;
            case climate::CLIMATE_FAN_DIFFUSE:
                fan_ = 6;
                break;
            case climate::CLIMATE_FAN_AUTO:
            default:
                fan_ = 7;
                break;
            }

            mhi_ac_ctrl_core.set_fan(fan_);
        }

        if (call.get_swing_mode().has_value()) {
            this->swing_mode = *call.get_swing_mode();

            switch (this->swing_mode) {
            case climate::CLIMATE_SWING_BOTH:
                vanes_ = vanes_swing;
                break;
            case climate::CLIMATE_SWING_VERTICAL:
                vanes_ = vanes_4;
                break;
            case climate::CLIMATE_SWING_HORIZONTAL:
                vanes_ = vanes_1;
                break;
            default:
            case climate::CLIMATE_SWING_OFF:
                vanes_ = vanes_3;
                break;
            }
            
            mhi_ac_ctrl_core.set_vanes(vanes_);
        }

        this->publish_state();
    }

    /// Return the traits of this controller.
    climate::ClimateTraits traits() override
    {
        auto traits = climate::ClimateTraits();
        traits.set_supports_current_temperature(true);
        traits.set_supported_modes({ CLIMATE_MODE_OFF, CLIMATE_MODE_HEAT_COOL, CLIMATE_MODE_COOL, CLIMATE_MODE_HEAT, CLIMATE_MODE_DRY, CLIMATE_MODE_FAN_ONLY });
        traits.set_supports_two_point_target_temperature(false);
        traits.set_visual_min_temperature(this->minimum_temperature_);
        traits.set_visual_max_temperature(this->maximum_temperature_);
        traits.set_visual_temperature_step(this->temperature_step_);
        traits.set_supported_fan_modes({ CLIMATE_FAN_AUTO, CLIMATE_FAN_LOW, CLIMATE_FAN_MEDIUM, CLIMATE_FAN_HIGH, CLIMATE_FAN_DIFFUSE });
        traits.set_supported_swing_modes({ CLIMATE_SWING_OFF, CLIMATE_SWING_BOTH, CLIMATE_SWING_VERTICAL, CLIMATE_SWING_HORIZONTAL });
        return traits;
    }

    float minimum_temperature_ { 18.0f };
    float maximum_temperature_ { 30.0f };
    float temperature_step_ { 0.5f };

    ACPower power_;
    ACMode mode_;
    float tsetpoint_;
    uint fan_;
    ACVanes vanes_;

    MHI_AC_Ctrl_Core mhi_ac_ctrl_core;

    Sensor error_code_;
    Sensor outdoor_temperature_;
    Sensor return_air_temperature_;
    Sensor outdoor_unit_fan_speed_;
    Sensor indoor_unit_fan_speed_;
    Sensor compressor_frequency_;
    Sensor indoor_unit_total_run_time_;
    Sensor compressor_total_run_time_;
    Sensor current_power_;
    BinarySensor defrost_;
    Sensor vanes_pos_;
    Sensor energy_used_;
    Sensor indoor_unit_thi_r1_;
    Sensor indoor_unit_thi_r2_;
    Sensor indoor_unit_thi_r3_;
    Sensor outdoor_unit_tho_r1_;
    Sensor outdoor_unit_expansion_valve_;
    Sensor outdoor_unit_discharge_pipe_;
    Sensor outdoor_unit_discharge_pipe_super_heat_;
    Sensor protection_state_number_;
    TextSensor protection_state_;
};
Die horen netjes bij elkaar, dus dat ziet er op het eerste gezicht goed uit. Ik zie dat je debug logging aan heb staan, wat geeft die?

enphase 8300wp (3460 ZO, 2740 ZW, 2100 NO), 2x20 vacuümbuizen op 300l SWW, Panasonic WH-MXC12J9E8, gasloos sinds Juni 2022 Stromer st3 voor woon-werk


Acties:
  • 0 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
LinuZZ schreef op zaterdag 7 oktober 2023 @ 21:24:
[...]


Die horen netjes bij elkaar, dus dat ziet er op het eerste gezicht goed uit. Ik zie dat je debug logging aan heb staan, wat geeft die?
Die geeft netjes updates over uptime, wifi status en evt. instellingen die ik via HA aanpas, maar geen feedback over sensoren/states (weet ook niet of dat zichtbaar is?), de unit reageert er echter niet op. Via de AB werkt alles prima, maar aansturen via HA doet niets. Soms dus wel errorcode 1.

Specifieke zaken uit de logging die je zou willen zien?

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • 0 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
JoepW schreef op vrijdag 6 oktober 2023 @ 22:53:
[...]

Bij mij werken alle airco’s prima en ik stuur ze al ruim een jaar aan via HA tbv koelen en verwarmen.
Enige is die error (iets met timing) met het staande model. Maar ook die werkt prima met FW release zonder de l/r aanpassing.
Dus voor mij is op dit moment conclusie qua versies:
- De l/r versie op de 3 hangende units
- De versie zonder l/r op de staande unit, en daar die timing error accepteren.
Kun je bij die vloermodellen überhaupt wel naar links of rechts uitblazen? Wat de nieuwe firmware namelijk doet is eerst een bepaald commando naar de AC sturen waardoor hij langere commando’s accepteert. Vervolgens blijft hij de lange commando’s sturen en verwacht hij ook lange responses terug. Als zo’n vloermodel dat niet ondersteund is het natuurlijk niet zo gek dat je foutmeldingen krijgt.
Bij de nieuwe firmware kun je overigens ook het L/R deel uitschakelen. Dan zou je in ieder geval met gelijke versies kunnen werken.

[ Voor 6% gewijzigd door Chatslet op 07-10-2023 23:43 ]


Acties:
  • 0 Henk 'm!

  • JoepW
  • Registratie: Juli 2007
  • Laatst online: 13:34

JoepW

iRacer & Home Assistant

Chatslet schreef op zaterdag 7 oktober 2023 @ 23:42:
[...]


Kun je bij die vloermodellen überhaupt wel naar links of rechts uitblazen? Wat de nieuwe firmware namelijk doet is eerst een bepaald commando naar de AC sturen waardoor hij langere commando’s accepteert. Vervolgens blijft hij de lange commando’s sturen en verwacht hij ook lange responses terug. Als zo’n vloermodel dat niet ondersteund is het natuurlijk niet zo gek dat je foutmeldingen krijgt.
Bij de nieuwe firmware kun je overigens ook het L/R deel uitschakelen. Dan zou je in ieder geval met gelijke versies kunnen werken.
Precies dat is het probleem, idd. De
Unit heeft geen l/r.
Hoe schakel ik l/r uit in de fw als ik vragen mag?

iRacing Profiel -|- Mijn RaceRig -|- Mijn stream


Acties:
  • 0 Henk 'm!

  • AUijtdehaag
  • Registratie: Oktober 2006
  • Niet online
Heb toch nog wel regelmatig deze foutmelding als ik deze inlaad:
https://github.com/RobertJansen1/MHI-AC-Ctrl-ESPHome
Heeft er iemand een idee waar dat aan kan liggen? Anderen ook last van? (op meerdere MHI units geprobeerd en foutmelding blijft)
code:
1
2
3
4
12:57:08    [W] [component:204] 
Component <unknown> took a long time for an operation (0.07 s).
12:57:08    [W] [component:205] 
Components should block for at most 20-30ms.

Afbeeldingslocatie: https://tweakers.net/i/bFvgxxQjtHNYoXkX1_1WnS1B9KM=/232x232/filters:strip_icc():strip_exif()/f/image/RgSPGfluU5aw6V1L27xDCMg2.jpg?f=fotoalbum_tile

PVOutput Github - Div ESP TK: MHI - Clack - Marstek


Acties:
  • 0 Henk 'm!

  • LinuZZ
  • Registratie: Januari 2004
  • Laatst online: 18-07 05:53
AUijtdehaag schreef op zondag 8 oktober 2023 @ 13:03:
Heb toch nog wel regelmatig deze foutmelding als ik deze inlaad:
https://github.com/RobertJansen1/MHI-AC-Ctrl-ESPHome
Heeft er iemand een idee waar dat aan kan liggen? Anderen ook last van? (op meerdere MHI units geprobeerd en foutmelding blijft)
code:
1
2
3
4
12:57:08    [W] [component:204] 
Component <unknown> took a long time for an operation (0.07 s).
12:57:08    [W] [component:205] 
Components should block for at most 20-30ms.

[Afbeelding]
Dit komt door nieuwe ESPhome: https://github.com/ginkag...1#issuecomment-1742806365 deze meldingen krijg ik ook (ook met de oude firmware zonder de 33 byte frames)

enphase 8300wp (3460 ZO, 2740 ZW, 2100 NO), 2x20 vacuümbuizen op 300l SWW, Panasonic WH-MXC12J9E8, gasloos sinds Juni 2022 Stromer st3 voor woon-werk


Acties:
  • 0 Henk 'm!

  • AUijtdehaag
  • Registratie: Oktober 2006
  • Niet online
@LinuZZ Ik zag dat ik daar zelf ook gereageerd had.
Helaas nog geen verbeteringen dus in de verdere esphome versies
Ik zit nog op 2023.8.3 ivm verwijderde verborgen directory welke ik nodig heb voor mijn verschillende github configuraties goed te kunnen laden.

PVOutput Github - Div ESP TK: MHI - Clack - Marstek


Acties:
  • 0 Henk 'm!

  • jobr
  • Registratie: Januari 2009
  • Laatst online: 18-05 18:57
Chatslet schreef op zaterdag 7 oktober 2023 @ 23:42:
Kun je bij die vloermodellen überhaupt wel naar links of rechts uitblazen? Wat de nieuwe firmware namelijk doet is eerst een bepaald commando naar de AC sturen waardoor hij langere commando’s accepteert. Vervolgens blijft hij de lange commando’s sturen en verwacht hij ook lange responses terug. Als zo’n vloermodel dat niet ondersteund is het natuurlijk niet zo gek dat je foutmeldingen krijgt.
Bij de nieuwe firmware kun je overigens ook het L/R deel uitschakelen. Dan zou je in ieder geval met gelijke versies kunnen werken.
Die vloerunit ondersteund een WF-Rac module dus de nieuwe FW moet ook werken. Dat doet ie ook want anders krijg je continue errors. Alleen faalt de checksum regelmatig, wat ook al het geval is met de vorige versie. Alleen nu veel vaker, omdat er nu 2 checksums aanwezig zijn. Of de timing van de unit is niet helemaal lekker of er wordt storing opgepikt.

Acties:
  • +1 Henk 'm!

  • Willempie27
  • Registratie: Augustus 2017
  • Laatst online: 11:40
AUijtdehaag schreef op zondag 8 oktober 2023 @ 13:03:
Heb toch nog wel regelmatig deze foutmelding als ik deze inlaad:
https://github.com/RobertJansen1/MHI-AC-Ctrl-ESPHome
Heeft er iemand een idee waar dat aan kan liggen? Anderen ook last van? (op meerdere MHI units geprobeerd en foutmelding blijft)
code:
1
2
3
4
12:57:08    [W] [component:204] 
Component <unknown> took a long time for an operation (0.07 s).
12:57:08    [W] [component:205] 
Components should block for at most 20-30ms.

[Afbeelding]
Ik heb deze melding ook. Alles lijkt verder te werken

Acties:
  • 0 Henk 'm!

  • Willempie27
  • Registratie: Augustus 2017
  • Laatst online: 11:40
.

[ Voor 98% gewijzigd door Willempie27 op 08-10-2023 20:56 ]


Acties:
  • +1 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
Chatslet schreef op zaterdag 7 oktober 2023 @ 23:42:
[...]


Kun je bij die vloermodellen überhaupt wel naar links of rechts uitblazen?
Bij de vloermodellen kan je wel naar L/R uitblazen, maar dit wordt geregeld door handmatig een linker- en rechtergedeelte een kant op te richten.

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • +1 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
JoepW schreef op zondag 8 oktober 2023 @ 06:23:
[...]

Precies dat is het probleem, idd. De
Unit heeft geen l/r.
Hoe schakel ik l/r uit in de fw als ik vragen mag?
Support.h

define USE_EXTENDED_FRAME_SIZE van true naar false veranderen

Acties:
  • +1 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
jobr schreef op zondag 8 oktober 2023 @ 18:44:
[...]


Die vloerunit ondersteund een WF-Rac module dus de nieuwe FW moet ook werken. Dat doet ie ook want anders krijg je continue errors. Alleen faalt de checksum regelmatig, wat ook al het geval is met de vorige versie. Alleen nu veel vaker, omdat er nu 2 checksums aanwezig zijn. Of de timing van de unit is niet helemaal lekker of er wordt storing opgepikt.
De kans bestaat natuurlijk dat die WF-Rac modules aan de response van de unit kunnen zien of die extended frame size wel of niet wordt ondersteund. De MHI-AC-CTRL stuurt er gewoon extended frames heen ongeacht het antwoord van de unit. Storing oid kan natuurlijk ook maar omdat hij de wifi module (en kabel?) heeft omgewisseld vanuit een airco waar het allemaal wel werkt twijfel ik daar een beetje over. Een slecht signaal wordt daardoor toch wat onwaarschijnlijker. Misschien slechte aarde oid?

[ Voor 0% gewijzigd door Chatslet op 09-10-2023 09:09 . Reden: typo's ]


Acties:
  • 0 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
Taro schreef op zondag 8 oktober 2023 @ 20:36:
[...]

Bij de vloermodellen kan je wel naar L/R uitblazen, maar dit wordt geregeld door handmatig een linker- en rechtergedeelte een kant op te richten.
Heb jij die vloermodellen met MHI-AC-CTRL werkend? En zie je daar in beperkingen in functionaliteit tov de afstandsbediening? Hier komen er eind van de maand 3 boven dus ik ben erg benieuwd.

Acties:
  • 0 Henk 'm!

  • JoepW
  • Registratie: Juli 2007
  • Laatst online: 13:34

JoepW

iRacer & Home Assistant

Chatslet schreef op zondag 8 oktober 2023 @ 23:57:
[...]


Support.h

define USE_EXTENDED_FRAME_SIZE van true naar false veranderen
Support.h kan ik btw nergens vinden in mijn config/ESPHome directory.

iRacing Profiel -|- Mijn RaceRig -|- Mijn stream


Acties:
  • +1 Henk 'm!

  • LinuZZ
  • Registratie: Januari 2004
  • Laatst online: 18-07 05:53
de esphome code heeft (nog?) geen mogelijkheid om de grotere framesize uit te zetten.

enphase 8300wp (3460 ZO, 2740 ZW, 2100 NO), 2x20 vacuümbuizen op 300l SWW, Panasonic WH-MXC12J9E8, gasloos sinds Juni 2022 Stromer st3 voor woon-werk


Acties:
  • +1 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
Chatslet schreef op maandag 9 oktober 2023 @ 00:05:
[...]


Heb jij die vloermodellen met MHI-AC-CTRL werkend? En zie je daar in beperkingen in functionaliteit tov de afstandsbediening? Hier komen er eind van de maand 3 boven dus ik ben erg benieuwd.
Ja, heb er één op zolder en die werkt prima. Kan de verschillende functies gebruiken en zie ook alle states/sensoren.

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • +1 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
@JoepW Ik ben hier uitgegaan van MHI-AC-CTRL ofwel de niet ESPHome versie. Kennelijk zijn die twee dus toch verschillend en kun je dan zoals @LinuZZ zegt die functionaliteit niet uitzetten.

Acties:
  • 0 Henk 'm!

  • JoepW
  • Registratie: Juli 2007
  • Laatst online: 13:34

JoepW

iRacer & Home Assistant

Misschien moet ik eens overwegen om van ESPHome over te gaan naar de MQTT variant. Dichter op de ontwikkeling.

Maar dan zal ik denk ik elke module moeten uitbouwen om fysiek te flashen, toch?

iRacing Profiel -|- Mijn RaceRig -|- Mijn stream


Acties:
  • 0 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
@JoepW Zit daar geen OTA flash in dan? Bij de MQTT variant kun je vanuit Areduino IDE gewoon onder port die dingen kiezen als ze op dezelfde wifi zitten. Anders als ze eventueel achter het metalen klepje zitten en nog wel bereikbaar zijn gewoon bij de Action een flink lange USB verlengkabel halen. Zo heb ik het voorheen wel eens gedaan.

Acties:
  • +1 Henk 'm!

  • Willempie27
  • Registratie: Augustus 2017
  • Laatst online: 11:40
JoepW schreef op maandag 9 oktober 2023 @ 09:27:
Misschien moet ik eens overwegen om van ESPHome over te gaan naar de MQTT variant. Dichter op de ontwikkeling.

Maar dan zal ik denk ik elke module moeten uitbouwen om fysiek te flashen, toch?
Volgens mij kan je in Arduino of een ander flash programma naar een .bin flashen en activeer daar ook OTA (op youtube video's genoeg).
In ESPhome de webserver aanzetten in de yaml file als die nog niet aan staan. Daarna naar het ipadres en onderaan kan je de bin file uploaden om te flashen.

Acties:
  • 0 Henk 'm!

  • jobr
  • Registratie: Januari 2009
  • Laatst online: 18-05 18:57
Chatslet schreef op maandag 9 oktober 2023 @ 00:03:
De MHI-AC-CTRL stuurt er gewoon extended frames heen ongeacht het antwoord van de unit.
Nee hoor, zo werkt het niet. De unit bepaald de frame size. MHI-AC-CTRL volgt de unit.
Alleen zul je wel continue fouten krijgen aangezien er wel 33 bytes worden verwacht (ik heb dat in MHI-AC-CTR niet dynamisch gemaakt). Maar dat zijn geen checksum fouten.
Als de unit 20 bytes stuurt en de MHI-AC-CTR staat in extended frame mode, dan is er communicatie helemaal niet mogelijk. De unit zal dan na circa 120s uitschakelen.

Acties:
  • +1 Henk 'm!

  • jobr
  • Registratie: Januari 2009
  • Laatst online: 18-05 18:57
LinuZZ schreef op maandag 9 oktober 2023 @ 09:19:
de esphome code heeft (nog?) geen mogelijkheid om de grotere framesize uit te zetten.
Moet je in mhi_ac_ctrl.h de mhi_ac_ctrl_core.set_frame_size(33); veranderen in mhi_ac_ctrl_core.set_frame_size(20); of de regel weghalen.
Je hebt dan nog wel de 3D auto en vanes L/R sensoren maar die doen dan niets.

Acties:
  • 0 Henk 'm!

  • jobr
  • Registratie: Januari 2009
  • Laatst online: 18-05 18:57
Chatslet schreef op zondag 8 oktober 2023 @ 23:57:
Support.h

define USE_EXTENDED_FRAME_SIZE van true naar false veranderen
Nee, de regel uit commentariëren !

Acties:
  • +1 Henk 'm!

  • jobr
  • Registratie: Januari 2009
  • Laatst online: 18-05 18:57
JoepW schreef op maandag 9 oktober 2023 @ 09:27:
Misschien moet ik eens overwegen om van ESPHome over te gaan naar de MQTT variant.
Je zou eens kunnen proberen met je vloerunit maar ik verwacht dat je nog steeds die checksum errors krijgt. Maar wie weet :)
(denk aan compileren voor 160Mhz.

Acties:
  • 0 Henk 'm!

  • JoepW
  • Registratie: Juli 2007
  • Laatst online: 13:34

JoepW

iRacer & Home Assistant

jobr schreef op maandag 9 oktober 2023 @ 18:39:
[...]


Moet je in mhi_ac_ctrl.h de mhi_ac_ctrl_core.set_frame_size(33); veranderen in mhi_ac_ctrl_core.set_frame_size(20); of de regel weghalen.
Je hebt dan nog wel de 3D auto en vanes L/R sensoren maar die doen dan niets.
Dat zal ik morgen eens proberen.

iRacing Profiel -|- Mijn RaceRig -|- Mijn stream


Acties:
  • 0 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
@jobr ik begrijp dat jij de gene bent die de code heeft geschreven voor de 33 bytes frames? Allereerst bedankt voor je werk, wordt zeer gewaardeerd! Denk je dat het ook mogelijk is om dingen als silent mode voor de buitenunit aan te zetten? Of zijn dat dingen die echt alleen met de afstandsbediening kunnen?

Acties:
  • +4 Henk 'm!

  • jobr
  • Registratie: Januari 2009
  • Laatst online: 18-05 18:57
Chatslet schreef op woensdag 11 oktober 2023 @ 08:07:
Denk je dat het ook mogelijk is om dingen als silent mode voor de buitenunit aan te zetten?
De dingen die er nu allemaal inzitten zijn dmv een logic analyser of MHI-AC-Trace bepaald met een device aangesloten zoals een WF-RAC module met de app (of de wired remote control).
Je hebt dus een device op de CNS poort nodig die de betreffende functie kan schakelen waardoor je de positie (en waarden) in het frame kan bepalen.
Silent mode is niet beschikbaar op een ander device. (net zoals bijv ECO mode)

Dus zodra er iets nieuws in bijv de MHI app beschikbaar komt kunnen we dat afkijken en implementeren.
Zo heb ik ook de 3D auto en vanes L/R afgekeken en geïmplementeerd.

Acties:
  • 0 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
Vorige week woensdag 5 units in gebruik genomen, 1 ervan kon ik wel benaderen, maar niet bedienen via HA. Nieuwe custom wifi module binnengekregen en gemonteerd, nu doen ze het gelukkig allemaal. Eindelijk aan de slag met automatiseringen :)
Willempie27 schreef op zondag 8 oktober 2023 @ 20:05:
[...]

Ik heb deze melding ook. Alles lijkt verder te werken
Zojuist alle apparaten van een update voorzien en alleen het vloermodel geeft nu ook iedere paar seconden deze melding:

[19:01:58][W][component:205]: Components should block for at most 20-30ms.
[19:01:58][W][component:204]: Component <unknown> took a long time for an operation (0.06 s).
[19:01:58][W][component:205]: Components should block for at most 20-30ms.
[19:01:59][W][component:204]: Component <unknown> took a long time for an operation (0.06 s)

Kwestie van wachten op een nieuwe update?

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • 0 Henk 'm!

  • JoepW
  • Registratie: Juli 2007
  • Laatst online: 13:34

JoepW

iRacer & Home Assistant

Taro schreef op woensdag 11 oktober 2023 @ 19:10:
Vorige week woensdag 5 units in gebruik genomen, 1 ervan kon ik wel benaderen, maar niet bedienen via HA. Nieuwe custom wifi module binnengekregen en gemonteerd, nu doen ze het gelukkig allemaal. Eindelijk aan de slag met automatiseringen :)


[...]

Zojuist alle apparaten van een update voorzien en alleen het vloermodel geeft nu ook iedere paar seconden deze melding:

[19:01:58][W][component:205]: Components should block for at most 20-30ms.
[19:01:58][W][component:204]: Component <unknown> took a long time for an operation (0.06 s).
[19:01:58][W][component:205]: Components should block for at most 20-30ms.
[19:01:59][W][component:204]: Component <unknown> took a long time for an operation (0.06 s)

Kwestie van wachten op een nieuwe update?
Helaas heb ik die ook en daarom het level van loggen naar error gezet.

iRacing Profiel -|- Mijn RaceRig -|- Mijn stream


Acties:
  • +2 Henk 'm!

  • jobr
  • Registratie: Januari 2009
  • Laatst online: 18-05 18:57
Taro schreef op woensdag 11 oktober 2023 @ 19:10:
Zojuist alle apparaten van een update voorzien en alleen het vloermodel geeft nu ook iedere paar seconden deze melding:

[19:01:58][W][component:205]: Components should block for at most 20-30ms.
[19:01:58][W][component:204]: Component <unknown> took a long time for an operation (0.06 s).
[19:01:58][W][component:205]: Components should block for at most 20-30ms.
[19:01:59][W][component:204]: Component <unknown> took a long time for an operation (0.06 s)

Kwestie van wachten op een nieuwe update?
https://github.com/ginkage/MHI-AC-Ctrl-ESPHome/issues/61

Acties:
  • 0 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
Hier draaien inmiddels alle MHI-AC-CTRL modules op de nieuwste firmware maar ik kom er zojuist achter dat in home assistant het MQTT climate platform alleen met pre-defined waarden kan werken en er dus niet iets aan gemaakt kan worden voor VanesLR en 3D Auto. Hoe hebben jullie dit opgelost? Ik heb nu even snel dit gedaan maar dan worden het aparte knopjes en drop boxen die niet in de thermostat card komen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 select:
    - unique_id: "AC-Keuken-LR"
      name: "AC-Keuken LR Vanes"
      command_topic: "AC-Keuken/set/VanesLR"
      state_topic: "AC-Keuken/VanesLR"
      options:
        - "1"
        - "2"
        - "3"
        - "4"
        - "5"
        - "6"
        - "7"
        - "swing"
    - unique_id: "AC-Woonkamer-LR"
      name: "AC-Woonkamer LR Vanes"
      command_topic: "AC-Woonkamer/set/VanesLR"
      state_topic: "AC-Woonkamer/VanesLR"
      options:
        - "1"
        - "2"
        - "3"
        - "4"
        - "5"
        - "6"
        - "7"
        - "swing"
        
 switch:
    - unique_id: "AC-Keuken-3Dauto"
      name: "AC-Keuken 3D Auto"
      command_topic: "AC-Keuken/set/3Dauto"
      state_topic: "AC-Keuken/3Dauto"
      payload_on: "on"
      payload_off: "off"
    - unique_id: "AC-Woonkamer-3Dauto"
      name: "AC-Woonkamer 3D Auto"
      command_topic: "AC-Woonkamer/set/3Dauto"
      state_topic: "AC-Woonkamer/3Dauto"
      payload_on: "on"
      payload_off: "off"

[ Voor 67% gewijzigd door Chatslet op 13-10-2023 22:33 ]


Acties:
  • 0 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
Welke automatiseringen hebben jullie evt. gemaakt en welke (specifieke) mogelijkheden van de MHI's gebruik je daarbij?

Zelf zit ik sowieso aan een schema per dag te denken, die mits we niet op bijv. vakantie zijn, op verschillende momenten op de dag de gewenste temperatuur iets bijstelt per ruimte. Maar ik wil deze ook koppelen aan dynamische tarieven. Zo is het stroomtarief de komende 1,5 uur nog 17 cent/kWh en om 20:00 39 cent/kWh, je kunt dus nu al beter starten met (voor)verwarmen dan om bijv. 20:00 alles snel van 19.5 graden naar 20.5 graden te verwarmen.

Wat ik zou willen realiseren is dat bij een hoger tarief er iets wordt getriggerd (bijv. ECO-mode aan, minder hard blazen, silent modus, kleinere delta met huidige temperatuur instellen, etc.) waardoor je optimaal gebruikmaakt van de fluctuering in dynamische tarieven. Ik wil nadrukkelijk niet bij een hoge prijs alles uitzetten en bij een lage prijs alles aanslingeren, het verschil moet subtiel zijn :)

Heel benieuwd wat anderen voor automatiseringen hebben toegepast en of daar specifieke MHI mogelijkheden/instellingen bij komen kijken.

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • 0 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
@Taro alles wat je hier noemt kan vrij eenvoudig in Home Assistant. Zelf heb ik ze met MHI-AC-CTRL modules gekoppeld. Wat ik zelf bijvoorbeeld doe is in de zomer pas de airco’s laten starten als de zonnepanelen genoeg energie opbrengen. Nog iets anders (niet airco specifiek) is een soort van load shedding. In bepaalde gevallen staan hier te veel apparaten aan. Bijvoorbeeld de vaatwasser, de wasmachine terwijl er op inductie wordt gekookt. Als er dan in de keuken heet water wordt gepakt en de close-in boiler springt aan dan wordt het vrij kritiek en dan kan een airco dus net even te veel zijn. Als er dus op een bepaalde fase veel vermogen wordt gevraagd en er wordt korte tijd meer dan 24 ampere gemeten dan wordt de airco die op die fase zit uitgezet en pas na 30 minuten weer aangezet.

Acties:
  • 0 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
@Chatslet Ik heb ze inderdaad ook in HA staan met MHI-AC-CTRL modules. De laadpaal heeft loadbalancing en verder zullen we niet zo snel vermogen moeten beperken. Ik ben dus echt op zoek naar een goede automatisering om slim te sturen op verbruik en tarieven.

Voor zover ik weet kan je echter via HA nog niet bijv. de Eco-mode of Silent mode (de)activeren. Dat lijkt mij een makkelijke optie om bijv. tijdens duurdere uren het verbruik te beperken zonder de unit uit te zetten of ingewikkeld te gaan doen met temperaturen bijsturen.

Vandaar dat ik benieuwd ben naar anderen die op een slimme manier via HA en MHI-AC-CTRL automatiseringen hebben draaien die hierop sturen.

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • 0 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
Andere vraag: Ik heb mij ingelezen in de 2 graden offset en waarvoor dat bedoeld is. In de praktijk zullen wij de 3 slaapkamers alleen koelen en nauwelijks verwarmen. Echter zou ik ze wel op minimaal 18 graden willen houden omdat via de overloop, vloeren, etc. de warmte uit o.a. de woonkamer wordt onttrokken.

Volgens mij kan ik de slaapkamers met offset erbij alleen vanaf 20 graden verwarmen, omdat de minimale instelling 18 graden betreft + 2 graden offset = 20 graden.

Zonder offset kan ik ze daadwerkelijk op 18 graden instellen, correct? Met voldoende luchtcirculatie zou de temperatuur bovenin tegen het plafond niet enorm veel hoger dan laag bij de vloer moeten zijn.

Ik heb berichten gelezen dat het 30 seconden indrukken van de ON/OFF zorgt voor het uitschakelen van de offset, maar op zowel de unit zelf als op de AB heeft dit geen effect. In de handleiding kan ik hierover ook niets vinden.

Is er een manier om de offset naar 0 aan te kunnen passen?

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • +1 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
@Taro Kijk daar voor even in de HACS store. Versatile thermostat kan dat zo ongeveer en er zijn daar nog wat thermostat plug-ins die op basis van energie data dingen kunnen.

Acties:
  • 0 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
@Taro Die offset uitzetten moet je inderdaad even handigheid in krijgen. Uit mijn hoofd was het: Stroom er af, stroom er op, aanzetten met knop op de binnen unit, uitzetten met knop op de binnenunit en daarna de knop op de binnen unit ingedrukt houden. Je hoort aan de piepjes of het gelukt is.

Acties:
  • 0 Henk 'm!

  • LinuZZ
  • Registratie: Januari 2004
  • Laatst online: 18-07 05:53
Taro schreef op zaterdag 14 oktober 2023 @ 20:20:
@Chatslet Ik heb ze inderdaad ook in HA staan met MHI-AC-CTRL modules. De laadpaal heeft loadbalancing en verder zullen we niet zo snel vermogen moeten beperken. Ik ben dus echt op zoek naar een goede automatisering om slim te sturen op verbruik en tarieven.

Voor zover ik weet kan je echter via HA nog niet bijv. de Eco-mode of Silent mode (de)activeren. Dat lijkt mij een makkelijke optie om bijv. tijdens duurdere uren het verbruik te beperken zonder de unit uit te zetten of ingewikkeld te gaan doen met temperaturen bijsturen.

Vandaar dat ik benieuwd ben naar anderen die op een slimme manier via HA en MHI-AC-CTRL automatiseringen hebben draaien die hierop sturen.
Hoewel het geen eco mode is, als je de fan speed van je binnen unit lager zet, kan je buiten unit minder vermogen aan warmte of koeling kwijt en gaat hij vanzelf langzamer draaien (minder Hz, dus minder verbruik)

enphase 8300wp (3460 ZO, 2740 ZW, 2100 NO), 2x20 vacuümbuizen op 300l SWW, Panasonic WH-MXC12J9E8, gasloos sinds Juni 2022 Stromer st3 voor woon-werk


Acties:
  • 0 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
LinuZZ schreef op zaterdag 14 oktober 2023 @ 20:48:
[...]


Hoewel het geen eco mode is, als je de fan speed van je binnen unit lager zet, kan je buiten unit minder vermogen aan warmte of koeling kwijt en gaat hij vanzelf langzamer draaien (minder Hz, dus minder verbruik)
Dat is idd een optie, dus zoiets?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
alias: MHI Dynamische fan speed
description: ""
trigger:
  - platform: time_pattern
    minutes: "05"
condition:
  - condition: numeric_state
    entity_id: sensor.zonneplan_current_electricity_tariff
    below: 0.2
action:
  - service: climate.set_fan_mode
    data:
      fan_mode: "3"
    target:
      device_id:
        - 5447449cbc70cefcd2a99fa0844f9976
        - 54dc207e5982c1947633a5b2c7db2ae3
        - 05e6d6f09b70b2bcc638e9c1c65392f4
        - 0b4d4a782d44deab883affd56a93e703
        - 2a89252631cfa697036df959949179f9
mode: single

Check: het betreft deze waarde die ik aan wil passen: <entiteit> indoor unit fan speed -> 1/2/3/4/5

Maar ik weet niet of set_fan_mode inderdaad dit gedeelte aanroept en daar de 3e optie kiest, of deze instelt op speed 3 ipv mode "3", maar het betreft wel deze setting die ik aan wil passen:

Afbeeldingslocatie: https://tweakers.net/i/_fZCbnMOQI2_eOYywmRrowzoVWA=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/vaU9UIN031TxO5dn9y4PnQKG.png?f=user_large

Weet iemand of dit de juiste manier is?

Edit: Fan mode en fan speed werken beide niet, zowel via climate als fan. Benieuwd welke service/actie ik wel moet gebruiken.

[ Voor 3% gewijzigd door Taro op 14-10-2023 21:34 ]

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • 0 Henk 'm!

  • LinuZZ
  • Registratie: Januari 2004
  • Laatst online: 18-07 05:53
Taro schreef op zaterdag 14 oktober 2023 @ 21:22:
[...]

Dat is idd een optie, dus zoiets?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
alias: MHI Dynamische fan speed
description: ""
trigger:
  - platform: time_pattern
    minutes: "05"
condition:
  - condition: numeric_state
    entity_id: sensor.zonneplan_current_electricity_tariff
    below: 0.2
action:
  - service: climate.set_fan_mode
    data:
      fan_mode: "3"
    target:
      device_id:
        - 5447449cbc70cefcd2a99fa0844f9976
        - 54dc207e5982c1947633a5b2c7db2ae3
        - 05e6d6f09b70b2bcc638e9c1c65392f4
        - 0b4d4a782d44deab883affd56a93e703
        - 2a89252631cfa697036df959949179f9
mode: single

Check: het betreft deze waarde die ik aan wil passen: <entiteit> indoor unit fan speed -> 1/2/3/4/5

Maar ik weet niet of set_fan_mode inderdaad dit gedeelte aanroept en daar de 3e optie kiest, of deze instelt op speed 3 ipv mode "3", maar het betreft wel deze setting die ik aan wil passen:

[Afbeelding]

Weet iemand of dit de juiste manier is?

Edit: Fan mode en fan speed werken beide niet, zowel via climate als fan. Benieuwd welke service/actie ik wel moet gebruiken.
vanuit de climate card moet fan speed (degene uit je screenshot) gewoon werken. als dat niet zo is, dan is het eerst zaak het daar op te lossen. als het daar werkt, kun je vervolgens de automations gaan doen.

enphase 8300wp (3460 ZO, 2740 ZW, 2100 NO), 2x20 vacuümbuizen op 300l SWW, Panasonic WH-MXC12J9E8, gasloos sinds Juni 2022 Stromer st3 voor woon-werk


Acties:
  • 0 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
@Taro Heb je misschien 3D auto aan staan? Want kun je inderdaad de fanspeed niet aanpassen. Als je de airco met MQTT aanstuurt kun je ook nog overwegen om gewoon rechtstreeks in het set topic te schrijven.

Acties:
  • 0 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
LinuZZ schreef op zondag 15 oktober 2023 @ 09:52:
[...]


vanuit de climate card moet fan speed (degene uit je screenshot) gewoon werken. als dat niet zo is, dan is het eerst zaak het daar op te lossen. als het daar werkt, kun je vervolgens de automations gaan doen.
Vanuit de climate card werkt die optie inderdaad.
Chatslet schreef op zondag 15 oktober 2023 @ 09:57:
@Taro Heb je misschien 3D auto aan staan? Want kun je inderdaad de fanspeed niet aanpassen. Als je de airco met MQTT aanstuurt kun je ook nog overwegen om gewoon rechtstreeks in het set topic te schrijven.
3D Auto staat uit en ik gebruik geen MQTT.

Ik heb al even gekeken of ik die Climate Card kan ontleden om te zien wat ze aanroepen, maar nog niet gelukt.

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • 0 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
@Taro Ik heb hier even snel voor je gekeken en ik kan de fan mode aanpassen door 1, 2, 3, 4 of auto te sturen. Ik heb dat wel de MHI-AC-CRRL zonder esphome en dus stuur ik ze via mqtt aan. Voorbeeldje:

code:
1
2
3
4
5
service: climate.set_fan_mode
data:
  fan_mode: "4"
target:
  entity_id: climate.aircowoonkamer

[ Voor 13% gewijzigd door Chatslet op 15-10-2023 10:49 ]


Acties:
  • 0 Henk 'm!

  • JoepW
  • Registratie: Juli 2007
  • Laatst online: 13:34

JoepW

iRacer & Home Assistant

Taro schreef op zondag 15 oktober 2023 @ 09:59:
[...]

Vanuit de climate card werkt die optie inderdaad.


[...]

3D Auto staat uit en ik gebruik geen MQTT.

Ik heb al even gekeken of ik die Climate Card kan ontleden om te zien wat ze aanroepen, maar nog niet gelukt.
L/R kan je in yaml als volgt instellen:
YAML:
1
2
3
4
5
service: select.select_option
data:
  option: "Left"
target:
  entity_id: select.mhi_gang_fan_control_left_right

De keuze zijn:
  1. Left
  2. Left/Center
  3. Center
  4. Center/Right
  5. Right
  6. Wide
  7. Spot
  8. Swing
Up/down werkt vergelijkbaar met:
YAML:
1
2
3
4
5
service: select.select_option
data:
  option: "Up"
target:
  entity_id: select.mhi_gang_fan_control_up_down

De keuze zijn:
  1. Up
  2. Up/Center
  3. Center/Down
  4. Down
  5. Swing
En zoals @Chatslet schrijft werkt climate.set_fan_mode prima voor de fan speed.

(Ik gebruik ESPHome)

iRacing Profiel -|- Mijn RaceRig -|- Mijn stream


Acties:
  • 0 Henk 'm!

  • Rijo038
  • Registratie: April 2023
  • Laatst online: 17:28
is het mogelijk om met de MHI-AC-CTRL bediend via ESPHome, de huidige temperatuur van mijn Tado als Huidige temperatuur te gebruiken?
Nu gebruikt de airco zijn eigen temperatuurmeter, maar die zou ik graag overschrijven met de temperatuur gemeten door mijn Tado thermostaat.

Acties:
  • 0 Henk 'm!

  • Rijo038
  • Registratie: April 2023
  • Laatst online: 17:28
Rijo038 schreef op zondag 15 oktober 2023 @ 12:39:
is het mogelijk om met de MHI-AC-CTRL bediend via ESPHome, de huidige temperatuur van mijn Tado als Huidige temperatuur te gebruiken?
Nu gebruikt de airco zijn eigen temperatuurmeter, maar die zou ik graag overschrijven met de temperatuur gemeten door mijn Tado thermostaat.
en laat maar. Ik ben zelf eens wat beter gaan zoeken en heb het kunnen vinden. Zit al in de ESPHome met set_api_room_temperature en een automatisering.
Gaat als de brandweer en de binnenunit gedraagt zich ook een stuk stabieler ineens :)

[ Voor 5% gewijzigd door Rijo038 op 15-10-2023 13:51 ]


Acties:
  • 0 Henk 'm!

  • JoepW
  • Registratie: Juli 2007
  • Laatst online: 13:34

JoepW

iRacer & Home Assistant

Rijo038 schreef op zondag 15 oktober 2023 @ 13:30:
[...]

en laat maar. Ik ben zelf eens wat beter gaan zoeken en heb het kunnen vinden. Zit al in de ESPHome met set_api_room_temperature en een automatisering.
Gaat als de brandweer en de binnenunit gedraagt zich ook een stuk stabieler ineens :)
Idd werkt als een speer. Ik heb voor elke Airco een losse thermometer die via een automatisering de temp wegschrijft NA een temp-wijziging en als de airco aan staat.

iRacing Profiel -|- Mijn RaceRig -|- Mijn stream


Acties:
  • 0 Henk 'm!

  • Willempie27
  • Registratie: Augustus 2017
  • Laatst online: 11:40
JoepW schreef op zondag 15 oktober 2023 @ 14:31:
[...]

Idd werkt als een speer. Ik heb voor elke Airco een losse thermometer die via een automatisering de temp wegschrijft NA een temp-wijziging en als de airco aan staat.
Ik neem aan dat elke 55 seconden de temp wordt gestuurd naar de airco?

Acties:
  • 0 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
Chatslet schreef op zondag 15 oktober 2023 @ 10:48:
@Taro Ik heb hier even snel voor je gekeken en ik kan de fan mode aanpassen door 1, 2, 3, 4 of auto te sturen. Ik heb dat wel de MHI-AC-CRRL zonder esphome en dus stuur ik ze via mqtt aan. Voorbeeldje:

code:
1
2
3
4
5
service: climate.set_fan_mode
data:
  fan_mode: "4"
target:
  entity_id: climate.aircowoonkamer
Doet hier helaas niets, uiteraard de juiste entity gekozen.

[ Voor 12% gewijzigd door Taro op 15-10-2023 15:59 ]

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • 0 Henk 'm!

  • JoepW
  • Registratie: Juli 2007
  • Laatst online: 13:34

JoepW

iRacer & Home Assistant

Willempie27 schreef op zondag 15 oktober 2023 @ 14:45:
[...]

Ik neem aan dat elke 55 seconden de temp wordt gestuurd naar de airco?
Je bedoelt omdat ie anders terugvalt naar zijn interne sensor. Idd.

iRacing Profiel -|- Mijn RaceRig -|- Mijn stream


Acties:
  • 0 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
JoepW schreef op zondag 15 oktober 2023 @ 14:31:
[...]

Idd werkt als een speer. Ik heb voor elke Airco een losse thermometer die via een automatisering de temp wegschrijft NA een temp-wijziging en als de airco aan staat.
Wat voor thermometer gebruik je daar voor? Mijn ervaring is dat het met Zigbee thermometers niet zo betrouwbaar werkt.

Acties:
  • 0 Henk 'm!

  • JoepW
  • Registratie: Juli 2007
  • Laatst online: 13:34

JoepW

iRacer & Home Assistant

Chatslet schreef op zondag 15 oktober 2023 @ 15:32:
[...]


Wat voor thermometer gebruik je daar voor? Mijn ervaring is dat het met Zigbee thermometers niet zo betrouwbaar werkt.
Ondank dat er veel negatieve ervaringen zijn gebruik ik toch de Xiaomi WSDCGQ11LM.
Er zijn negatieve berichten over de update frequentie, maar ik heb daar helemaal geen last van. Als er een temperatuursverandering is krijg ik die vrij snel door.
Veel mensen adviseren BT sensors, maar ik heb de noodzaak nog niet gehad.

iRacing Profiel -|- Mijn RaceRig -|- Mijn stream


Acties:
  • +1 Henk 'm!

  • Theetjuh
  • Registratie: Januari 2000
  • Laatst online: 20:01
Xiaomi BT thermometer met custom rom, BThome protocol, gebruikmakende van ESPhome BT proxies, werkt helemaal super.

Acties:
  • 0 Henk 'm!

  • jobr
  • Registratie: Januari 2009
  • Laatst online: 18-05 18:57
Taro schreef op zaterdag 14 oktober 2023 @ 20:29:
Volgens mij kan ik de slaapkamers met offset erbij alleen vanaf 20 graden verwarmen, omdat de minimale instelling 18 graden betreft + 2 graden offset = 20 graden.
Als je het setpoint op 18 graden zet wil niet zeggen dat het ook precies 18 graden wordt. Idem met offset wil het niet zeggen dat de kamer precies 20 graden wordt. Verwarmen met airco werkt echter ander dan met CV qua nauwkeurigheid.
Je moet dus gewoon eerst proberen met offset hoe warm het wordt als je het setpoint op 18 graden zet. En natuurlijk als het wat kouder buiten wordt.
Dan kun je bepalen of je de offset moet uitzetten.

Acties:
  • 0 Henk 'm!

  • jobr
  • Registratie: Januari 2009
  • Laatst online: 18-05 18:57
Chatslet schreef op zaterdag 14 oktober 2023 @ 20:37:
@Taro Die offset uitzetten moet je inderdaad even handigheid in krijgen. Uit mijn hoofd was het: Stroom er af, stroom er op, aanzetten met knop op de binnen unit, uitzetten met knop op de binnenunit en daarna de knop op de binnen unit ingedrukt houden. Je hoort aan de piepjes of het gelukt is.
Afbeeldingslocatie: https://tweakers.net/i/sUttihC0IqjXeEzcEPSj1XEFx8U=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/zqaMKdL1JzUcSdWUAYmgqACa.jpg?f=user_large

ON/OFF hierboven is de knop op de binnenunit. Stroom hoeft er dus niet af.

Acties:
  • 0 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
jobr schreef op zondag 15 oktober 2023 @ 19:07:
[...]


[Afbeelding]

ON/OFF hierboven is de knop op de binnenunit. Stroom hoeft er dus niet af.
Heb ik gisteren geprobeerd, maar in HA zag ik terug dat de unit gedurende die tijd iedere seconde 2x tussen verschillende modi gewisseld heeft ipv de offset uit te schakelen.

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • 0 Henk 'm!

  • Willempie27
  • Registratie: Augustus 2017
  • Laatst online: 11:40
Chatslet schreef op zondag 15 oktober 2023 @ 15:32:
[...]


Wat voor thermometer gebruik je daar voor? Mijn ervaring is dat het met Zigbee thermometers niet zo betrouwbaar werkt.
Ik heb ook van die zigbee thermometers. Ze meten nauwkeurig. Als ik ze naast elkaar legt en de temperatuur is stabiel geven ook exact hetzelfde aan.
Zodra de woonkamer 18 graden is en ik wil naar 21 verwarmen lopen ze uiteen vanwege de ververssnelheid.

Nu heb ik 2 sensoren in de woonkamer en neem daar het gemiddelde van en dat werkt eigenlijk best goed. De bedoeling was om de unit te laten blazen naar de sensor met de laagste temperatuur maar dat kon vorig jaar nog niet. Nu met de laatste update kan je wel L/R sturen dus ik ga daar weer mee aan de slag.

Met 3 sensoren krijg je waarschijnlijk nog een beter resultaat.

Acties:
  • 0 Henk 'm!

  • Waah
  • Registratie: Maart 2009
  • Laatst online: 18:13
Chatslet schreef op zondag 15 oktober 2023 @ 15:32:
[...]


Wat voor thermometer gebruik je daar voor? Mijn ervaring is dat het met Zigbee thermometers niet zo betrouwbaar werkt.
Ik gebruik zelf de Nest-thermostaat die er nog zit omdat de CV er nog hangt _O-
Die maakt enkel warm water nog... maar is ook een mooie thermometer voor de airco :P


Momenteel zelf bezig met het idee om boven ook airco te plaatsen, maar dan een duct-model in de gang. Daar zou ik een verlaagd plafond kunnen maken en zo slangen naar alle kamers kunnen maken en roosters kunnen plaatsen.

Moet het nog nameten en tekenen, maar anders zouden het 4 binnenunits worden, waarvan een aantal dan een condenspompje nodig heeft... En dat zie ik niet zo zitten op de slaapkamers. O-)

Helaas is er weinig info over dat soort units en hoe je dit het beste kan plaatsen, en volgens mij zijn er ook niet zoveel bedrijfjes die deze units plaatsen. Ondanks dat 1 kanalunit waarschijnlijk goedkoper is als 4 losse binnenunits :+

Acties:
  • +1 Henk 'm!

  • Scooper
  • Registratie: Juni 2001
  • Laatst online: 18-07 14:03
Willempie27 schreef op maandag 16 oktober 2023 @ 10:15:
[...]

Ik heb ook van die zigbee thermometers. Ze meten nauwkeurig. Als ik ze naast elkaar legt en de temperatuur is stabiel geven ook exact hetzelfde aan.
Zodra de woonkamer 18 graden is en ik wil naar 21 verwarmen lopen ze uiteen vanwege de ververssnelheid.

Nu heb ik 2 sensoren in de woonkamer en neem daar het gemiddelde van en dat werkt eigenlijk best goed. De bedoeling was om de unit te laten blazen naar de sensor met de laagste temperatuur maar dat kon vorig jaar nog niet. Nu met de laatste update kan je wel L/R sturen dus ik ga daar weer mee aan de slag.

Met 3 sensoren krijg je waarschijnlijk nog een beter resultaat.
Ik heb getest met zowel een Sonoff als een Aqara tempsensor. Qua temperatuur zitten ze dicht bij elkaar in de buurt, maar in eerste instantie updatete de Aqara sneller dan de Sonoff, maar nog niet snel genoeg naar mijn wens. Bij de Sonoff kon ik de updatefrequentie verhogen. Zowel de maximale tijd tussen twee berichten als de minimale temperatuurwisseling voordat hij een bericht stuurde kon ik middels zigbee2mqtt bijwerken. De sensor is nu veel responsiever.

SRK35ZS-W


Acties:
  • 0 Henk 'm!

  • jobr
  • Registratie: Januari 2009
  • Laatst online: 18-05 18:57
Taro schreef op zondag 15 oktober 2023 @ 21:08:
Heb ik gisteren geprobeerd, maar in HA zag ik terug dat de unit gedurende die tijd iedere seconde 2x tussen verschillende modi gewisseld heeft ipv de offset uit te schakelen.
Sorry, was niet helemaal juist wat ik schreef.
Als je onlangs de stroom eraf hebt gehad dan moet je minimaal de AC 1 maal hebben laten werken voordat het werkt. Misschien dat het daarom niet werkt.
De AC moet "Pip" zeggen als je de juiste procedure volgt.
En 30 sec vasthouden is best wel lang :)

[ Voor 3% gewijzigd door jobr op 16-10-2023 18:37 ]


Acties:
  • 0 Henk 'm!

  • mvrhrln
  • Registratie: Mei 2013
  • Laatst online: 25-11-2023
jobr schreef op maandag 16 oktober 2023 @ 18:35:
[...]


Sorry, was niet helemaal juist wat ik schreef.
Als je onlangs de stroom eraf hebt gehad dan moet je minimaal de AC 1 maal hebben laten werken voordat het werkt. Misschien dat het daarom niet werkt.
De AC moet "Pip" zeggen als je de juiste procedure volgt.
En 30 sec vasthouden is best wel lang :)
Heb het geprobeerd maar ik krijg of 3x of 2x Pip, dus "PipPipPip" of "PipPip", enkel "Pip" nog niet gelukt.
(heb er idd de stopwatch bijgehouden...)

(lijkt wel dat het hier nu werkt in ieder geval)
19.0 ingesteld, 19.0 op mijn iSense thermostaat, en de cheapass aquara meldt 19.3 dus al met al gaat dit goed.

Nu nog een methode om via ESPHome 15-16 graden als contintue temperatuur te kunnen programmeren.

[ Voor 22% gewijzigd door mvrhrln op 16-10-2023 20:11 ]


Acties:
  • 0 Henk 'm!

  • zeezuiper
  • Registratie: Januari 2002
  • Laatst online: 18-07 19:38
In onze woonkamer hebben we een MHI van 5kW hangen. Uiteraard willen we deze komende winter gaan gebruiken om te verwarmen. Als ik echter in Smart-M-Air kijk geeft de airco een temperatuur aan van 24⁰, terwijl het hier in huis toch echt maar 20⁰ is.

Waarom wijkt de temperatuur in de app 4⁰ af met de werkelijkheid? Is er een manier om dit te corrigeren?

Daarnaast vroeg ik mij ook af of er externe thermostaten zijn om mijn airco aan te sturen? Ik zie deze thermostaat maar vind deze aardig aan de prijs. Gaat dit echt toegevoegde waarde bieden?

Alternatief is home assistant inzetten, maar ik wil ook dat vrouw en kinderen eenvoudig de airco kunnen bedienen. Hoe doen jullie dat?

Acties:
  • +2 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
@JoepW en @Theetjuh Thnx! Ik ga even de opties overwegen. Vraagje nog, hoe zit het met het bereik van die BT proxies? Ik kan me zo voorstellen dat als die in iedere kamer moeten hangen je er ook net zo goed een DHT22 op kunt zetten.

Acties:
  • +2 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
Taro schreef op zondag 15 oktober 2023 @ 21:08:
[...]

Heb ik gisteren geprobeerd, maar in HA zag ik terug dat de unit gedurende die tijd iedere seconde 2x tussen verschillende modi gewisseld heeft ipv de offset uit te schakelen.
Stroom moet er echt eerst af anders werkt het niet en enkel en alleen met de knop op de unit. Dus nogmaals: Stroom er af, even wachten, stroom er op, airco aan met knop op unit en paar seconden later met knop op unit weer uit. Als laatste de knop op de unit precies 30 seconden ingedrukt houden. Pak hier echt een stopwatch voor want het luistert vrij nauw. Is echt mij ook pas na meerdere pogingen gelukt. Volgende week wordt er hier boven een multisplit met 4 binnenunits geplaatst dus het feest gaat voor mij ook weer beginnen. Als het je dan nog niet gelukt is laat het dan even weten. Maak ik een filmpje voor je.

Acties:
  • 0 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
mvrhrln schreef op maandag 16 oktober 2023 @ 19:18:
[...]

Heb het geprobeerd maar ik krijg of 3x of 2x Pip, dus "PipPipPip" of "PipPip", enkel "Pip" nog niet gelukt.
(heb er idd de stopwatch bijgehouden...)

(lijkt wel dat het hier nu werkt in ieder geval)
19.0 ingesteld, 19.0 op mijn iSense thermostaat, en de cheapass aquara meldt 19.3 dus al met al gaat dit goed.

Nu nog een methode om via ESPHome 15-16 graden als contintue temperatuur te kunnen programmeren.
Met 2x pip zit je goed.

Acties:
  • 0 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
zeezuiper schreef op maandag 16 oktober 2023 @ 20:19:
[...]
Alternatief is home assistant inzetten, maar ik wil ook dat vrouw en kinderen eenvoudig de airco kunnen bedienen. Hoe doen jullie dat?
Wij hebben in de keuken een Google Nest Hub 2 staan met een Home Assistant dashboard erop. Naast de dynamische stroomtarieven staat daar sinds kort ook een bediening van de MHI woonkamer op :)

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • 0 Henk 'm!

  • Taro
  • Registratie: September 2000
  • Niet online

Taro

Moderator General Chat / Wonen & Mobiliteit
Chatslet schreef op maandag 16 oktober 2023 @ 20:35:
[...]


Stroom moet er echt eerst af anders werkt het niet en enkel en alleen met de knop op de unit. Dus nogmaals: Stroom er af, even wachten, stroom er op, airco aan met knop op unit en paar seconden later met knop op unit weer uit. Als laatste de knop op de unit precies 30 seconden ingedrukt houden. Pak hier echt een stopwatch voor want het luistert vrij nauw. Is echt mij ook pas na meerdere pogingen gelukt. Volgende week wordt er hier boven een multisplit met 4 binnenunits geplaatst dus het feest gaat voor mij ook weer beginnen. Als het je dan nog niet gelukt is laat het dan even weten. Maak ik een filmpje voor je.
Heb de stroom eraf gehad, zal het morgen nogmaals proberen.

Replace fear of the unknown with curiosity | 42 (+10 incoming) kWh thuisaccu | 2 EV's: 136 kWh capaciteit | 10.660 Wp zonnepanelen


Acties:
  • 0 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
zeezuiper schreef op maandag 16 oktober 2023 @ 20:19:
Alternatief is home assistant inzetten, maar ik wil ook dat vrouw en kinderen eenvoudig de airco kunnen bedienen. Hoe doen jullie dat?
Apple homekit of een andere voice assistant aan home assistant koppelen.

Acties:
  • 0 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
Waah schreef op maandag 16 oktober 2023 @ 12:33:
[...]

Ik gebruik zelf de Nest-thermostaat die er nog zit omdat de CV er nog hangt _O-
Die maakt enkel warm water nog... maar is ook een mooie thermometer voor de airco :P
Hoe krijg je de temperatuur van die nest thermostaat dan naar je airco? Kan die dan ook MQTT doen? Die dingen zijn tegenwoordig toch niet meer te rooten?

Acties:
  • +1 Henk 'm!

  • Theetjuh
  • Registratie: Januari 2000
  • Laatst online: 20:01
Chatslet schreef op maandag 16 oktober 2023 @ 20:25:
@JoepW en @Theetjuh Thnx! Ik ga even de opties overwegen. Vraagje nog, hoe zit het met het bereik van die BT proxies? Ik kan me zo voorstellen dat als die in iedere kamer moeten hangen je er ook net zo goed een DHT22 op kunt zetten.
Bereik is best goed, heb hier een nieuwbouwwoning met vloerverwarming, wifi van vloer naar vloer is belabberd, dus heb voor de zekerheid op iedere verdieping een BT proxy.
Als ik het zo schat met de bbq thermostaat en thermometer in de garage, haal je door diverse muren zo’n 8 meter.
Het is aan jou of je het wilt combineren, ga je gang zou ik zeggen … ik had de thermometers alleen al bezit.
Ik heb de BT proxies in Ikea Vindriktnings zitten die de lucht kwaliteit meet.

Acties:
  • +1 Henk 'm!

  • Waah
  • Registratie: Maart 2009
  • Laatst online: 18:13
Chatslet schreef op maandag 16 oktober 2023 @ 21:20:
[...]


Hoe krijg je de temperatuur van die nest thermostaat dan naar je airco? Kan die dan ook MQTT doen? Die dingen zijn tegenwoordig toch niet meer te rooten?
Via home assistent. Daarmee kan je de Nest koppelen. Voor zover ik me kan herinneren is dat vrij omslachtig maar eenmaal ingesteld werkt het. Geen root nodig dacht ik maar via iets van een developer account.

Gebruikte het voor de verwarming. Maar nu de airco er is gebruik ik hem als overkill temperatuur en luchtvochtigheidssensor :+

[ Voor 5% gewijzigd door Waah op 16-10-2023 22:03 ]


Acties:
  • 0 Henk 'm!

  • Chatslet
  • Registratie: Februari 2001
  • Laatst online: 23-05 15:45
@Theetjuh Hier een jaren 70 huis maar wifi komt ook niet lekker door de vloeren. We hebben op iedere verdieping een accesspoint om die regen. Ikea Vindriktning vind ik wel een heel gaaf idee. Daar heb je dus een ESP32 met ESPhome in zitten??

Acties:
  • 0 Henk 'm!

  • RonaldPr
  • Registratie: Augustus 2018
  • Laatst online: 28-04 13:37
zeezuiper schreef op maandag 16 oktober 2023 @ 20:19:
In onze woonkamer hebben we een MHI van 5kW hangen. Uiteraard willen we deze komende winter gaan gebruiken om te verwarmen. Als ik echter in Smart-M-Air kijk geeft de airco een temperatuur aan van 24⁰, terwijl het hier in huis toch echt maar 20⁰ is.

Waarom wijkt de temperatuur in de app 4⁰ af met de werkelijkheid? Is er een manier om dit te corrigeren?

Daarnaast vroeg ik mij ook af of er externe thermostaten zijn om mijn airco aan te sturen? Ik zie deze thermostaat maar vind deze aardig aan de prijs. Gaat dit echt toegevoegde waarde bieden?

Alternatief is home assistant inzetten, maar ik wil ook dat vrouw en kinderen eenvoudig de airco kunnen bedienen. Hoe doen jullie dat?
Ik heb ongeveer dezelfde afwijking in de app, zelfs wanneer de unit uitstaat geeft hij een veel te hoge temperatuur aan.
Er moet toch een mogelijkheid zijn om dit te corrigeren?

Acties:
  • +1 Henk 'm!

  • Willempie27
  • Registratie: Augustus 2017
  • Laatst online: 11:40
RonaldPr schreef op dinsdag 17 oktober 2023 @ 01:35:
[...]


Ik heb ongeveer dezelfde afwijking in de app, zelfs wanneer de unit uitstaat geeft hij een veel te hoge temperatuur aan.
Er moet toch een mogelijkheid zijn om dit te corrigeren?
De unit meet in de unit. Het zou gerust 24 kunnen zijn. Bij mij ligt er een temp sensor op de grond en 1 op een meter en daar zit al 1,2 graden tussen.

Acties:
  • +1 Henk 'm!

  • Theetjuh
  • Registratie: Januari 2000
  • Laatst online: 20:01
Chatslet schreef op maandag 16 oktober 2023 @ 22:07:
@Theetjuh Hier een jaren 70 huis maar wifi komt ook niet lekker door de vloeren. We hebben op iedere verdieping een accesspoint om die regen. Ikea Vindriktning vind ik wel een heel gaaf idee. Daar heb je dus een ESP32 met ESPhome in zitten??
Klopt, heb er later ook nog eens aan zitten te denken er een SEN0335 van DFRobot aan te koppelen, maar ja nog niet echt van gekomen en aangezien ik al de temperatuur geregeld heb ... niet echt nodig :)

Acties:
  • 0 Henk 'm!

  • RonaldPr
  • Registratie: Augustus 2018
  • Laatst online: 28-04 13:37
Willempie27 schreef op dinsdag 17 oktober 2023 @ 02:10:
[...]

De unit meet in de unit. Het zou gerust 24 kunnen zijn. Bij mij ligt er een temp sensor op de grond en 1 op een meter en daar zit al 1,2 graden tussen.
Toch als alles uitstaat geeft hij een veel te hoge waarde aan, dat klopt echt niet.
Door de warme luchtstroom kan het wel, maar die is er niet.

Acties:
  • 0 Henk 'm!

  • renzo4000
  • Registratie: Juni 2001
  • Laatst online: 11-07 12:26
RonaldPr schreef op dinsdag 17 oktober 2023 @ 09:08:
[...]


Toch als alles uitstaat geeft hij een veel te hoge waarde aan, dat klopt echt niet.
Door de warme luchtstroom kan het wel, maar die is er niet.
Waar hangt de unit? Ik neem aan hoog aan de muur en wellicht in de hoek? Zet er maar eens een losse temp sensor naast, ik denk dat je dan ook echt wel aan die hogere temp gaat komen.

PVOUTPUT | 5400W | 15 PANELEN 360W ZUID 38° | ENPHASE ENVOY S | MICRO OMVORMERS 290W


Acties:
  • 0 Henk 'm!

  • JoepW
  • Registratie: Juli 2007
  • Laatst online: 13:34

JoepW

iRacer & Home Assistant

RonaldPr schreef op dinsdag 17 oktober 2023 @ 09:08:
[...]


Toch als alles uitstaat geeft hij een veel te hoge waarde aan, dat klopt echt niet.
Door de warme luchtstroom kan het wel, maar die is er niet.
Al mijn units (staand en hangend dicht bij het plafond) geven een te hige temperatuur aan.
Ik heb in HA per unit een script draaien dat als de unit aan gaat de temperatuur een externe temp-meter wordt geladen en zolang de unit aan is wordt deze temperatuur elke minuut bijgewerkt.
Daat laatste is nodig omdat MHI na een minuut terugvalt op de interne voeler.

iRacing Profiel -|- Mijn RaceRig -|- Mijn stream


Acties:
  • 0 Henk 'm!

  • Willempie27
  • Registratie: Augustus 2017
  • Laatst online: 11:40
RonaldPr schreef op dinsdag 17 oktober 2023 @ 09:08:
[...]


Toch als alles uitstaat geeft hij een veel te hoge waarde aan, dat klopt echt niet.
Door de warme luchtstroom kan het wel, maar die is er niet.
Bij mij zit er nu het 18 graden in huis is al 1 graad verschil. Het kan best zijn dat de unit ook wat afwijkt. Als straks de zon gaat schijnen op het raam zal dit verschil alleen maar groter worden.
2 a 3 graden kan zomaar. En als de unit ook nog 1 a 2 graden afwijkt zit je er al ruim aan.
Pagina: 1 ... 6 ... 38 Laatste