søndag, mai 12, 2013

Hotfix av garasjeport

I dag hadde jeg bestemt meg for å fikse garasjeporten som har problemer med å lukke seg. Problemet var at den åpnet seg igjen når den kom helt ned i lukket tilstand. Jeg antok at dette hadde noe med potmeterene som måtte finjusteres litt på portåpneren. Dette er jo tross alt en portåpner som er nærmere 10 år gammel. Dette er det første problemet jeg har hatt med denne portåpneren, det er jo tross alt en Chamberlain Liftmaster Professional.


Ett mye dilling med potmeterene så jeg overhodet ingen endring på når den skulle stoppe. Hver gang gikk den helt ned og tilbake igjen grunnet sikkerhets mekanismen (om den blir hindret fra å lukke, skal den gå opp igjen).

Så jeg konkluderte med at det måtte være en feil på et potmeter som sitter på kontroller kortet.
Jeg kunne prøve å få tak i et nytt kontrollerkort til portåpneren, men siden den er så pass gammel tviler jeg på at dette var lagervare og sikkert ikke så billig heller. Alternativet er da å kjøpe en helt ny portåpner. Noe som egentlig ikke er et alternativ på nåværende tidspunkt.

Her måtte det en hotfix til.
Jeg er en softwareman og mener at de fleste problemer kan løses med software og noen duppeditter. Jeg er en ivrig hjemmeautomatiker og har laget det meste i mitt automatiserte hjem selv. Hoveddelen i automasjonsnertverket er basert på Z-Wave. Z-Wave er et trådløst nettverk (med det passende navnet Skynet) mellom enheter og en PC. Fra denne PC'en kan jeg styre lys og varme over hele huset. Programvaren med det fantastiske navnet iHome har jeg laget i C#.NET ved hjelp av åpen programvare. Damen som styrer alt heter Gudrunn (nærmere om det siden).

En "rask" titt på "lageret" viser seg at jeg hadde noen dupeditter som jeg kunne bruke. En dør/vindu sensor (AL-DWS) og en bryter micromodul (FGS211) som jeg kunne bruke som rele.

AL-DWS
FGS211
Garasjeporten åpnes og lukkes ved hjelp av fjernkontroll og via en kabel som jeg har lagt inn i huset ved døren. Et trykk lukker eller åpner porten basert på det motsatte av forrige bevegelse. Et trykk mens porten er i bevegelse stopper porten.


FGS211 kan fungere som et rele der man kan koble til egen strømkilde som er separert fra 230V spenningen. I dette tilfellet vil den fungere som bryter for å åpne og lukke porten. På lik linje som knappen inne i huset.

FGS211 monterte jeg i en boks og koblet til de nødvendige ledningen for 230V (spenning av releet) og kabelen for trykknappen. Den sorte ledningsstumpen er Z-wave antennen som jeg fører ut av boksen.

FGS211 er enkel å legge inn i Z-wave nettverket og inneholde en rekke innstillinger. Blant annet har den et parameter som automatisk slår av releet etter en tidsperiode (200 ms er standard). Men denne funksjonen må aktiviseres ved hjelp av et annet parameter. På generell basis er jeg ikke så veldig glad i at enheter må konfigureres for at det skal virke, så jeg valgte å beholde standard parameterne. Dette for at jeg ønsker at deler skal kunne byttes ut rett fra boksen uten parametere endringer (og da heller ingen ekstra dokumentering). Så jeg valgte å resette releet fra programmet mitt, slik at den virker som et pulsknapp og ikke som en on/off switch. Når releet går til status ON setter jeg statusen til OFF med en gang. Testing viste at tidsforsinkelsen var på 200ms, noe som er veldig bra med tanke på at enheten er i ytterkanten av nettverket.

Så var det selve hovedproblemet mitt. Nemlig at porten ikke stoppet når den var nede, men gikk opp igjen.
For å detektere at porten er helt nede, satt jeg inn en dør/vindu sensor i toppen av garasjeporten.

Denne enheten er todelt og fungerer ved at det er en magnet som trigger et lite rele som så sender et signal på Z-wave nettverket at enheten er lukket. Kommer enhetene fra hverandre sendes det et signal at enheten er åpen.

Som tidligere nevnt vil porten stoppe hvis man trykker på knappen mens den er i bevegelse, her mens den lukker. Så da var det bare å lage til en event i programvaren min som sender ON til FGS211 når enheten går fra åpen til lukket. Det vil så når porten er helt nede. Den eventen som jeg la inn tidligere setter FGS211 til OFF igjen med en gang.

