Plugin voor ESPEasy om een Ducobox Silent / Focus / WTW Energy Comfort aan te sturen en sensoren uit te lezen. Er zijn twee plugins: een ducobox RF gateway en ducobox serial gateway.
78
stars
16
forks
source link
P150 - RF gateway: ontvangen bericht negeren wanneer deze langer dan 900ms geleden is binnengekomen #107
Wanneer de CC1101 een bericht heeft ontvangen zal hij de interrupt pin hoog maken. Dit zorgt ervoor dat de ESP8266 het uitvoeren van de huidige code tijdelijk stopzet en eerst de interrupt routine gaat uitvoeren. Wanneer de interrupt routine te lang duurt dan heeft de ESP8266 geen tijd om de achtergrond taken uit te voeren zoals bijvoorbeeld het behouden van de wifiverbinding. Om de interrupt routine zo kort mogelijk te houden wordt er een vlag gezet:
https://github.com/arnemauer/Ducobox-ESPEasy-Plugin/blob/6da449b9cdb0cc5097886c00981ba2d430552e35/_P150_DucoRFGateway.ino#L659
Wanneer de ESP8266 andere taken (bijvoorbeeld wifi) aan het doen is kan het zijn dat de controle of er een nieuw pakket is binnengekomen langer duurt dan 20ms. Wanneer de Ducobox binnen 300ms geen reactie krijgt op een bericht dat stuurt hij het bericht nog 2 keer (met hetzelfde berichtnummer). Elk bericht heeft een uniek nummer (counter). Dit nummer wordt ook gebruikt voor de ontvangstbevestiging zodat de Ducobox weet dat de ontvangstbevestiging hoort bij het bericht dat hij heeft verstuurd.
Wanneer de gateway na 900ms pas reageert met het "oude" berichtnummer dan accepteert de Ducobox dat niet. Dit zorgt ervoor dat er een soort loop ontstaat van ducobox die een bericht stuurt naar de gateway en de gateway antwoord met het oude berichtnummer. Een oplossing zou zijn om voordat een bericht wordt verwerkt eerst te controleren of deze langer dan 900ms geleden is ontvangen. In dat geval kan de gateway het bericht beter negeren en wachten op een volgend bericht.
Wanneer de CC1101 een bericht heeft ontvangen zal hij de interrupt pin hoog maken. Dit zorgt ervoor dat de ESP8266 het uitvoeren van de huidige code tijdelijk stopzet en eerst de interrupt routine gaat uitvoeren. Wanneer de interrupt routine te lang duurt dan heeft de ESP8266 geen tijd om de achtergrond taken uit te voeren zoals bijvoorbeeld het behouden van de wifiverbinding. Om de interrupt routine zo kort mogelijk te houden wordt er een vlag gezet: https://github.com/arnemauer/Ducobox-ESPEasy-Plugin/blob/6da449b9cdb0cc5097886c00981ba2d430552e35/_P150_DucoRFGateway.ino#L659
Vervolgens wordt er 50x per seconde gecheckt of de vlag is gezet. Als dat zo is dan leest de code het pakket uit de CC1101. 50x per seconde betekent dat hij elke 20ms de controleert of de vlag is gezet. https://github.com/arnemauer/Ducobox-ESPEasy-Plugin/blob/6da449b9cdb0cc5097886c00981ba2d430552e35/_P150_DucoRFGateway.ino#L262
Wanneer de ESP8266 andere taken (bijvoorbeeld wifi) aan het doen is kan het zijn dat de controle of er een nieuw pakket is binnengekomen langer duurt dan 20ms. Wanneer de Ducobox binnen 300ms geen reactie krijgt op een bericht dat stuurt hij het bericht nog 2 keer (met hetzelfde berichtnummer). Elk bericht heeft een uniek nummer (counter). Dit nummer wordt ook gebruikt voor de ontvangstbevestiging zodat de Ducobox weet dat de ontvangstbevestiging hoort bij het bericht dat hij heeft verstuurd.
Wanneer de gateway na 900ms pas reageert met het "oude" berichtnummer dan accepteert de Ducobox dat niet. Dit zorgt ervoor dat er een soort loop ontstaat van ducobox die een bericht stuurt naar de gateway en de gateway antwoord met het oude berichtnummer. Een oplossing zou zijn om voordat een bericht wordt verwerkt eerst te controleren of deze langer dan 900ms geleden is ontvangen. In dat geval kan de gateway het bericht beter negeren en wachten op een volgend bericht.