• Tomono
  • Registratie: November 2021
  • Laatst online: 04-06 22:09
glaswerk schreef op zaterdag 10 december 2022 @ 23:12:
[...]


Toch even een vraag: waarom zou je de "omweg" van mqtt willen, terwijl er gewoon een native integratie in HA beschikbaar is? Ik mis vast iets, maar ik hoor graag wat.
Omdat ik ook OTMonitor gebruik en het afgeraden wordt om twee apps op die manier te verbinden. Anders had ik graag van de integratie gebruik gemaakt

  • Tomono
  • Registratie: November 2021
  • Laatst online: 04-06 22:09
htca schreef op zaterdag 10 december 2022 @ 22:00:
[...]

Niet direct werkend, maar ik heb de OTGW sinds vandaag draaien en via MQTT geintegreerd in HA. Ik heb al wel even gezocht en kwam hier terecht. Het lijkt erop dat je met een CURL commando de temperatuur kan aanpassen:
code:
1
curl -X PUT http://otgw.local/api/v1/otgw/command/OT=<waarde>

Je moet in de settings van OTGW wel "MQTT OT msg Enable" aanzetten. Dan krijg mqtt "Toutside"

In HA dan zou je hem met een shell command oid moeten aansturen vanuit HA. Maar gevoelsmatig is dat allemaal wat omslachtig.... Je zou een MQTT service aanwillen roepen en Toutside willen updaten.

edit:
Ik heb het commando even vanaf een CLI uitgevoerd, de MQTT waarde volgt de met curl ingevoerde waarde, maar wel met vertraging. Ik denk dat dat ook de crux is van het probleem. MQTT volgt de interne sensor (als die aanwezig is). Je kunt hem updaten van buitenaf en daardoor de hardware implementatie gebruiken. MQTT volgt daarna en niet andersom.
Volgens mij kan het via mqtt publish topic. Moet nog even verder pielen.

  • Luc45
  • Registratie: April 2019
  • Laatst online: 16:31
Tomono schreef op zaterdag 10 december 2022 @ 23:53:
[...]


Volgens mij kan het via mqtt publish topic. Moet nog even verder pielen.
Ik heb de volgende automation die de temp vanuit de home assistant temperature widget pakt en die naar de OTGW/thermostaat stuurt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
alias: OTGW buitentemp
description: ""
trigger:
  - platform: time_pattern
    minutes: /5
condition: []
action:
  - service: mqtt.publish
    data:
      topic: OTGW/set/otgw-MACADDR/command
      payload_template: OT={{ state_attr("weather.home","temperature") }}
mode: single


Nu nog elke 5 minuten blijkbaar, ik dacht dat ik hem had aangepast zodat hij dat deed wanneer de temp aangepast was, dat kan ook nog

  • htca
  • Registratie: November 2001
  • Laatst online: 13:12
Tomono schreef op zaterdag 10 december 2022 @ 23:50:
[...]

Omdat ik ook OTMonitor gebruik en het afgeraden wordt om twee apps op die manier te verbinden. Anders had ik graag van de integratie gebruik gemaakt
Just curious, waar gebruik je OTmonitor voor (en continue?)

Hier inmiddels via een automation en de uurwaarde van openweather wordt de temperatuur geupdate. Omdat ik zelf nogal heb gezocht.... hierbij de yaml...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
alias: Set external temperature otgw
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.openweathermap_temperature
condition: []
action:
  - service: opentherm_gw.set_outside_temperature
    data:
      gateway_id: "1"
      temperature: "{{ states('sensor.openweathermap_temperature') }}"
mode: single

[Voor 43% gewijzigd door htca op 11-12-2022 16:29]


  • Tomono
  • Registratie: November 2021
  • Laatst online: 04-06 22:09
Luc45 schreef op zondag 11 december 2022 @ 12:51:
[...]

Ik heb de volgende automation die de temp vanuit de home assistant temperature widget pakt en die naar de OTGW/thermostaat stuurt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
alias: OTGW buitentemp
description: ""
trigger:
  - platform: time_pattern
    minutes: /5
condition: []
action:
  - service: mqtt.publish
    data:
      topic: OTGW/set/otgw-MACADDR/command
      payload_template: OT={{ state_attr("weather.home","temperature") }}
mode: single


Nu nog elke 5 minuten blijkbaar, ik dacht dat ik hem had aangepast zodat hij dat deed wanneer de temp aangepast was, dat kan ook nog
Echt heel fijn! Dankjewel!

  • Tomono
  • Registratie: November 2021
  • Laatst online: 04-06 22:09
htca schreef op zondag 11 december 2022 @ 16:24:
[...]

Just curious, waar gebruik je OTmonitor voor (en continue?)

Hier inmiddels via een automation en de uurwaarde van openweather wordt de temperatuur geupdate. Omdat ik zelf nogal heb gezocht.... hierbij de yaml...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
alias: Set external temperature otgw
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.openweathermap_temperature
condition: []
action:
  - service: opentherm_gw.set_outside_temperature
    data:
      gateway_id: "1"
      temperature: "{{ states('sensor.openweathermap_temperature') }}"
mode: single
Voorlopig voor het loggen naar file en ik vind de log en interface voor de commando's erg fijn. Inmiddels heb ik verschillende automations obv de mqtt. Bijvoorbeeld het versturen van ketelcodes naar mijn telegram (druk te laag, ontluchtingsprogramma etc)

  • Pimmeh
  • Registratie: Januari 2003
  • Laatst online: 04-06 22:21
Appesteijn schreef op zaterdag 10 december 2022 @ 23:38:
[...]


Bij mij is het niet zo extreem, maar heb wel dagelijks een vergelijkbare 'vastloper' vanuit HA. Ik zie dit als de thermostaat op F200 staat, geen communicatie mogelijk met de buiten-temperatuurvoeler.
Ik draai OTGW firmware 4.3 en het lijkt erop dat op de een of andere manier HA de verbinding verliest en daarna de Telnet poort (die gebruik ik) niet meer toegankelijk is voor HA op te retry-en. OTGW kastje en Wifi module lijkt het wel gewoon nog te doen.
En als je dan connect met OTMonitor, doet die het dan wel meteen? Dat vind ik het rare dat die wel meteen connect.

  • Appesteijn
  • Registratie: Juni 2001
  • Niet online
Pimmeh schreef op zondag 11 december 2022 @ 22:32:
[...]


En als je dan connect met OTMonitor, doet die het dan wel meteen? Dat vind ik het rare dat die wel meteen connect.
Volgens mij wel, maar dat zal ik de volgende keer even testen.

  • Pimmeh
  • Registratie: Januari 2003
  • Laatst online: 04-06 22:21
Graag, dan hebben we op 2 devices een reproduceerbaar scenario, misschien kunnen we daar dan iets mee. (geen idee wat nog :P )

  • Dutchess_Nicole
  • Registratie: Augustus 2001
  • Laatst online: 09:39
Tomono schreef op vrijdag 9 december 2022 @ 23:34:
[...]

Goed om te weten. Maar als iemand het via mqtt werkend heeft hoor ik het nog graag.
Als je bedoelt dat je OT=X stuurt via MQTT; ja dat heb ik draaien ja. Wat voor vragen heb je erover?

Kia E-Niro 64kWh DynamicPlusLine


  • jancoow
  • Registratie: December 2014
  • Laatst online: 22-05 22:41
Ben zelf bezig met mijn eerste koop huis en een verbouwing. Ik heb zelf airco's in diverse ruimtes geïnstalleerd, echter in de woonkamer heb ik zowel CV als een airco. Ik wil zelf het stook algoritme opzetten om zo efficiënt te stoken (icm met elektra prijs etc.). Nu ga ik mijn NS-panel als scherm gebruiken om de temperatuur in te stellen, en op de radiatoren in de woonkamer, hal en badkamer een pop zigbee thermostaatkraan.

Nu ligt tijdelijk voor de verbouwing de Nefit thermostaat op zolder, echter moet dit natuurlijk vervangen worden door een (draadloze) digitale aansturing. Echter tot mijn verbazing kan ik nergens een zigbee naar Nefit ketel aansturing vinden. Wat zou mijn beste optie zijn?

  • Tomono
  • Registratie: November 2021
  • Laatst online: 04-06 22:09
Dutchess_Nicole schreef op maandag 12 december 2022 @ 09:47:
[...]

Als je bedoelt dat je OT=X stuurt via MQTT; ja dat heb ik draaien ja. Wat voor vragen heb je erover?
Heb het inmiddels werkend obv iemands post hierboven. Maar thanks!

  • bluewalk
  • Registratie: Juli 2004
  • Niet online
jancoow schreef op maandag 12 december 2022 @ 19:42:
Ben zelf bezig met mijn eerste koop huis en een verbouwing. Ik heb zelf airco's in diverse ruimtes geïnstalleerd, echter in de woonkamer heb ik zowel CV als een airco. Ik wil zelf het stook algoritme opzetten om zo efficiënt te stoken (icm met elektra prijs etc.). Nu ga ik mijn NS-panel als scherm gebruiken om de temperatuur in te stellen, en op de radiatoren in de woonkamer, hal en badkamer een pop zigbee thermostaatkraan.

Nu ligt tijdelijk voor de verbouwing de Nefit thermostaat op zolder, echter moet dit natuurlijk vervangen worden door een (draadloze) digitale aansturing. Echter tot mijn verbazing kan ik nergens een zigbee naar Nefit ketel aansturing vinden. Wat zou mijn beste optie zijn?
Nefit gebruikt volgens mij haar eigen protocol (althans toen ik een Nefit ketal had), er zijn wel OpenTherm naar Nefit converters (van Nefit zelf). Met die kan je elke draadloze thermostaat gebruiken, bv de Honeywell Round Wireless.

Edit: deze https://www.warmteservice...herm-converter/p/37253001

[Voor 6% gewijzigd door bluewalk op 13-12-2022 06:44]


  • jancoow
  • Registratie: December 2014
  • Laatst online: 22-05 22:41
bluewalk schreef op dinsdag 13 december 2022 @ 06:43:
[...]

Nefit gebruikt volgens mij haar eigen protocol (althans toen ik een Nefit ketal had), er zijn wel OpenTherm naar Nefit converters (van Nefit zelf). Met die kan je elke draadloze thermostaat gebruiken, bv de Honeywell Round Wireless.

Edit: deze https://www.warmteservice...herm-converter/p/37253001
Ja, echter hoef ik geen thermostaat in de kamer. Er zijn al genoeg temperatuurmeters die de temperatuur daar meten dus lijkt mij onzin om die op te hangen

  • AndreStarTrek
  • Registratie: April 2001
  • Laatst online: 04-06 02:24
Ik heb een Remeha Avanta ketel en wil met Home Assistant slim gaan stoken.

De bedoeling is dat ik door het hele huis deze (https://nl.aliexpress.com/item/4000427410383.html) temp sensors gaat hangen inclusief buiten, maar ik wil met Hass aan de hand van de buiten temperatuur de aanvoer temperatuur hoogte kunnen aanpassen. Ook binnen wil ik stoken aan de hand van deze sensors en dus me normale thermostaat omzeilen zolang Home Assistant draait.

Nou ben ik paar uur aan het uitzoeken gegaan, maar kon niet met zekerheid zeggen of dat met dit project kan. Kan namelijk geen enkel voorbeeld vinden hoe de OpenTherm Gateway werkt binnen Hass.

Kan iemand me vertellen of dit kan? Misschien dat iemand een video weet hoe dit er dan uit ziet en werk?

  • Dutchess_Nicole
  • Registratie: Augustus 2001
  • Laatst online: 09:39
AndreStarTrek schreef op zaterdag 17 december 2022 @ 03:12:
Ik heb een Remeha Avanta ketel en wil met Home Assistant slim gaan stoken.

De bedoeling is dat ik door het hele huis deze (https://nl.aliexpress.com/item/4000427410383.html) temp sensors gaat hangen inclusief buiten, maar ik wil met Hass aan de hand van de buiten temperatuur de aanvoer temperatuur hoogte kunnen aanpassen. Ook binnen wil ik stoken aan de hand van deze sensors en dus me normale thermostaat omzeilen zolang Home Assistant draait.

Nou ben ik paar uur aan het uitzoeken gegaan, maar kon niet met zekerheid zeggen of dat met dit project kan. Kan namelijk geen enkel voorbeeld vinden hoe de OpenTherm Gateway werkt binnen Hass.

Kan iemand me vertellen of dit kan? Misschien dat iemand een video weet hoe dit er dan uit ziet en werk?
De aller simpelste manier is om MQTT te gebruiken en dan je OTGW (en daarmee de boiler) te bedienen.

https://github.com/rvdbreemen/OTGW-firmware/wiki dit geeft je opties over wat je in zou kunnen stellen.

Qua bediening moet je maar even zien wat je in zou willen stellen: sommige mensen werken met een vaste control setpoint en dan gaan ze moduleren, sommige mensen gebruiken de modulatie niet maar werken direct met de control setpoint.

Er is een discord voor OTGW waar we nog wel eens discussies hebben over wat het beste werkt in een bepaalde situatie.

Persoonlijk werk ik op basis van 2 ruimtethermostaten die via een template sensor een control setpoint genereren.

Kia E-Niro 64kWh DynamicPlusLine


  • AndreStarTrek
  • Registratie: April 2001
  • Laatst online: 04-06 02:24
Dutchess_Nicole schreef op zaterdag 17 december 2022 @ 11:42:
[...]

De aller simpelste manier is om MQTT te gebruiken en dan je OTGW (en daarmee de boiler) te bedienen.

https://github.com/rvdbreemen/OTGW-firmware/wiki dit geeft je opties over wat je in zou kunnen stellen.

Qua bediening moet je maar even zien wat je in zou willen stellen: sommige mensen werken met een vaste control setpoint en dan gaan ze moduleren, sommige mensen gebruiken de modulatie niet maar werken direct met de control setpoint.

Er is een discord voor OTGW waar we nog wel eens discussies hebben over wat het beste werkt in een bepaalde situatie.

Persoonlijk werk ik op basis van 2 ruimtethermostaten die via een template sensor een control setpoint genereren.
Bedankt voor je reactie, globaal haal ik er uit dat het dus kan wat ik wil?

Sorry ben nog niet heel erg op de hoogte van de werking van hass en de termen die daar bij gebruikt worden. Ooit een keer hass in een vm geinstalleerd om te kijken of het wat is, maar daarna niet meer. Nou ga ik voor het eerst me eigen in het diepe gooie om echt me huis daar mee te laten werken. Dus aan de eene kant heb ik gewoon hardware nodig waar ik van weet dat er mee werkt en doet wat ik er mee wil. Daarna is het gewoon proberen en er wat van leren met hopelijk met wat hulp van bijvoorbeeld hier.

Dus op dit moment heb ik even iemand nodig die even me handje vast houd en vertel of het mogelijk is met dit en de rest hoe het allemaal gaat dat is voor latere zorg :P

Graag verneem ik deze Discord gezien ik deze niet zo 123 kan vind op bijvoorbeeld TS.

  • Dutchess_Nicole
  • Registratie: Augustus 2001
  • Laatst online: 09:39
AndreStarTrek schreef op zaterdag 17 december 2022 @ 12:12:
[...]


Bedankt voor je reactie, globaal haal ik er uit dat het dus kan wat ik wil?

Sorry ben nog niet heel erg op de hoogte van de werking van hass en de termen die daar bij gebruikt worden. Ooit een keer hass in een vm geinstalleerd om te kijken of het wat is, maar daarna niet meer. Nou ga ik voor het eerst me eigen in het diepe gooie om echt me huis daar mee te laten werken. Dus aan de eene kant heb ik gewoon hardware nodig waar ik van weet dat er mee werkt en doet wat ik er mee wil. Daarna is het gewoon proberen en er wat van leren met hopelijk met wat hulp van bijvoorbeeld hier.

Dus op dit moment heb ik even iemand nodig die even me handje vast houd en vertel of het mogelijk is met dit en de rest hoe het allemaal gaat dat is voor latere zorg :P

Graag verneem ik deze Discord gezien ik deze niet zo 123 kan vind op bijvoorbeeld TS.
Simpel antwoord: ja het kan. Ik gebruik het dus het kan zeker.

HOE het kan is afhankelijk van jouw wensen en helaas komen vaktermen hier nogal in voor dus wat dat betreft zul je je een beetje moeten inlezen. Temeer daar je dit allemaal zelf wilt gaan opzetten dus uiteindelijk zul je het zelf moeten gaan begrijpen.

De discord is van @number3 en heet OTGW-Firmware. Uiteraard ben je welkom om daar over specifieke scenario's te komen babbelen. Groot voordeel is dat Schelte Bron zelf (de maker van de OTGW module) er ook aanwezig is dus als je eens de diepte in wilt kan dat ook nog! O+

Om te beginnen:
Installeer HAOS op een raspberry pi, of een NUC, of een VM, of ergens waar het kan
Installeer Mosquitto (in add-on vorm of los, maakt niet uit)
Installeer de OTGW module en stel MQTT in.

Dan heb je het begin al gehad.

Daarna is het spelen met entities in HA, leren automatiseren etc... maar dat is sowieso het proces.

Kia E-Niro 64kWh DynamicPlusLine


  • AndreStarTrek
  • Registratie: April 2001
  • Laatst online: 04-06 02:24
Dutchess_Nicole schreef op zaterdag 17 december 2022 @ 12:41:
[...]


Simpel antwoord: ja het kan. Ik gebruik het dus het kan zeker.
Top dat is het belangrijkste
HOE het kan is afhankelijk van jouw wensen en helaas komen vaktermen hier nogal in voor dus wat dat betreft zul je je een beetje moeten inlezen. Temeer daar je dit allemaal zelf wilt gaan opzetten dus uiteindelijk zul je het zelf moeten gaan begrijpen.
Klopt en termen leer je vanzelf, maar er gewoon mee aan de slag gaan leer je snellen dan alleen lezen, want dan kan je vaak dingen niet helemaal plaatsen. Gaat vast goed komen ;)
De discord is van @number3 en heet OTGW-Firmware. Uiteraard ben je welkom om daar over specifieke scenario's te komen babbelen. Groot voordeel is dat Schelte Bron zelf (de maker van de OTGW module) er ook aanwezig is dus als je eens de diepte in wilt kan dat ook nog! O+
Dat is helemaal top, heb je daar misschien een invite van, of moet ik daar voor een uitnodiging vragen van @number3 zelf?
Om te beginnen:
Installeer HAOS op een raspberry pi, of een NUC, of een VM, of ergens waar het kan
Installeer Mosquitto (in add-on vorm of los, maakt niet uit)
Installeer de OTGW module en stel MQTT in.
Heb een raspberry pi 4 4GB draaien met Hass, mosquitto en MQTT draait al voor de Zigbee spullen ;)
Dan heb je het begin al gehad.

