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

What to do when grub os-prober fails to detect Windows

  1. Find out your Windows partitions UUID
    $ sudo blkid /dev/sda2
  2. Add a custom entry to /etc/grub.d/40_custom
    menuentry "Windows" --class windows --class os {
       insmod ntfs
       search --no-floppy --set=root --fs-uuid <UUID>
       ntldr /bootmgr
    }

    Replace <UUID> with UUID in step 1.

  3. Update your grub config
    $ sudo update-grub
    
    or
    
    $ sudo grub-mkconfig > /boot/grub/grub.cfg

Postfix byta ut trasig avsändaradress i mailkö

Så, jag, erhm, ”glömde” ändra avsändaradress på en av våra servrar häromdagen vilket resulterade i en massa post på e-postservern som lagda på kö eftersom avsändande domän inte existerade. Här är hur jag ordnade det.

Först, skapade jag en map fil där du anger den adressen du vill byta ut mot den korrekta adressen som så:

vim /etc/postfix/sender_canonical
sender@oldomain.nx  sender@newexistingdomain.com

kör

postmap /etc/postfix/sender_canonical

lägg sedan till följande i /etc/postfix/main.cf

sender_canonical_maps = hash:/etc/postfix/sender_canonical

efter det, ladda om postfix

service postfix reload

köa om alla köade mail (eller använd -i för att köa om ett specifict id)

postqueue -f

sen kan du flusha kön om du inte vill vänta

postfix flush

och det var det! Nu kommer alla mail som hade den felaktiga avsändardomänen skickas iväg!

Spara/återskapa körande Vagrant burkar vid avstängning/uppstart

Ett simpelt script som avslutar körande Vagrant burkar vid avstängning av din dator.

#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          something warm and fuzzy 
# Required-Start:    vboxdrv
# Required-Stop:     vboxdrv
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts suspended vagrant boxes and suspends running vagrant boxes
# Description:       
### END INIT INFO

# presumably only users with valid login shells are running vagrant boxes
validShells=$(cat /etc/shells | grep -v "#" | sed ':a;N;$!ba;s/\n/|/g')
userList=$(grep -E "$validShells" /etc/passwd | awk -F ':' ' { print $1 } ' | tr "\\n" " ")

case $1 in
  start)
    # loop thru every user
    for user in $userList; do
      # loop thru users suspended boxes
      for vm in $(su -c "vagrant global-status" $user 2>/dev/null | grep saved | awk ' { print $5 } '); do
        cd $vm >/dev/null
        su -c "vagrant up" $user
        su -c "vagrant status" $user > /dev/null # update global-status cache
      done
    done
  ;;
  stop)
    for user in $userList; do
      for vm in $(su -c "vagrant global-status" $user 2>/dev/null | grep running | awk ' { print $5 } '); do
        cd $vm > /dev/null
        su -c "vagrant suspend" $user
        su -c "vagrant status" $user > /dev/null # update global-status cache
      done
    done
  ;;
  status)
    for user in $userList; do
      echo "$user's vagrant box status"
      echo "------------------------------------------------------------------------"
      su -c "vagrant global-status 2> /dev/null" $user
      echo
      echo
    done
  ;;
  *)
    echo "Usage: $0 {start|stop|status}" >&2
    exit 1
  ;;
esac

exit 0

Installera med:

Redigera /etc/init.d/vagrant-boxes och klistra in ovanstående (eller ladda ner filen här). Sen kör du:

# update-rc.d vagrant-boxes defaults 99 01

99 är sekvensnumret, måste vara högre än det du har för Virtualbox (som använder 20, vilket är standard). Fungerar det exempelvis att spara boxarna vid avstängning men de inte startas igen vid start, dubbelkolla denna siffran. Andra siffran är i vilken ordning när du stänger av datorn, så 01 betyder att det är det första den gör (vilket kan vara bra).

LibreOffice blanka utskrifter

Fick en kvart över på jobbet (läs 45 minuter) att ta tag i ett problem jag haft länge; nämligen att det inte gick att skriva ut från något av LibreOffice programmen.

Problemet yttrade sig i att utskriften startade, men inget kom ut förutom en blank sida. Körde man testsidor i CUPS skrev den ut och andra program fungerade finemang.

Lösningen på problemet fram till nu har varit att först skapa en PDF i LibreOffice och sen skriva ut den med Okular i KDE. Extremt bökigt, men eftersom jag så sälla skriver ut något har jag levt med det.

Ända tills… jag bytte skrivarspråk i LibreOffice från PDF till PostScript Nivå 3.

Kruxet är att du måste göra det som admin genom att köra:

sudo /usr/lib/libreoffice/program/spadmin

annars måste du ändra skrivarinställningar för varje dokument du vill skriva ut.

spadmin

Lås upp dina SSH nycklar när du loggar in i KDE

Ett smart sätt att hantera dina SSH nycklar är att låsa upp dom när du loggar in på din dator.

