11 apr

Kommentarer lukket til Besøg på kommandoposten i Langå

Besøg på kommandoposten i Langå

Af

Efter den sidste tids mange skriverier om det ny signalsystem ERTMS tænkte vi (dvs. Georg) at det kunne være interessant at se et af de gamle signalsystemer, mens de stadig var i drift. Georg kontaktede Banedanmark og fik arrangeret et besøg i Langå, hvor der findes et anlæg af typen 12/46 (navnet skyldes at den oprindelige model er fra 1912, og er opdateret i 1946).

Anlægget er elektromekanisk, dvs. der er en række betjeningsknapper og et sindrigt system af metalstænger, der forhindrer at man kan sætte knapperne i en ikke-tilladt position. Oven på dette mekaniske system er der så et system af relæer der laver yderlige checks.

Man kan læse meget mere om denne og andre typer af anlæg i http://www.jernbanearkivalier.dk/dsb-sikring/DSB-vejl-stations-og-strkn-sikrings-anl-1919.pdf (omkring side 200).

Håndtagene som bruges til at indstille skiftespor og signaler.

Forklaring af de såkaldte tableauer.

Stængerne som udgør den mekaniske logik.


Tavlen som viser hvor togene er osv. Ved siden af tavlen står en æske med reservepærer.

Tavle med sikringer og regulatorer.
I rummet under tavlen er der nogle få kabler.
… og flere kabler.
Et multistik.

Gemt under: Projekter

25 mar

0 Comments

Sniffing Philips Hue Zigbee traffic with Wireshark

Af

I have a Philips Hue gateway at home that is connected to a number of Philips Hue lights, as well as some IKEA trådfri light bulbs, and a couple of OSRAM Lightify light strips. Most of the time the network works quite well, but some of the time a few of the lights become unreachable. I read a rumor online that the Hue lights and the other lights are actually on two different Zigbee networks. Of course, if only I had a way of sniffing the Zigbee traffic I could diagnose these problems. And thus began this quest.

USB TI CC2531 Zigbee sniffer dongle.

I started by buying a Zigbee sniffer, I found that the Texas Instruments CC2531 chip is widely used, and available in a cheap USB package. I purchased this USB CC2531 Zigbee sniffer, but others are probably equally good. After the dongle arrived I spent quite a while thinking that I need to replace the stock firmware, because of various old projects on GitHub (Sensniff, ccsniffpiper, etc.). Fortunately, you do not need to change the stock firmware. The best software package seems to be KillerBee which supports both sniffing and injection; however only sniffing with the CC2531. Installing KillerBee on Ubuntu is quite easy. You need to install scapy, and a few dependencies. The installation instructions are probably more up to date than this blog post.

Starting the sniffing is really easy, if you know the channel the Philips Hue is operating at. I think channel 11 is the default, but it is displayed in the Hue app, under info for the bridge:

sudo zbwireshark -c 11

This will launch a background process, and an instance of Wireshark that is monitoring the channel. At this point you can see the traffic; but everything is encrypted…

Encryption… Encryption everywhere!

A very incomplete intro to Zigbee encryption

Zigbee traffic can be encrypted with AES-128, which is a symmetric encryption scheme. This means the key to encrypt and decrypt is the same. There is a number of keys that can be used to encrypt a single packet payload:

  1. The Network Key, which is unique to this Zigbee network. This is what we will ultimately need to find. It is generated by the gateway, and shared by all the devices on the network. How does a new device join the network then? It uses the…
  2. The Key-Transport Key which is a pre-shared secret. Apparently there is a number of these, depending on the class of devices and type of network. These are apparently a well-kept secret or something, although widely available on the internet:
    1. “default global trust center link key” which is 5A:69:67:42:65:65:41:6C:6C:69:61:6E:63:65:30:39
    2. “light link master key” which is 9F:55:95:F1:02:57:C8:A4:69:CB:F4:2B:C9:3F:EE:31
    3. “light link commissioning key” which is 81:42:86:86:5D:C1:C8:B2:C8:CB:C5:2E:5D:65:D1:B8

You can add these keys to Wireshark, and the Zigbee dissector will then try to decrypt traffic using them. Go to Edit -> Preferences -> Protocols -> ZigBee and edit the pre-configured keys:

The Key-Transport Key is used whenever a new device joins the network with the sole purpose of encrypting the network key. So, to find the network key we need to know the Key-Transport Key, and observe the traffic when a device joins. So this is what I did: I found an IKEA Trådfri lightbulb and spent the frustrating time needed to get it to join the Philips Hue gateway (resetting the bulb, searching for new lights). Finally, it suceeded!

Hitting gold!

Now, by adding the transport key to the list of keys in Wireshark all the traffic on the network was able to be decrypted!

Decrypted traffic

The next step will be to analyze the traffic, and understand the routing. Very initial probes using zigbee-viewer indicates that there is indeed three distinct routings:

Zigbee routing.

Gemt under: Extern, HAL9k

Tags:

14 feb

Kommentarer lukket til Renovering af Huvema fræser

Renovering af Huvema fræser

Af

For nogen tid siden opdagede vi at vores Huvema fræser ikke kunne køre på lav hastighed. Anders undersøgte problemet, og det viste sig at være en knækket ledning. Han lavede et hurtigt fix med en ekstra ledning, men bestemte sig hurtigt for at det var en god undskyldning for at skille det hele ad og lave det ordentligt. Så lige nu er maskinen splittet ad, og hele styretavlen bliver skilt ad og bygget op igen.

Skilt ad

Gemt under: Projekter

01 feb

0 Comments

Dør jeg af partikelforurening fra min moderne brændeovn?

Af

Vi har en fin moderne brændeovn derhjemme (en Aduro 1-2), som vi bruger ret intensivt til opvarmning af vores gamle stuehus. Et meget relevant spørgsmål er derfor: hvor meget bidrager sådan en moderne brændeovn til partikelforureningen i vores stue?

Partikelforurening er små partikler af støv og sod, der bl.a. fremkommer ved afbrænding af fossile brændsler, som olie og træ. De kan forårsage forskellige slags sundhedsproblemer, bl.a. kræft. På et interaktivt partikelkort kan man se hvilke niveauer der (beregnet) var i Danmark i 2012, og f.x. forskellen mellem land og by; årsgennemsnittet for PM2.5 lå på 5.3 – 11.9 μg/m3.

Det er et ganske egoistisk projekt jeg har gang i: jeg har ingen data for hvor stor partikelforureningen er udenfor huset, men kun inde i selve stuen. Der er en del kilder til partikelforurening som jeg kender til, eller har observeret:

  • Vi har et pillefyr, der står i nærheden, der også kører i den kolde tid
  • Vi bor i kort afstand fra en lettere befærdet vej
  • Madlavning, specielt med en gammel emhætte, kan bidrage betydeligt
  • Den generelle baggrundsvariation kan være betydelig

For at undersøge det har jeg opsat en partikel sensor (en Honeywell HPMA-1150S0) i stuen, ca. 3 m fra brændeovnen. Samtidig registrerer jeg brændeovnens temperatur, via en Aduro Smart Response sensor. Dette har jeg nu gjort i lidt over et år, og kan dermed lave en data analyse på et års data.

Til brug for analysen er der registreret PM10 og PM2.5 værdier, ifølge databladet i μg/m3. Sensoren skulle desuden være “fully calibrated”, og kunne køre i mindst 20.000 timer, så et års data burde man kunne stole på. Usikkerheden er dog angivet til +/- 15 μg/m3, eller +/-15% alt efter målingen; i praksis virker den dog til at være ret stabil i værdierne. Sensoren beregner PM10 værdier ud fra PM2.5 værdier, så jeg vil primært fokusere på analyse af PM2.5 værdierne. Data er optaget med et interval på 5 minutter, men med sensor læsninger ca. hvert 6 sekund der så er aggregeret ved gennemsnit (Der er brugt HPMA-1150S0 sensorens “auto-send”).

Sensoren opfanger partikler mindre end 2.5 μg med en laser.

Brændeovnens temperatur er målt som foreskrevet af Aduro Smart Response, dvs. i den øvre del af brændkammeret på vej mod røgrøret. Aduro sensoren sender data i ca. 4 timer. Jeg har defineret at brændeovnen er i brug, hvis temperaturen er registreret, dvs. afkøling også er talt med.

Data der er opsamlet er bl.a. PM10, PM2.5, brændeovnens temperatur, og strømforbrug på de 3 faser.

Vi bruger vores brændeovn en hel del i de kolde måneder. Faktisk helt op til halvdelen af tiden:

Det passer meget godt med at vi bruger brændeovnen næsten alt tid vi er hjemme, i de kolde måneder.

Vi tænder op efter forskrifterne og bedste evne; genindfyring sker typisk ved 175C eller 150C ved at lægge 2-3 stykker brænde ind, og åbne spjældet (der så ved Adurotronic lukker over ca. 6 minutter). Der er naturligvis stor variation i præcis hvornår der lige bliver genindfyret. Og en sjælden gang imellem glipper optændingen, og giver røg i stuen. Men generelt opleves fyringen som ganske uproblematisk.

Gennem året har jeg lavet lidt observationer, og min subjektive vurdering for partikelforureningen er ca.:

  • Der er normalt meget lille partikelforurening, 2-3 μg/m3
  • Ved god optænding stiger forureningen med 1-2 μg/m3
  • I nogle perioder er baggrundsforureningen højere, lige under 20 μg/m3
  • Ved uheldig opførsel stiger partikelforureningen drastisk – helt op til 900 μg/m3; det kan f.x. være ved dårlig optænding, eller ved madlavning.

Målinger

PM2.5 koncentrationer, ifht. årets måneder.

Som det kan ses er der en del variation imellem månederne. Der er også en hel del outliers, der trækker gennemsnittet op, mens medianen for alle måneder ligger under 5 μg/m3.

PM2.5 koncentrationer, ifht. brændeovnens temperatur; røde cirkler angiver gennemsnit, rød linje angiver kubisk tendenslinje.

Mere interessant er det om partikelforureningen påvirkes af brændeovnens temperatur, og dermed dens brug. Det ser det bestemt ud til! Selvom median værdierne ikke stiger meget stiger specielt 3. kvartil. Gennemsnitsværdierne stiger også, helt op til 12.37 μg/mfor intervallet [250, 300). En tolkning af dette kunne være at der normalt (median) ikke er ret meget mere partikelforurening, men det sker hyppigere at der er store koncentrationer til stede.

Det bør noteres at der ikke er særlig mange målinger over 350C, som det kan ses af histogrammet for hvilke brændeovnstemperaturer der er registreret:

Fejlkilder

Der er et par fejlkilder i målingerne:

  • Der mangler en uges data i september, hvor en strømforsyning stod af mens vi var på ferie.
  • Partikelsensoren giver nogle meget højere målinger i et enkelt punkt, engang imellem. Checksummen fra sensoren ser ud til at passe, så hvad præcist problemet er ved jeg ikke. Jeg har først filtreret åbenlyst forkerte målinger (<0 eller >1000) fra i databehandlingen, men pga. gennemsnittet over de 5 min kan nogle åbenlyst forkerte målinger stadig være talt med.
  • Brændeovnssensor har nok manglet batteri en dag eller to, det kan jeg ikke helt huske.

Analyse

PM2.5
Årligt gennemsnit5.44 μg/m3
– Årligt gennemsnit, brændeovn i brug9.28 μg/m3
– Årligt gennemsnit, brændeovn ikke i brug4.49 μg/m3

Alle værdier er under EU’s grænseværdi, på 25 μg/m3 PM2.5. Hvis vi antager at målingerne mens brændeovnen ikke er i brug er repræsentative for hele året, så har brændeovnen bidraget med 0.95 μg/m3 PM2.5 til års gennemsnittet.

Hvor farligt er det så?

Et studie fra 2013 af sammenhængen mellem partikelforurening og lungekræft fandt (eftersigende, jeg har ikke adgang til artiklen men kun til resuméet på Videnskab.dk) at selv små stigninger i partikelforurening giver øget risiko for lungekræft.

For småkornet luftforurening [PM2.5] stiger risikoen for lungekræft med 18 procent per fem ekstra mikrogram svævestøv, men det resultat var ikke statistisk signifikant. Det var alle resultaterne for risikostigning under det tilladte niveau heller ikke.

Videnskab.dk: Små mængder forurening øger faren for kræft

Hvis vi antager at det resultat holder, og at virkningen er lineær, vil den øgede forurening på 0.95 μg/m3 PM2.5 øge risikoen for lungekræft med 3.42%.

Enkeltstående tilfælde

Et andet problem kunne være hvis enkeltstående tilfælde af høj luftforurening var specielt sundhedsskadeligt, som indikeret af at EU for PM10 også har en daglig grænseværdi (50 μg/m3), og et antal tilladte overskridelser per år (35). Der er 0 dage hvor den daglige PM10 grænseværdi har været overskredet. Jeg har alligevel analyseret de 35 dage med det højeste gennemsnit, og forsøgt at klassificere de årsager (primær og sekundære) til de høje værdier. Det har jeg gjort ved at kigge på brændeovnstemperaturen, strømforbruget, tidspunket på dagen, osv. Disse tal må derfor siges at være min subjektive vurdering.

Primær årsagSekundær årsag
Madlavning193
Baggrund111
Brændeovn315
Ukendt20

De primære årsager til høje målinger ser ud til at være madlaving og baggrund, mens brændeovnen bidrager til halvdelen af de høje dagsgennemsnit.

Konklusion

Vores moderne brændeovn bidrager med 0.95 μg/m3 PM2.5 til års gennemsnittet, og øger dermed vores risiko for lungekræft med 3.42%. Hvis vi f.x. flyttede til en større by som København ville vi opleve en væsentlig højere forøgelse til måske 10 μg/m3, ifølge modelberegningen, hvilket ville øge risikoen for lungekræft med 16%.

Hvis man ser på PM2.5 koncentrationer ifht. brændeovnens temperatur, ser det ud til at brændeovnen for det meste (målt på medianen) ikke udleder ret mange partikler, men bidrager til at høje forureningskoncentrationer optræder oftere (som set på de øgede gennemsnitsværdier, og forøgede 3. kvartil).

Brændeovnen bidrager til 18 af de 35 højeste dagsmålinger, mens de primære årsager til høje dagsmålinger er madlavning og baggrundsforurening.

Gemt under: Extern, HAL9k

Tags: ,

13 dec

Kommentarer lukket til Det nye træværksted

Det nye træværksted

Af

Når man driver et hackerspace, kan man altid bruge mere plads så man kan have endnu mere udstyr og værktøj. Vi bor i lokaler, som kommunen stiller til rådighed, og hele bygningen er i brug af forskellige foreninger. Der så derfor ikke ud til at være mulighed for at udvide, men for nogen tid siden fandt vi ud af at det var muligt for os at leje en del af den lade, som også er en del af bygningskomplekset på Sofiendalsvej 80.

Der er selvfølgelig nogle udfordringer – laden er hverken isoleret eller opvarmet, og et træværksted støver en del – noget som de andre brugere af laden nok ikke ville være begejstrede for. Løsningen lå lige for: Byg en lukket kasse med isolering (og en dør).

Efter en del besværligheder med et trælastfirma som vi vil undlade at nævne navnet på lykkedes det at få leveret en ordentlig dynge træ, og en flok friske frivillige gik i gang med at bygge.

I skrivende stund er “kassen” bygget op med isolering, og der er trukket kabler til strøm og netværk – og der er endda bygget en fin trappe, så man kan gå op på “taget” af kassen. Her overvejer vi blandt andet at lave en kabine hvor man kan sprøjtemale.

Kassen

Trappen

Ovenpå

Kabelføring

Set indefra

Gemt under: Projekter

27 okt

Kommentarer lukket til Access Control System

Access Control System

Af

Our space has been equipped with an RFID-based door system since the beginning. It has worked well, but when we got the laser cutter, it was necessary to restrict access to the cutter to members who had received training. At first, the laser cutter had its own simple ‘database’, but it soon became inefficient to maintain two separate fdsfsystems. Also, the door system was not integrated with the member database, so we actually had three different databases that had to be maintained.

So we started talking about making a new system, and after extended discussion we actually started to code. The center of the system ia a backend, written in Rails. The backend provides a web interface for administration, and a REST interface for use by the various peripherals – called ‘machines’.

Configuring a user’s permissions with the web interface.

Viewing the log.

The primary ‘machine’ is the card reader located at the door. It uses the REST API to determine if the card is associated with a user who has access to the space.

Card reader at the entrance