Daarna is het spelen met entities in HA, leren automatiseren etc... maar dat is sowieso het proces.
Idd dat kost wat tijd maar ja als je wat wil dan hoort dat er bij ;)

  • number3
  • Registratie: Februari 2002
  • Laatst online: 06:18
De Discord over OTGW kan je via deze uitnodiging bereiken: https://discord.gg/zjW3ju7vGQ

  • TopdRob
  • Registratie: Oktober 2005
  • Laatst online: 04-06 20:47
Ik zie dat mijn retourtemperatuur niet zo snel update als bijvoorbeeld de aanvoertemperatuur. Is daar iets aan te doen?

  • number3
  • Registratie: Februari 2002
  • Laatst online: 06:18
Een losse sensor op je aanvoer en afvoer is de beste oplossing OpenTherm schrijft niet voor hoe vaak berichten worden verzonden. Je ben dan afhankelijk van ketel.

  • htca
  • Registratie: November 2001
  • Laatst online: 13:12
TopdRob schreef op woensdag 21 december 2022 @ 07:52:
Ik zie dat mijn retourtemperatuur niet zo snel update als bijvoorbeeld de aanvoertemperatuur. Is daar iets aan te doen?[Afbeelding]
Hij komt hier beiden net zo vaak binnen (Remeha calenta). Ik heb ook een poosje sensoren op mijn aan en afvoer geplakt, Dat bleef altijd wel een beetje houtje touwtje (ds18b20 begaven het nog wel eens, kan ook aan de bedenkelijke kwaliteit van de doormij in China bestelde sensoren liggen of aan mijn soldeer skills...)

  • Mea011
  • Registratie: December 2020
  • Laatst online: 04-06 15:52
-- Ik heb het probleem al gevonden --

[Voor 94% gewijzigd door Mea011 op 21-12-2022 15:31. Reden: Probleem opgelost]


  • TopdRob
  • Registratie: Oktober 2005
  • Laatst online: 04-06 20:47
Mijn ketel doet dit bij een constante temperatuur van 18 graden en alleen vloerverwarming met de mengverdeler op 40. Is dit ok of doet hij iets geks?

  • Appesteijn
  • Registratie: Juni 2001
  • Niet online
Pimmeh schreef op zondag 11 december 2022 @ 22:32:
[...]


En als je dan connect met OTMonitor, doet die het dan wel meteen? Dat vind ik het rare dat die wel meteen connect.
Net voor het eerst weer een HA 'vastloper' gehad. Home Assistant geeft aan niet meer te kunnen connecten naar de OTGW:

code:
1
2
3
4
5
6
7
 Logger: pyotgw.pyotgw
Source: runner.py:120
First occurred: 02:23:45 (2 occurrences)
Last logged: 02:25:36

    Timed out waiting for command: PS, value: 1.
    Timed out waiting for command: PR, value: I.


Wat resulteert in:

code:
1
RuntimeError: Overrun Error: The processor was busy and failed to process all received characters.


Als ik nu met otmonitor.exe vanaf mijn windows mahcine connect dan lijkt er geen vuiltje aan de lucht.

Probleem lijkt dus in HA te zitten. Na een reboot van HA werkt het weer.

  • naftebakje
  • Registratie: Februari 2002
  • Laatst online: 18:55
TopdRob schreef op vrijdag 23 december 2022 @ 06:56:
Mijn ketel doet dit bij een constante temperatuur van 18 graden en alleen vloerverwarming met de mengverdeler op 40. Is dit ok of doet hij iets geks?[Afbeelding]
Waarom constante temperatuur?

Als de boer zijn koeien kust, zijn ze jarig wees gerust. Varkens op een landingsbaan, leiden nooit een lang bestaan. Als de boer zich met stront wast, zijn zijn hersens aangetast. Als het hooi is in de schuur, zit het wijf bij den gebuur.


  • TopdRob
  • Registratie: Oktober 2005
  • Laatst online: 04-06 20:47
naftebakje schreef op vrijdag 23 december 2022 @ 12:34:
[...]
Waarom constante temperatuur?
Ik pas geen nachtverlaging toe.

  • Pimmeh
  • Registratie: Januari 2003
  • Laatst online: 04-06 22:21
Appesteijn schreef op vrijdag 23 december 2022 @ 08:35:
[...]


Net voor het eerst weer een HA 'vastloper' gehad. Home Assistant geeft aan niet meer te kunnen connecten naar de OTGW:

code:
1
2
3
4
5
6
7
 Logger: pyotgw.pyotgw
Source: runner.py:120
First occurred: 02:23:45 (2 occurrences)
Last logged: 02:25:36

    Timed out waiting for command: PS, value: 1.
    Timed out waiting for command: PR, value: I.


Wat resulteert in:

code:
1
RuntimeError: Overrun Error: The processor was busy and failed to process all received characters.


Als ik nu met otmonitor.exe vanaf mijn windows mahcine connect dan lijkt er geen vuiltje aan de lucht.

Probleem lijkt dus in HA te zitten. Na een reboot van HA werkt het weer.
Hmm, misschien dan toch eens een bugreport bij HASS indienen, zeker omdat we dat nu beide hebben waarbij otmonitor.exe wel happy is. Ik zal na de feestdagen eens kijken of ik wat in kan schieten daar, thanks voor het checken!

  • The Zep Man
  • Registratie: Oktober 2003
  • Laatst online: 14:48
Appesteijn schreef op vrijdag 23 december 2022 @ 08:35:
[...]


Net voor het eerst weer een HA 'vastloper' gehad. Home Assistant geeft aan niet meer te kunnen connecten naar de OTGW:

code:
1
2
3
4
5
6
7
 Logger: pyotgw.pyotgw
Source: runner.py:120
First occurred: 02:23:45 (2 occurrences)
Last logged: 02:25:36

    Timed out waiting for command: PS, value: 1.
    Timed out waiting for command: PR, value: I.


Wat resulteert in:

code:
1
RuntimeError: Overrun Error: The processor was busy and failed to process all received characters.


Als ik nu met otmonitor.exe vanaf mijn windows mahcine connect dan lijkt er geen vuiltje aan de lucht.

Probleem lijkt dus in HA te zitten. Na een reboot van HA werkt het weer.
Jij gebruikt firmware 4.3. Ik gebruik firmware 6.1 op een P16F1847. Je kan een upgrade overwegen om te testen. Als je een P16F88 hebt, dan kan je 5.6 testen.

Yar har, wind in your back, lads, wherever you go!


  • Appesteijn
  • Registratie: Juni 2001
  • Niet online
The Zep Man schreef op zaterdag 24 december 2022 @ 08:56:
[...]


Jij gebruikt firmware 4.3. Ik gebruik firmware 6.1 op een P16F1847. Je kan een upgrade overwegen om te testen. Als je een P16F88 hebt, dan kan je 5.6 testen.
Werkt die goed met HA dan? Ik was in de veronderstelling dat hier een breaking change in zat.

  • The Zep Man
  • Registratie: Oktober 2003
  • Laatst online: 14:48
Appesteijn schreef op zaterdag 24 december 2022 @ 09:03:
Werkt die goed met HA dan? Ik was in de veronderstelling dat hier een breaking change in zat.
Mijn HA-installatie is vorige week geactualiseerd. Draaide daarvoor stabiel, en sinds die tijd ook. Je kan altijd testen, en een downgrade uitvoeren als het niet werkt.

[edit]
Wat mogelijk een verschil maakt is dat ik een OTGW heb met Ethernet-aansluiting en niet draadloos.

[Voor 12% gewijzigd door The Zep Man op 24-12-2022 09:12]

Yar har, wind in your back, lads, wherever you go!


  • Tomba
  • Registratie: Mei 2000
  • Laatst online: 15:55

Tomba

Quis custodiet ipsos custodes?

Appesteijn schreef op zaterdag 24 december 2022 @ 09:03:
[...]


Werkt die goed met HA dan? Ik was in de veronderstelling dat hier een breaking change in zat.
Ik heb HA 2022.10 draaien icm 6.2 en dat is rocksolid (draai niet nieuwer omdat HA iets anders gesloopt heeft waardoor mijn custom homescreen niet meer werkt ;) )

tomba.tweakblogs.net || Mijn V&A


  • Pimmeh
  • Registratie: Januari 2003
  • Laatst online: 04-06 22:21
@Appesteijn @The Zep Man Ik heb 6.2 draaien ivm HASS 2022.10 en heb dus helaas dezelfde problemen (met de Wifi-module). :)

[Voor 9% gewijzigd door Pimmeh op 24-12-2022 15:56]


  • markvd1962
  • Registratie: December 2022
  • Laatst online: 11-05 12:06
Ik zie het even niet, beetje hulp nodig. Nieuwe Nodo OTGW aangesloten aan een Remeha Avanta met Isense, inclusief buitentemperatuur sensor. Via Wifi en MQTT naar Home Assistant. Alles werkt perfect, zie een hele hoop data. Met een automation in HA lukt het om via "climate: set temperature" een nieuwe "room temperature" op de Isense in te stellen. Nu wil ik graag de aanvoertemperatuur afhankelijk maken van de buitentemperatuur in HA. In OTmonitor kan ik de aanvoertemperatuur aanpassen, maar hoe doe ik dit met een automation in HA? Ik hoop dat dit de juiste plaats is voor deze vraag.

  • htca
  • Registratie: November 2001
  • Laatst online: 13:12
markvd1962 schreef op zondag 25 december 2022 @ 00:36:
Ik zie het even niet, beetje hulp nodig. Nieuwe Nodo OTGW aangesloten aan een Remeha Avanta met Isense, inclusief buitentemperatuur sensor. Via Wifi en MQTT naar Home Assistant. Alles werkt perfect, zie een hele hoop data. Met een automation in HA lukt het om via "climate: set temperature" een nieuwe "room temperature" op de Isense in te stellen. Nu wil ik graag de aanvoertemperatuur afhankelijk maken van de buitentemperatuur in HA. In OTmonitor kan ik de aanvoertemperatuur aanpassen, maar hoe doe ik dit met een automation in HA? Ik hoop dat dit de juiste plaats is voor deze vraag.
Dat kan via mqtt of via de otgw integratie en een automation, ik gebruik de temp van openweather in een automation en de otgw integratie, maar je kunt natuurlijk ook een andere sensor gebruiken. Via mqtt heb ik pas ook een voorbeeld voorbij zien komen, ik denk in het HA topic.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
alias: Set external temperature otgw
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.openweathermap_temperature
condition: []
action:
  - service: opentherm_gw.set_outside_temperature
    data:
      gateway_id: "1"
      temperature: "{{ states('sensor.openweathermap_temperature') }}"
mode: single

  • Dutchess_Nicole
  • Registratie: Augustus 2001
  • Laatst online: 09:39
Ik doe iets soorgelijks alleen dan gelijk in MQTT:

YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
alias: Set OT for boiler when outside temperature changes
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.garden_sensor_temperature
condition: []
action:
  - service: mqtt.publish
    data:
      topic: OTGW/set/otgw-308398A2F389/command
      payload_template: OT={{ states('sensor.garden_sensor_temperature') | float(default=0.0) }}
mode: restart


Ik heb geen aparte service gemaakt voor het publishen van een OT, ik stuur het gewoon gelijk de MQTT topic in en de OTGW pakt het wel op

Kia E-Niro 64kWh DynamicPlusLine


  • cville
  • Registratie: Juni 2012
  • Laatst online: 07-06 19:39
markvd1962 schreef op zondag 25 december 2022 @ 00:36:
Ik zie het even niet, beetje hulp nodig. Nieuwe Nodo OTGW aangesloten aan een Remeha Avanta met Isense, inclusief buitentemperatuur sensor. Via Wifi en MQTT naar Home Assistant. Alles werkt perfect, zie een hele hoop data. Met een automation in HA lukt het om via "climate: set temperature" een nieuwe "room temperature" op de Isense in te stellen. Nu wil ik graag de aanvoertemperatuur afhankelijk maken van de buitentemperatuur in HA. In OTmonitor kan ik de aanvoertemperatuur aanpassen, maar hoe doe ik dit met een automation in HA? Ik hoop dat dit de juiste plaats is voor deze vraag.
Voor de zekerheid: heb je de desbetreffende instellingen in de iSense gebruikt? Ik gebruik RTC+LIMIET met een RT invloed van 8.

PVOutput - East/West: 26 x QCELLS Q-peak G5 Duo 325Wp, SMA STP6.0-3AV-40, inclination 13°, az 101/281°; South: 14 x Yingly Panda YL260C-30b, SMA SB 3000-TL21, inclination: 23°; az: 101°


  • markvd1962
  • Registratie: December 2022
  • Laatst online: 11-05 12:06
Bedankt voor alle reacties.

Ik gebruik niet "RTC + Limiet" maar gewoon RTC. Zojuist de RTC + Limiet geprobeerd, maar dit verandert blijkbaar niet de aanvoertemperatuur. Er is bijna niets te vinden op internet over RTC+Limiet, enkel wat in de handleiding van de Isense staat. 25 keer gelezen, maar het blijft allemaal erg onduidelijk, inclusief wat de RT invloed precies doet. En die "stooklijn" leeft ook nog niet.

Buitentemperatuur wordt netjes door de OTGW doorgegeven aan de Isense. Ik kan zelfs de max CH water setpoint (dus de aanvoertemperatuur) aanpassen in "developer tools". Maar omdat het een entity is lukt dat niet in een automation. Met MQTT topic aan de slag geweest, maar heb eigenlijk geen idee hoe die eruit exact uit moet zien. Ben ik nog mee aan de slag op basis van dit advies (zie heronder), maar zal eerst wat meer tijd in de service mqtt publish moeten steken:

action:
- service: mqtt.publish
data:
topic: OTGW/set/otgw-308398A2F389/command
payload_template: OT={{ states('sensor.garden_sensor_temperature') | float(default=0.0) }}

  • Tanuki
  • Registratie: Januari 2005
  • Niet online
Ik zit er ook over te denken om de OpenTherm Gateway te gaan aanschaffen. In principe is de nodoshop versie de versie om aan te schaffen toch?

Zijn er mensen die de OpenTherm gateway gebruiken met poe? Heeft dat voordelen?

En heeft het nut om de behuizing erbij te kopen, of kan je net zo goed gewoon een standaard behuizing gebruiken? Voordeel van die van nodoshop is dat ie transparant is uiteraard, kun je nog wat zien.

En hoeveel draden zijn nodig om hem aan te sluiten? Ik heb namelijk 4 draden bij mijn thermostaat zitten, waarvan er op dit moment maar 2 zijn aangesloten. De andere 2 draadjes (het is een telefoonkabel, lijkt het) zijn heel kort afgeknipt.

De thermostaat die ik heb is de Remeha qSense. Ketel is de Remeha avanta 28c. Zou dat nog voor incompatibilities zorgen? Ik zie dat ik evt een Remeha iSense er aan kan hangen, maar ik zou eigenlijk willen switchen naar een modernere thermostaat.

En op termijn wil ik uiteraard naar de warmtepomp en van het gas af. Ik neem aan dat het dan de OpenTherm gateway aan de warmtepomp hangen betekent. En klaar is @Tanuki? :)

  • htca
  • Registratie: November 2001
  • Laatst online: 13:12
Tanuki schreef op zondag 25 december 2022 @ 20:29:
Ik zit er ook over te denken om de OpenTherm Gateway te gaan aanschaffen. In principe is de nodoshop versie de versie om aan te schaffen toch?

Zijn er mensen die de OpenTherm gateway gebruiken met poe? Heeft dat voordelen?
Hij hang hier naast de ketel met een wemos erop, gevoed met een usb kabel. Geen idee of je hem via poe kunt voeden.
En heeft het nut om de behuizing erbij te kopen, of kan je net zo goed gewoon een standaard behuizing gebruiken? Voordeel van die van nodoshop is dat ie transparant is uiteraard, kun je nog wat zien.
Transparant is leuk als je er naar wilt kijken. Op thingiverse kun je eventueel ook een behuizing vinden om te (laten) printen.
En hoeveel draden zijn nodig om hem aan te sluiten? Ik heb namelijk 4 draden bij mijn thermostaat zitten, waarvan er op dit moment maar 2 zijn aangesloten. De andere 2 draadjes (het is een telefoonkabel, lijkt het) zijn heel kort afgeknipt.
Lees even de documentatie van de otgw. De otgw komt tussen je thermostaat en je ketel. Er gaan 2 draden in en er komen er 2 uit.
De thermostaat die ik heb is de Remeha qSense. Ketel is de Remeha avanta 28c. Zou dat nog voor incompatibilities zorgen? Ik zie dat ik evt een Remeha iSense er aan kan hangen, maar ik zou eigenlijk willen switchen naar een modernere thermostaat.
Zolang je ketel en de thermostaat opentherm spreken… hij zit hier tussen een toon en een calenta ace. Maar check de compatibility sheet op de website en je ziet wat kan….
En op termijn wil ik uiteraard naar de warmtepomp en van het gas af. Ik neem aan dat het dan de OpenTherm gateway aan de warmtepomp hangen betekent. En klaar is @Tanuki? :)
Ik ken geen voorbeelden van otgw en warmtepompen, maar wil niet zeggen dat die er niet zijn.

  • Marc_Sway
  • Registratie: Oktober 2010
  • Laatst online: 11:34
Beste mensen,

Zijn er binnen dit forum ervaringen met de Theben RAMSES 850 BLE OT, ook in relatie met de OTGW?

https://www.theben-nederl...Bedieningshandleiding.PDF

  • markvd1962
  • Registratie: December 2022
  • Laatst online: 11-05 12:06
