Controleer je nutsverbruiken

Stroomverbruik. We spreken er allemaal over. Maar hoeveel verbruiken we nu echt? En wanneer verbruiken we dit nu juist? Flukso heeft daarvoor een mooie toepassing. Een klein metertje dat je op de electriciteitskabel plaats, en welk om de x-tijd de gegevens doorstuur naar een website. Op deze website kan je vervolgens mooi je grafiekje raadplegen.
Kost misschien wel iets, reken om en bij de 100 euro, maar kan je nadien wel helpen om alles wat beter te begrijpen. Zo weet je direct of er zaken stroom verbruiken die het niet zouden moeten verbruiken…

Want tenslotte: Meten is Weten

De grafiek
Via de site van flukso kan je netjes de status opvolgen van je verbruik. Schrik niet, soms is dit hoger dan je verwacht… Persoonlijk zit ik aan een verbruik van rond de 300 watt gemiddeld.

De installatie
De installatie verloopt vlotjes via een kabeltje tussen je computer en de router. Op zo’n 10 minuutjes heb je de zaak draaien. Metertje aan je laptop hangen, de nodige software doorlopen (wireless wachtwoordje en zo invullen)…

Nog even het metertje plaatsen in de buurt van je schakelkast, een klem over de voedingskabel plaatsen en voila…
Je hoeft dus nergens iets te onderbreken of schroeven.

Aanpassingen
Flukso stuurt bij default alles door naar hun webserver. Op zich niks op tegen, en als je enkel maar je stroomverbruik wil zien, is dit meer dan voldoende. Doch ik wil iets meer dan dit. Ik heb nogal graag controle over alles wat er in mijn netwerk gebeurt (beroepsmisvorming). Daarom volgen hier enkele zaken die ik deed om het toestel meer naar mijn hand te zetten…

Inloggen (ssh) via wireless
Hetgeen me eerst en vooral stoorde, was het feit dat je indien je meer controle wou, je moet inloggen met een kabel. OK, op zich misschien qua beveiliging niet slecht, maar ik ben nogal lui van aard. Dus dat moet veranderen, ik wil kunnen inloggen met ssh over het draadloos gedeelte…
Connecteer een kabel tussen de computer en de flukso meter.
En check of je een ip-adres krijgt.
Log in met de gebruiker root en wachtwoord root (indien nog niet gewijzigd)
open het bestandje /etc/system/firewall met bv vi

vi /etc/system/firewall

Onder de sectie WLAN (area WLAN), wijzig je de status voor incoming.

Incoming ‘ACCEPT’

Herstart het toestel

Alles via kabel
Persoonlijk ben ik tegen wireless. Enkel als het niet anders kan, is het nuttig. Maar als het even zonder kan…
Eerste fase is in te loggen op de router via ssh. Dit kan je doen via kabel of wireless. Via de kabel werkt natuurlijk altijd het best. Login in volgende commando

ssh root@192.168.111.120 (of jouw router’s IP-adres)

Als wachtwoord vul je in 'root’
Reset alle instellingen:

cp /rom/etc/config/firewall /etc/config
cp /rom/etc/config/network /etc/config
cp /rom/etc/config/wireless /etc/config

Voeg jouw ‘publieke’ DNS server toe aan de router. Dit zijn de IP-adressen voor telenet. In jouw geval kan dit natuurlijk iets anders zijn (bv Belgacom). Ik ben deze stap nog nergens tegengekomen, maar in mijn geval merkte ik dat er geen DNS lookup kon gebeuren.

vi /etc/resolv.conf
nameserver 195.130.130.133
nameserver 195.130.131.133

Ga vervolgens naar een tijdelijk folder

cd /tmp

Download het patch bestandje

wget http://www.flukso.net/files/openwrt/patches/connect.via.ethernet.patch

Wijzig de folderlocatie

cd /etc/config

Voer de patch uit

patch -p1 < /tmp/connect.via.ethernet.patch

Als je nu reboot, zou de statistieken moeten doorgestuurd worden via de kabel, en niet meer via het wireless gedeelte.

Instellen hostname
Soms wil je toch een naampie geven aan de toestellen zoals jij het wil. De hostnaam kan je instellen in het bestandje:

vi /etc/config/system

