Byggstatus med Lavalampor

Vi håller på att migrera från Visual Studio 2005, Visual Source Safe och CruiseControl.NET till Visual Studio 2008, Team Foundation Server och Team Build. Som en del i detta så ville vi få igång en tydlig visualisering av hur våra byggen går. Vi valde att använda de traditionella lavalamporna! Såhär fick vi det att fungera.

lavalamporna

Vi hade sedan tidigare ett CK13 Activehome Kit för att styra 220V från datorn.

Lampmodule och appliance module CM11a

För att styra de två X10 modulerna från kod så använde vi oss av Brian Vallelungas Home Automation (X10) Library

Vi utgick sedan från Martin Woodward TFS Build Wallboard API Example 

Vi uppdaterade koden i WallboardForm.cs för att tända och släcka lavalamporna till:

public voidUpdateStatus(IBuildDetaildetail) { // We used the build server later to convert the enums into the localized display values.
  
IBuildServerbuildServer = detail.BuildServer;

    lblBuildNumber.Text = detail.BuildNumber;

    //  The TFS API’s always return DOMAINusername, however the convention is that we only
    //  display the domain portion if it is different from our current users domain.
  
lblRequestedFor.Text = UserNameFormatter.GetFriendlyName(detail.RequestedFor, null);

    // If the build has finished then display the finish time.
  
lblFinishTime.Text = detail.FinishTime.Equals(DateTime.MinValue) ?
      “”: detail.FinishTime.ToString();

    // Convert the build status into a localized display text.
  
StringstatusText = buildServer.GetDisplayText(detail.Status);

    using(CM11AlavaLamps = CM11A.Instance(“COM1”))
    {
        // Now we want to show the fancy images.
      
switch(detail.Status)
        {
            caseBuildStatus.Failed:
                statusPictureBox.Image = global::BuildWallboard.StatusImages.status_bad;
                lavaLamps.SendCommand(X10HouseCode.B, 2, X10Command.TurnOn);
                lavaLamps.SendCommand(X10HouseCode.C, 2, X10Command.TurnOff);
                break;
            caseBuildStatus.InProgress:
                lavaLamps.SendCommand(X10HouseCode.B, 2, X10Command.TurnOn);
                lavaLamps.SendCommand(X10HouseCode.C, 2, X10Command.TurnOn);
                break;
            caseBuildStatus.NotStarted:
                statusPictureBox.Image = global::BuildWallboard.StatusImages.status_queue;
                statusText = buildServer.GetDisplayText(BuildStatus.InProgress);
                break;
            caseBuildStatus.PartiallySucceeded:
                statusPictureBox.Image = global::BuildWallboard.StatusImages.status_partial;
                break;
            caseBuildStatus.Stopped:
                statusPictureBox.Image = global::BuildWallboard.StatusImages.status_stop;
                break;
            caseBuildStatus.Succeeded:
                statusPictureBox.Image = global::BuildWallboard.StatusImages.status_good;
                lavaLamps.SendCommand(X10HouseCode.B, 2, X10Command.TurnOff);
                lavaLamps.SendCommand(X10HouseCode.C, 2, X10Command.TurnOn);
                break;
            default:
                break;
        }
    }
    // And finally set the text.
  
lblStatus.Text = statusText;

}

För att sedan få allt att fungara så var vi tvunga att trixa lite med X10 delarna (jag tror att Brian Vallelungas bibliotek inte är 100% kompatibelt med den Europeiska varianten av CM11 modulen).

Till att börja med så kunde man inte ha båda X10 modulerna på samma huskod. Jag valde att köra gröna lampan på huskod C och den röda på huskod B.

Sen var man tvungen att tända och släcka båda modulerna med en X10 kontroller (som jag lånade från min X10 anläggning hemma).

När detta var gjort så var det bara att köra igång! Alla i rummet ser nu snabbt och enkelt byggstatus liksom alla som går förbi i hallen!

Byggstatus Grön Röd
Bygger X X
Success X  
Fail   X