PS: Mijn probleem is opgelost: aanvoertemperatuur instellen op OTGW vanuit HA. Inderdaad een simpel MQTT berichtje. Uitzoeken koste echter een halve dag:
action:
- service: mqtt.publish
data:
topic: OTGW/set/otgw-BCFF4DF96743/command
payload: SH=55

  • markvd1962
  • Registratie: December 2022
  • Laatst online: 11-05 12:06
Ik zie dat er op de OTGW GPIO pinnen zijn die als output geschakeld kunnen worden (switch on/off). Misschien kan de pomp van de vloerverwarming hiermee geschakeld gaan worden. Iemand enige ervaring hiermee?

  • macheld
  • Registratie: April 2004
  • Laatst online: 29-05 20:27
Zo hier afgelopen vrijdag ook een otgw setje mogen ontvangen. Bij in elkaar zetten van het setje, gelijk het ssid proberen ter configureren in de wemos esp. Via wifi accesspoint kon ik wel bij de esp en had het volgende plaatje (even gequote van Ruudsterje)




Kon ik wel op de knoppen drukken en werd er een nieuwe pagina geopend die leeg bleef.
(Volgende de rvanbreemen girhub page over otgw firmware page) met de esp direkt op de laptop los van de otgw.
Eerst de ESPEasy_R147_4096.bin geupload, dit leverde niet echt een goed resultaat op (de upload ging prima overgens)
Daarna OTGW-firmware.0.9.5+4eb7d24.mklittlefs.bin geupload en had ik weer het zelfde resultaat wel bedienbare knoppen die naar een lege pagina verwijzen.
Daarna OTGW-firmware.0.9.5+4eb7d24.ino.bin geladen en kon ik mijn ssid en pasword invoeren, en logde de esp in op het wifinetwerk. Via otmonitor.exe kan ik de otgw zien en wordt er contakt gemaakt.

Alleen op de webpage (esp eigen ip adres) werd er gevraag om FSexplorer.css en FSexplorer.html te uploaden. Dit gedaan, en op het esp ip addres is nog steeds het zelfde page te zien die vraagt om de FSexplores files.
Na instalatie tussen de ketel en termostaat (nefit nxt en nefid easy) kan ik nu de info aflezen.
Via domoticx op port 25265 heb ik contakt met de otgw, dit werkt dus gewoon. Alleen zijn eigen homepage doet het dus niet.
Iemand nog een goed idee om dit op te lossen?

[Voor 22% gewijzigd door macheld op 29-12-2022 15:32]

20x47mm solarboiler in 200l vat met naverwarming via houtkachel en cv


  • number3
  • Registratie: Februari 2002
  • Laatst online: 06:18
@macheld het filesystem heb je niet geflashd.

Kijk hier voor instructies:
https://github.com/rvdbreemen/OTGW-firmware/wiki

Succes,
Robert

  • macheld
  • Registratie: April 2004
  • Laatst online: 29-05 20:27
Bedankt voor de tip vannavond even proberen.
tnx

20x47mm solarboiler in 200l vat met naverwarming via houtkachel en cv


  • macheld
  • Registratie: April 2004
  • Laatst online: 29-05 20:27
Zo, alle littleFS files geuploaded. en idd werkt het nu.
(tnx voor de tip number3)

Was even puzzelen hoe en wat, nu werkt de website op ESP idd.

20x47mm solarboiler in 200l vat met naverwarming via houtkachel en cv


  • markvd1962
  • Registratie: December 2022
  • Laatst online: 11-05 12:06
CVILLE, misschien zie je dit berichtje. Je vertelde dat je RTC+LIMIET met een RT invloed van 8 gebruikt. Ik ben er mee aan de slag gegaan. Lijkt precies wat ik zoek. Wat zijn je stooklijn instellingen? (als leidraad).

  • cville
  • Registratie: Juni 2012
  • Laatst online: 07-06 19:39
markvd1962 schreef op zaterdag 31 december 2022 @ 18:31:
CVILLE, misschien zie je dit berichtje. Je vertelde dat je RTC+LIMIET met een RT invloed van 8 gebruikt. Ik ben er mee aan de slag gegaan. Lijkt precies wat ik zoek. Wat zijn je stooklijn instellingen? (als leidraad).
Hier zijn al mijn instellingen:

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
#   Parameter   min max eenheid 2022-12-09
                    20:51
    Itho Daalderop Base Cube Duo 24/35 CW5              
    CV temperatuur LT   30  90  °C 50
    CV temperatuur HT   30  90  °C 60
    Nadraaien CV    1   60  m   10
    Laagbrandtijd   0   15  m   5
    Acceleratietijd 0   10  m   5
    Antipendeltijd  0   6   m   3
    Ketelveiligheid 5   20  °C 10
    CV LT bewaking  55  65  °C 55
    HT prioriteit   0   100 %   25
    HT cyclustijd   20  90  m   60
    MAX CV vermogen 7   24  kW  24
    Wilo Yonos Para RS Ku 15/6 RKA CM 130 3         stand   ΔP-c: 6
    Comap differentieel drukregelaar 872B           bar 0.5 MAX
    Remeha iSense - woonkamer               
    Nachtprogramma          HH:MM    22:00-08:00 
    Setpoint dag            °C 21.5
    Setpoint nacht          °C 19.0
    Regelstrategie          °C RTC+LIMIET
    RT-invloed              8.0
    Voetpunt buiten             10.0
    Voetpunt aanvoer                30.0
    Klimaatpunt buiten              -10.0
    Klimaatpunt aanvoer             45.0
    Kromming                VV
    Comfort correctie               UIT
    Pompsturing             AAN
    Vermogensturing             AAN
    Opwarmsnelheid              EXTRA L
    Afkoelsnelheid              LANGZST
    Maximale aanwarmtijd            m   0.0
    Minimale CV temperatuur         °C 37
    Maximale CV temperatuur         °C 45
    Warmwater               Anti-L
    Warmhouden              UIT
    Tapwatertemperatuur         °C 60
    Therminon Composite LTV verdeler - 11 groepen               
    Wilo Yonos Para 15/6 1" 130 mm pomp             ΔP-c: 5
    nadraaien pomp              15.0
    mengventiel verdeler                open
1   keuken          l/m 2.0
2   zitkamer west           l/m 1.8
3   zitkamer west, midden           l/m 1.5
4   zitkamer oost, midden           l/m 1.5
5   zitkamer oost           l/m 1.5
6   eetkamer            l/m 1.0
7   wasruimte           l/m 1.0
8   slaapkamer          l/m 0.7
9   logeerkamer         l/m 1.0
10  badkamer            l/m 1.5
11  berging         l/m 0.1
    Badkamerradiator                
    radiatorkraan           slagen  open
                    
    GEEL = gewijzigde instelling


Sorry voor de formatting; bij mij zijn het mooie Excel kolommen.

PVOutput - East/West: 26 x QCELLS Q-peak G5 Duo 325Wp, SMA STP6.0-3AV-40, inclination 13°, az 101/281°; South: 14 x Yingly Panda YL260C-30b, SMA SB 3000-TL21, inclination: 23°; az: 101°


  • markvd1962
  • Registratie: December 2022
  • Laatst online: 11-05 12:06
Cville, precies wat ik zocht. In de Isense handleiding staat wel wat adviezen voor de stooklijn, maar dat werkte gewoon niet voor RTC+limiet. Ik ben al wat gaan proberen en zie nu dat ik in de goede richting zit. Ik begin door te krijgen hoe e.e.a. werkt. Bedankt!

  • Toets
  • Registratie: Februari 2007
  • Laatst online: 08-06 16:51
Lasoul schreef op vrijdag 9 september 2022 @ 20:03:
[...]


Okay ik heb de nieuwe gateway van Nodoshop binnen en deze geeft helaas hetzelfde probleem. :(
Ik heb ook via Diyless ook een gateway besteld. Deze moet je dan wel zelf via Arduino programmeren. Deze heb ik vandaag binnen gekregen en die werkt gewoon. *O*

Aankomend weekend maar even snel een programma in elkaar zetten zodat ik het kan gebruiken in Home Assistant via MQTT. Ik wil namelijk vanuit Home Assistant de CV temperatuur en het tapwater temperatuur kunnen zetten (zonneboiler).
Ik ben benieuwd of je de DIYLess gateway al via MQTT aan de praat heb gekregen? Mijn programmeer skills zijn niet optimaal en ik loop enorm te hannessen om de gateway voorbeelden om te bouwen tot iets werkbaars in HA. Zou jij je code willen delen indien het jou wel is gelukt?

  • 19roland70
  • Registratie: Augustus 2013
  • Laatst online: 05-06 20:35
hoe kan ik de esp flashen met een Macbook, ben al uren bezig maar ik kan alleen maar 1 file erin zetten.

  • Lasoul
  • Registratie: November 2001
  • Laatst online: 23-04 16:20
Toets schreef op maandag 2 januari 2023 @ 17:07:
[...]


Ik ben benieuwd of je de DIYLess gateway al via MQTT aan de praat heb gekregen? Mijn programmeer skills zijn niet optimaal en ik loop enorm te hannessen om de gateway voorbeelden om te bouwen tot iets werkbaars in HA. Zou jij je code willen delen indien het jou wel is gelukt?
Geen probleem.
Ik heb onderstaande gemaakt zodat ik de warmwater temperatuur en CV temperatuur van de thermostaat kan overriden in Home Assistant. Ik heb namelijk een zonneboiler en 's zomers wil ik de warmwater temperatuur dynamisch schakelen.

De code is helaas behoorlijk lang dus ik heb het in twee gedeeltes bijgevoegd, excuus voor de rest maar wellicht ook interessant voor anderen :)
Je moet alleen even je eigen WiFi en MQTT broker gegevens invullen

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
 /*
  OpenTherm Gateway/Monitor MQTT control

  Boardsmanager
  https://arduino.esp8266.com/stable/package_esp8266com_index.json

  LOLIN(WEMOS) D1 R2 & mini
  Settings:
    Upload Speed: 921600
    CPU Frequency: 80Mhz
    Flash Size: 4MB (FS:2MB OTA:~1019KB)
    lwIP Variant: v1.4 Higher bandwidth
    Debug Port: Serial / Remote
    lwIP variant: V2 lower memory

  Remote Debug
    Use v to set debuglevel to verbose

  Dependencies
    PubSubClient library
    RemoteDebug library
    Ticker library
    ArduinoOTA library
    OpenTherm library https://github.com/ihormelnyk/opentherm_library

Boards:

Version:
0.1  12-09-2022 Initial setup
0.2  30-09-2022 Fixed setting the hotwater temperature so that the thermostat can't override it
0.3  19-10-2022 Added the central heating return temperature, pressure and modulation level
               Fixed temperature setting and CV temperature setting which were swapped
               Reworked overriding the values; first complete request/response from thermostat than send new message
0.4  26-10-2022 Retry implemented when command fails
0.5  07-11-2022 Ignoring error responses to filter out random values
0.6  23-11-2022 Added ΔT calculation
0.61 11-12-2022 Fixed delta-t of 0, it was incorrectly reported as null
 
*/
#include <Arduino.h>
#include <Ticker.h>
#include <PubSubClient.h>
#include <ArduinoOTA.h>
#include <OpenTherm.h>
#include <RemoteDebug.h>
#include <RemoteDebugCfg.h>
#include <RemoteDebugWS.h>
#include <telnet.h>

#define SW_VERSION "0.61"
#define HOST_NAME "ESP-OpenThermGW"

// Define the pins for the master thermostat
#define PIN_MASTER_IN 4
#define PIN_MASTER_OUT 5
// Define the pins for the slave boiler
#define PIN_SLAVE_IN 12
#define PIN_SLAVE_OUT 13

// Define the default for the hotwater temperature override
#define DEFAULT_HOTWATER_TEMPERATURE_OVERRIDE 55.0
#define STEP_HOTWATER_TEMPERATURE_OVERRIDE 1.0
#define STEP_HOTWATER_TEMPERATURE_OVERRIDE_DOMINATOR 1.0 // The number of times the step fits in 1. This is used for rounding correctly
#define MIN_HOTWATER_TEMPERATURE_OVERRIDE 35.0
#define MAX_HOTWATER_TEMPERATURE_OVERRIDE 65.0

// Define the default for the central heating temperature override
#define DEFAULT_CENTRALHEATING_TEMPERATURE_OVERRIDE 50.0
#define STEP_CENTRALHEATING_TEMPERATURE_OVERRIDE 1.0
#define STEP_CENTRALHEATING_TEMPERATURE_OVERRIDE_DOMINATOR 1.0 // The number of times the step fits in 1. This is used for rounding correctly
#define MIN_CENTRALHEATING_TEMPERATURE_OVERRIDE 35.0
#define MAX_CENTRALHEATING_TEMPERATURE_OVERRIDE 85.0

// Define the default and ranges for the sensor temperatures
#define DEFAULT_SENSOR_TEMPERATURE 0.0
#define MIN_SENSOR_TEMPERATURE_BOUNDARY 1.0 
#define MAX_SENSOR_TEMPERATURE_BOUNDARY 100.0 
// Define the default for the pressure
#define DEFAULT_PRESSURE 0.0
#define MIN_PRESSURE_BOUNDARY 0.0 
#define MAX_PRESSURE_BOUNDARY 5.0 
// Define the default for the modulation
#define DEFAULT_MODULATION 0.0
#define MIN_MODULATION 0.0 
#define MAX_MODULATION 100.0 

#define MAX_COMMAND_RETRIES 5

// WiFi constants
const char* WiFi_hostname = HOST_NAME;
const char* WiFi_SSID = "*****"; // CHANGE ME
const char* WiFi_password = "*****"; // CHANGE ME

// MQTT constants
const int   MQTT_MAX_MESSAGE_SIZE = 650; // Do not reduce the size because it will trigger MQTT publish errors on publish discovery
const char* MQTT_server = "mqttbroker"; // CHANGE ME
const char* MQTT_username = "mqtt"; // CHANGE ME
const char* MQTT_password = "*****"; // CHANGE ME

// Unique identifiers for the device and the sensors/numbers etc.
const char* MQTT_openthermgw_unique_id = "ESP-OpenThermGW";
const char* MQTT_openthermgw_number_temperature_hotwater_override_unique_id = "ESP-OpenThermGW-number-temperature-hotwater-override";
const char* MQTT_openthermgw_number_temperature_centralheating_override_unique_id = "ESP-OpenThermGW-number-temperature-centralheating-override";
const char* MQTT_openthermgw_sensor_temperature_set_hotwater_unique_id = "ESP-OpenThermGW-sensor-temperature-set-hotwater";
const char* MQTT_openthermgw_sensor_temperature_set_centralheating_unique_id = "ESP-OpenThermGW-sensor-temperature-set-centralheating";
const char* MQTT_openthermgw_sensor_temperature_hotwater_unique_id = "ESP-OpenThermGW-sensor-temperature-hotwater";
const char* MQTT_openthermgw_sensor_temperature_centralheating_unique_id = "ESP-OpenThermGW-sensor-temperature-centralheating";
const char* MQTT_openthermgw_sensor_temperature_return_unique_id = "ESP-OpenThermGW-sensor-temperature-return";
const char* MQTT_openthermgw_sensor_temperature_delta_t_unique_id = "ESP-OpenThermGW-sensor-temperature-delta-t";
const char* MQTT_openthermgw_sensor_pressure_unique_id = "ESP-OpenThermGW-sensor-pressure";
const char* MQTT_openthermgw_sensor_modulation_unique_id = "ESP-OpenThermGW-sensor-modulation";

const char* MQTT_command_topic_short = "~/set"; 
const char* MQTT_openthermgw_state_topic = "homeassistant/openthermgw/state";

const char* MQTT_openthermgw_number_temperature_hotwater_override_base_topic = "homeassistant/number/openthermgw/temperature-hotwater-override";
const char* MQTT_openthermgw_number_temperature_hotwater_override_config_topic = "homeassistant/number/openthermgw/temperature-hotwater-override/config";
const char* MQTT_openthermgw_number_temperature_hotwater_override_command_topic = "homeassistant/number/openthermgw/temperature-hotwater-override/set";
const char* MQTT_openthermgw_number_temperature_hotwater_override_config_topic_value = "{{ value_json.temperature_hotwater_override }}";

const char* MQTT_openthermgw_number_temperature_centralheating_override_base_topic = "homeassistant/number/openthermgw/temperature-centralheating-override";
const char* MQTT_openthermgw_number_temperature_centralheating_override_config_topic = "homeassistant/number/openthermgw/temperature-centralheating-override/config";
const char* MQTT_openthermgw_number_temperature_centralheating_override_command_topic = "homeassistant/number/openthermgw/temperature-centralheating-override/set";
const char* MQTT_openthermgw_number_temperature_centralheating_override_config_topic_value = "{{ value_json.temperature_centralheating_override }}";

const char* MQTT_openthermgw_sensor_temperature_set_hotwater_base_topic = "homeassistant/sensor/openthermgw/temperature-set-hotwater";
const char* MQTT_openthermgw_sensor_temperature_set_hotwater_config_topic = "homeassistant/sensor/openthermgw/temperature-set-hotwater/config";
const char* MQTT_openthermgw_sensor_temperature_set_hotwater_config_topic_name = "Hotwater set temperature";
const char* MQTT_openthermgw_sensor_temperature_set_hotwater_config_topic_value = "{{ value_json.temperature_set_hotwater }}";

const char* MQTT_openthermgw_sensor_temperature_set_centralheating_base_topic = "homeassistant/sensor/openthermgw/temperature-set-centralheating";
const char* MQTT_openthermgw_sensor_temperature_set_centralheating_config_topic = "homeassistant/sensor/openthermgw/temperature-set-centralheating/config";
const char* MQTT_openthermgw_sensor_temperature_set_centralheating_config_topic_name = "Central heating set temperature";
const char* MQTT_openthermgw_sensor_temperature_set_centralheating_config_topic_value = "{{ value_json.temperature_set_centralheating }}";

const char* MQTT_openthermgw_sensor_temperature_hotwater_base_topic = "homeassistant/sensor/openthermgw/temperature-hotwater";
const char* MQTT_openthermgw_sensor_temperature_hotwater_config_topic = "homeassistant/sensor/openthermgw/temperature-hotwater/config";
const char* MQTT_openthermgw_sensor_temperature_hotwater_config_topic_name = "Hotwater temperature";
const char* MQTT_openthermgw_sensor_temperature_hotwater_config_topic_value = "{{ value_json.temperature_hotwater }}";

