You may have heard about Pavlo and his dogs. But who is this Andon character, you may ask? Continue reading
Continuous Integration
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.
Vi hade sedan tidigare ett CK13 Activehome Kit för att styra 220V från datorn.
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 |