In the same way, a number of other machines (lathe, mill, CNC router, 3-D printers) are equipped with a box containing an RFID reader, a relay, and an ESP8266. The ESP8266 connects to the backend over WiFi. For most of the machines, the power is only on as long as the card is inserted into the reader, but for the 3-D printers, the card can be removed once the print is started (the box measures current consumption of the printer, and shuts off once the print is done and the printer has cooled down).

Card reader at Bungard CNC

Access control box mounted on the Lulzbot Taz printer

Inside of access control box showing PSU, relay, and ESP8266. The version for the 3-D printers has an additional current sensor so that they can determine when the printer is idle.

The front of the access control box seen from the inside, showing card reader loop antenna/switch, OLED display, card reader PCB, and indicator LED.

The backend runs on a Cubieboard (an SBC based on an Allwinner ARM core, with on board SATA) with an SDD for storage. The connection between backend and the door ‘machine’ is USB, so you can open the door as long as there’s power, even if internet access should be down.

The backend is placed near the door and has a display and two buttons; the green one unlocks the door for fifteen minutes, and the red one locks the door.

The door is locked.

The door is open for 15 minutes.

Counting down.

Gemt under: Projekter

20 okt

Kommentarer lukket til Aarhus Mini Maker Faire 2018

Aarhus Mini Maker Faire 2018

Af

For femte gang var vi afsted til Mini Maker Faire i Aarhus.

Vi er lidt for dovne til at lave en rigtig blog-post, så I må nøjes med lidt billeder og video.

Først en video fra vores stand, hvor man kan se næsten alle de ting vi havde med. Dog kan man ikke se de to fine flipdot-displays, hvor det ene efter lidt hacking på stedet kom til at køre Game of Life.

Vi havde i år lavet en flok simple bristlebots, som var en stor succes.

Ligesom sidste år vandt vi også præmien for bedste badge, se video på Facebook.

29 sep

0 Comments

18650 Lithium-ion battery packs – 1S80P

Af

This is the considerations I did when building 1S80P 18650 battery packs, for a DIY powerwall.

My design will go for 14 of these packs in series, for a nominal 48V system.

I wanted a design that was:

  • Very hard to short circuit, individual cell fuses, and generally as safe as possible
  • Mechanically stable
  • Balanced as much as possible
  • Expandable

The design is basically 4 4×5 18650 holders for the top and bottom. The cells I used were all tested for capacity (all above 2000 mAh) and self-discharge (all above 4,1V after several weeks/months), and are all Samsung cells. When assembling the packs I tried to mix the cells as much as possible: this should mean that on average the packs will be approximately the same capacity.

The packs have all the positive metal on the top, and the negative on the bottom. This means that any metal would have to touch both the top and the bottom, to short circuit the pack; this is not possible with a straight piece of metal. The connectors are going out on each side: if they went out the same side it would be possible to short-circuit them. Also, this will ensure that all the cells are discharged at the same rate: if they went out the same side the cells closest to the connectors would be loaded harder than the ones further away. This layout will not be a problem when they are put in series, they will just be alternating up-down. The busbars are shrink-wrapped on both ends, so only the connector is connected.

This means that the packs are impossible to short-circuit by themselves.

The packs are held together by 6 zip-ties: 2 at each end, and 2 in the middle. 5mm holes are drilled in the holders. The zip-ties go through the packs and around the busbars on each side.

The busbars are 4 wires of 2.5mm² wires, that are extracted from a standard AC cable. They are twisted together using a bench vise, and a cordless drill. They are then pre-bent using a template.

The connectors are 25mm² cable lugs. The two ends of the busbar go into the lug, meaning 8 wires of 2.5mm², or 20mm² in total. Depending on the exact calculations, this should be good up to 80A-160A. I intend to load the packs with at most 80A, and normally much less, so this should be fine.

The cells are connected to the busbars by fuse-wires. I used legs from 1/8W resistors, from a batch I tested beforehand. The resistor legs blows at 5A after some time, and in a few seconds at 6A. This should be well within spec, since the fuse-wires are mainly intended to isolate cells that go short-circuit: in this case the other 79 cells will be delivering current to the one bad cell, and the fuse wire should blow very quickly. This is another reason to not build too small packs: you need enough current available that the fuses will blow quickly.