const char* MQTT_openthermgw_sensor_temperature_centralheating_base_topic = "homeassistant/sensor/openthermgw/temperature-centralheating";
const char* MQTT_openthermgw_sensor_temperature_centralheating_config_topic = "homeassistant/sensor/openthermgw/temperature-centralheating/config";
const char* MQTT_openthermgw_sensor_temperature_centralheating_config_topic_name = "Central heating temperature";
const char* MQTT_openthermgw_sensor_temperature_centralheating_config_topic_value = "{{ value_json.temperature_centralheating }}";

const char* MQTT_openthermgw_sensor_temperature_return_base_topic = "homeassistant/sensor/openthermgw/temperature-return";
const char* MQTT_openthermgw_sensor_temperature_return_config_topic = "homeassistant/sensor/openthermgw/temperature-return/config";
const char* MQTT_openthermgw_sensor_temperature_return_config_topic_name = "Central heating return temperature";
const char* MQTT_openthermgw_sensor_temperature_return_config_topic_value = "{{ value_json.temperature_return }}";

const char* MQTT_openthermgw_sensor_temperature_delta_t_base_topic = "homeassistant/sensor/openthermgw/temperature-delta-t";
const char* MQTT_openthermgw_sensor_temperature_delta_t_config_topic = "homeassistant/sensor/openthermgw/temperature-delta-t/config";
const char* MQTT_openthermgw_sensor_temperature_delta_t_config_topic_name = "Central heating ΔT";
const char* MQTT_openthermgw_sensor_temperature_delta_t_config_topic_value = "{{ value_json.temperature_delta_t }}";

const char* MQTT_openthermgw_sensor_pressure_base_topic = "homeassistant/sensor/openthermgw/pressure";
const char* MQTT_openthermgw_sensor_pressure_config_topic = "homeassistant/sensor/openthermgw/pressure/config";
const char* MQTT_openthermgw_sensor_pressure_config_topic_name = "Central heating pressure";
const char* MQTT_openthermgw_sensor_pressure_config_topic_value = "{{ value_json.pressure }}";

const char* MQTT_openthermgw_sensor_modulation_base_topic = "homeassistant/sensor/openthermgw/modulation";
const char* MQTT_openthermgw_sensor_modulation_config_topic = "homeassistant/sensor/openthermgw/modulation/config";
const char* MQTT_openthermgw_sensor_modulation_config_topic_name = "Central heating modulation";
const char* MQTT_openthermgw_sensor_modulation_config_topic_value = "{{ value_json.modulation }}";

const char* MQTT_openthermgw_state_payload =
                                        "{\"temperature_hotwater_override\": %s,"
                                         "\"temperature_centralheating_override\": %s,"
                                         "\"temperature_set_hotwater\": %s,"
                                         "\"temperature_set_centralheating\": %s,"
                                         "\"temperature_hotwater\": %s,"
                                         "\"temperature_centralheating\": %s,"
                                         "\"temperature_return\": %s,"
                                         "\"temperature_delta_t\": %s,"
                                         "\"pressure\": %.1f," 
                                         "\"modulation\": %.1f}"; 

const char* MQTT_config_openthermgw_number_temperature_hotwater_override_topic_payload =
                                        "{\"~\": \"%s\","
                                         "\"name\": \"Hotwater temperature override\","                 // name
                                         "\"uniq_id\": \"%s\","                                         // unique_id
                                         "\"ic\": \"mdi:numeric\","                                     // icon
                                         "\"cmd_t\": \"%s\","                                           // command_topic
                                         "\"stat_t\": \"%s\","                                          // state_topic
                                         "\"min\": %.1f,"                                               // min
                                         "\"max\": %.1f,"                                               // max
                                         "\"step\": %.1f,"                                              // step
                                         "\"unit_of_meas\": \"°C\","                                    // unit_of_measurement
                                         "\"val_tpl\": \"%s\","                                         // value_template
                                         "\"ret\": true,"                                               // retain
                                         "\"dev\": {"                                                   // device
                                           "\"name\": \"OpenTherm Gateway control\","
                                           "\"mf\": \"Patrick Vorgers\","                               // manufacturer
                                           "\"mdl\": \"OTGWC 1.0\","                                    // model
                                           "\"sw\": \""SW_VERSION"\","                                  // sw_version
                                           "\"ids\": [\"%s\"]"                                          // identifiers
                                         "}"
                                        "}";

const char* MQTT_config_openthermgw_number_temperature_centralheating_override_topic_payload =
                                        "{\"~\": \"%s\","
                                         "\"name\": \"Central heating temperature override\","          // name
                                         "\"uniq_id\": \"%s\","                                         // unique_id
                                         "\"ic\": \"mdi:numeric\","                                     // icon
                                         "\"cmd_t\": \"%s\","                                           // command_topic
                                         "\"stat_t\": \"%s\","                                          // state_topic
                                         "\"min\": %.1f,"                                               // min
                                         "\"max\": %.1f,"                                               // max
                                         "\"step\": %.1f,"                                              // step
                                         "\"unit_of_meas\": \"°C\","                                    // unit_of_measurement
                                         "\"val_tpl\": \"%s\","                                         // value_template
                                         "\"ret\": true,"                                               // retain
                                         "\"dev\": {"                                                   // device
                                           "\"name\": \"OpenTherm Gateway control\","
                                           "\"mf\": \"Patrick Vorgers\","                               // manufacturer
                                           "\"mdl\": \"OTGWC 1.0\","                                    // model
                                           "\"sw\": \""SW_VERSION"\","                                  // sw_version
                                           "\"ids\": [\"%s\"]"                                          // identifiers
                                         "}"
                                        "}";

const char* MQTT_config_openthermgw_sensor_temperature_generic_topic_payload =
                                        "{\"~\": \"%s\","
                                         "\"name\": \"%s\","                                            // name
                                         "\"uniq_id\": \"%s\","                                         // unique_id
                                         "\"ic\": \"mdi:thermometer\","                                 // icon
                                         "\"dev_cla\": \"temperature\","                                // device_class
                                         "\"stat_t\": \"%s\","                                          // state_topic
                                         "\"unit_of_meas\": \"°C\","                                    // unit_of_measurement
                                         "\"val_tpl\": \"%s\","                                         // value_template
                                         "\"frc_upd\": true,"                                           // force_update (when value does not change still send update for history graphs)
                                         "\"stat_cla\": \"measurement\","                               // state_class
                                         "\"dev\": {"                                                   // device
                                           "\"name\": \"OpenTherm Gateway control\","
                                           "\"mf\": \"Patrick Vorgers\","                               // manufacturer
                                           "\"mdl\": \"OTGWC 1.0\","                                    // model
                                           "\"sw\": \""SW_VERSION"\","                                  // sw_version
                                           "\"ids\": [\"%s\"]"                                          // identifiers
                                         "}"
                                        "}";
                                        
const char* MQTT_config_openthermgw_sensor_pressure_topic_payload =
                                        "{\"~\": \"%s\","
                                         "\"name\": \"%s\","                                            // name
                                         "\"uniq_id\": \"%s\","                                         // unique_id
                                         "\"dev_cla\": \"pressure\","                                   // device_class
                                         "\"stat_t\": \"%s\","                                          // state_topic
                                         "\"unit_of_meas\": \"bar\","                                   // unit_of_measurement
                                         "\"val_tpl\": \"%s\","                                         // value_template
                                         "\"frc_upd\": true,"                                           // force_update (when value does not change still send update for history graphs)
                                         "\"stat_cla\": \"measurement\","                               // state_class
                                         "\"dev\": {"                                                   // device
                                           "\"name\": \"OpenTherm Gateway control\","
                                           "\"mf\": \"Patrick Vorgers\","                               // manufacturer
                                           "\"mdl\": \"OTGWC 1.0\","                                    // model
                                           "\"sw\": \""SW_VERSION"\","                                  // sw_version
                                           "\"ids\": [\"%s\"]"                                          // identifiers
                                         "}"
                                        "}";

const char* MQTT_config_openthermgw_sensor_modulation_topic_payload =
                                        "{\"~\": \"%s\","
                                         "\"name\": \"%s\","                                            // name
                                         "\"uniq_id\": \"%s\","                                         // unique_id
                                         "\"dev_cla\": \"power_factor\","                               // device_class
                                         "\"stat_t\": \"%s\","                                          // state_topic
                                         "\"unit_of_meas\": \"%\","                                     // unit_of_measurement
                                         "\"val_tpl\": \"%s\","                                         // value_template
                                         "\"frc_upd\": true,"                                           // force_update (when value does not change still send update for history graphs)
                                         "\"stat_cla\": \"measurement\","                               // state_class
                                         "\"dev\": {"                                                   // device
                                           "\"name\": \"OpenTherm Gateway control\","
                                           "\"mf\": \"Patrick Vorgers\","                               // manufacturer
                                           "\"mdl\": \"OTGWC 1.0\","                                    // model
                                           "\"sw\": \""SW_VERSION"\","                                  // sw_version
                                           "\"ids\": [\"%s\"]"                                          // identifiers
                                         "}"
                                        "}";

const int Discovery_Update_Interval    = 5 * 60; // In seconds
const int State_Update_Interval        = 30;     // In seconds

// Global variables
WiFiClient espClient;
PubSubClient client(espClient);
Ticker discoveryPublishTimer, openthermgwStatePublishTimer;
RemoteDebug Debug;
bool discoveryUpdateFlag = false, openthermgwStateUpdateFlag = false;
OpenTherm boilerOpenTherm(PIN_MASTER_IN, PIN_MASTER_OUT);
OpenTherm thermostatOpenTherm(PIN_SLAVE_IN, PIN_SLAVE_OUT, true);
float temperatureCentralheatingOverride = DEFAULT_CENTRALHEATING_TEMPERATURE_OVERRIDE;
float temperatureHotwaterOverride = DEFAULT_HOTWATER_TEMPERATURE_OVERRIDE;
float temperatureReturn = DEFAULT_SENSOR_TEMPERATURE;
float temperatureSetCentralheating = DEFAULT_SENSOR_TEMPERATURE;
float temperatureSetHotwater = DEFAULT_SENSOR_TEMPERATURE;
float temperatureCentralheating = DEFAULT_SENSOR_TEMPERATURE;
float temperatureHotwater = DEFAULT_SENSOR_TEMPERATURE;
float boilerPressure = DEFAULT_PRESSURE;
float boilerModulation = DEFAULT_MODULATION;

// Convert the OpenTherm messageID to a string
const char* openThermMessageIDToString(OpenThermMessageID messageID) {
  switch(messageID) {
  case OpenThermMessageID::Status:                      return("Status");                     // flag8 / flag8  Master and Slave Status flags.
  case OpenThermMessageID::TSet:                        return("TSet");                       // f8.8  Control setpoint  ie CH  water temperature setpoint (°C)
  case OpenThermMessageID::MConfigMMemberIDcode:        return("MConfigMMemberIDcode");       // flag8 / u8  Master Configuration Flags /  Master MemberID Code
  case OpenThermMessageID::SConfigSMemberIDcode:        return("SConfigSMemberIDcode");       // flag8 / u8  Slave Configuration Flags /  Slave MemberID Code
  case OpenThermMessageID::Command:                     return("Command");                    // u8 / u8  Remote Command
  case OpenThermMessageID::ASFflags:                    return("ASFflags");                   // / OEM-fault-code  flag8 / u8  Application-specific fault flags and OEM fault code
  case OpenThermMessageID::RBPflags:                    return("RBPflags");                   // flag8 / flag8  Remote boiler parameter transfer-enable & read/write flags
  case OpenThermMessageID::CoolingControl:              return("CoolingControl");             // f8.8  Cooling control signal (%)
  case OpenThermMessageID::TsetCH2:                     return("TsetCH2");                    // f8.8  Control setpoint for 2e CH circuit (°C)
  case OpenThermMessageID::TrOverride:                  return("TrOverride");                 // f8.8  Remote override room setpoint
  case OpenThermMessageID::TSP:                         return("TSP");                        // u8 / u8  Number of Transparent-Slave-Parameters supported by slave
  case OpenThermMessageID::TSPindexTSPvalue:            return("TSPindexTSPvalue");           // u8 / u8  Index number / Value of referred-to transparent slave parameter.
  case OpenThermMessageID::FHBsize:                     return("FHBsize");                    // u8 / u8  Size of Fault-History-Buffer supported by slave
  case OpenThermMessageID::FHBindexFHBvalue:            return("FHBindexFHBvalue");           // u8 / u8  Index number / Value of referred-to fault-history buffer entry.
  case OpenThermMessageID::MaxRelModLevelSetting:       return("MaxRelModLevelSetting");      // f8.8  Maximum relative modulation level setting (%)
  case OpenThermMessageID::MaxCapacityMinModLevel:      return("MaxCapacityMinModLevel");     // u8 / u8  Maximum boiler capacity (kW) / Minimum boiler modulation level(%)
  case OpenThermMessageID::TrSet:                       return("TrSet");                      // f8.8  Room Setpoint (°C)
  case OpenThermMessageID::RelModLevel:                 return("RelModLevel");                // f8.8  Relative Modulation Level (%)
  case OpenThermMessageID::CHPressure:                  return("CHPressure");                 // f8.8  Water pressure in CH circuit  (bar)
  case OpenThermMessageID::DHWFlowRate:                 return("DHWFlowRate");                // f8.8  Water flow rate in DHW circuit. (litres/minute)
  case OpenThermMessageID::DayTime:                     return("DayTime");                    // special / u8  Day of Week and Time of Day
  case OpenThermMessageID::Date:                        return("Date");                       // u8 / u8  Calendar date
  case OpenThermMessageID::Year:                        return("Year");                       // u16  Calendar year
  case OpenThermMessageID::TrSetCH2:                    return("TrSetCH2");                   // f8.8  Room Setpoint for 2nd CH circuit (°C)
  case OpenThermMessageID::Tr:                          return("Tr");                         // f8.8  Room temperature (°C)
  case OpenThermMessageID::Tboiler:                     return("Tboiler");                    // f8.8  Boiler flow water temperature (°C)
  case OpenThermMessageID::Tdhw:                        return("Tdhw");                       // f8.8  DHW temperature (°C)
  case OpenThermMessageID::Toutside:                    return("Toutside");                   // f8.8  Outside temperature (°C)
  case OpenThermMessageID::Tret:                        return("Tret");                       // f8.8  Return water temperature (°C)
  case OpenThermMessageID::Tstorage:                    return("Tstorage");                   // f8.8  Solar storage temperature (°C)
  case OpenThermMessageID::Tcollector:                  return("Tcollector");                 // f8.8  Solar collector temperature (°C)
  case OpenThermMessageID::TflowCH2:                    return("TflowCH2");                   // f8.8  Flow water temperature CH2 circuit (°C)
  case OpenThermMessageID::Tdhw2:                       return("Tdhw2");                      // f8.8  Domestic hot water temperature 2 (°C)
  case OpenThermMessageID::Texhaust:                    return("Texhaust");                   // s16  Boiler exhaust temperature (°C)
  case OpenThermMessageID::TdhwSetUBTdhwSetLB:          return("TdhwSetUBTdhwSetLB");         // s8 / s8  DHW setpoint upper & lower bounds for adjustment  (°C)
  case OpenThermMessageID::MaxTSetUBMaxTSetLB:          return("MaxTSetUBMaxTSetLB");         // s8 / s8  Max CH water setpoint upper & lower bounds for adjustment  (°C)
  case OpenThermMessageID::HcratioUBHcratioLB:          return("HcratioUBHcratioLB");         // s8 / s8  OTC heat curve ratio upper & lower bounds for adjustment
  case OpenThermMessageID::TdhwSet:                     return("TdhwSet");                    // f8.8  DHW setpoint (°C)    (Remote parameter 1)
  case OpenThermMessageID::MaxTSet:                     return("MaxTSet");                    // f8.8  Max CH water setpoint (°C)  (Remote parameters 2)
  case OpenThermMessageID::Hcratio:                     return("Hcratio");                    // f8.8  OTC heat curve ratio (°C)  (Remote parameter 3)
  case OpenThermMessageID::RemoteOverrideFunction:      return("RemoteOverrideFunction");     // flag8 / -  Function of manual and program changes in master and remote room setpoint.
  case OpenThermMessageID::OEMDiagnosticCode:           return("OEMDiagnosticCode");          // u16  OEM-specific diagnostic/service code
  case OpenThermMessageID::BurnerStarts:                return("BurnerStarts");               // u16  Number of starts burner
  case OpenThermMessageID::CHPumpStarts:                return("CHPumpStarts");               // u16  Number of starts CH pump
  case OpenThermMessageID::DHWPumpValveStarts:          return("DHWPumpValveStarts");         // u16  Number of starts DHW pump/valve
  case OpenThermMessageID::DHWBurnerStarts:             return("DHWBurnerStarts");            // u16  Number of starts burner during DHW mode
  case OpenThermMessageID::BurnerOperationHours:        return("BurnerOperationHours");       // u16  Number of hours that burner is in operation (i.e. flame on)
  case OpenThermMessageID::CHPumpOperationHours:        return("CHPumpOperationHours");       // u16  Number of hours that CH pump has been running
  case OpenThermMessageID::DHWPumpValveOperationHours:  return("DHWPumpValveOperationHours"); // u16  Number of hours that DHW pump has been running or DHW valve has been opened
  case OpenThermMessageID::DHWBurnerOperationHours:     return("DHWBurnerOperationHours");    // u16  Number of hours that burner is in operation during DHW mode
  case OpenThermMessageID::OpenThermVersionMaster:      return("OpenThermVersionMaster");     // f8.8  The implemented version of the OpenTherm Protocol Specification in the master.
  case OpenThermMessageID::OpenThermVersionSlave:       return("OpenThermVersionSlave");      // f8.8  The implemented version of the OpenTherm Protocol Specification in the slave.
  case OpenThermMessageID::MasterVersion:               return("MasterVersion");              // u8 / u8  Master product version number and type
  case OpenThermMessageID::SlaveVersion:                return("SlaveVersion");               // u8 / u8  Slave product version number and type    
  }
  return("Unknown");
}