Na een reboot zou de naam aangepast moeten zijn…

snmp activeren
Ik draai mijn eigen huisservertje. Deze staat namelijk in voor mijn databeheer, domoticasturing, IPT… En zeker niet te vergeten, de monitoring van dit alles. Het is altijd handig om te weten wat er waar gebeurt. En hier had ik natuurlijk ook graag mijn eigen stroom statistieken bij geplaatst. Als monitoring systeem gebruik ik cacti. Nu is het flukso metertje standaard niet geconfigureerd om dit toe te laten. Natuurlijk weten wij het beter…
Het eerste dat je moet doen, is snmp activeren op de router. Log in via ssh, en voer volgende commando’s uit
Login in volgende commando

ssh root@192.168.111.120 (of jouw router’s IP-adres)

Als wachtwoord vul je in 'root’
Installeer de tool ‘snmp’

opkg install snmpd-static
opkg install snmpd

Pas eventueel de credentials aan voor jouw netwerk:

vi /etc/config/snmpd

Herstart de service snmpd

/etc/init.d/snmpd start

Wens je dat snmp telkens automatisch opstart?

ln -s /etc/init.d/snmpd /etc/rc.d/S50snmpd

Stroomwaarden uitlezen
Vervolgens moet je nog zorgen dat je de gemeten electriciteit waarde ergens kan uitlezen
Login in volgende commando

ssh root@192.168.111.120 (of jouw router’s IP-adres)

Als wachtwoord vul je in 'root’
Een van de minder leuke zaken aan OpenWRT is dat er bepaalde folder overschreven worden bij het herstarten. Zo wordt de folder var gewist, de crontab overschreven… Dus hier hou je best rekening met bij het schrijven an eigen scripts!
Voer volgend command uit, dit leest alle sensoren uit van je fluksometer. Zoek vervolgens naar de juiste id. Een id ziet eruit als 285afa070a3fd4a5f2a69f55e0b8007c. Eventueel kan je de resultaten (laatste cijfer) vergelijken met je grafieken. Of een zwaar toestel (bv electrisch vuurtje, koffiezet…) aanzetten en zien welke waarde sterk stijgt.
Je kan de output vervolgens stoppen door CTRL-C te gebruiken.

cat /dev/ttyS0

Gebruik nu nogmaals hetzelfde commando, met wat extra filters om enkel het verbruik te zien van de desbetreffende sensor. Wijzig onderstaand id met jouw id.

cat /dev/ttyS0 | head -n1 | sed -n ‘s/^pwr 285afa070a3fd4a5f2a69f55e0b8007c:(0*)(.*)/\2/p’

Woordje uitleg
cat /deb/ttyS0: Geef de output weer van de seriele connectie
head -n1: Toon enkel de eerste regel
sed -n ‘s/^pwr 285afa070a3fd4a5f2a69f55e0b8007c:(0*)(.*)/\2/p’: strip alles van de lijn, behalve de echte waarde
Plaats het commando nu in een scriptje. Vervolgens laat je dit wegschrijven in een log bestand. Ik gebruik een tijdelijk log bestandje, omdat het soms wat tijd vregt om de waarde uit te lezen. En heb je dan net pech dat de snmp server op dit moment de waarde uitleest…

Het scriptje noemt bij mij: /scripts/logSensor1.sh

cat /dev/ttyS0 | head -n1 | sed -n ‘s/^pwr 285afa070a3fd4a5f2a69f55e0b8007c:(0*)(.*)/\2/p’ > /scripts/log/sensor1.tmp
cp /scripts/log/sensor1.tmp /scripts/log/sensor1.log

Ik gebruik een 2de scriptje om de snmp daemon het logbestandje uit telezen.
Dit noemt bij mij /scripts/snmpSensor1.sh

cat /scripts/log/sensor1.log

En nu moeten we we de snmp daemon nog vertellen dat hij deze waarde ‘bekend’ maakt. Hiervoor pas je het bestandje >/etc/snmpd/snmpd.conf aan
exec root /bin/sh /scripts/snmpSensor1.sh

En nog even de daemon herstarten natuurlijk (/etc/init.d/snmpd restart)

Dit is mijn volledige snmpd.conf file, louter als voorbeeld:

com2sec ro default JouwCommnityString1
com2sec rw localhost JouwCommnityString1
group public v1 ro
group public v2c ro
group public usm ro
group private v1 rw
group private v2c rw
group private usm rw
view all included .1
access public “” any noauth exact all none none
access private “” any noauth exact all all all
exec root /bin/sh /scripts/snmpSensor1.sh

Als laatste vertel ik de flukso meter dat hij de waarde elke minuut in het logbestandje moet wegschrijven. Dit doe je via de cron (/etc/crontabs/root). Sinds de crontab voor root overschreven wordt bij het herstarten, kan je niet eenvoudigweg een regel toevoegen aan /etc/crontabs/root. Wat ik doe is het flukso bestandje een klein beetje aanpassen zodat dit hier wordt mee ingevoerd:
Vind volgende regel in het bestandje /etc/init.d/flukso:

echo -e “$(date ‘+%M’) * * * * /usr/share/lua/flukso/heartbeat.lua 0\n”’*/15 * * * * [ -z “$(ps | grep ‘‘flukso.lu[a]’’)” ] && reboot’ | crontab -

En vervang deze door:

echo -e “$(date ‘+%M’) * * * * /usr/share/lua/flukso/heartbeat.lua 0\n”’/1 * * * * /scripts/logSensor1.sh\n’’/15 * * * * [ -z “$(ps | grep ‘‘flukso.lu[a]’’)” ] && reboot’ | crontab -
Bij het herstarten zou de cron nu automatisch moeten aangemaakt worden met het sensorscriptje extra…

En als alles goed is zou je fluksometer nu de waarden moeten vrijgeven.
Je kan dit altijd testen door volgend commando uit te voeren op de snmp server:

snmpwalk -v 2c -c JouwCommunityString 111.222.333.444 .1.3.6.1.4.1.2021.8.1

Om enkel de waarde te lezen, gebruik volgend commando

snmpwalk -v 2c -c JouwCommunityString 111.222.333.444 .1.3.6.1.4.1.2021.8.1.101.1

Cacti
Ik gebruik zelf cacti als monitoringtool… Het voordeel dat je hierdoor hebt, is dat je in de eerste plaats de zaken live kan bekijken (zonder internet access), een beter historie (ook zoomable indien nodig)…

Syslog activeren
Opgelet met syslog, ik merkte bij mij dat eens ik de syslog activeerde, het routertje iets meer herstartte dan het zou moeten…
Voeg een extra regel toe aan het systeem bestandje

vi /etc/config/system
option ‘log_ip’ ‘192.168.111.1’ (hier komt jouw server IP adres te staan
reboot

Grafieken.
Ik ga ervan uit dat je mijn stapje volgende om een scriptje te schrijven om zelf de waarden uit te lezen? Zoniet kan je dat hier boven even nalezen.
Ook vermoed ik dat je ondertussen wel doorhebt hoe je een toestel invoegt in cacti. Dus gaan we ineens door tot het aanmaken van een template om de meter te lezen:

  1. Ga naar ‘console’ - ‘devices’ en kies jouw flukso meter.
  2. Voeg onder ‘Associated Graph Templates’ de template ‘SNMP - Generic OID Template’ toe.
  3. Nog even saven (beter 1x teveel, dan 1x te weinig), en dan boven kiezen voor ‘Create Graphs for this Host’
  4. Dan kies je de waarden die jij wenst (titels, descriptions, legends…). En gewoon opletten bij volgende velden:
    – Maximum Value (‘U’ for No Maximum): Kies een waarde hoog genoeg, bv 10000
    – Data Source Type: GAUGE
    – OID: .1.3.6.1.4.1.2021.8.1.101.1

En als alles goed is, zouden de waarden moeten binnenrollen…

De verschillende sensoren van flukso zijn in mijn geval:

Sensoren ID
S1: 52f5c63cc4221fbbedcb499908a0a823 - Fase1
S2: 475d0178c01468f5e9e14907be8c1305 - Fase2
S3: 03145df632f87f3657c8f36360c1dc9e - Fase3
S4: 3d6e4422977869dcd01dc1fc5e09d447 - Water
S5: 84ccd8cc9b095124677efacd1791f5be - Gas