The fuse wire is soldered to the cells, and soldered to the busbars. I used good lead-based solder, I tried crappier and lead-free solder but the results were poor. The positive side is soldered at about 340C, while the negative needs a bit more heat at 350C. For soldering to the busbars I go up to 380C, and move around in a circle since heat management is very much needed.

One concern I have heard from several people is that the cells are losing capacity by soldering. I did a test by soldering a few cells, and leaving a few control cells unsoldered. Then I capacity tested all the cells for a few cycles to check if any capacity is lost. I was unable to find any capacity loss on the soldered or unsoldered cells, so for me that is “myth busted”.

The packs are prepared for a future extension to 1s160P or similar. The holders are all oriented in the same way, and in such a way that 2 80P packs should be able to click together side by side:

Each pack (or set of 2 packs if expanded) will get one Batrium LongMon. It should be fully capable of balancing such a system.

If the hivemind has any ideas or things I missed, I’m very interested in hearing about it!

Gemt under: Extern, HAL9k

Tags:

29 sep

0 Comments

Olimex A20-OLinuXino-LIME2 – A review after 4 years in service

Af

Last week my A20-OLinuXino-LIME2 one board Linux computer quit working, with a power supply issue. I looked up when it was purchased, and realised it had been in 24/7 service for almost 4 years. I guess that is a good excuse to do a little review. It even turned out that it the board was fine, but the AC-DC power supply brick could not supply enough current anymore.

The relevant specifications of the board, for my uses, are basically:

  • Dual core 1 GHz ARM Cortex-A7
  • 1 GB memory, 1 Gbit ethernet, SATA connector
  • LiPo battery connector/charger for UPS functionality

The Lime2 has been tasked with running my home monitoring system, consisting of a Debian installation with a Graphite backend, a Grafana frontend, and a ZoneMinder installation. The Graphite database is running on a software RAID0 of two disks (one on SATA, one on USB): in the beginning it was two spinning disks, but after a few years the random 2.5″ laptop disk I was using crapped out, so it was upgraded to a Samsung SSD. The power budget is strained more or less to the max with two spinning harddrives: The system was only able to boot if the battery was connected, presumably because the voltage would otherwise drop for the startup torque. This problem went away after switching to a SSD.

Software wise the system started out with the Debian supplied by Olimex on a SD-card, a Debian pre-Jessie with a custom SunXi kernel. This system was reasonable, but did experience random hangs after some time of use (I belive I found a bugreport back in the day, but am unable to refind it now). The system was later upgraded to a Debian Stretch with a 4.9 kernel from stretch-backports, that supports the SunXi chipset enough for my uses. The upgrade was rather involved,  requiring the correct kernel image, a custom U-boot script and the correct device tree file. Something did of course go wrong, at which point I got to be familiar with the serial console of the Lime2: there is a convenient 3 pin header, that gives access to a TTL serial. Using the serial console, I was able to identify the mistake and correct it. After the upgrade the system has been rock-stable.

The system has been handling the load reasonably: The 1GB of memory is constraining, there is not really any more free memory. The processor is only really strained by the motion detection in ZoneMinder, which uses more or less one core per camera. This will hopefully be optimized a bit, as ZoneMinder is being optimized for the ARM instruction set. Handling only the Graphite/Grafana load would be a breeze, even though the system is receiving ~650 metrics per minute.

All in all, I can recommend the Lime2 board for applications that need a little more umph than a Raspberry Pi, notably on the SATA and Ethernet side, and/or applications that need to be continuously available even after the power cuts out. For applications that need more than one SATA port, or more than one Ethernet port, or on-board Wifi, there are better — and more expensive — options. The price point of 45 EUR + VAT (which did not change from 4 years ago) puts the Lime2 slightly above the price of a RaspberryPi or BananaPi, but below boards like the Apu2. In addition, Olimex has announced that the Lime2 will be available “forever”, making any system designed using the Lime2 future proof — for the foreseeable future.

I ordered a new Lime2, before realising the problem was the power supply. I opted for the industrial variant that is now available. The only change, as far as I’m aware, is that the Allwinner A20 chip is rated for a larger temperature range, and it is 5 EUR more expensive.

Gemt under: Extern, HAL9k

Tags: ,