void ICACHE_RAM_ATTR boilerHandleInterrupt() {
  boilerOpenTherm.handleInterrupt();
}

void ICACHE_RAM_ATTR thermostatHandleInterrupt() {
  thermostatOpenTherm.handleInterrupt();
}

// Process: Set boiler temperature
void process_TSet(unsigned long request, unsigned long response, const char *responseStatus, const char *messageIDDescription) {
  float temperature = thermostatOpenTherm.getFloat(request);
  
  rdebugVln("T%08x B%08x - %s - Processed: Set central heating temperature - %.1f", request, response, messageIDDescription, temperature);

  // Check if we have to update the temperature by sending a new request to the boiler
  if (temperature > temperatureCentralheatingOverride) {
    // Update the boiler temperature
    unsigned long newRequest = boilerOpenTherm.buildSetBoilerTemperatureRequest(temperatureCentralheatingOverride);
    unsigned long newResponse = 0;
    int messageAttempt = 0;
    do {
      messageAttempt++;
      newResponse = boilerOpenTherm.sendRequest(newRequest);
      if (newResponse) {
        rdebugVln("T%08x B%08x - %s - %s - The central heating temperature has been overriden to: %.1f", newRequest, newResponse, responseStatus, messageIDDescription, temperatureCentralheatingOverride);
        temperatureSetCentralheating = temperatureCentralheatingOverride;
      }  else {
        rdebugVln("T%08x B%08x - %s - %s - Attempt %d of %d: Could not override the central heating temperature to: %.1f", newRequest, newResponse, responseStatus, messageIDDescription, messageAttempt, MAX_COMMAND_RETRIES, temperatureCentralheatingOverride);
      }
    } while ((!newResponse) && (messageAttempt < MAX_COMMAND_RETRIES));
  } else {
    temperatureSetCentralheating = temperature;
  }
}

// Process: Set hotwater temperature
void Process_TdhwSet(unsigned long request, unsigned long response, const char *responseStatus, const char *messageIDDescription) {
  float temperature = thermostatOpenTherm.getFloat(request);
  
  rdebugVln("T%08x B%08x - %s - Processed: Set hotwater temperature - %.1f", request, response, messageIDDescription, temperature);

  // Check if we have to update the hotwater temperature by sending a new request to the boiler
  if ((temperature > MIN_HOTWATER_TEMPERATURE_OVERRIDE) && (temperature != temperatureHotwaterOverride)) {
    // Update the boiler temperature
    unsigned long newRequest = boilerOpenTherm.buildSetBoilerTemperatureRequest(temperatureHotwaterOverride);
    unsigned long newResponse = 0;
    int messageAttempt = 0;
    do {
      messageAttempt++;
      newResponse = boilerOpenTherm.sendRequest(newRequest);
      if (newResponse) {
        rdebugVln("T%08x B%08x - %s - %s - The hotwater temperature has been overriden to: %.1f", newRequest, newResponse, responseStatus, messageIDDescription, temperatureHotwaterOverride);
        temperatureSetHotwater = temperatureHotwaterOverride;
      }  else {
        rdebugVln("T%08x B%08x - %s - %s - Attempt %d of %d: Could not override the hotwater temperature to: %.1f", newRequest, newResponse, responseStatus, messageIDDescription, messageAttempt, MAX_COMMAND_RETRIES, temperatureHotwaterOverride);
      }
    } while ((!newResponse) && (messageAttempt < MAX_COMMAND_RETRIES));
  } else {
    temperatureSetHotwater = temperature;
  }
}

// Process: Get generic value
void ProcessGenericValue(unsigned long request, unsigned long response, const char *responseStatus, const char *messageIDDescription, float *refValue, const char* text, const float minBoundary, const float maxBoundary) {
  float readValue = boilerOpenTherm.getFloat(response);
  // Check if we have a valid response
  if (boilerOpenTherm.isValidResponse(response)) {
    if ((readValue > minBoundary) && (readValue < maxBoundary)) {
      *refValue = readValue;
      rdebugVln("T%08x B%08x - %s - %s - Received %s - %.1f", request, response, responseStatus, messageIDDescription, text, readValue);
    } else {
      rdebugVln("T%08x B%08x - %s - %s - Ignoring out of bounds %s received - %.1f", request, response, responseStatus, messageIDDescription, text, readValue);
    }
  } else {
    rdebugVln("T%08x B%08x - %s - %s - Ignoring received error: %s", request, response, responseStatus, messageIDDescription, text);
  }
}

// Process: Get modulation
void Process_RelModLevel(unsigned long request, unsigned long response, const char *responseStatus, const char *messageIDDescription) {
  float readValue = boilerOpenTherm.getFloat(response);
  // Check if we have a valid response
  if (boilerOpenTherm.isValidResponse(response)) {
    if ((readValue >= MIN_MODULATION) && (readValue <= MAX_MODULATION)) {
      boilerModulation = abs(readValue); // use abs to prevent -0.0
      rdebugVln("T%08x B%08x - %s - %s - Received modulation - %.1f", request, response, responseStatus, messageIDDescription, readValue);
    } else {
      rdebugVln("T%08x B%08x - %s - %s - Ignoring out of bounds modulation received - %.1f", request, response, responseStatus, messageIDDescription, readValue);
    }
  } else {
    rdebugVln("T%08x B%08x - %s - %s - Ignoring received error: modulation", request, response, responseStatus, messageIDDescription);
  }
}

void processRequestResponse(unsigned long request, unsigned long response) {
  OpenThermMessageType messageType = thermostatOpenTherm.getMessageType(request);

  const char *responseStatus = boilerOpenTherm.isValidResponse(response) ? "success" : "error";
  if ((messageType == OpenThermMessageType::READ_DATA) || (messageType == OpenThermMessageType::WRITE_DATA)) {
    OpenThermMessageID messageID = thermostatOpenTherm.getDataID(request);
    const char *messageIDDescription = openThermMessageIDToString(messageID);
    switch(messageID) {
      // Set centralheating temperature
      case OpenThermMessageID::TSet: {
        process_TSet(request, response, responseStatus, messageIDDescription);
      }
      break;
      // Set hotwater temperature
      case OpenThermMessageID::TdhwSet: {
        Process_TdhwSet(request, response, responseStatus, messageIDDescription);
      }
      break;
       // Get centralheating temperature
      case OpenThermMessageID::Tboiler: {
        ProcessGenericValue(request, response, responseStatus, messageIDDescription, &temperatureCentralheating, "central heating temperature", MIN_SENSOR_TEMPERATURE_BOUNDARY, MAX_SENSOR_TEMPERATURE_BOUNDARY);
      }
      break;
      // Get hotwater temperature
      case OpenThermMessageID::Tdhw: {
        ProcessGenericValue(request, response, responseStatus, messageIDDescription, &temperatureHotwater, "hotwater temperature", MIN_SENSOR_TEMPERATURE_BOUNDARY, MAX_SENSOR_TEMPERATURE_BOUNDARY);
      }
      break;
      // Get return temperature
      case OpenThermMessageID::Tret: {
        ProcessGenericValue(request, response, responseStatus, messageIDDescription, &temperatureReturn, "return temperature", MIN_SENSOR_TEMPERATURE_BOUNDARY, MAX_SENSOR_TEMPERATURE_BOUNDARY);
      }
      break;
      // Get centralheating pressure
      case OpenThermMessageID::CHPressure: {
        ProcessGenericValue(request, response, responseStatus, messageIDDescription, &boilerPressure, "pressure", MIN_PRESSURE_BOUNDARY, MAX_PRESSURE_BOUNDARY);
      }
      break;
      // Get centralheating modulation level
      case OpenThermMessageID::RelModLevel: {
        Process_RelModLevel(request, response, responseStatus, messageIDDescription);
      }
      break;
      default: {
        rdebugVln("T%08x B%08x - %s - %s", request, response, responseStatus, messageIDDescription);
      }
    }
  } else {
    rdebugVln("T%08x B%08x - %s", request, response, responseStatus);
  }
}

// Determine the response that has to be send to the thermostat. That could be response from boiler or response from gateway because of override
unsigned long determineResponse(unsigned long request) {  
  OpenThermMessageType messageType = thermostatOpenTherm.getMessageType(request);
  unsigned long overrideResponse = 0;

  if (messageType == OpenThermMessageType::WRITE_DATA) {
    OpenThermMessageID messageID = thermostatOpenTherm.getDataID(request);
    switch(messageID) {
      // Set centralheating temperature
      case OpenThermMessageID::TSet: {
        // Check if we are going to update the central heating temperature by sending a new request to the boiler
        // We first reply to the thermostat that the requested temperature has been set by the boiler than a new request is send to the boiler
        float temperature = thermostatOpenTherm.getFloat(request);
        if (temperature > temperatureCentralheatingOverride) {
          overrideResponse = boilerOpenTherm.buildResponse(OpenThermMessageType::WRITE_ACK, messageID, boilerOpenTherm.temperatureToData(temperature));
        }
      }
      break;
      // Set hotwater temperature
      case OpenThermMessageID::TdhwSet: {
        // Check if we are going to update the hotwater temperature by sending a new request to the boiler
        // We first reply to the thermostat that the requested temperature has been set by the boiler than a new request is send to the boiler
        float temperature = thermostatOpenTherm.getFloat(request);
        if ((temperature > MIN_HOTWATER_TEMPERATURE_OVERRIDE) && (temperature != temperatureHotwaterOverride)) {
          overrideResponse = boilerOpenTherm.buildResponse(OpenThermMessageType::WRITE_ACK, messageID, boilerOpenTherm.temperatureToData(temperature));
        }
      }
    }
  }

  // Check if a response was created by the gateway otherwise return the response from the boiler
  return (overrideResponse > 0) ? overrideResponse : boilerOpenTherm.sendRequest(request);
}

// Handle the request received from the thermostat. Command can be read/get or write/set.
void processThermostatRequest(unsigned long request, OpenThermResponseStatus status) {
  // Determine the reponse for the thermostat
  unsigned long response = determineResponse(request);
  
  // Always send the response to the thermostat even if it is an error (we are in gateway mode)
  thermostatOpenTherm.sendResponse(response);
  
  // Process the request/response so we can determine whether we have to update information or take action
  processRequestResponse(request, response);
}

// Print the message received
void mqttPrintMessage(char* topic, byte* payload, unsigned int len) {
  char receivedMessage[len + 1];

  // Zero the array so that the string copied is 0 terminated
  memset(receivedMessage, 0, len + 1);
  strncpy(receivedMessage, (char *)payload, len);
  rdebugVln("Message arrived [%s] %s", topic, receivedMessage);
}

void mqttPublishPrintDebugMessage(const char* startMessage, const char* topic, const char* publishMessage) {
  rdebugVln("%s publish of message on topic (length: %d): %s", startMessage, strlen(topic), topic);
  rdebugVln("Published message (length: %d): %s", strlen(publishMessage), publishMessage);
}

// Publish a message
void mqttPublishMessage(const char* topic, const char* message) {
  char* startMessage = "";
  
  // Make sure that the WiFI is connected and that we are connected to the mqtt broker
  if ((WiFi.status() == WL_CONNECTED ) && (client.connected())) {
    // Once connected, publish the command (default is unretained)
    if (client.publish(topic, message)) {
      startMessage = "Succesfull";
    } else {
      startMessage = "Failed";
    }
  } else {
    // Fail safe; status will be out of sync
    startMessage = "Not connected to broker, failed";
  }
  mqttPublishPrintDebugMessage(startMessage, topic, message);
}

[Voor 0% gewijzigd door ThinkPad op 09-01-2023 07:31. Reden: Code even binnen quote tags gezet ivm lang moeten scrollen]


  • Lasoul
  • Registratie: November 2001
  • Laatst online: 23-04 16:20
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
// Handle the temperature hotwater command MQTT message
void mqttHandleCommandMessageTemperatureHotwaterOverride(byte* payload, unsigned int len) {
  char receivedCommand[len + 1];

  // Zero the array so that the string copied is 0 terminated
  memset(receivedCommand, 0, len + 1);
  strncpy(receivedCommand, (char *)payload, len);

  // The conversion returns 0 if not a number has been specified. The MIN_HOTWATER_TEMPERATURE should be > 0
  double newValue = round(strtod(receivedCommand, NULL) * STEP_HOTWATER_TEMPERATURE_OVERRIDE_DOMINATOR) / STEP_HOTWATER_TEMPERATURE_OVERRIDE_DOMINATOR;
  if ((newValue >= MIN_HOTWATER_TEMPERATURE_OVERRIDE) && (newValue <= MAX_HOTWATER_TEMPERATURE_OVERRIDE)) {
    // Set Hotwater Temperature in degrees C
    int messageAttempt = 0;
    bool messageSuccessfull = false;
    do {
      messageAttempt++;
      messageSuccessfull = boilerOpenTherm.setDHWSetpoint(newValue);
      if (messageSuccessfull) {
        temperatureHotwaterOverride = newValue;
        temperatureSetHotwater = newValue;
        rdebugVln("The hotwater temperature has been set to: %.1f", newValue);
      }  else {
        rdebugVln("Attempt %d of %d: Could not set the hotwater temperature to: %.1f", messageAttempt, MAX_COMMAND_RETRIES, newValue);
      }
    } while ((!messageSuccessfull) && (messageAttempt < MAX_COMMAND_RETRIES));
  } else {
    rdebugVln("Invalid value received: %s", receivedCommand);
  }
}

// Handle the temperature central heating command MQTT message
void mqttHandleCommandMessageTemperatureCentralheatingOverride(byte* payload, unsigned int len) {
  char receivedCommand[len + 1];

  // Zero the array so that the string copied is 0 terminated
  memset(receivedCommand, 0, len + 1);
  strncpy(receivedCommand, (char *)payload, len);

  // The conversion returns 0 if not a number has been specified. The MIN_CENTRALHEATING_TEMPERATURE should be > 0
  double newValue = round(strtod(receivedCommand, NULL) * STEP_CENTRALHEATING_TEMPERATURE_OVERRIDE_DOMINATOR) / STEP_CENTRALHEATING_TEMPERATURE_OVERRIDE_DOMINATOR;
  if ((newValue >= MIN_CENTRALHEATING_TEMPERATURE_OVERRIDE) && (newValue <= MAX_CENTRALHEATING_TEMPERATURE_OVERRIDE)) {
    // Set Boiler Temperature in degrees C
    int messageAttempt = 0;
    bool messageSuccessfull = false;
    do {
      messageAttempt++;
      messageSuccessfull = boilerOpenTherm.setBoilerTemperature(newValue);
      if (messageSuccessfull) {
        temperatureCentralheatingOverride = newValue;
        temperatureSetCentralheating = newValue;
        rdebugVln("The central heating temperature has been set to: %.1f", newValue);
      }  else {
        rdebugVln("Attempt %d of %d: Could not set the central heating temperature to: %.1f", messageAttempt, MAX_COMMAND_RETRIES, newValue);
      }
    } while ((!messageSuccessfull) && (messageAttempt < MAX_COMMAND_RETRIES));
  } else {
    rdebugVln("Invalid value received: %s", receivedCommand);
  }
}

// Be sure that the temperature read is correct (positive)
void convertTemperatureToJSONValue(const float temperature, char *outputBuffer) {
  if (temperature >= DEFAULT_SENSOR_TEMPERATURE) {
    sprintf(outputBuffer, "%.1f", temperature);
  } else {
    sprintf(outputBuffer, "%s", "null");
  }
}

// Publish on the state of the OpenTherm Gateway
void mqttPublishOpenthermgwState(void) {
  char statePublishMessage[MQTT_MAX_MESSAGE_SIZE];
  char temperatureHotwaterOverrideJSONValue[8], temperatureCentralheatingOverrideJSONValue[8];
  char temperatureSetHotwaterJSONValue[8], temperatureSetCentralheatingJSONValue[8];
  char temperatureHotwaterJSONValue[8], temperatureCentralheatingJSONValue[8];
  char temperatureReturnJSONValue[8], temperatureDeltaTJSONValue[8];

  // Make sure that the WiFI is connected and that we are connected to the mqtt broker
  if ((WiFi.status() == WL_CONNECTED ) && (client.connected())) {
    float temperatureDeltaT = max(temperatureCentralheating - temperatureReturn, (float)0.0);

    // Convert values to a correct JSON value
    convertTemperatureToJSONValue(temperatureHotwaterOverride , temperatureHotwaterOverrideJSONValue);
    convertTemperatureToJSONValue(temperatureCentralheatingOverride, temperatureCentralheatingOverrideJSONValue);
    convertTemperatureToJSONValue(temperatureSetHotwater, temperatureSetHotwaterJSONValue);
    convertTemperatureToJSONValue(temperatureSetCentralheating, temperatureSetCentralheatingJSONValue);
    convertTemperatureToJSONValue(temperatureHotwater, temperatureHotwaterJSONValue);
    convertTemperatureToJSONValue(temperatureCentralheating, temperatureCentralheatingJSONValue);
    convertTemperatureToJSONValue(temperatureReturn, temperatureReturnJSONValue);
    convertTemperatureToJSONValue(temperatureDeltaT, temperatureDeltaTJSONValue);
    
    // Format the state payload
    sprintf(statePublishMessage, MQTT_openthermgw_state_payload,
      temperatureHotwaterOverrideJSONValue, temperatureCentralheatingOverrideJSONValue,
      temperatureSetHotwaterJSONValue, temperatureSetCentralheatingJSONValue,
      temperatureHotwaterJSONValue, temperatureCentralheatingJSONValue,
      temperatureReturnJSONValue, temperatureDeltaTJSONValue,
      boilerPressure, boilerModulation);
       
    // Publish the state of the valve
    mqttPublishMessage(MQTT_openthermgw_state_topic , statePublishMessage);
  }
}

// MQTT callback
void mqttCallback(char* topic, byte* payload, unsigned int len) {
  mqttPrintMessage(topic, payload, len);

  // Check if we received a message on the command topic (OpenthermGW number temperature hotwater)
  if (strcmp(topic, MQTT_openthermgw_number_temperature_hotwater_override_command_topic) == 0) {
    mqttHandleCommandMessageTemperatureHotwaterOverride(payload, len);
  }
  // Check if we received a message on the command topic (OpenthermGW number central heating)
  if (strcmp(topic, MQTT_openthermgw_number_temperature_centralheating_override_command_topic) == 0) {
    mqttHandleCommandMessageTemperatureCentralheatingOverride(payload, len);
  }

  // Always force the update of the state
  openthermgwStateUpdateFlag = true; 
}

