Logga elförbrukning på ett lite annorlunda sätt

Alla sätt är bra utom de dåliga, eller?

Nedan finner ni ett litet knasigt exempel hur man kan logga data från en mätare utan möjlighet för extern avläsning annat än att titta på den med gluggarna man har i huvudet. Kan dock bli lite tråkigt i längden, så varför inte automatisera det hela lite.

Ingredienser

Vad jag använder mig av är 1 liten hård sak (kameratelefon), 1 stor hård sak (dator som kör FreeBSD) samt 4 mjuka saker:

  • En utdömd mobiltelefon med shysst kamera (en Nexus 5X i mitt fall (men den första prototypen använde jag en Nexus 7, funkade minst lika bra, dock lite klumpig och stor). Huvudsaken är att den kör Android.
  • En android app som heter IP Webcam Pro (kostar en dryg tjuga men det finns även en gratisvariant för extrema snåljåpar).
  • imagemagick – för att manipulera bilden lite innan jag läser den med ssocr.
  • ssocr – OCR mjukvara specifikt utvecklad för att läsa av displayer.
  • En dator som kör ett vettigt operativsystem, jag kör FreeBSD och för en gångs skull fanns ssocr i repot.

Nexus 5X

Bra telefon. Kanske lite overkill, men kollegan som köper ny telefon oftare än jag köper nya kalsonger (kanske även byter) hade en över med kasst batteri.

Går nog att få tag på en bättre begagnad kameratelefon för en 50-lapp och uppåt om man letar lite.

IP Webcam Pro

Kompetent liten app som gör din android enhet till en fullfjädrad webcam. Programmet har stöd för live video. Kan med några tillägg också själv ta kort och skicka upp ex. filer till en server. Inget jag använde mig av då det även har stöd att ta kort med curl. Pluspoäng på det. I mitt fall använder jag mig av den odokumenterade(?) URL:en http://x.x.x.x:8080/photoaf.jpg som gör att blixten fungerar och jag antar också kör autofocus.

Köp appen här eller om du är snål

ImageMagick

Gammal goding som kan allt. Eller varför inte prova fork:en GraphicsMagick.

Om jag ska vara ärlig så borde egentligen ssocr klara biffen utan bildmanipulation. Men, eftersom jag började pilla med att få till en bra bild till alla andra OCR program jag provade innan, och då lämpade sig ImageMagick bra.

ImageMagickGraphicsMagick

ssocr

Varför ssocr och inget annat OCR program? Provade ett par innan, tog alldeles för lång tid att få fart på dom. Hittade ssocr som verkade vara skrivet precis för att lösa mitt problem, funkade på en gång.

Källkod finns på GitHub

En dator

Mer cpu desto bättre. Har inte provat köra imagemagick med en massa filter på en raspberry pi, men det går säkert alldeles utmärkt om man kan leva med att det tar 15 sekunder att manipulera varje kort.

Förslag på lämplig dator

Prototyp 1

Nexus 7 hängandes i en hängsnara gjord av Cat6-kabel. Kanske inte världens mest stabila montering, men den fungerade.

Nexus 7:an saknar dock blixt på kameran; så den var värdelös i mörker.

Prototyp 2

Något stabilare upphängning gjord av en överbliven hyllkonsoll från IKEA, en Gorilla Pod knockoff från Kina och ett universal fäste med 1/4″ gäng.

Drog ett par skruv i taket bara och hängde upp skiten. Bor i ett gammalt hus med orenoverad källare, spelar mindre roll hur det ser ut =D.

Exempel på bildmanipulerings flöde

Ta ett kort

Börjar med att ta ett nytt kort. Som jag skrev tidigare, använder photoaf.jpg för att få blixten att fungera med IP Webcam Pro.

curl -s http://x.x.x.x:8080/photoaf.jpg -o original.jpg

Beskär bilden

Efter det så croppar jag bilden med ImageMagicks convert kommando.

convert original.jpg -crop 845x200+1710+1848 crop.jpg

Öka kontrasten

När det är klart ökar jag kontrasten en smula. ”Pris för stiligaste cli kommandot går 2017 till….”

convert crop.jpg +contrast +contrast +contrast +contrast +contrast +contrast +contrast +contrast +contrast +contrast level.png

Konvertera till svart/vitt

För att få tydligare siffror för ssocr, gör om till svartvitt.

convert level.png -threshold 42% threshold.gif

Skala om bilden

Av nån anledning så funkade ssocr nästan utan tweaks bäst med en bildstorlek som var ungefär lika som deras exempel. Så, skalar om bilden innan ssocr för göra sitt.

convert -resize 230 threshold.gif resize.png

Och till sist: gör om bilden till text med ssocr

ssocr -d 7 -t 10 resize.png
0077941

Voilá. Sen är det bara att logga på. Jag kör en gång var 15:e minut.

Efter att ha kört ett nästan ett dygn, så verkar jag göra av med strax under 1kWh per timme när jag kör pelletsbrännaren. Inte en blekaste om det är mkt eller lite; men det ska bli intressant att se hur väder/vind/utetemperatur och knasiga manicker som tar kort på elmätaren 4 gånger i timmen, påverkar elförbrukningen framöver.

Flashing in the dark

Use dnsmasq to resolve tld

When I develop webstuff, I sometimes use a vagrant box for the development. This is how I use dnsmasq to resolve all domains ending with <insert tld here> to one and the same IP (be it your local IP or that of, in my case, a vagrant box).

First. Install dnsmasq.

/etc/dnsmasq.conf

# listen only to this IP
listen-address=127.0.0.1

# file with dns servers
resolv-file=/etc/resolv.dnsmasq.conf

# resolve all .app tlds to this IP
address=/.app/192.168.10.10

/etc/resolv.dnsmasq.conf

Using this, you can use more than three servers (in Linux the max is 3, see /usr/include/resolv.h).

nameserver 10.0.0.47
nameserver 8.8.8.8
nameserver 8.8.4.4

/etc/resolv.conf

And finally use your dnsmasq server in your resolv.conf file.

nameserver 127.0.0.1

Whitelist senders in amavis

If you scan your outgoing mail, there may be times you don’t want check for spam on outgoing mail from a specific adress.

In that case, create a file listing the adresses you wish to whitelist, eg. /etc/amavisd.whitelist.

Then add the following rule to your amavisd.conf file.

read_hash(\%whitelist_sender, '/etc/amavisd.whitelist');
@whitelist_sender_maps = (\%whitelist_sender);

$interface_policy{'10026'} = 'VIRUSONLY';
$policy_bank{'VIRUSONLY'} = { # mail from the pickup daemon
 bypass_spam_checks_maps => ['@whitelist_sender_maps'], # don't spam-check this mail
 bypass_banned_checks_maps => ['@whitelist_sender_maps'], # don't banned-check this mail
 bypass_header_checks_maps => ['@whitelist_sender_maps'], # don't header-check this mail
};

The result being that you get virus checks but no spam checking. The headers are still added but look like:

X-Virus-Scanned: amavisd-new at mail.mrrobot.com
X-Spam-Flag: NO
X-Spam-Score: 0
X-Spam-Level:
X-Spam-Status: No, score=x required=6.2 WHITELISTED tests=[]
	autolearn=unavailable

and not like before

X-Virus-Scanned: amavisd-new at mail.mrrobot.com
X-Spam-Flag: YES
X-Spam-Score: 7.025
X-Spam-Level: *******
X-Spam-Status: Yes, score=7.025 required=6.2 tests=[BAYES_40=-0.001,
	DNS_FROM_AHBL_RHSBL=2.699, FSL_HELO_NON_FQDN_1=0.001,
	HELO_LOCALHOST=3.828, MISSING_MID=0.497, RCVD_IN_SORBS_DUL=0.001]
	autolearn=no

Tested on amavisd-new-2.8.0.

Proxmox with SPICE

To use the new SPICE feature in Proxmox 3.1, you need to install a newer version of virt-viewer. At least on Ubuntu 13.04 the version I had, was to old. To remedy this I added this PPA:

sudo apt-add-repository ppa:dnjl/virtualization
sudo apt-get install virt-viewer