Så nå stopper porten når den er lukket.
Hotfix deployed and problem solved.

Til slutt litt om iHome og Gudrunn som er toastmaster for Skynet.
iHome er et sett med programvare som jeg har laget i C#.NET. Det er basert på en service del som blant annet kontrollerer Z-wave nettverket og en HTML5 applikasjon som er bruker interfacet til systemet. Siden jeg nå la inn garasjeporten inn i systemet kunne jeg nå også styre denne over hele verden fra en webleser, iPad eller mobiltelefon via HTML5 applikasjonen.

Her er første utkast av web grensesnittet. IP kameraet mitt har dessverre ikke mjpeg. Støtter kun java. Så jeg  må lage til et javascript som refresher bildet jevnlig (bruker single page framework). Men det får jeg ta en annen kveld. Her hører vi Gudrunn i bakgrunnen, som høflig forteller at garasjeporten er åpnet. Hun vekker oss også om morgenen  :D





torsdag, mars 25, 2010

Tilbygget


I dag har vi ca. 140m2 bo areal. Dette begynner å bli lite så vi skal nå doble dette og nærmest bygge et helt hus forsiden av det gamle. Totalt vil vi få 280m2 boareal som skal varmes opp om vinteren. Vi har derfor satset på ekstra isolasjon av vegger og tak samt 3 lags vinduer. Vi skal også installere balansert ventilasjon slik at friskluften blir oppvarmet av luften som byttes ut.
I tillegg skal vi legge ekstra isolasjon i det gamle huset samt installere 3 lags vinduer der også.
Vi hadde et stort ønske om å installere varmepumpe som henter varmen fra grunnfjellet, men kostnaden ble for høye for budsjettet vårt.

Her er den delen av tomten vi skal bygge ut. Det gamle tilbygget må rives for å få plass til det nye tilbygget. Vi måtte også sprenge litt for å få tilbygget i plan med det gamle.


Rivingen av det gamle tilbygget.


Point of no return

23/03/2010

Så da er det ingen vei tilbake.


Her er restene etter tilbygget og noe terrasse.


Første uhell er et faktum:

Oljeslangen røk så oljen sprutet rundt. Godt at det var vindu på den maskinen...



30/03/2010

Planeringen av tomten.

Arbeidet ble ferdig på en dag.

Totalt gikk det med 9 lass med pukk som ble heist på plass.
Etter påske skal ringmuren/fundamentet støpes.

08/04/2010

Påsken er over og rørleggeren har klargjort for vann og avløp til det nye kjøkkenet i tilbygget.


De meislet også opp gulvet for å koble seg til stort nok avløp slik at det nye badet kunne få et toalett. Det avløpet som er nå på kjøkkenet (som skal bli det nye badet senere) er for lite for et toalett.

Litt morsomt og se hvordan det ser ut under huset som nå er 60 år gammelt.


22/04/2010

Omsider er ringmuren satt opp, etter en del forsinkelser av isoporelementene.

Disse isoporelementene virker veldig fornuftige med tanke på isolasjon. På yttersiden er det et lag med "noe hardt materiale" som skal pusses. Så er det isopor med lommer som skal fylles med betong og armeringsjern. Dette betyr at bunnsvillen hviler på betongen som så igjen er beskyttet av isopor på hver side.


Ferdig fylt med betong og armeringsjern.

onsdag, mars 17, 2010

MyTES

This is my FileServer disk resource usage when playing a Blu-Ray ISO file.

Only 3ms response time, Disk queue length of 0.15 and a transfer rate of 3.5MB/sec.


Screen shoots of MyTES on PopcornHour C-200
Main screen:


Movie Details


Actor details


Serie details

onsdag, desember 02, 2009

DIY strømmåler...

Hardware
For det første må man ha en strømmåler med impulslampe som blinker med ulik rytme, alt ettersom hvor mye strøm som brukes. Antall blink pr. kWh er oppgitt på strømmåleren. Hos meg tilsvarer 600 blink 1kWh.
Deretter trenger vi en enhet som kan avlese disse lys pulsene. Jeg valgte utstyr fra Phidgets Inc. (Canada) Phidgets Inc. - Unique and Easy to Use USB Interfaces.

Jeg valgte PhidgetInterfaceKit 8/8/8 som kobles til PC via USB. Denne har 8 analoge innganger, 8 digitale utganger samt 8 digital innganger. Her har man mange ekstra I/O å leke seg med etterhvert.

Phidgets Inc. - Unique and Easy to Use USB Interfaces