// Publish on the device discovery topic the hotwater temperature override number
void mqttPublishDiscoveryOpenthermgwTemperatureHotwaterOverrideNumber(void) {
  // Build up the config
  char discoveryPublishMessage[MQTT_MAX_MESSAGE_SIZE];
  sprintf(discoveryPublishMessage, MQTT_config_openthermgw_number_temperature_hotwater_override_topic_payload,
    MQTT_openthermgw_number_temperature_hotwater_override_base_topic,
    MQTT_openthermgw_number_temperature_hotwater_override_unique_id,
    MQTT_command_topic_short,
    MQTT_openthermgw_state_topic, 
    MIN_HOTWATER_TEMPERATURE_OVERRIDE, MAX_HOTWATER_TEMPERATURE_OVERRIDE, STEP_HOTWATER_TEMPERATURE_OVERRIDE,
    MQTT_openthermgw_number_temperature_hotwater_override_config_topic_value,
    MQTT_openthermgw_unique_id);
        
  // Publish the configuration
  mqttPublishMessage(MQTT_openthermgw_number_temperature_hotwater_override_config_topic, discoveryPublishMessage);
}

// Publish on the device discovery topic the centralheating temperature override number
void mqttPublishDiscoveryOpenthermgwTemperatureCentralheatingOverrideNumber(void) {
  // Build up the config
  char discoveryPublishMessage[MQTT_MAX_MESSAGE_SIZE];
  sprintf(discoveryPublishMessage, MQTT_config_openthermgw_number_temperature_centralheating_override_topic_payload,
    MQTT_openthermgw_number_temperature_centralheating_override_base_topic,
    MQTT_openthermgw_number_temperature_centralheating_override_unique_id,
    MQTT_command_topic_short,
    MQTT_openthermgw_state_topic, 
    MIN_CENTRALHEATING_TEMPERATURE_OVERRIDE, MAX_CENTRALHEATING_TEMPERATURE_OVERRIDE, STEP_CENTRALHEATING_TEMPERATURE_OVERRIDE,
    MQTT_openthermgw_number_temperature_centralheating_override_config_topic_value,
    MQTT_openthermgw_unique_id);
        
  // Publish the configuration
  mqttPublishMessage(MQTT_openthermgw_number_temperature_centralheating_override_config_topic, discoveryPublishMessage);
}

// Publish on the device discovery topic of a sensor
void mqttPublishDiscoveryOpenthermgwSensor(const char* configTopic, const char* topicPayload, const char* sensorName, const char* baseTopic, const char* uniqueId, const char* topicValue) {
  // Build up the config
  char discoveryPublishMessage[MQTT_MAX_MESSAGE_SIZE];
  sprintf(discoveryPublishMessage, topicPayload, baseTopic, sensorName, uniqueId, MQTT_openthermgw_state_topic, topicValue, MQTT_openthermgw_unique_id);
        
  // Publish the configuration
  mqttPublishMessage(configTopic, discoveryPublishMessage);
}

// Publish on the device discovery topic for this device
void mqttPublishDiscovery(void) {
  // Make sure that the WiFI is connected and that we are connected to the mqtt broker
  if ((WiFi.status() == WL_CONNECTED ) && (client.connected())) {
    // Publish the hotwater temperature number
    mqttPublishDiscoveryOpenthermgwTemperatureHotwaterOverrideNumber();
    // Publish the centralheating temperature number
    mqttPublishDiscoveryOpenthermgwTemperatureCentralheatingOverrideNumber();

    // Publish the set hotwater temperature
    mqttPublishDiscoveryOpenthermgwSensor(
      MQTT_openthermgw_sensor_temperature_set_hotwater_config_topic,
      MQTT_config_openthermgw_sensor_temperature_generic_topic_payload,
      MQTT_openthermgw_sensor_temperature_set_hotwater_config_topic_name,
      MQTT_openthermgw_sensor_temperature_set_hotwater_base_topic,
      MQTT_openthermgw_sensor_temperature_set_hotwater_unique_id,
      MQTT_openthermgw_sensor_temperature_set_hotwater_config_topic_value);

    // Publish the set centralheating temperature
    mqttPublishDiscoveryOpenthermgwSensor(
      MQTT_openthermgw_sensor_temperature_set_centralheating_config_topic,
      MQTT_config_openthermgw_sensor_temperature_generic_topic_payload,
      MQTT_openthermgw_sensor_temperature_set_centralheating_config_topic_name,
      MQTT_openthermgw_sensor_temperature_set_centralheating_base_topic,
      MQTT_openthermgw_sensor_temperature_set_centralheating_unique_id,
      MQTT_openthermgw_sensor_temperature_set_centralheating_config_topic_value);

    // Publish the hotwater temperature
    mqttPublishDiscoveryOpenthermgwSensor(
      MQTT_openthermgw_sensor_temperature_hotwater_config_topic,
      MQTT_config_openthermgw_sensor_temperature_generic_topic_payload,
      MQTT_openthermgw_sensor_temperature_hotwater_config_topic_name,
      MQTT_openthermgw_sensor_temperature_hotwater_base_topic,
      MQTT_openthermgw_sensor_temperature_hotwater_unique_id,
      MQTT_openthermgw_sensor_temperature_hotwater_config_topic_value);

    // Publish the centralheating temperature
    mqttPublishDiscoveryOpenthermgwSensor(
      MQTT_openthermgw_sensor_temperature_centralheating_config_topic,
      MQTT_config_openthermgw_sensor_temperature_generic_topic_payload,
      MQTT_openthermgw_sensor_temperature_centralheating_config_topic_name,
      MQTT_openthermgw_sensor_temperature_centralheating_base_topic,
      MQTT_openthermgw_sensor_temperature_centralheating_unique_id,
      MQTT_openthermgw_sensor_temperature_centralheating_config_topic_value);

    // Publish the centralheating return temperature
    mqttPublishDiscoveryOpenthermgwSensor(
      MQTT_openthermgw_sensor_temperature_return_config_topic,
      MQTT_config_openthermgw_sensor_temperature_generic_topic_payload,
      MQTT_openthermgw_sensor_temperature_return_config_topic_name,
      MQTT_openthermgw_sensor_temperature_return_base_topic,
      MQTT_openthermgw_sensor_temperature_return_unique_id,
      MQTT_openthermgw_sensor_temperature_return_config_topic_value);

    // Publish the centralheating ΔT
    mqttPublishDiscoveryOpenthermgwSensor(
      MQTT_openthermgw_sensor_temperature_delta_t_config_topic,
      MQTT_config_openthermgw_sensor_temperature_generic_topic_payload,
      MQTT_openthermgw_sensor_temperature_delta_t_config_topic_name,
      MQTT_openthermgw_sensor_temperature_delta_t_base_topic,
      MQTT_openthermgw_sensor_temperature_delta_t_unique_id,
      MQTT_openthermgw_sensor_temperature_delta_t_config_topic_value);

    // Publish the centralheating pressure
    mqttPublishDiscoveryOpenthermgwSensor(
      MQTT_openthermgw_sensor_pressure_config_topic,
      MQTT_config_openthermgw_sensor_pressure_topic_payload,
      MQTT_openthermgw_sensor_pressure_config_topic_name,
      MQTT_openthermgw_sensor_pressure_base_topic,
      MQTT_openthermgw_sensor_pressure_unique_id,
      MQTT_openthermgw_sensor_pressure_config_topic_value);

    // Publish the centralheating modulation level
    mqttPublishDiscoveryOpenthermgwSensor(
      MQTT_openthermgw_sensor_modulation_config_topic,
      MQTT_config_openthermgw_sensor_modulation_topic_payload,
      MQTT_openthermgw_sensor_modulation_config_topic_name,
      MQTT_openthermgw_sensor_modulation_base_topic,
      MQTT_openthermgw_sensor_modulation_unique_id,
      MQTT_openthermgw_sensor_modulation_config_topic_value);
  }
}

// To prevent software reset (WDT) because of IO/Network/Serial etc. in the ticker we use flags to handle the logic in the main loop
void handleUpdateFlags(void) {
  // Check if we have to update MQTT valve state
  if (openthermgwStateUpdateFlag) {
    mqttPublishOpenthermgwState();
    openthermgwStateUpdateFlag = false;
  }

  // Check if we have to update MQTT discovery
  if (discoveryUpdateFlag) {
    mqttPublishDiscovery();
    discoveryUpdateFlag = false;
  }
}

// Subscribe to all the command topics
void mqttSubscribeCommandTopics(void) {
  // Subscribe to the command topic (Openthem Gateway temperature hotwater)
  client.subscribe(MQTT_openthermgw_number_temperature_hotwater_override_command_topic);
  // Subscribe to the command topic (Openthem Gateway temperature central heating)
  client.subscribe(MQTT_openthermgw_number_temperature_centralheating_override_command_topic);
}

// MQTT reconnect
void mqttReconnect(void) {
  // Disconnect from the timers
  discoveryPublishTimer.detach();
  openthermgwStatePublishTimer.detach();

  // Loop until we're reconnected
  while (!client.connected()) {
    rdebugVln("Attempting MQTT connection... ");
    
    // Create a random client ID
    String clientId = WiFi_hostname;
    clientId += String(random(0xffff), HEX);
    
    // Attempt to connect
    if (WiFi.status() == WL_CONNECTED ) {
      if (client.connect(clientId.c_str(), MQTT_username, MQTT_password)) {
        rdebugVln("MQTT connection established");

        mqttSubscribeCommandTopics();

        // Activate the discovery timer and publish the discovery information directly
        discoveryPublishTimer.attach(Discovery_Update_Interval, []() {
          // Set the flag that we have to send out the MQTT discovery
          discoveryUpdateFlag = true;  
        });
        mqttPublishDiscovery();

        // Activate the state timer and publish the state information directly
        openthermgwStatePublishTimer.attach(State_Update_Interval, []() {
          // Set the flag that we have to send out the MQTT valve state
          openthermgwStateUpdateFlag = true;  
        });
        mqttPublishOpenthermgwState();
      } else {
        rdebugVln("MQTT connection failed, rc = %d, trying again in 5 seconds", client.state());
        
        // Wait 5 seconds before retrying
        delay(5000);
      }
    } else {
      rdebugVln("failed, WiFi disconnected, try again in 5 seconds");
       
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

// Setup the MQTT connection
void setupMQTT(void) {
  client.setBufferSize(MQTT_MAX_MESSAGE_SIZE);
  client.setServer(MQTT_server, 1883);
  client.setCallback(mqttCallback);
}

// Setup the WiFi network connection
void setupConnectWiFi(void){
  // Delay of the retry to connect to WiFi
  unsigned int WiFi_connect_delay_try = 500; 
  
  // Indicate to act as wifi_client only, defaults to act as both a wifi_client and an access-point.
  WiFi.mode(WIFI_STA); 
  // Set the hostname of the board - Need to configure: v1.4 Higher bandwidth
  WiFi.hostname(WiFi_hostname);
  // Try to connect now
  WiFi.begin(WiFi_SSID, WiFi_password); 
  Serial.print("Connecting to \"" + String(WiFi_SSID) + "\" with " + String(WiFi_connect_delay_try) + "ms interval with mode WIFI_STA");
  Serial.printf("%s", WiFi.mode(WIFI_STA) ? "" : ", mode failed!!");
  
  while(WiFi.status() != WL_CONNECTED) {
    // Note: if connection is established, and then lost for some reason, ESP will automatically reconnect. This will be done automatically by Wi-Fi library, without any user intervention.
    delay(WiFi_connect_delay_try);
    Serial.print(".");
  }
  Serial.print("\nConnected to " + String(WiFi_SSID) + " with IP Address: ");
  Serial.print(WiFi.localIP());
  Serial.print("\n");
}

// Setup the remote debugging capabilities
void setupRemoteDebug(void) {
  // Initialize the WiFi server
  Debug.begin(HOST_NAME);
  // Enable the reset command
  Debug.setResetCmdEnabled(true);
  // Profiler (Good to measure times, to optimize codes)
  Debug.showProfiler(true);
  // Colors
  Debug.showColors(true);

  Debug.handle();
}

// Setup Over-The-Air updates
void setupOTA(void) {
  // Cannot use Debug because the telnet session will be terminated during OTA
  
  // Port defaults to 8266
  // ArduinoOTA.setPort(8266);

  // Hostname defaults to esp8266-[ChipID]
  ArduinoOTA.setHostname(WiFi_hostname);

  // No authentication by default
  // ArduinoOTA.setPassword("admin");

  ArduinoOTA.onStart([]() {
    String type = (ArduinoOTA.getCommand() == U_FLASH) ? "sketch" : "filesystem";
    // NOTE: if updating FS this would be the place to unmount FS using FS.end()
    Serial.println("OTA: Start updating " + type);
  });
  
  ArduinoOTA.onEnd([]() {
    Serial.println("\nOTA: End");
  });
  
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    char progressString[100];
    sprintf(progressString, "OTA: Progress: %u%%\r", (progress / (total / 100)));
    Serial.print(progressString);
  });
  
  ArduinoOTA.onError([](ota_error_t error) {
    char errorString[100];
    sprintf(errorString, "OTA: Error[%u]: ", error);
    Serial.print(errorString);
    if (error == OTA_AUTH_ERROR) {
      Serial.println("Auth Failed");
    } else if (error == OTA_BEGIN_ERROR) {
      Serial.println("Begin Failed");
    } else if (error == OTA_CONNECT_ERROR) {
      Serial.println("Connect Failed");
   } else if (error == OTA_RECEIVE_ERROR) {
      Serial.println("Receive Failed");
    } else if (error == OTA_END_ERROR) {
      Serial.println("End Failed");
    }
  });
  
  ArduinoOTA.begin();  
}

// Initialize the central heating temperature
void initializeBiolerTemperature() {
  int messageAttempt = 0;
  do {
    messageAttempt++;
    temperatureCentralheating = boilerOpenTherm.getBoilerTemperature();
  } while ((!temperatureCentralheating) && (messageAttempt < MAX_COMMAND_RETRIES));
}

// Initialize the hotwater temperature
void initializeHotwaterTemperature() {
  int attempt = 0;
  do {
    attempt++;
    temperatureHotwater = boilerOpenTherm.getDHWTemperature();
  } while ((!temperatureHotwater) && (attempt < MAX_COMMAND_RETRIES));
}

// Initialize the central heating return temperature
void initializeReturnTemperature() {
  int attempt = 0;
  do {
    attempt++;
    temperatureReturn = boilerOpenTherm.getReturnTemperature();
  } while ((!temperatureReturn) && (attempt < MAX_COMMAND_RETRIES));
}

// Initialize the central heating pressure
void initializeBoilerPressure() {
  int attempt = 0;
  do {
    attempt++;
    boilerPressure = boilerOpenTherm.getPressure();
  } while ((!boilerPressure) && (attempt < MAX_COMMAND_RETRIES));
}

// Initialize the central heating modulation
void initializeBiolerModulation() {
  int attempt = 0;
  bool success = false;
  do {
    attempt++;
    unsigned long response = boilerOpenTherm.sendRequest(boilerOpenTherm.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::RelModLevel, 0));
    if (boilerOpenTherm.isValidResponse(response)) {
      success = true;
      boilerModulation = boilerOpenTherm.getFloat(response);
    }
  } while ((!success) && (attempt < MAX_COMMAND_RETRIES));
}

// Setup the OpenTherm connection
void setupOpenTherm() {
  boilerOpenTherm.begin(boilerHandleInterrupt);
  thermostatOpenTherm.begin(thermostatHandleInterrupt, processThermostatRequest);

  // Initialize the boiler status
  initializeBiolerTemperature();
  initializeHotwaterTemperature();
  initializeReturnTemperature();
  initializeBoilerPressure();
  initializeBiolerModulation();
}

// The setup function runs once when you press reset or power the board
void setup(void) {
  const int serial_baud_bit_rate = 115200;
  
  // Serial Baud Bit Rate
  Serial.begin(serial_baud_bit_rate); 
  Serial.println("OpenTherm Gateway started");

  // Setup the WiFi connection
  setupConnectWiFi();

  // Setup the remote debug capabilities
  setupRemoteDebug();

  // Setup Over-The-Air updates
  setupOTA();

  // Setup OpenTherm control
  setupOpenTherm();

  // Setup the MQTT connection and subscription
  setupMQTT();

  // Connect to the broker and publish state
  mqttReconnect();
}

void loop() {
  ArduinoOTA.handle();
  if (!client.connected()) {
    mqttReconnect();
  }
  client.loop();

  // Handle any flags that have been set
  handleUpdateFlags();

  // Handle any OpenTherm requests
  thermostatOpenTherm.process();

  // Handle any debug information being created
  Debug.handle();
  yield();  
}

[Voor 1% gewijzigd door ThinkPad op 09-01-2023 07:31. Reden: Code even binnen quote tags gezet ivm lang moeten scrollen]


  • Tomba
  • Registratie: Mei 2000
  • Laatst online: 15:55

Tomba

Quis custodiet ipsos custodes?

Na een stroomstoring bij Enexis waarbij de stroom er ‘s nachts 6 minuten af is geweest in het hele huis geeft mijn Nodo OTGW helemaal geen data meer door. Is aangesloten via een D1 mini. Die laatste is pingbaar en de website ervan doet t ook maar er komt helemaal geen data meer door. Iemand een idee hoe ik dit kan troubleshooten?

tomba.tweakblogs.net || Mijn V&A


  • Dapdodo
  • Registratie: Mei 2019
  • Nu online
Tomba schreef op dinsdag 3 januari 2023 @ 10:36:
Na een stroomstoring bij Enexis waarbij de stroom er ‘s nachts 6 minuten af is geweest in het hele huis geeft mijn Nodo OTGW helemaal geen data meer door. Is aangesloten via een D1 mini. Die laatste is pingbaar en de website ervan doet t ook maar er komt helemaal geen data meer door. Iemand een idee hoe ik dit kan troubleshooten?
Doet je kachel het nog, lijkt of de Opentherm bus is verstoort.

  • Tomba
  • Registratie: Mei 2000
  • Laatst online: 15:55

