Toon rooten

LET OP: IK KRIJG MEERDERE MAILS PER WEEK MET DE VRAAG OF IK TOON VOOR DIEGENE WIL ROOTEN. HELAAS, VANWEGE RISICO’S VERBONDEN AAN DEZE HANDELINGEN, DOE IK DIT NIET.

Als Toon geroot is kun je het prijzige abonnement bij Eneco opzeggen. Daarnaast zijn er alternatieve apps, zoals ‘Domoticz’ waarmee je nog steeds een en ander kan instellen vanaf afstand. Voor mijn afwezigheidsdetectie is het rooten van Toon nodig, zodat er via het aanroepen van specifieke URL’s programma’s ingesteld kunnen worden.

LET OP: JE DOET DIT OP EIGEN RISICO! ALS HET MIS GAAT HEB JE EEN ONBRUIKBAAR APPARAAT

Benodigdheden

Je hebt de volgende zaken nodig om Toon te rooten:

  • Een Toon (duh!) versie 1, met U-Boot firmware versie 2010.09-R6 of 2010.09-R8. De versie van deze firmware zie je echter pas als je de Toon aangesloten hebt via een seriële poort.
  • Een USB naar seriële kabel (bijvoorbeeld deze).
  • Een programma om een seriële verbinding met Toon op te zetten. Mijn voorkeur gaat uit naar Putty en zal de werkwijze met dit programma hier ook beschrijven.
  • Een beetje kennis van Linux.

Toon openmaken

Maak Toon open door de witte rand langs het scherm voorzichtig naar voor te trekken. Hierna kun je het scherm naar voor kantelen. Let op dat het scherm met twee flatcables aan het moederbord zit. Haal deze voor het gemak los (let op: kwetsbaar!). Het moederbord zit met 6 klemmetjes vast (op elke hoek één en naast de stroomaansluiting twee). Duw de klemmetjes opzij en trek het moederbord voorzichtig naar voor. Aan het moederbord zitten nog drie antennes. Ik heb meerdere Toon versies gezien: bij sommigen kun je de antennes uit de behuizing tillen en bij anderen zitten ze geplakt. Zitten ze geplakt, haal dan de koperen aansluitingen voorzichtig los met een pincet en vergeet vooral niet hoe deze vast zaten.

Toon aansluiten

Ik ga er van uit dat, voordat je hiermee begint, de stuurprogramma’s voor je USB-seriële kabel geïnstalleerd hebt. Kijk nu naar het moederbord van Toon. Je ziet hier een 14-polige pinheader zitten. Linksboven staat een markering ‘1’, welke de eerste pin aangeeft. De pinvolgorde van deze header is als volgt:

01  02
03  04
05  06
07  08
09  10
11  12
13  14

De pinnen die we aansluiten zijn 11 (RX), 13 (TX) en 14 (GND). Zorg ervoor dat RX op Toon aangesloten wordt op de TX van je kabel en TX met RX.

Check even via het apparaatbeheer in configuratiescherm welke COM-poort Toon heeft (in mijn geval COM4):

Stroomvoorziening

Toon heeft natuurlijk stroomvoorziening nodig. De adapter die normaal tussen de ketel en thermostaat zit, kun je daar prima voor gebruiken. Sluit de adapter met bijvoorbeeld twee jumperwires aan op het groene blokje op de muurplaat van Toon. Dit blokje kun je er makkelijk uitwippen. Als alles aangesloten is, sluit het groene blokje dan aan op de stroomaansluitingen op het moederbord. Polariteit is niet belangrijk.

Verbinding maken Putty

Open Putty op en stel een seriële verbinding in op de juiste COM poort met baudrate 115200.

Klik op ‘Open’ om verbinding te maken met Toon en druk nog even op de resetknop van Toon om opnieuw op te starten. In Putty wordt nu uitvoer getoond:

Belangrijk is nu dat je zoekt naar de term ‘U-Boot’ met er achter een versienummer, in mijn geval ‘U-Boot 2010.09-R8’. Afhankelijk van het versienummer kopieer je een wachtwoord naar het klembord:

U-Boot 2010.09-R6 = f4E9J
U-Boot 2010.09-R8 = 3BHf2

Kopieer het juiste wachtwoord naar het klembord en herstart de Toon met de reset-knop. Zorg ervoor dat zodra de tekst ‘Enter password – autoboot in 2 sec…’ verschijnt, je op de rechter muisknop drukt. De rechtermuisknop is in Putty een snelkoppeling voor plakken, gevolgd door de entertoets.

Voila! We zijn binnen.

U-Boot aanpassen

Om straks in te kunnen loggen op Toon met root-toegang moet U-Boot aangepast worden met een commando zodat de shell geladen wordt. Neem dit letterlijk over. Een typefout kan ervoor zorgen dat Toon niet langer werkt.