Strømmåleren min har en utgang som med fordel kunne brukes for å telle pulsene. Da kunne denne utgangene kobles til en av inngangene på interface kittet, men elektrisitetsverket nektet meg blankt å koble noe som helst til denne utgangen.

Så derfor valgte jeg heller en lys sensor som settes på strømmåleren for å telle pulsene.

Phidgets Inc. - Unique and Easy to Use USB Interfaces

Denne plasseres (u)elegant foran lys puls indikatoren på strømmåleren ved hjelp av teip.

Dette er ikke den fineste løsningen, men siden det er plassert inni sikringsskapet så er det ikke synlig til daglig.

Mitt server rom er plassert rett under sikringsskapet, så her var det bare å trekke signal kabelen rett ned til interface kittet.

For å visuelt vise at den leser av pulsene, koblet jeg en LED til en av utgangene. Denne styres av programvaren.

Software
Neste steg er nå å lage et program som kan telle pulsene og lagre disse i en database.
Jeg har laget et program i .NET og som leser den analoge inngangen. Phidgets har API'er for Windows, Mac, Linux og Windows Mobile/CE. Samt en rekke andre populære utviklings språk.

InterfaceKit API'et har en event handler som trigges hver gang verdien endres en bestemt mengde. Hvis inngangsverdien endrer seg +/- n, sendes en event. Verdien n kan justeres i programvaren fra 1 og oppover. Etter mye om og men fant jeg ut at denne ikke var helt å stole på. Den rett og slett hoppet over en del pulser. Selv om sensitiviteten på inngangen var satt til 1. Vet ikke om denne har et annet innebygget filter som forårsaker dette. Løsningen ble at jeg laget en egen thread som leser rå verdien kontinuerlig. Ved hjelp av en flanke kan jeg telle pulser på en reell måte.

using System;
using System.Threading;
using Phidgets;

namespace PowerMeter
{
public class PowerMeter : IDisposable
{
private readonly InterfaceKit _ifKit;
private int _lightSensorPort;
private int _ledOutPort;
private long _rawMinTickValue;
private long _tickTimeSpan;
private Thread _lsThread;
private bool _threadRun;
private bool _gThreadRuning;

private static long _kWhCounter;
private static long _tickkWhWrap;
private static long _tickCounter;
private static long _kWhUsage;



///
/// Get the last exception
///
public Exception LastException { get; private set; }



///
/// Hi value trigger for light sensor
/// Default: 3
///
public int LightSensorHiTrigger { get; set; }


///
/// Get current kWh usage
///
public double KWhUsage
{
get { return Interlocked.Read(ref _kWhUsage) / 10.0; }
set { Interlocked.Exchange(ref _kWhUsage, (long)(value * 10.0)); }
}



///
/// Get meter ticks
///
public long KWhTicker
{
get { return Interlocked.Read(ref _tickCounter); }
}



///
/// ticks/kWh (default 600 ticks/kWh)
///
public long KWhTickWrap
{
get { return _tickkWhWrap; }
set { _tickkWhWrap = value; }
}



///
/// Ticks Output port
///
public int LedOutPort
{
get { return _ledOutPort; }
set { _ledOutPort = value; }
}



///
/// Power metere class
///
/// Analog port for reading the light sensor. Default 0
public PowerMeter(int lightSensorPort)
{
InitValues();
_lightSensorPort = lightSensorPort;

// We use one USB local connected interface kit.
_ifKit = new InterfaceKit();
_ifKit.open();

// Create a hi priority thread
_lsThread = new Thread(RunThread) { Priority = ThreadPriority.Highest };
_lsThread.Start();
}



///
/// Initialize all values
///
private void InitValues()
{
_tickkWhWrap = 600;
_lightSensorPort = 0;
LightSensorHiTrigger = 3;

_ledOutPort = -1;
_threadRun = true;
_gThreadRuning = false;
_kWhCounter = 0;
_tickCounter = 0;
_rawMinTickValue = 0;
_tickTimeSpan = 0;
_kWhUsage = 0;

_lsThread = null;
}



///
/// Current kWh usage
///
public long KWhMeter
{
get { return Interlocked.Read(ref _kWhCounter); }
set { Interlocked.Exchange(ref _kWhCounter, value); }
}



///
/// Thread for reading the light sensor
///
private void RunThread()
{
bool hiValue = false;
DateTime startTime = DateTime.Now;
TimeSpan timeUsed;

_gThreadRuning = true;
_threadRun = true;
while (_threadRun)
{
Thread.Sleep(1);
try
{
int value = _ifKit.sensors[_lightSensorPort].RawValue;

//
if (value >= LightSensorHiTrigger)
{
if (hiValue == false)
{
// Calcule the time between ticks
timeUsed = DateTime.Now.Subtract(startTime);
startTime = DateTime.Now;
Interlocked.Exchange(ref _tickTimeSpan, (long)(timeUsed.TotalMilliseconds * 1000.0));

// Safety: When the door is open the triger may run fast. 200ms = 28.6 kWh max power usage
if (timeUsed.TotalMilliseconds > 200)
{
// Calculate kWh usage
if (timeUsed.TotalSeconds > 0.0 && _tickkWhWrap > 0)
{
double usage = ((60.0 / timeUsed.TotalSeconds) * 60.0) / _tickkWhWrap; // KWh
Interlocked.Exchange(ref _kWhUsage, (long)Math.Round(usage * 10.0));
}

// After _tickkWhWrap ticks, increment the kWh counter and resett ticker
Interlocked.Increment(ref _rawMinTickValue);
if (Interlocked.Increment(ref _tickCounter) >= _tickkWhWrap)
{
Interlocked.Exchange(ref _tickCounter, 0); // Zero ticks
Interlocked.Increment(ref _kWhCounter); // inrement kWh meter
}
}

hiValue = true;
if (_ledOutPort > 0) _ifKit.outputs[_ledOutPort] = true;
}
}
else if (hiValue)
{
hiValue = false;
if (_ledOutPort > 0) _ifKit.outputs[_ledOutPort] = false;

}
} catch (Exception er)
{
// catch error - and continue
LastException = er;
}
}
_gThreadRuning = false;
}



///
///
///
/// The current power usage
public override string ToString()
{
return "Current usage " + KWhUsage + " kWh.";
}


///
/// Stop the power meter and release resources.
///
public void Dispose()
{
// Stop the running thread
for (int i = 0; i <>
{
_threadRun = false;
Thread.Sleep(10);
if (_gThreadRuning == false) break;
}
_lsThread.Abort();

// close the connection to the kit
if (_ifKit != null) _ifKit.close();
}


}

}


Presentasjon
Når man nå har utstyr til å lese strømmen må man ha et sted der man kan lese verdiene. Hos oss skal vi ha en SyncMaster LD220Z MultiTouch skjerm som skal henge på veggen.

Denne skal også virke som en sentral oppslags tavle for husstanden med kobling til Google Calendar. Dette vil komme under værvarselet.

lørdag, august 08, 2009

Ny trapp i hagen

Her er skråningen ryddet for jord, steiner og ikke minst røtter. Alt er nå klart for muring av ny trapp

Her skal trappen ligge. Trappens høyde mellom bunn og topp er 190 cm. Avstanden mellom toppen og bunnen er 300 cm.

Så har vi trappeformelen:
2 x opptrinn + 1 x inntrinn = 63 cm

Opptrinn bør ligge mellom 15 og 18 cm for at trappen ikke skal virke for bratt.

Skal vi ha 11 trinn blir opptrinnet og inntrinnet slik:
Opptrinn: 190 cm : 11 ≈ 17,3 cm
Inntrinn: 63 cm – 34,6 cm = 28,4 cm

Skal vi ha 12 trinn:
Opptrinn: 190 cm : 12 ≈ 15,8 cm
Inntrinn: 63 cm – 31,6 cm = 31,4 cm

Men jeg er ikke sikker på om man skal bruke standard mål i en hagen. Vil det virke litt industriellt og unaturlig?
Så jeg går for en løsning med variable trinn som følger typografien.
Problemet vil da være toppen av trappen som er har en veldig høy stigning, men det tar vi når vi kommer så langt.

Denne nye trappen er den andre i selve hagen. Jeg har en som går fra forsiden av huset til terrassen.

Den jeg skal lage til nå går fra forsiden av huset til gressplenen. Mellom trappene skal det gå en sti som forbinder disse sammen.

Så blander vi sement

Jeg er ikke utdannet murer, så følgende oppskrift er kun basert på erfaringer.
Jeg har funnet ut at den beste blandingen ved muring av stein er 4 deler sand og 1 del standard sement. Som ved baking blander man første det tørre godt sammen, før man tilsetter vann. Ved muring av stein er det veldig viktig å ikke tilsette for mye vann, ellers vil man få en for bløt blanding som er vanskelig å bearbeide. Tilsett litt vann om gangen, sjekk sementen mellom hver gang. Når du hører sementen slipper i store klatter, er den ferdig. Renner den rundt i blanderen er den altfor bløt.
Sement er veldig etsende, noe som jeg selv har smertelig erfart. Som alt annet i verden, bruk gummi!
Har prøvd dyre syrefaste hansker, men disse var for klumpete å jobbe med. Så jeg bruker rett og slett gule oppvaskhansker. De er lette å jobbe med, og billige siden det gjerne går med noe par i arbeidet.

Så murer vi

Før man begynner på selve muringen er det viktig å trekke en snor der muren skal gå. Dette for at muren skal være rett og får at høyden på muren skal bli jevn. Jeg har arbeidet meg ned til grunnfjellet så underlaget er solid. Har du ikke ikke denne muligheten må du gå ned minst 30 cm. og støpe et fundament med jern i, ellers vil muren bare sprekke i løpet av kort tid grunnet telehiv.
Stein som jeg bruker skal være flate på minst en side. Disse finner jeg på tomten eller på min hemmelige stein åre som det sprenges mye på fortiden. Stein fra denne åren inneholder mye jern og er derfor veldig rustbrun. Veldig flott stein til hagen. Mange foretrekker at de skal være flate på tre sider og stabler de oppå hverandre. Det synes jeg er kjempe flott, men det er ikke lett å finne mange slike steiner. Derfor bruker jeg stein som er flate på en side og bruker flatesiden utover. Hvis de er tynne bruker jeg "skrap stein" som støtte på baksiden.
Før jeg begynner å mure fukter jeg alltid steinen. Dette for å vaske vekk jord og annet smusk, men også for at sementen skal feste seg bedre. Når jeg murer passer jeg alltid på å få glatte sementen rundt steinen, dette for å unngå at vann kan komme inn i sprekkene og ødelegge muren ved frost. Pass på å dytte sementen godt inn mellom steinene slik at det er god kontakt mellom steinene.

Her bruker jeg hendene for å glatte sementen rundt steinen på baksiden for å unngå at vann samler seg.

Så lar jeg det tørke til at sementen er overflate tørr. Jeg liker dype fuger mellom steinene for at steinen skal fremheves bedre og sementen tones ned.
Såkalt "ålesundsfuger" synes jeg ikke er så veldig da det fremhever sementen for mye.


"Ålesundsfuger"

Etter noen timer avhengig av temperatur er sementen overflate tørr.



Så tar jeg en helt vanlig oppvaskkost og fjerner overflate sementen. Er den for tørr bruker jeg en stålkost. Ved hjelp av litt rennende vann børster jeg godt inn i fugene. Har du godt med sement mellom steinene er det bare å børste i vei.

Børste vekk sement med kost til du får dype fuger.

Jeg jobber med et lag om gangen slik at sementen kan tørke før jeg begynner på neste lag. Dagens muring gjøres unna på et par timer. Neste dag begynner man på lag to av muren.


Første lag er ferdig og skal tørke til neste dag

For å lette arbeidet litt begynte jeg på muren på den andre siden og lagde første trappetrin. Da er det enklere å beregne høyden på side veggene samt at det blir letter å bygge oppover.


Første trappetrinn ferdig

Trappe mal.
Jeg bruker en mal for hvert trappetrinn, da vil trappens høyde og bredde bli like.


Så var 6 trappetrinn ferdig og jeg er kommet over halvveis.

Muren på venstre side er delvis ferdig på innersiden.

På den siste delen har jeg 125 cm. innover og høyden er på 60 cm.
Hvert trappetrinn som jeg har brukt er 15 cm. høye.
Det vil si at jeg har 60 cm. / 15 cm. = 4 trappetrinn igjen + topptrinnet.

Trappen er ferdig

Omsider er selve trappen ferdig. Har laget en mur som forbinder den gamle trappen til den nye trappen.


I området mellom var det en gammel skråning som ble flatet ut. Her var det mye røtter og stein som måtte fjernes. Fylte på ny jord, et lag med skikkelig tykk fiberduk (kjøpes på felleskjøpet) og så et lag med bark. Det med fiberduk er veldig viktig for at ikke ugress skal vokse fritt. Har hørt så mange si at de har fylt på med bark eller kaffeskall og klager over at ugress vokser frem uansett. Du må ha fiberduk for å forhindre ugress. Dessuten beskytter det røttene mot frost og bevarere fuktigheten i jorden. Men du vil alltid få ugress som vokser ut i kantene av fiberduken, men der lar du det vokse litt for så å kverke det med Roundup.
Jeg legger også fiberduk der jeg skal ha en gangstien av subus.