Tomba

Quis custodiet ipsos custodes?

Dapdodo schreef op dinsdag 3 januari 2023 @ 10:45:
[...]

Doet je kachel het nog, lijkt of de Opentherm bus is verstoort.
Yup die werkt prima, Toon2 stuurt m nog prima aan.

tomba.tweakblogs.net || Mijn V&A


  • Dapdodo
  • Registratie: Mei 2019
  • Nu online
Tomba schreef op dinsdag 3 januari 2023 @ 10:47:
[...]

Yup die werkt prima, Toon2 stuurt m nog prima aan.
Aangezien de D1 nog pingbaar is en zijn webserver werkt, zou ik eerder het probleem zoeken in degene die de data moet ontvangen.

  • Tomba
  • Registratie: Mei 2000
  • Laatst online: 15:55

Tomba

Quis custodiet ipsos custodes?

Dapdodo schreef op dinsdag 3 januari 2023 @ 10:50:
[...]

Aangezien de D1 nog pingbaar is en zijn webserver werkt, zou ik eerder het probleem zoeken in degene die de data moet ontvangen.
Meekijken met otmonitor geeft geen data en ook via telnet mee koekeloeren geeft niets dus het ligt niet bij Home Assistant.
Ledjes op het PCB die normaal flikkeren doen ook helemaal niets.

tomba.tweakblogs.net || Mijn V&A


  • glaswerk
  • Registratie: Oktober 2004
  • Laatst online: 16:04
Tomba schreef op dinsdag 3 januari 2023 @ 10:52:
[...]

Meekijken met otmonitor geeft geen data en ook via telnet mee koekeloeren geeft niets dus het ligt niet bij Home Assistant.
Ledjes op het PCB die normaal flikkeren doen ook helemaal niets.
Dat van de dode LEDjes herken ik; heb dat ook een paar keer gehad nadat de stroom eraf was geweest. Na een aantal keren stekker eruit-erin kwam de OTGW weer tot leven. Misschien iets dat bij startup de OTGW veel stroom vraagt ofzo -- hoewel ik de door Nodo zelf aanbevolen adapter heb, juist om dat te ondervangen.

  • Tomba
  • Registratie: Mei 2000
  • Laatst online: 15:55

Tomba

Quis custodiet ipsos custodes?

glaswerk schreef op dinsdag 3 januari 2023 @ 10:56:
[...]


Dat van de dode LEDjes herken ik; heb dat ook een paar keer gehad nadat de stroom eraf was geweest. Na een aantal keren stekker eruit-erin kwam de OTGW weer tot leven. Misschien iets dat bij startup de OTGW veel stroom vraagt ofzo -- hoewel ik de door Nodo zelf aanbevolen adapter heb, juist om dat te ondervangen.
Ah, kijk ik ben niet de enige :) Heb m pas 2x herstart; zo meteen nog eens een paar keer doen dan! Bedankt voor je reactie. Heb de complete set behalve de D1 mini van Nodo dus ook de stroom adapter.


Hmm update, restart werkt niet. Heb eens op de Reset knop gedrukt en dan krijg ik:
10:01:58.719353 ( 14304| 13584) processOT (1720): Detected PIC firmware version: 6.1
10:01:58.736086 ( 15168| 12288) processOT (1722): Not processed, received from OTGW => (Thermostat disconnected) [23]
Iemand een idee hoe ik dat kan fixen? De Toon2 kan de ketel aansturen dus alles zou dan toch gewoon moeten werken?

[Voor 31% gewijzigd door Tomba op 03-01-2023 11:04]

tomba.tweakblogs.net || Mijn V&A


  • Toets
  • Registratie: Februari 2007
  • Laatst online: 08-06 16:51
Lasoul schreef op dinsdag 3 januari 2023 @ 10:28:
[...]


Geen probleem.
Ik heb onderstaande gemaakt zodat ik de warmwater temperatuur en CV temperatuur van de thermostaat kan overriden in Home Assistant. Ik heb namelijk een zonneboiler en 's zomers wil ik de warmwater temperatuur dynamisch schakelen.

*Knip*
Super! Bedankt! _/-\o_

  • Tomba
  • Registratie: Mei 2000
  • Laatst online: 15:55

Tomba

Quis custodiet ipsos custodes?

Tomba schreef op dinsdag 3 januari 2023 @ 10:57:
[...]

Ah, kijk ik ben niet de enige :) Heb m pas 2x herstart; zo meteen nog eens een paar keer doen dan! Bedankt voor je reactie. Heb de complete set behalve de D1 mini van Nodo dus ook de stroom adapter.


Hmm update, restart werkt niet. Heb eens op de Reset knop gedrukt en dan krijg ik:

[...]


Iemand een idee hoe ik dat kan fixen? De Toon2 kan de ketel aansturen dus alles zou dan toch gewoon moeten werken?
Ketel en Toon beiden van de stroom af gehad, melding blijft:
10:09:24.296315 ( 15224| 13408) processOT (1720): Detected PIC firmware version: 6.1
10:09:24.318591 ( 13936| 12760) processOT (1722): Not processed, received from OTGW => (Thermostat disconnected) [23]
Oke, op de Toon OpenTherm een keer uit en aan gezet en hij werkt weer:
10:35:25.001507 ( 14968| 13624) processOT (1722): Not processed, received from OTGW => (Thermostat connected) [20]


Te vroeg gejuicht:
[quote]
10:35:47.048958 ( 11888| 10712) processOT (1722): Not processed, received from OTGW => (Low power) [9]
10:35:47.052988 ( 10544| 10064) processOT (1722): Not processed, received from OTGW => (Thermostat disconnected) [23]
[/quote]


Ok I am the idiot… Ik dacht dat het schuifje naar rechts moest…. En dan gaat ie juist van OpenTherm af :X

[Voor 37% gewijzigd door Tomba op 03-01-2023 12:06]

tomba.tweakblogs.net || Mijn V&A


  • !GN!T!ON
  • Registratie: September 2006
  • Laatst online: 13:07
Iemand ervaring met dit product? https://www.tindie.com/products/jeroen88/opentherm-shield/

Als ik het goed begrijp geeft deze hetzelfde inzicht in wat de ketel aan het doen is als een gateway/sniffer? Ik heb nu een Nest thermostaat maar wil eigenlijk overstappen naar slimme radiatorknoppen zodat elke ruimte zijn eigen zone kan zijn. Dit wil ik graag besturen met Home Assistant, zodat ik voor een kamer bijvoorbeeld de verwarming uit kan doen als een deur of raam open staat.

Ik neig ernaar om over te stappen naar Tado, maar het staat mij tegen dat dit toch weer cloud based is, dat is een van de dingen waar ik mij bij de nest (heel licht) aan irriteer, het kan als je een wijzinging maakt via HA wel 20+ seconden duren voor je een reactie ziet + je bent afhankelijk van het reilen en zeilen van de cloud operator.

Dit ding is als ik het goed begrijp ook een thermostaat, maar bestaan er slimme radiatorknoppen die hiermee werken (c.q. via een open standaard / protocol)?

  • Megalomania
  • Registratie: April 2011
  • Laatst online: 19:13
Aqara heeft ook smartknoppen. Volgens mij gebruikt Gizz die.

  • Marc_Sway
  • Registratie: Oktober 2010
  • Laatst online: 11:34
Beste forumleden,

Met druktoetsen op mijn ketel (Itho met Opentherm) kan ik de tapwaterfunctie uitzetten (‘Off’). Dit houdt dan in, dat als je een warmwaterkraan open zet, er wel water uit komt, maar altijd koud (ook al staat op de ketel voor het tapwater de andere setting op ‘Eco’ of op ‘Comfort’).

Weet iemand of binnen het Opentherm protocol er een MessageID is om tapwater op ‘Off’ of ‘On’ te zetten?

En zou je via de OTWG dat MessageID ook kunnen sturen naar de ketel?

  • Marc_Sway
  • Registratie: Oktober 2010
  • Laatst online: 11:34
Als alternatieve oplossing, heb ik nog een bijkomende vraag: mijn ketel heeft naast een simpel digitaal display (2x een 1 digit display), 3 druktoetsjes (‘Info’, ‘+’ en ‘-‘) voor de instellingen. Die 3 druktoetsjes gebruik je om alle settingen van de ketel in te stellen.

Heeft iemand hier op het forum wel eens geprobeerd dit soort drukcontacten parallel te bedienen met een potentiaalvrije contact van een relais (1 per drukknopje), die dan weer wordt gestuurd uit een domotica platform?

In mijn geval zou dat dan 3 kleine relais zijn, waarmee je alle ketel-settings remote zou kunnen bedienen via bijv Domoticz of Home Assistant.

Voor mijn ketel ziet dat er zo uit - idee is dus om 3x een relaiscontact parallel aan te sluiten aan de 3 drukknopjes:

[Voor 23% gewijzigd door Marc_Sway op 08-01-2023 20:19]


  • number3
  • Registratie: Februari 2002
  • Laatst online: 06:18
De ketel zou via de status bits van MessageID 1 door moeten geven of de DHW aan of uit staat.

Lees de specificatie er even op na zou ik zeggen.

  • Marc_Sway
  • Registratie: Oktober 2010
  • Laatst online: 11:34
OK dank. Ik ga er eens naar kijken wat dat MsgID allemaal kan weergeven.

Het issue wat ik hier heb met mijn Itho ketel is dat als de ketel op ‘Eco’ staat (wat ik diverse malen goed gecheckt heb) en de kamerthermostaat ook op ‘Eco’ staat, de ketel toch elke ca 3 a 4 uur toch even gestart wordt voor ca 2 min, al is er totaal geen CV of tapwater vraag.
Ook als ik de kamerthermostaat helemaal loskoppel gebeurt dit.

Alleen als ik de tapwater-functie helemaal op ‘Off’ zet, dan verdwijnt dit issue.

Nog steeds heb ik geen enkel idee wat nu de oorzaak is van deze korte brander-starts om de ca 3-4 uur (24/7/365)

  • Baseje
  • Registratie: April 2009
  • Laatst online: 08-06 16:58
Sinds een paar weken werkt m'n OTGW sinds een upgrade nietmeer.

Ik krijg wel de boilertemperatuur etc van de ketel, maar als ik TADO koppel gaat de ketel niet aan, lijkt net alsof de ketel het signaal dan nietmeer ontvangt.

Iemand zo een idee toevallig?

  • JanPedaal
  • Registratie: November 2003
  • Niet online

JanPedaal

Coureur extraordinaire

Baseje schreef op maandag 9 januari 2023 @ 15:46:
Sinds een paar weken werkt m'n OTGW sinds een upgrade nietmeer.

Ik krijg wel de boilertemperatuur etc van de ketel, maar als ik TADO koppel gaat de ketel niet aan, lijkt net alsof de ketel het signaal dan nietmeer ontvangt.

Iemand zo een idee toevallig?
Meest voor de hand liggende vraag is, of de Tado wel op OpenTherm is ingesteld? Hier op het forum zijn meerdere topics te vinden over miscommunicatie tussen Tado en ketels, heb je die al bekeken?

Release your inner hooligan - With great power comes great responsibility, with horsepower comes no responsibility


  • Baseje
  • Registratie: April 2009
  • Laatst online: 08-06 16:58
JanPedaal schreef op dinsdag 10 januari 2023 @ 09:19:
[...]

Meest voor de hand liggende vraag is, of de Tado wel op OpenTherm is ingesteld? Hier op het forum zijn meerdere topics te vinden over miscommunicatie tussen Tado en ketels, heb je die al bekeken?
Uiteraard heb ik dat bekeken, door het topic had ik nog niet goed gebladerd excuus...
Zal daar is mee beginnen!

  • JPS
  • Registratie: April 2000
  • Niet online
Ik heb jaren vrij stabiel gebruik gemaakt van de Nodoshop OTGW v2.0 (+esp) icm Domoticz v2020 (native, inmiddels out-of-support) op mijn Synology.

Mijn Domoticz is helaas geruineerd, maar geeft mogelijkheden om ook de OTGW op te frissen. Ik zie dat er enorm actief is doorontwikkeld, geweldig!

Paar vragen:
1) momenteel draait espeasy built 147 op de esp8266 van de OTGW. Heeft het zin die te upgraden? Naar wat?
2) ik zie dat er een nieuwere PIC via nodoshop te bestellen is. Heeft dat voordelen?
3) Wat heeft qua homeautomation pakket de voorkeur: HomeAssistent of Domoticz? Dit komt in een docker op de Syno te draaien.

  • jobr
  • Registratie: Januari 2009
  • Laatst online: 18:51
JPS schreef op dinsdag 17 januari 2023 @ 12:34:
1) momenteel draait espeasy built 147 op de esp8266 van de OTGW. Heeft het zin die te upgraden? Naar wat?
Ik weet niet of je dit kunt gebruiken ?

  • JPS
  • Registratie: April 2000
  • Niet online
Ja ik liep er al tegenaan Als ik het goed zie een mooi alternatief en ook nog compatible met oudere Nodoshop HW (zoals mijn v2.0 met NodeMCU).

Nu eens uitzoeken hoe ik het beste kan flashen en ik ben er ook nog niet uit of ik bij mijn v2.0 versie gewoon die PIC kan wisselen. Voor die paar knaken lijkt het me wel fijn om ook weer even up-to-date te zijn ivm de doorontwikkeling.

  • The Zep Man
  • Registratie: Oktober 2003
  • Laatst online: 14:48
JPS schreef op dinsdag 17 januari 2023 @ 22:39:
Nu eens uitzoeken hoe ik het beste kan flashen en ik ben er ook nog niet uit of ik bij mijn v2.0 versie gewoon die PIC kan wisselen. Voor die paar knaken lijkt het me wel fijn om ook weer even up-to-date te zijn ivm de doorontwikkeling.
Hou er rekening mee dat firmware voor de oude PIC nog steeds ontwikkeld wordt, en dat de nieuwe PIC enkel nut heeft als je de nieuwe functionaliteit nodig hebt. Als je tevreden bent met waardes die nu ondersteund worden, heeft een upgrade waarschijnlijk weinig zin.

Yar har, wind in your back, lads, wherever you go!


  • boss-20
  • Registratie: April 2006
  • Laatst online: 02-06 11:56
Hoi medetweakers. Deze vraag is vast al eens gesteld maar het zoeken in een 72 pagina's lang topic is zelfs voor de doorgewinterde zoeker niet eenvoudig.

Ik heb een ouder type OTGW van nodo (16F88) i.c.m. een NodeMCU (wifi) die ik altijd gebruikte met Domoticz. Dat werkte prima. Maar ik ben een maand of wat geleden overgestapt naar HomeAssistant (draaiend op een ubuntu NUC machine via Docker).

Ik krijg de OTGW niet gekoppeld aan HomeAssistant. Niet met de oude firmware in ieder geval, en ik heb nu nieuwere firmware maar ook daarmee krijg ik het niet werkend.

Of moet ik 'gewoon' een volledig nieuwe OTGW kopen? Zou jammer zijn omdat het dan vermoedelijk alleen ligt aan de communicatie tussen HA en OTGW...

Heeft iemand van jullie de juiste specs waarop ik de OTGW moet aanpassen zodat ik het werkend kan krijgen?

Heel veel dank en nogmaals mijn excuses voor het (vast en zeker) nogmaals plaatsen van deze vraag.

  • The Zep Man
  • Registratie: Oktober 2003
  • Laatst online: 14:48
boss-20 schreef op donderdag 26 januari 2023 @ 08:30:
Of moet ik 'gewoon' een volledig nieuwe OTGW kopen? Zou jammer zijn omdat het dan vermoedelijk alleen ligt aan de communicatie tussen HA en OTGW...
Je hoeft nooit een volledig nieuwe OTGW te kopen, volgens mij. Als je de nieuwe functies van een nieuwere PIC wilt, dan kan je die los kopen en daarmee je oude PIC vervangen.

Ik heb zelf een andere (nieuwere) OTGW, nieuwe PIC, met de Ethernet-module. Dus iets anders. Wat ik begrijp van OTGW is dat slechts een enkel apparaat tegelijkertijd ermee verbonden mag zijn. Dat komt omdat het een seriële point-to-point verbinding betreft, die wordt omgezet naar een network socket. Heb je naast HA niet een ander apparaat dat over het netwerk met de OTGW verbindt/probeert te verbinden? Heb je wel eens het netwerkverkeer gesniffed om te kijken wat er op de lijn gebeurt?

[Voor 13% gewijzigd door The Zep Man op 26-01-2023 09:06]

Yar har, wind in your back, lads, wherever you go!


  • htca
  • Registratie: November 2001
  • Laatst online: 13:12
boss-20 schreef op donderdag 26 januari 2023 @ 08:30:
Hoi medetweakers. Deze vraag is vast al eens gesteld maar het zoeken in een 72 pagina's lang topic is zelfs voor de doorgewinterde zoeker niet eenvoudig.

Ik heb een ouder type OTGW van nodo (16F88) i.c.m. een NodeMCU (wifi) die ik altijd gebruikte met Domoticz. Dat werkte prima. Maar ik ben een maand of wat geleden overgestapt naar HomeAssistant (draaiend op een ubuntu NUC machine via Docker).

Ik krijg de OTGW niet gekoppeld aan HomeAssistant. Niet met de oude firmware in ieder geval, en ik heb nu nieuwere firmware maar ook daarmee krijg ik het niet werkend.

Of moet ik 'gewoon' een volledig nieuwe OTGW kopen? Zou jammer zijn omdat het dan vermoedelijk alleen ligt aan de communicatie tussen HA en OTGW...

Heeft iemand van jullie de juiste specs waarop ik de OTGW moet aanpassen zodat ik het werkend kan krijgen?

Heel veel dank en nogmaals mijn excuses voor het (vast en zeker) nogmaals plaatsen van deze vraag.
Hoe probeer je hem te koppelen? Is MQTT geen optie?

  • JPS
  • Registratie: April 2000
  • Niet online
@boss-20
Ik heb ook een ouder type Nodoshop OTGW (v2.0 uit 2018 meen ik). Dit heeft jaren gedraaid icm Domoticz en ik gebruik nu ook HA (op een Synology). HA draait als VM ivm de noodzakelijke supervisor voor de Mosquitto (MQTT broker) add-on, dat werkt anders niet icm Docker.

