Open-source repository

Indledning

Open sourced hardware og software:

LIAB ApS har til Energinet.dk udviklet dels en indlejret computer, LIABSG, dels et dataloggersystem til denne. Systemet benyttes i det demonstrationsprojekt, hvor et stort antal varmepumper i private hjem overvåges og styres fra centralt hold. Fra start har der mellem Energinet.dk og LIAB ApS være enighed om, at såvel computerens hardware (dvs. elektronikken i form af diagrammer og printlayouts) og dens software (Linux-system og datalogger) skulle open sources. Målet er, at andre kan få inspiration af og arbejde videre med såvel hardware som software.

Styreboxen hos den enkelte varmepumpeejer:

Den styrebox, der er opsat hos den enkelte varmepumpeejer, er netop bestykket med en LIABSG computer, kombineret med den nævnte
dataloggersoftware. Dette betyder at at hardware og software i forbindelse med måling af temperaturer og energiforbrug samt funktioner til at hente elpriser og vejrprognoser vil blive gjort frit tilgængeligt for eksempelvis varmepumpefabrikanter, så de kan drage umiddelbar nytte af projektets resultater. Ligeledes betyder Open Source i dette projekt, at der stilles et repository til rådighed, som indeholder de kildetekster (source) og build-systemer, der er nødvendige, når man skal udvikle intelligente styringsaloritmer baseret på konkrete varmepumpefabrikater og funktionsbehov. Kombinationen af kildetekster og build-systemer vil i det følgende blive under et blive refereret til som et SDK: Software Development Kit.

Open Source betyder ikke, at de styringsalgoritmer som en projektpartner, en varmepumpefabrikant eller et elhandelsselskab udvikler, behøver at blive gjort frit tilgængelige.

På nedenstående figur ses en skitse af Energinet's dataloggersystem for demonstrationsprojektet:

Som det fremgår af figuren vil den decentralt placerede LIABSG computer opkoble sig til Energinet.dk's server, via en trådet netforbindelse. Her benyttes ofte ADSL linier, idet man simpelthen tilslutter ADSL routeren til Ethernet stikket på LIABSG computeren.

Før installation preloades LIABSG computeren med datalogger- og styringssoftware. Når den er installeret og der tilsluttet strøm vil den efter boot forsøge at komme på Internettet via Ethernet forbindelsen. Opnås der forbindels denne vej oprettes en tunnel fra LIABSG computeren til Energinet's server. Det er derfor ikke nødvendigt at bede varmepumpe ejeren om at åbne specielle porte i routerne.

De forskellige datalogger-applikationer på LIABSG computeren kan konfigureres til at sample analoge og digitale indgange med regelmæssige mellemrum. Data mellemlagres i den interne FLASH på LIABSG computeren for med mellemrum at blive skubbet videre op til den centrale server. På tilsvarende vis kan man fra serveren skubbe data ud til LIABSG computeren som her omsættes til værdier på de analoge og digitale udgange, herved kan varmepumpen styres.

Egentlige styring kan indprogrammeres i LIABSG computeren ved at konfigurere den såkaldte "kontroldæmon".

De indhøstede data kan betragtes på styrdinvarmepumpe.dk. Hver varmepumpe ejer får et login med userid og password, således at han og kun han kan se sine egne data. Eksempel på temperaturkurver for en varmepumpeinstallation er vist nedenfor:

Grundstenen i Energinets datalogger service i form af hardwaredesign og software til kontroldæmonen er blevet lagt på et open source repository med åbne kildetekster. Den open sourcede Linux kode kan hentes på github:

user@host:~$ git://github.com/energinet/datalogger.git

Open sourced Hardware: LIABSG Computeren:

LIABSG er en indlejret ARM baseret Linux computer der produceres af LIAB ApS, den er specieltilpasset dataopsamlings- og styringsopgaver. Konstruktionen består af et CPU-print monteret på et standardiseret datter-print (baseboard), der indeholder alle stikforbindelser.

En LIABSG til Energinet's datalogger service leveres med en standard LIAB Linux distribution og Energinet datalogger præinstalleret.

Processor-board

  • Atmel AT91SAM9260 CPU på 200 MHz
  • 64 MB SDRAM
  • 256 MB NAND Flash
  • USB device port
  • 12 LED (bi-color) / 1 switch
  • Optional GSM/GPRS/EDGE modem

Energinet.dk baseboard:

  • 7-36 VDC SMPS forsyning
  • 10/100 Mbit Ethernet
  • RS-485 interface (til MODBUS trådløse følere)
  • USB 2.0 host
  • RS-232 serielport (kan benyttes som debug)
  • 3 relæer
  • 2 optisk isolerede indgange
  • 6 PT1000 temperaturfølsomme indgange
  • 4 analoge indgange, velegnede til 2 stk. Grundfos MEMS flowmålere

 

Open sourced Software: kontroldæmonen mm:

Grundstenen i Energinets datalogger service i form af hardwaredesign og software til kontroldæmonen er blevet lagt på et open source repository med åbne kildetekster. Den open sourcede Linux kode kan hentes på github:

user@host:~$ git://github.com/energinet/datalogger.git

Byggeguide

For at bygge den open-source datalogger kræves der:

  • En standard Linux 32bit maskine(Ubuntu 10.04 LTS i386 eller nyere)
  • En gcc compiler (Til en LIABSG benyttes en krydscompiler til ARM)
  • Programmet Git - Fast Version Control System

Opsætning af krydscompiler

For at kunne bruge krydscompileren skal den udpakkes det kan evt. være til /opt biblioteket.

user@host:~$ sudo tar xvf crosstool.tar.gz -C /opt/
[sudo] password for skn: <Password tastes>
user@host:~$ echo "PATH=$PATH:/opt/crosstool/gcc-4.0.2-glibc-2.3.6/arm-unknown-linux-gnu/bin/" >> .bashrc

Nu er der hul igennem til krydscompileren, det kan testes ved at skrive:

user@host:~$ arm- <TAB> <TAB>
arm-unknown-linux-gnu-addr2line arm-unknown-linux-gnu-gprof
arm-unknown-linux-gnu-arm arm-unknown-linux-gnu-ld
arm-unknown-linux-gnu-as  arm-unknown-linux-gnu-nm
arm-unknown-linux-gnu-c++ arm-unknown-linux-gnu-objcopy
arm-unknown-linux-gnu-c++filt arm-unknown-linux-gnu-objdump
arm-unknown-linux-gnu-cpp arm-unknown-linux-gnu-ranlib
arm-unknown-linux-gnu-g++ arm-unknown-linux-gnu-readelf
arm-unknown-linux-gnu-gcc arm-unknown-linux-gnu-size
arm-unknown-linux-gnu-gcc-4.0.2 arm-unknown-linux-gnu-strings
arm-unknown-linux-gnu-gccbug  arm-unknown-linux-gnu-strip
arm-unknown-linux-gnu-gcov

Hentning af kildekoden fra github

Til at hente kildekoden fra github skal programmet Git bruges.

user@host:~$ git clone git://github.com/energinet/datalogger.git
user@host:~$ cd datalogger
user@host:~/datalogger$ ls
aeeprom  cmddb     doxdoc      logdb     socketmod    xmlparser
asocket  contdaem  db-module  en_modules  Makefile  templatemod

Kildekoden er hentet og computeren konfigueret...

Bygning af kildekode

Sådan som bygge systemet er lavet kan man bygge det hele på engang

user@host:~/datalogger$ make <TAB> <TAB>
aeeprom-clean                   expat-2.0.1.tar.gz
aeeprom-distclean               expat-clean
aeeprom-mk                      expat-distclean
all                             expat-mk
asocket-clean                   logdb-clean
asocket-distclean               logdb-distclean
asocket-mk                      logdb-mk
clean                           Makefile
cmddb-clean                     socketmod-clean
cmddb-distclean                 socketmod-distclean
cmddb-mk                        socketmod-mk
contdaem-clean                  sqlite
contdaem-distclean              sqlite-autoconf-3070603.tar.gz
contdaem-mk                     sqlite-clean
db-local-clean                  sqlite-distclean
db-local-distclean              sqlite-mk
db-local-mk                     subapps
db-module-clean                 sublibs
db-module-distclean             tar
db-module-mk                    templatemod-clean
deviceroot                      templatemod-distclean
distclean                       templatemod-mk
en_modules-clean                xmlparser-clean
en_modules-distclean            xmlparser-distclean
en_modules-mk                   xmlparser-mk
expat

Her kan der så ses en oversigt over de moduler der kan bygges. For at bygge hele systemet skrives der:

user@host:~/datalogger$ make all

Når make processen er udført vil der blive genereret en tar bold kaldet:

contdaem.tar.gz

den tarbold skal pakkes ud i roden på LIABSG'en

root@liab# tar xvf contdaem.tar.gz -C /

For at contdaem kan startes skal der lægges en contdaem.conf ind i /etc biblioteket, der kan findes et eksempel på sådan en i den hentede kildekode. (contdaem/xmlfiles/contdaem_example.conf)

Moduloversigt

Oversigt over de væsentligste moduler til dataloggeren.

Kontroldæmon (Contdaem)

Kontroldæmonen består af hovedprogrammet og nogle få moduler. Konfigurationen for programmet er kontrollleret via en konfigurations fil. Konfigurations filen består af en XML beskrivelse af modulerne der skal indlæses.

Blokdiagram af dataloggeren og kontroldæmonen.

contdaem.conf
Konfigurationen er en XML fil der beskriver alle modulerne der skal indlæses. Filen er struktureret med <modules> sektioner der indeholder en liste af modul tags, der hver især laver et modul. Her er et eksempel af en XML structur: </modules>

<modules>
     <module type="type_name" name="module_name" custom_attribute="value">
       <custom_tag attribute1="text" attribute2="10" />
     </module>
   </modules>

type_name er navnet på modulet og module_name er navnet på modulet som andre moduler bruger som reference til modulet. Et modul kan have "custom" tags og attributter. Modulerne er indlæst sekventielt og kan kun abonnere på event typer der tidligere et beskrevet i XML konfigurationen.

XML tags til et basis modul:

  • name: Modul navn [obligatorisk]
  • type: Modul type navn [obligatorisk]
  • verbose: Informativ debug [valgfri]
  • flags: Event flag [valgfri]

Et modul kan have "custom" tags. Mange af disse tags henviser til en event type. Hvis tagget laver et nyt event, vil disse tags være konfigurere bare.

  • text: Tekst som bliver vist til brugeren enten i grafen eller i event listen. [valgfri]
  • unit: Enhedsnavn, det kunne være en SI enhed, V, W, bar... [valgfri]
  • name: Kort navn, som reference til typen. [obligatorisk]
  • flags: Event flag [valgfri]

Et modul kan både abonnere og sende events. På den måde kan moduler og event typer kædes sammen, som det ses herunder:

Herunder er der en liste med moduler der er inkluderet i contdaem. Hvis skal bruges en mere detalieret guide til modulerne så er der lavet kode til doxygen.

Calcaccumulate

Modul til at udregne gennemsnit og summen af events for et givet interval.

Keyinput

Modul til at håndtere key inputs, såsom /dev/input/event0 (S0 pulser).

Ledpanel

Modul til at styre lysdioderne på fronten af en LIABSG boks.

Readfile

Modul til at læse fra char devices i /dev eks. /dev/adc00

Relay

Modul til styring af relæerne på LIABSG baseboarded.

Sysinf

Modul til at læse system info, ramforbrug, diskforbrug osv.

Threshold

Modul til kontrol af tærskel værdier.

Waterpower

Modulet udregner energien der er strømmet igennem røret, via 2 temperaturer og flowet.

Eeprom (Aeeprom)

Bibliotek der bruges til at læse og skrive fra eeprom'en på LIABSG'en. I Energinet dataloggeren bruges eeprom'en til at indholde kalibreringsdata for temperaturføleren.

Cmddb

Kommando interface, man kan sætte en kommando i kø fx et relæ der skal klikke efter 1 min.

Db-module

Database logger modulet, den benytter Logdb til at skrive i sqlite databasen på LIABSG'en.

Socketmod

Bruger biblioteket Asocket til at kontroldæmon(contdaemutil) værktøjet kan oprette en socket forbindelse til kontroldæmonen(contdaem).

Xmlparser

Bruger expat biblioteket til at læse konfigurationsfilen(contdaem.conf) som er skrevet i XML.

Templatemod

Under denne folder findes der forskellige skabeloner til moduler.

templatemod.c

Et helt skrallet modul, hvor der er prototyper på de obligatoriske funktioner.

simplesendeventmod.c

Dette modul er et eksempel på hvordan der skal sendes et event videre til et andet modul.

midisthresholdmod.c

Dette er et eksempel på hvordan man kan lave et modul, hvor man definere en tærskel værdi. Der bliver så sendt et alarm event videre i systemet, hvis tærskelen overskrides.

VedhæftningStørrelse
liabsg-energinet-baseboard_schematic.pdf153.58 kB
liabsg-cpuboard_schematic.pdf222.92 kB