Geroote Toon in de Apple Woning-app

Na het rooten van je Toon verlies je natuurlijk de bediening op afstand via de Toon-app van Eneco. Nu zijn er wel alternatieven voor oa Android maar voor Apple is er nog weinig te vinden. Om toch de thermostaat via een Apple-apparaat te kunnen bedienen, is het mogelijk om deze via Homebridge te koppelen.

Wat heb je nodig?

  • een apparaat waar Homebridge op draait, bijvoorbeeld een Raspberry Pi. Met Homebridge kun je apparaten die niet standaard compatible zijn met Apple HomeKit toch verbinden.
  • wat Linux kennis.
  • het IP-adres van je geroote Toon.

Installeer de ‘homebridge-rootertoon’ plugin voor homebridge met het volgende commando:

npm install -g --unsafe-perm homebridge-rootedtoon

Open het configuratiebestand van HomeBridge. Ik ben meerdere locaties van het configuratiebestand tegengekomen. In mijn huidige installatie was de locatie /var/lib/homebridge/config.json.

nano /var/lib/homebridge/config.json

Voeg de accessoire ‘RootedToon’ toe aan het configuratiebestand.

{
   "accessory": "RootedToon",
   "name": "Toon Thermostaat",
   "apiroute": "http://192.168.0.XXX",
   "maxTemp": 25,
   "minTemp": 15,
   "manufacturer": "Eneco",
   "model": "RootedToon",
   "serial_number": "xxx.xxx.xxx.xxx"
}

Achter ‘apiroute’ vul je ‘http://’ gevolgd door het IP-adres van je geroote toon in. Achter ‘maxTemp’ kun je de maximaal instelbare temperatuur instellen, achter ‘minTemp’ kun je de minimaal instelbare temperatuur instellen.

Sla het bestald op en herstart homebridge:

systemctl restart homebridge

In de Woning-app heb je nu een nieuwe accessoire, instelbaar tussen de opgegeven temperaturen!

Pond[CTRL] Update

Na een van de laatste updates waarbij de uptime doorgegeven werd aan de API, werd duidelijk dat de firmware 1 of 2 keer per dag herstart werd zonder duidelijke reden. Binnen 10 seconden werkt de module weer na een herstart, maar dit is natuurlijk niet de bedoeling.

Er wordt nu een herstart-reden doorgegeven aan de API en bij een /get-aanvraag, waardoor ik hopelijk de reden kan achterhalen.

Debug toont nu ‘4’, waarbij de reden van herstart volgens onderstaande tabel een ‘software reset’ was. Dit klopt en was na bijwerken naar firmware versie 1222.

Ondanks dat ‘4’ natuurlijk een numerieke waarde is, wordt deze in het JSON-resultaat als string weergegeven. De reden hiervan is dat de ‘debug’-parameter alle mogelijke informatie, opgeslagen als string, kan bevatten.

Tabel met mogelijke redenen, opgave van fabrikant WiFi-module (Espressif).
Huidige firmwareversie: 1222

Pond[CTRL] Update

Kleine update gemaakt, waarbij de resterende voederpauze-tijd nu beschikbaar is. Deze wordt vanaf nu ook in de online app weergegeven.

Er wordt nu ‘Feed’ samen met de resterende tijd weergegeven in plaats van enkel ‘Feeding’. Dit is mogelijk door de nieuwe parameter ‘feedpause_remaining’ in een /get-aanvraag.
Huidige firmwareversie: 1221

Pond[CTRL] Update

Een kleine update geschreven waarbij de huidige tijd in uren, minuten en seconden toegevoegd wordt aan de ontvangen data in een /get-aanvraag. Hierbij kwam ik er achter dat de tijdzone offset natuurlijk geen rekening houdt met zomer- en wintertijd. Iets om over na te denken: in wintertijd heb je namelijk te maken met UTC+1 (offset 3600 seconden), maar in de zomer UTC+2 (offset 7200 seconden). Wordt vervolgd.

De parameters time_hours, time_minutes en time_seconds zijn toegevoegd en worden berekend aan de hand van timestamp.
Huidige firmwareversie: 1219

Pond[CTRL] Update

Optie toegevoegd tot het wijzigen van de externe UPnP-poort. Een herstart is nodig om de wijzigingen door te voeren maar deze wordt na bijwerken automatisch uitgevoerd.

Toegevoegde optie ‘External UPnP port number’.
De router toont het gewijzigde poortnummer. Het kan tot enkele minuten duren voordat dit bijgewerkt is.
De /get opdracht toont nu ook ‘externalport’.
Huidige firmwareversie: 1211

Pond[CTRL] Update

Vandaag een aantal updates doorgevoerd:

  • Synchronisatie met timeserver als voorbereiding op schakelen dmv timers. Als timeserver wordt standaard pool.ntp.org gebruikt, maar dit is te wijzigen naar elke gewenste server. Er kan een tijdzone opgegeven worden (offset vanaf UTC, zowel positief als negatief) voor lokalisatie.
  • Er werd bij een actieve verbinding met Pond[CTRL] elke seconde gecontroleerd op updates. Dit is natuurlijk totaal onnodig. Dit gebeurt nu eens per minuut en buiten de verbinding tussen client en Pond[CTRL] om.
  • Duur van voederpauze nu instelbaar van 0 – 65535 seconden.
  • De module is nu te herstarten via de knop ‘Restart’.