Afgelopen week heb ik op de NodeMCU esp zonder problemen de FW van Robert vd Breemen gezet: https://github.com/rvdbreemen/OTGW-firmware

Daarna eenvoudig (OTA) de PIC fw kunnen updaten en de OTGW werd via autodiscovery in HomeAssistant gevonden. Natuurlijk wel een MQTT broker draaien en instellingen goed zetten.
De eerste dag heb ik een of meerdere bootloops gehad, zonder duidelijke reden. Nu nog af en toe een reboot, allemaal getriggerd door de watchdog. Geen onderliggende reden gevonden helaas, maar het draait op zich weer ok.

Een paar dagen later kreeg ik de nieuwe versie PIC van Nodoshop binnen. Die omgewisseld met de oude en nu ben ik weer helemaal up-to-date.

  • boss-20
  • Registratie: April 2006
  • Laatst online: 02-06 11:56
Thanks voor je info. Ik zal het proberen!
Heb de MQTT broker wel draaien, hij haalt namelijk ook andere MQTT zaken binnen.
JPS schreef op donderdag 26 januari 2023 @ 12:41:
@boss-20
Ik heb ook een ouder type Nodoshop OTGW (v2.0 uit 2018 meen ik). Dit heeft jaren gedraaid icm Domoticz en ik gebruik nu ook HA (op een Synology). HA draait als VM ivm de noodzakelijke supervisor voor de Mosquitto (MQTT broker) add-on, dat werkt anders niet icm Docker.

Afgelopen week heb ik op de NodeMCU esp zonder problemen de FW van Robert vd Breemen gezet: https://github.com/rvdbreemen/OTGW-firmware

Daarna eenvoudig (OTA) de PIC fw kunnen updaten en de OTGW werd via autodiscovery in HomeAssistant gevonden. Natuurlijk wel een MQTT broker draaien en instellingen goed zetten.
De eerste dag heb ik een of meerdere bootloops gehad, zonder duidelijke reden. Nu nog af en toe een reboot, allemaal getriggerd door de watchdog. Geen onderliggende reden gevonden helaas, maar het draait op zich weer ok.

Een paar dagen later kreeg ik de nieuwe versie PIC van Nodoshop binnen. Die omgewisseld met de oude en nu ben ik weer helemaal up-to-date.

  • Tomba
  • Registratie: Mei 2000
  • Laatst online: 15:55

Tomba

Quis custodiet ipsos custodes?

JPS schreef op donderdag 26 januari 2023 @ 12:41:
@boss-20
Ik heb ook een ouder type Nodoshop OTGW (v2.0 uit 2018 meen ik). Dit heeft jaren gedraaid icm Domoticz en ik gebruik nu ook HA (op een Synology). HA draait als VM ivm de noodzakelijke supervisor voor de Mosquitto (MQTT broker) add-on, dat werkt anders niet icm Docker.

Afgelopen week heb ik op de NodeMCU esp zonder problemen de FW van Robert vd Breemen gezet: https://github.com/rvdbreemen/OTGW-firmware

Daarna eenvoudig (OTA) de PIC fw kunnen updaten
[...]
Bijzonder dat t voor jou werkt, voor mij werkt het niet en ik ben niet de enige:
https://github.com/rvdbreemen/OTGW-firmware/issues/148

tomba.tweakblogs.net || Mijn V&A


  • JPS
  • Registratie: April 2000
  • Niet online
OK even voor duidelijkheid, de OTA flash deed ik met de oude PIC (PIC16F88) en dat ging goed naar FW v5.7

Pas daarna heb ik de PIC vervangen door de nieuwe (PIC16F1847) waarop FW v6.3 stond voorgeinstalleerd. Die heb ik nog niet proberen te updaten naar de laatste 6.4 en ben dus niet helemaal 'up-to-date'. En als ik het zo lees kan ik dat ook nog beter niet proberen...

Overigens heeft mijn OTGW versie een NodeMCU ipv Wemos D1, maar dat lijkt het verschil niet te maken.

  • Tomba
  • Registratie: Mei 2000
  • Laatst online: 15:55

Tomba

Quis custodiet ipsos custodes?

JPS schreef op donderdag 26 januari 2023 @ 15:03:
OK even voor duidelijkheid, de OTA flash deed ik met de oude PIC (PIC16F88) en dat ging goed naar FW v5.7

Pas daarna heb ik de PIC vervangen door de nieuwe (PIC16F1847) waarop FW v6.3 stond voorgeinstalleerd. Die heb ik nog niet proberen te updaten naar de laatste 6.4 en ben due niet helemaal 'up-to-date'. En als ik het zo lees kan ik dat ook nog beter niet proberen...

Overigens heeft mijn OTGW versie een NodeMCU ipv Wemos D1, maar dat lijkt het verschil niet te maken.
Ah dat verklaart het, dank voor de verheldering!

tomba.tweakblogs.net || Mijn V&A


  • Rene2716
  • Registratie: December 2021
  • Laatst online: 26-01 17:12
Even een beginners vraagje. Hoe update je de pic. Ik heb een nieuwe pic met 6.3. Bij pic firmware heb ik na een refresh 6.4 staan. Hoe zet je deze op de PIC? Zie nl na een power off/on bij device info nog steeds 6.3

Dank voor het antwoord alvast :)

  • Dutchess_Nicole
  • Registratie: Augustus 2001
  • Laatst online: 09:39
JPS schreef op donderdag 26 januari 2023 @ 15:03:
OK even voor duidelijkheid, de OTA flash deed ik met de oude PIC (PIC16F88) en dat ging goed naar FW v5.7

Pas daarna heb ik de PIC vervangen door de nieuwe (PIC16F1847) waarop FW v6.3 stond voorgeinstalleerd. Die heb ik nog niet proberen te updaten naar de laatste 6.4 en ben dus niet helemaal 'up-to-date'. En als ik het zo lees kan ik dat ook nog beter niet proberen...

Overigens heeft mijn OTGW versie een NodeMCU ipv Wemos D1, maar dat lijkt het verschil niet te maken.
Dat zal niet zo lang meer duren; er is momenteel een nieuwe firmware versie in beta die het ook mogelijk maakt om de verschillende PICs allebei te updaten.

Er zijn al wat tests gedaan in de afgelopen week en het ziet er voorlopig goed uit. Verdere details worden bekend gemaakt als @number3 een officiele release doet.

De beta draait iig soepel!
Rene2716 schreef op donderdag 26 januari 2023 @ 17:04:
Even een beginners vraagje. Hoe update je de pic. Ik heb een nieuwe pic met 6.3. Bij pic firmware heb ik na een refresh 6.4 staan. Hoe zet je deze op de PIC? Zie nl na een power off/on bij device info nog steeds 6.3

Dank voor het antwoord alvast :)


In het PIC firmware scherm heb je een aantal opties staan die je kan flashen: standaard zou je de gateway.hex op de PIC willen zetten tenzij je iets heel specifieks wilt doen (debuggen oid).

De icoontjes zijn niet zo veelzeggend, maar het recycle icoontje is de update knop, die kan voor je checken of er een nieuwe versie is. Het tweede icoontje is de daadwerkelijke Flash Firmware knop. Daarmee kun je dus de nieuwe versie naar de PIC schrijven.

[Voor 34% gewijzigd door Dutchess_Nicole op 26-01-2023 17:22]

Kia E-Niro 64kWh DynamicPlusLine


  • JPS
  • Registratie: April 2000
  • Niet online
Dank @Dutchess_Nicole , ik zag het idd ook op het discord channel. Mooi dat het stabiel draait en ik wacht de release rustig af.

Ik ben er alleen nog niet achter waar de reboots door komen. Het irritante is dat het programma van de iSense daarna weer begint als ingesteld (Bijv continue 17C) en een tijdelijke verhoging of verlaging dus ongedaan wordt gemaakt. Als ik dus voor het slapen handmatig naar 15C draait en de OTGW reset zichzelf, dan wordt het room setpoint ongewild weer 17C.

  • Pimmeh
  • Registratie: Januari 2003
  • Laatst online: 04-06 22:21
Pimmeh schreef op zaterdag 24 december 2022 @ 00:38:
[...]


Hmm, misschien dan toch eens een bugreport bij HASS indienen, zeker omdat we dat nu beide hebben waarbij otmonitor.exe wel happy is. Ik zal na de feestdagen eens kijken of ik wat in kan schieten daar, thanks voor het checken!
@Appesteijn Ik heb een workaround bedacht waar ik zelf in control ben om dit op te lossen. Ik draai alles via docker op mijn server dus ik heb openthermmonitor nu ook in docker geconfigureerd. Ik heb een automation draaien die controleert of een waarde van de OpenTherm-integratie in HASS nog recent geupdate is. Zo niet, dan communiceert die naar de host dat die de openthermmonitor-docker opstart, 10 seconden wacht en weer de container killt. Zodra de container gestopt is, kan Home Assistant dus weer bij de OpenTherm-gateway. Een quick fix waarmee ik niet meer urenlang mijn kachel niet meer kan updaten. O-)

  • Dapdodo
  • Registratie: Mei 2019
  • Nu online
[TDLR]: Is er een voorbeeld cq handleiding, hoe je een "unkown msgID", kan doorkrijgen via restAPI. [/TDLR]

OTGW tussen een Inventum modul-AIR en Inventum EVA thermostaat gehangen. De communicatie is leesbaar en goed te begrijpen wat die doet. Er zijn een aantal onbekende msgID's. Echter na loggen met OTmonitor en kWh en temperaturen via raspPi, snap ik wel wat er wordt bedoeld.
Zoals dagen tot filterwissel en draaiuren (92, 93 ,94 en 206). De OTGW stuurt deze wel over de seriele poort, echter komen ze niet via de JSON restAPI naar buiten, maar op deze manier werkt ook de rest van mijn logging. Dus zou het handig zijn om deze te kunnen aanpassen.


Waar moet ik dit allemaal aanpassen?
- RestAPI.ino daar staat een routine.
- In de core lijkt ook een array te zitten.

Mijn eerste poging mislukte. Daarom maar even de oude fs.bin en ino.bin terug gezet. En werkt het als origineel.


Hoe benut je de clock functies van 30sec en 1 minuut enz.

  • number3
  • Registratie: Februari 2002
  • Laatst online: 06:18
Hi @Dapdodo

Ik ben de ontwikkelaar van de esp firmware en zie je vragen stellen over het toevoegen van msgids. Ik wil met alle plezier zaken toevoegen om je unknown messagid te decoden.

Wat is exact je probleem en kan je logging en meer informatie met me delen dan goed ik het toe. Dan kunnen we deze nieuw ontdekte message IDs aan de firmware toevoegen.

Ik ben vooral te vinden in de Discord community, volg de link: https://discord.gg/m7cwv9aJGA

Groet
Robert

[Voor 8% gewijzigd door number3 op 28-01-2023 07:46]


  • number3
  • Registratie: Februari 2002
  • Laatst online: 06:18
De 22ste release van de ESP8266 Nodoshop OTGW firmware is zojuist gereleased, v0.10.0.

Deze release bevat:
  • Flashen van de pic16f1847 (6.x firmware) en de pic16f88 (5.x firmware)
  • Een s0 pulse teller, om elektrisch vermogen van je warmtepomp te meten
  • Diverse Web UI verbeteringen doorgevoerd
  • Een reeks van kleine verbeteringen en bugfixes
Deze release was niet mogelijk geweest zonder hulp van de actieve discord community. Heb je een issue, wil je een specifieke feature, zoek je hulp, kom dan vooral even langs en stel je vragen in de Discord: https://discord.gg/ggkzcpfc7d

De release kan hier gevonden worden:
https://github.com/rvdbre...ware/releases/tag/v0.10.0

Veel plezier maar weer met deze nieuwe release!

  • bluewalk
  • Registratie: Juli 2004
  • Niet online
number3 schreef op zaterdag 28 januari 2023 @ 22:29:
De 22ste release van de ESP8266 Nodoshop OTGW firmware is zojuist gereleased, v0.10.0.

Deze release bevat:
  • Flashen van de pic16f1847 (6.x firmware) en de pic16f88 (5.x firmware)
  • Een s0 pulse teller, om elektrisch vermogen van je warmtepomp te meten
  • Diverse Web UI verbeteringen doorgevoerd
  • Een reeks van kleine verbeteringen en bugfixes
Deze release was niet mogelijk geweest zonder hulp van de actieve discord community. Heb je een issue, wil je een specifieke feature, zoek je hulp, kom dan vooral even langs en stel je vragen in de Discord: https://discord.gg/ggkzcpfc7d

De release kan hier gevonden worden:
https://github.com/rvdbre...ware/releases/tag/v0.10.0

Veel plezier maar weer met deze nieuwe release!
Is het flooden van MQTT bij deze release ook opgelost? Oftewel bij alleen wijzigingen een bericht naar de broker sturen i.p.v. bij elke ontvangst vanaf de gateway deze te sturen?

  • Dutchess_Nicole
  • Registratie: Augustus 2001
  • Laatst online: 09:39
bluewalk schreef op zondag 29 januari 2023 @ 09:07:
[...]

Is het flooden van MQTT bij deze release ook opgelost? Oftewel bij alleen wijzigingen een bericht naar de broker sturen i.p.v. bij elke ontvangst vanaf de gateway deze te sturen?
Ik weet niet wat je bedoelt met 'Flooden' maar de OTGW stuurt zoals het OT protocol voorschrijft gewoon elk bericht door. Ook als dat bericht hetzelfde bevat als de vorige met dat msgid. Het is aan de boiler en de thermostaat om af te spreken hoe vaak ze berichten heen en weer sturen.

Kia E-Niro 64kWh DynamicPlusLine


  • bluewalk
  • Registratie: Juli 2004
  • Niet online
Dutchess_Nicole schreef op zondag 29 januari 2023 @ 09:16:
[...]

Ik weet niet wat je bedoelt met 'Flooden' maar de OTGW stuurt zoals het OT protocol voorschrijft gewoon elk bericht door. Ook als dat bericht hetzelfde bevat als de vorige met dat msgid. Het is aan de boiler en de thermostaat om af te spreken hoe vaak ze berichten heen en weer sturen.
Dat was mijn vraag; nu stuurt hij elk bericht door; ik zou graag hebben dat die allen wijzigingen doorstuurt.
Nu komen er ellendig veel berichten binnen bij mijn domotica die ingesteld staat het bericht te negeren als deze dezelfde waarde heeft als dat ie al weet waardoor die dus onnodig bezig is met het rejecten.
Ik had het zelf al in een fork opgelost maar was benieuwd of het ook opgepakt was door jullie (eerder hier op got over gehad :) )

  • htca
  • Registratie: November 2001
  • Laatst online: 13:12
number3 schreef op zaterdag 28 januari 2023 @ 22:29:
De 22ste release van de ESP8266 Nodoshop OTGW firmware is zojuist gereleased, v0.10.0.

Deze release bevat:
  • Flashen van de pic16f1847 (6.x firmware) en de pic16f88 (5.x firmware)
  • Een s0 pulse teller, om elektrisch vermogen van je warmtepomp te meten
  • Diverse Web UI verbeteringen doorgevoerd
  • Een reeks van kleine verbeteringen en bugfixes
Deze release was niet mogelijk geweest zonder hulp van de actieve discord community. Heb je een issue, wil je een specifieke feature, zoek je hulp, kom dan vooral even langs en stel je vragen in de Discord: https://discord.gg/ggkzcpfc7d

De release kan hier gevonden worden:
https://github.com/rvdbre...ware/releases/tag/v0.10.0

Veel plezier maar weer met deze nieuwe release!
Altijd eng om voor het eerst een device te flashen (zeker op afstand), maar ging prima! Thanks, het werkt hier prima incl de update naar 6.4!

  • amarkest
  • Registratie: Februari 2014
  • Laatst online: 29-05 20:27
Ik wil de een 2e otgw gebruiken om mn remeha Calente aan te sturen met een 2e otgw-app op de homey.
Met aparte ip adressen zou dat moeten kunnen.

Iemand ervaring hiermee?

  • number3
  • Registratie: Februari 2002
  • Laatst online: 06:18
.
Dat was mijn vraag; nu stuurt hij elk bericht door; ik zou graag hebben dat die allen wijzigingen doorstuurt.
Nu komen er ellendig veel berichten binnen bij mijn domotica die ingesteld staat het bericht te negeren als deze dezelfde waarde heeft als dat ie al weet waardoor die dus onnodig bezig is met het rejecten.
Ik had het zelf al in een fork opgelost maar was benieuwd of het ook opgepakt was door jullie (eerder hier op got over gehad :) )
Nee, niet opgelost. Ik zou een PR van je fork wel waarderen. Samen maken we het project beter ;-)

  • number3
  • Registratie: Februari 2002
  • Laatst online: 06:18
amarkest schreef op zondag 29 januari 2023 @ 11:19:
Ik wil de een 2e otgw gebruiken om mn remeha Calente aan te sturen met een 2e otgw-app op de homey.
Met aparte ip adressen zou dat moeten kunnen.

Iemand ervaring hiermee?
Ik heb meerdere OTGW's draaien in mijn installatie, dus ja, het kan. Je kan simpelweg de hostname van elke OTGW anders instellen. Elke OTGW zal een eigen IP krijgen, door de hostname aan te passen heb zijn ze bereikbaar via otgw1.local en otgw2.local.

Als je ook het MQTT topic aanpast, krijg je ook verschillende topics in MQTT, zodat je in je home automation beide OTGW's kan zien en bedienen indien nodig.

Gr.
Robert

  • number3
  • Registratie: Februari 2002
  • Laatst online: 06:18
Altijd eng om voor het eerst een device te flashen (zeker op afstand), maar ging prima! Thanks, het werkt hier prima incl de update naar 6.4!
Dat snap ik wel, vond ik de eerste keer ook eng. Het goede nieuws is dat deze manier van updaten direct van de ESP op de PCB naar de PIC gaat. Alles staat dus lokaal op de PCB, niets gaat over-the-air tijdens het updaten zelf.

Daardoor heb je geen last van wifi storingen of andere issues die je dwars zouden zitten op afstand flashen.

Groet,
Robert
Pagina: 1 ... 28 29 30 Laatste


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee