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æftning | Størrelse |
---|---|
liabsg-energinet-baseboard_schematic.pdf | 153.58 kB |
liabsg-cpuboard_schematic.pdf | 222.92 kB |