Nieuwe ‘System settings’ waar duur van voederpauze, tijdzone en tijdserver opgegeven kunnen worden. Via dit scherm kan ook de module herstart worden.
Output van /get vanaf Pond[CTRL], waarin timeserver, timestamp timestamp_without_offset, timezone_offset en feedpause_duration toegevoegd zijn sinds de laatste update.
Huidige firmwareversie: 1201

Eerstvolgende actie wordt het toevoegen van systeem-instelling ‘External UDP-port’, waardoor het mogelijk moet zijn om meerdere Pond[CTRL]-systemen achter één router te kunnen benaderen.

Pond[CTRL] Update

Eindelijk vakantie! Vijver schoongemaakt en ook hoog tijd voor een update aan Pond[CTRL]:

  • Aantal meetwaarden waarvan het gemiddelde genomen wordt gereduceerd van 120 naar 25.
  • Getest om IoT-updates via HTTPS te versturen maar niet geïmplementeerd. Reden hiervan is dat de HTTPS-library ruim 20% extra geheugen inneemt waardoor er te weinig ruimte overblijft voor updates aan functionaliteit.
  • Uptime wordt nu geüpload naar de API, waardoor ik bij kan houden of de WiFi-module herstart is (uptime < vorige uptime = herstart). Mochten er herstarts voorkomen, dan is het zaak om uit te zoeken wat dit veroorzaakt.

Bugfix:

  • Status LED en automatische updates werkten niet meer. De LED toont of er een actieve IoT-verbinding is. Het bleek een probleem te zijn met het verwerken van het server-resultaat (timeout bij ophalen resultaat van server). Gefixt vanaf versie 1174.

Next:

  • Verbinden met timeserver, zodat sockets tijdgestuurd geschakeld kunnen worden.
  • Zorgen dat sockets handmatig in- en uitgeschakeld kunnen worden (override).
  • Instelbaar maken van de duur van de voederpauze (nu standaard 30 minuten).
  • Sockets schakelen dmv logica, bijvoorbeeld TEMP1_HIGH & TEMP1_LOW. Het idee is om sensor- en (toekomstige) timertoestand te kunnen combineren als voorwaarde oma een socket in of uit te schakelen.
  • Verder met de iOS-app.
Huidige firmwareversie: 1175

Pond[CTRL] Update

Vanaf nu is het mogelijk de API-key te genereren in de webinterface, via menu-optie ‘API Key’ en deze op te slaan.

Helaas bleek er een fout te zitten in de firmware waardoor sommige instellingen niet vanuit het geheugen geladen werden na een herstart, waaronder de API-key. Deze bug is verholpen in de laatste firmware.

Huidige firmwareversie: 1142

Pond[CTRL] Twee maanden live!

Na ruim twee maanden testen en enkele updates durf ik te zeggen dat het project nu al mijn verwachtingen overtreft!

Het is ook meer dan een gimmick en heeft me al meer dan eens nuttig geholpen:

  • Bij mijn strijd tegen draadalt in de vijver heb ik uiteindelijk besloten over te gaan op middeltjes omdat het weghalen niet hielp. Na het toevoegen van het middel op 1 juni zakte de zuurtegraad flink (zie grafiek ‘Zuurtegraad’). Aangeraden werd om de kuur na een week te herhalen, maar dat heb ik gezien de meetwaarden dus nog niet gedaan.
  • Bij onderhoud aan de waterval bleek ik de slang onjuist aangesloten te hebben. De niveauschakelaar heeft de inhoud van de vijver gered door de circulatiepomp tijdig uit te schakelen.

Meetwaarden zijn ook vrijwel compleet. Er wordt minder dan 1% meetwaarden niet geregistreerd (bron: database export waarbij bij dagelijks 1140 meetwaarden per sensor aanwezig moeten zijn voor een 100% score, dit bleek rondom de 1130 te liggen).

Onderstaande grafieken tonen de meetwaarden van afgelopen maand, waarbij in de grafiek voor sensor ‘Zuurtegraad’ duidelijk te zien is wanneer er chemicaliën tegen draadalg gebruikt werden.

Klik om te vergroten

Klik om te vergroten
Klik om te vergroten

De komende periode zal ik, zodra ik tijd beschikbaar heb voor het project, de volgende volgorde van ontwikkeling aanhouden:

  • Toevoegen API-Key functionaliteit aan de webinterface.
  • Ontwikkelen HomeBridge plugin, zodat meetwaarden zichtbaar zijn en een voederpauze geactiveerd kan worden vanuit de iOS woning-app.
  • Verder ontwikkelen van de iOS-app.
  • Verder ontwikkelen functionaliteit Pond[CTRL] Dashboard met oa. e-mail notificaties.

Pond[CTRL] Update

Om Pond[CTRL] met andere apparaten te laten communiceren zonder handmatig in te hoeven loggen, als voorbereiding op de gewenste HomeBridge-koppeling, ondersteunt de firmware nu autorisatie door middel van een API-key. Standaard is er geen API-key ingesteld waarmee API-autorisatie uitgeschakeld is. Zodra de key ingesteld is kunnen apparaten door middel van deze key alle functionaliteit van Pond[CTRL] bedienen.

Ondanks dat de firmware nu autorisatie middels een API-key ondersteunt, kan de API-key nog niet ingesteld worden vanuit de webinterface. Dit zal de eerstvolgende stap worden.

Huidige firmwareversie: 1136