setenv addmisc setenv bootargs \$\{bootargs\} mem=\$\{mem\} lpj=999424 init=/bin/sh

Zorg ervoor dat Toon verder geladen wordt met het volgende commando:

run boot_nand

Het kan zijn dat je aan het einde van het laden een foutmelding krijgt, echter is dit geen probleem.

Seriële console toevoegen

Open het bestand ‘/etc/inittab’ met een editor en zorg ervoor dat het je aan het blok ‘# HCBv2 static stuff’ de volgende regel toevoegt:

gett:235:respawn:/sbin/getty -L 115200 ttymxc0 vt102

Zorg ervoor dat je van de regel, beginnend met ‘ovpn:’ commentaar maakt door er een ‘#’ (hekje / hashtag) voor te zetten. Hiermee zorg je ervoor dat Toon niet langer data kan uploaden naar het datacenter.

Sla het bestand op en sluit de editor.

Root toegang instellen

Open bestand ‘/etc/passwd’ met een editor en haal het woord ‘DISABLED’ in de regel beginnend met ‘root’ weg, zodat het er als volgt uitziet:

root::0:0:root:/root:/bin/sh

BusyBox installeren

In nieuwere versies van de Toon firmware is Getty verwijderd om toegang via de seriële poort te bemoeilijken. Hiervoor installeren we een nieuwe versie van BusyBox. Download BusyBox en open deze in bijvoorbeeld Notepad++. Maak het bestand busybox.ipk.b64 aan:

cat > busybox.ipk.b64

Plak de inhoud van het bestand naar Putty en sluit af met CTRL+D. Zet het bestand vervolgens om naar een ipk-bestand en installeer het:

base64 -d busybox.ipk.b64 > busybox.ipk
opkg install busybox.ipk

Herstart Toon via de knop aan de onderzijde. Je ziet in Putty dat Toon opstart. Zodra de meeste drukte voorbij is, typ je:

root
passwd

Er wordt nu gevraagd naar een nieuw wachtwoord voor gebruiker root. Vul tweemaal een sterk wachtwoord in en onthoud deze.

Dropbear installeren

Download dropbear.ipk.b64 en open het in een editor, bijvoorbeeld Notepad++. Voer het volgende commando in, in de shell:

cat > dropbear.ipk.b64

Kopieer nu de inhoud van het bestand en plak deze met de rechtermuisknop in Putty, waarna je het bestand afsluit met CTRL+D. Converteer het bestand naar een ipk-bestand met het volgende command:

base64 -d dropbear.ipk.b64 > dropbear.ipk

Installeer met:

opkg install dropbear.ipk

Open bestand ‘/etc/default/iptables.conf’ in een editor. Zorg dat de volgende vier regels aanwezig zijn en niet als commentaar staan (vooraf gegaan met een hekje/hashtag):

-A HCB-INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
-A HCB-INPUT -p tcp -m tcp --dport 7080 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
-A HCB-INPUT -p tcp -m tcp --dport 10080 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
-A HCB-INPUT -p tcp -m tcp --dport 80 --tcp-flags SYN,RST,ACK SYN -j ACCEPT

Sla het bestand op en herstart de firewall:

/etc/init.d/iptables restart

Herstart Toon met het volgende commando:

reboot

Deze keer duurt het opstarten iets langer omdat er een SSH sleutel gegenereerd moet worden. Wacht tot je de volgende tekst ziet verschijnen:

Eneco Toon by Quby

eneco-001-XXXXXX login:

Log in met ‘root’ en het eerder opgegeven wachtwoord. Vraag daarna de netwerkinstellingen op:

ifconfig

Deze geeft de volgende uitvoer:

Kijk naar het IP-adres van interface ‘wlan0’, in mijn geval ‘192.168.0.58’. Open een nieuw venster in Putty en maak verbinding met een SSH server op het opgegeven adres, poort 22:

Klik op ‘Open’. Het kan zijn dat je de vraag krijgt of je de sleutel van de server wilt vertrouwen. Klik in dat geval op ‘Yes’. Als je nu kunt inloggen, dan is alles goed verlopen!

Je kunt Toon weer in elkaar zetten. Let goed op dat de antennes juist worden aangesloten.

Toon bijwerken

Om Toon bij te werken kan er een gemakkelijk script uitgevoerd worden. Download het script. Maak het bestand ‘update_rooted.sh’ aan:

cat > update_rooted.sh

Plak de inhoud van het bestand en sla op met CTRL+D. Maak het bestand vervolgens uitvoerbaar en voer het uit.

chmod +x update_rooted.sh
./update_rooted.sh

