BuildStatusTrafficLight

From RevSpace
Jump to navigation Jump to search
Project BuildStatusTrafficLight
Stoplicht.jpg
A traffic light showing CI build status
Status Completed
Contact bertrik
Last Update 2018-11-22

Introduction

The end result of this project is a traffic light that shows the status of a software build.

It can show the following statuses:

  • red: build has failed to compile
  • yellow: code compiles but a unit test fails
  • green: code compiles and all unit tests are successful
  • yellow flashing: build status unknown, e.g. still starting up, connection problem, or we receive a status we don't understand

Status

It works!

 2018-11-22 Added python script to poll the Jenkins build server and control the traffic light over its serial connection
 2018-11-20 Added command interpreter for control over serial port, removed audio
 2018-11-18 Soldered new, brighter LEDs into it and connected the ESP8266, no sound yet
 2018-11-02 Played with ESP8266 software, particular playing audio using the 1-transistor-circuit
 2018-10-30 Received that hardware, opened it up etc.

Future, things I would do better next time:

  • configure LEDs for common anode, so the ESP8266 sinks current instead of sourcing it
  • rethink audio, the audio using ESP8266Audio library uses pin Rx, making serial comms impossible, perhaps just use PWM?
  • perhaps just remove the WiFi network again, WifiManager blocks startup until a WiFi connection is established. We don't need WiFi if we connect over serial port.

Hardware

I use an ESP8266 (Wemos D1 mini) along with a modified toy traffic light (see below).

I'm using this toy traffic light, modified for use with the ESP8266. It lights the lanterns in order, speaking some Chinese for each lantern. The lanterns are basically white LEDs behind a colored piece of transparent plastic.

I removed the original circuit (8-pin chip). I replaced the white LEDs with high-brightness coloured ones (red, orange, green). The ESP8266 can officially source about 12 mA and sink about 20 mA of current, I'm using a single 150 ohm resistor in the common ground wire of the LEDs (couldn't find a 100 ohm resistor at the space ...) It would be better to actually put it in a common Vcc wire, because the ESP8266 can more easily sink current than it can source it.

I haven't put in the sound circuit yet. Usage of the ESP8266Audio library in software is problematic because this library sends audio over pin Rx, making serial communication impossible.

Software

Source code can be found on github.

It is written in C/C++ for Arduino for quick and easy development using existing libraries, like WifiManager, PubSubClient.

The initial plan is to simply listen to an MQTT stream. Another plan is to listen on the serial port and receive commands from there. A python script running on a PC inside the LAN script polls the Jenkins server over ethernet and sends a command to the traffic light over serial.

Getting build status

To get the Jenkins build state, poll the following URL

 http://jenkins/job/jobname/lastBuild/api/json

where jobname is the name of your build job. Then look for the value of the "result" field at the top level of the JSON, it can take on the following values:

  • "FAILURE"
  • "UNSTABLE"
  • "SUCCESS"
  • null, in case a build is in progress

External links