Om du känner dig modig, kan du använda KDE wallet i symfoni med ssh-agent och lagra ditt lösenord för att låsa upp dina SSH-nycklar i KDE wallet och på så vis låsa upp dina nycklar när du loggar in på din dator.

Givetvis går detta att göra med andra skrivbordsmiljöer, men beskrivningen här är för KDE och borde fungera på alla Ubuntu distributioner.

Om du inte redan har en ssh nyckel med lösenord, börja med att generera en sådan.

[ogg@intel ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ogg/.ssh/id_rsa):
Created directory '/home/ogg/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ogg/.ssh/id_rsa.
Your public key has been saved in /home/ogg/.ssh/id_rsa.pub.
The key fingerprint is:
da:ln:ix:ge:ek:sf:or:hi:re:ca:ll:02:43:24:95:00 ogg@intel
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|    :::::::::    |
|    :+:    :+:   |
|    +:+    +:+   |
|    +#+    +:+   |
|    +#+    +#+   |
|    #+#    #+#   |
|    #########    |
|                 |
+-----------------+

Skriv ett riktigt bra krångligt lösenord.

När du är klar med det, installera ksshaskpass

apt-get install ksshaskpass

Efter det skapar vi ett litet script som kör ksskaskpass vid inloggning:

cat >~/.kde/Autostart/ssh-add.sh <<_EOT_
#!/bin/sh
export SSH_ASKPASS=/usr/bin/ksshaskpass
ssh-add </dev/null
_EOT_
chmod +x ~/.kde/Autostart/ssh-add.sh

Klart!

Logga ur KDE, logga in igen, ksskaskpass kommer ploppa upp och be dig låsa upp din nyckel, bockar du i ”Spara lösenord” så sparas det i din KDE wallet och du behöver aldrig mera skriva in ditt lösenord för att låsa upp din SSH nyckel utan den låses upp när du loggar in i KDE.

UTF-8 FreeBSD

Efter att ha kört Linux sen -94 har jag börjat prova lite mer FreeBSD.

Här följer info hur man får fart på UTF-8 och svenska tecken när du ssh:ar till din burk.

vi /etc/login.conf

lägg till:

swedish|Swedish Users Accounts:\
:charset=UTF-8:\
:lang=en_US.UTF-8:\
:tc=default:

spara, sen kör:

# cap_mkdb /etc/login.conf

sen lägger du till ”swedish” för din/de användare som skall ha det med:

# vipw

exempel:

bengt:$6$5dOZCAFvAFTAeKoU$E58SIMb9YWuuCVNUcb73cTm7y8JV33klhPgVNEH3EjMkp2K3V/NgKZjeMXvrQU294FdhgzG0UAos2HXIHgAIQ.:1000:1000:swedish:0:0:Bengt Bengtsson:/home/bengt:/bin/sh

Eclipse Shortcuts OS X

Mer frustration.

Provade först ändra ”Programkortkommandon” för att få till typ SHIFT DELETE för att kopiera, SHIFT INSERT för att klistra in osv etc. Men, det visade sig bara fungera fram till jag försökte mappa om Undo och Redo i Eclipse.

Insåg det inte själv först, men tydligen så använder jag oftare SHIFT+DELETE, CTRL/SHIFT+INSERT än CTRL-X/C/V.

Efter att ha svurit lite för mig själv upptäckte jag att Eclipse själv har en rätt kompetent kortkommando lista och lyckades få till alla kommandon (iaf de jag använder mest) att fungera som i Linux.

Filen finns att hämta här.

Olle Swedish

Började köra OS X på burken på jobbet och slutade med att köpa hårdvara för att bygga en Hackintosh att ha hemma också.

Eftersom jag numer spenderar dagarna att programmera var det minst sagt frustrerande att vänja sig vid Mac’s (enligt mig, men säkert jättelogiska om man pratar med nån Apple fanboy) mystiska keyboard layout.

Till saken hör att när jag programmerar på jobbet kör jag med ett Das Keyboard, utan tecken, helt svart alltså. Som det ska va. För jag har inte tittat på tangentbordet när jag skriver sen, ja, evigheter.

Hursomhelst. Har lyckats skapa en layout som iaf har ! ” # % & / ( ) = ? ` ´ @ £ $ { [ ] } \ < och > på ”rätt” ställe. Vilket kan va bra när man programmerar.

Det jag saknar nu är bara typ att kunna typ hoppa mellan ord genom att hålla nere CTRL och sen höger/vänster och trycka CTRL HOME/END för att gå längst upp/ner.

Men, programmeringen går iaf lite bättre när måsvingarna är på rätt ställe.

Ladda ner, packa upp till ~/Library/Keyboard Layouts/, ställ in under ”System Inställningar”, ”Tangentbord” och ”Inmatningskällor”. Sen kan du söka på ”Olle Swedish” och kryssa i.

Nuff said, start coding!