Volg de stappen waarna Toon geüpdatet wordt. Je kunt dit script ook gebruiken om enkel bijvoorbeeld de ‘Geen verbinding met Service-Center’ waarschuwing te verbergen. Gebruik hiervoor:

./update_rooted.sh -f

Timeserver aanpassen 

Om Toon niet langer periodiek met een server van Quby (de fabrikant) contact te laten maken, zorgen we er ook voor dat de timeserver aangepast wordt. Open ‘/etc/chrony.conf’ en verander de volgende twee regels:

server time.quby.nl minpoll 8
initstepslew 30 time.quby.nl

in:

server www.nist.gov minpoll 8
initstepslew 30 www.nist.gov

Alle aanvragen naar Quby.nl blokkeren

Om Toon helemaal geen verbinding meer met quby.nl te laten maken voeg je de volgende regel toe aan ‘/etc/hosts’:

127.0.0.1 quby.nl

Als je nu quby.nl pingt, dan krijg je de volgende output:

eneco-001-095873:/# ping -c 4 quby.nl
PING quby.nl (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=64 time=1.051 ms
64 bytes from 127.0.0.1: seq=1 ttl=64 time=0.713 ms
64 bytes from 127.0.0.1: seq=2 ttl=64 time=0.596 ms
64 bytes from 127.0.0.1: seq=3 ttl=64 time=0.595 ms

--- quby.nl ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.595/0.738/1.051 ms

Aanpassingen gebruikersinterface

In bestand ‘/mnt/data/qmf/config/config_happ_scsync.xml’ kan de gebruikersinterface aangepast worden door middel van volgende tags (bron: domoticaforum.eu).

<internalAddress>agreementDetail</internalAddress>

<visibility>0</visibility>
"0" or "1"

<StartDate>1234567890</StartDate>
Linux timestamp, timestamp van eerste activatie.

<EndDate>-1</EndDate>
Linux timestamp, een vervallen timestamp zal het volledige menu blokkeren. Waarde '-1' geeft oneindige activatietijd

<ProductVariant>Toon</ProductVariant>
"Standalone" of "Toon", waarde "Standalone" blokkeert het volledige menu. Waarden "Toon" en een geldige EndDate activeren het volledige menu.

<activated>1</activated>
"0" of "1", activatiestatus van Toon

<wizardDone>1</wizardDone>
"0" of "1", waarde "0" toont de initiële setup-stappen na een herstart. Aan te raden bij verkoop van toon

<SortwareUpdates>1</SortwareUpdates>
"0" of "1", waarde "1" activeert automatische updates.

<BoilerManagement activated="0">0</BoilerManagement>
"0" of "1"

<ElectricityDisplay>1</ElectricityDisplay>
"0" of "1", toont verbruik en grafieken van electriciteitsverbruik.

<GasDisplay>1</GasDisplay>
"0" of "1", toont vernbruik en grafieken van gasverbruik.

<HeatDisplay>0</HeatDisplay>
"0" of "1"

<SolarDisplay>1</SolarDisplay>
"0" of "1", waarde "1" activeert ZonOpToon widgets.

<SolarActivated>1</SolarActivated>
"0" of "1", waarde "1"activeert ZonOpToon opties.

<OtherProviderElec>0</OtherProviderElec>
"0" of "1"

<OtherProviderGas>0</OtherProviderGas>
"0" of "1"

<SME>0</SME>
"0" of "1"

<HeatWinner>0</HeatWinner>
"0" of "1"

<ContentApps>1</ContentApps>
"0" of "1"

<TelmiEnabled>0</TelmiEnabled>
"0" of "1"

<mobileAccess>0</mobileAccess>
"0" of "1", waarde "1" activeert de "Toon op Afstand" app, maar kan alleen gebruikt worden bij een actief Toon abonnement.

<supportEnabled>0</supportEnabled>
"0" of "1", waarde "1" activeert de mogelijkheid tot ondersteuning op afstand via de Eneco/Toon helpdesk.

<supportEnabledStart>0</supportEnabledStart>
"0" of "1", waarde "1" activeert hulp op afstand via de Eneco/Toon helpdesk.

<researchEnabled>0</researchEnabled>
"0" of "1"

<doSolarWhatsnew>0</doSolarWhatsnew>
"0" of "1", waarde "1" activeert "Wat is Zon op Toon" welkomstscherm.

<latestWhatsnewVersion>qt-gui - 1.6755-ene-release-ene-3.7</latestWhatsnewVersion>

Firmwareversie na afronden van de initiële setup.

<statusUsageFirstUse>0</statusUsageFirstUse>
"0" of "1"

<scStatusFlags>0</scStatusFlags>
"0" of "1"
<commissionState>0</commissionState>
"0" of "1"

F