{"id":34465693,"url":"https://github.com/c-base/ingress-table","last_synced_at":"2026-03-16T06:07:59.032Z","repository":{"id":15039770,"uuid":"17765676","full_name":"c-base/ingress-table","owner":"c-base","description":"Ingress Table NoFlo \u0026 MicroFlo setup","archived":false,"fork":false,"pushed_at":"2020-06-02T22:11:33.000Z","size":614,"stargazers_count":39,"open_issues_count":16,"forks_count":3,"subscribers_count":11,"default_branch":"master","last_synced_at":"2024-04-13T22:23:36.322Z","etag":null,"topics":["cbase-space-station","ingress","iot","microflo","msgflo","noflo","rgb-led-strips"],"latest_commit_sha":null,"homepage":"http://bergie.iki.fi/blog/ingress-table/","language":"CoffeeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/c-base.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-03-15T01:33:04.000Z","updated_at":"2022-05-16T22:27:09.000Z","dependencies_parsed_at":"2022-08-02T20:15:15.653Z","dependency_job_id":null,"html_url":"https://github.com/c-base/ingress-table","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/c-base/ingress-table","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c-base%2Fingress-table","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c-base%2Fingress-table/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c-base%2Fingress-table/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c-base%2Fingress-table/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/c-base","download_url":"https://codeload.github.com/c-base/ingress-table/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c-base%2Fingress-table/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30570220,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-16T06:02:37.763Z","status":"ssl_error","status_checked_at":"2026-03-16T06:02:14.913Z","response_time":96,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cbase-space-station","ingress","iot","microflo","msgflo","noflo","rgb-led-strips"],"created_at":"2025-12-23T03:02:41.709Z","updated_at":"2026-03-16T06:07:59.026Z","avatar_url":"https://github.com/c-base.png","language":"CoffeeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Ingress Table [![Build Status](https://travis-ci.org/c-base/ingress-table.svg?branch=master)](https://travis-ci.org/c-base/ingress-table) [![Greenkeeper badge](https://badges.greenkeeper.io/c-base/ingress-table.svg)](https://greenkeeper.io/)\n=============\n\nThe software side of a \"physical Intel map\", built with [NoFlo](http://noflojs.org) and [MicroFlo](http://microflo.org). Please read the [introductory blog post](http://bergie.iki.fi/blog/ingress-table/) for more information. The actual table can be seen live at the [c-base](http://c-base.org/) space station in Berlin.\n\n**[View source on Flowhub](https://app.flowhub.io/#github/c-base/ingress-table)**\n\n![Ingress Table in action](https://cloud.githubusercontent.com/assets/3346/25990625/b05e8dde-3700-11e7-8b90-ff89da860a01.jpg)\n\n## How does this work?\n\nWe have a NoFlo graph that periodically pulls portal status information from the data provider, and converts that to status information to be shown on the table surface.\n\nThe status information is then transmitted to a microcontroller that shows portal owners, attack notifications, etc. using the LEDs.\n\nAt c-base the table runs as part of the [c-flo](https://github.com/c-base/c-flo) IoT network, with the data fetching part running on a server machine, and the light control running inside the table itself. Messaging related to these is coordinated by [MsgFlo](https://msgflo.org).\n\n## Starting and Stopping the Service\n\nClone this repository to `/opt/ingress-table` on your system, add an authorized access token as `cookie.json`, `npm install` dependencies.\n\nCopy the systemd service files from `systemd/` folder to `/etc/systemd/system`\n\nReload systemd files with `sudo systemctl daemon-reload`\n\nStart the services with:\n\n* `sudo systemctl start ingress-data` (for the API interface part)\n* `sudo systemctl start ingress-lights` (for the light control)\n\n## Hardware\n\n* Raspberry Pi running NoFlo\n* Arduino Uno running Microflo for controlling the WS2801-based LED strand (portal lights)\n* 50 individually controllable LEDs for portals (based on the WS2801 controller chip)\n* 5 LED strips for streets (map background) and floor lighting\n* Launchpad Tiva running MicroFlo for controlling the 5 RGB-LED strips\n* USB chargers for agents running out of battery\n\n### LED driver circuit\n\nThe RGB-LED strips we use run on 12 Volts DC and have one shared plus pole and an individual\nminus pole for each color. They cannot be driven by the Tiva itself so we use an N-Channel MOSFET\nto control them. We use three [IRL540N MOSFETs](http://www.irf.com/product-info/datasheets/data/irl540n.pdf) (named Q1, Q2, Q3) per RGB strip.\n  \n![](https://raw.githubusercontent.com/c-base/ingress-table/master/RGB-Channel%20Schematic.png)\n\nThis is the circuit for one channel only, you must build this 5 times. Here is an example of how you could\nput in on a perfboard:\n\n![](https://github.com/c-base/ingress-table/blob/8ff081f4ea03c158d300b17b2abb8601b72aa9ce/RGB-Channel%20Breadboard-Example.png?raw=true)\n\n\n### LED strip i/o pins\n\n\n```\nJ2\n---\n\nPB7 Green1\nPB6 Blue1\n\nPA2 -\u003e SSI0Clk =\u003e Portallights Clock (CKI), not used at the moment\n\nJ4\n---\n\nPF3 Red2\nPC4 Green2\nPC5 Blue2\n\nPF2 Red Bottom\n\nJ3\n---\n\nPD0 Red3\nPD1 Green3\nPF1 Blue3\n\nJ1\n---\nPB4 Red1\nPB5 Red4\nPE4 Green4\nPE5 Blue4\n\nPA6 Green Bottom\nPA7 Blue Bottom\n\nPA5 -\u003e SSI0Tx =\u003e Portallights Data (SDI), not used at the moment\n```\n\n**Note**: out-of-the box on the Tiva the pins PB6, PB7, PD0, PD1 can't be used. You [can disconnect the R9 and R10 resistors](http://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/t/290329.aspx) to make them usable.\n\n## Flashing and resetting the Arduino\n\nResetting the MCU:\n\n    stty -F /dev/ttyACM1 1200\n\n    make upload SERIALPORT=/dev/ttyACM1 BAUDRATE=57600 MODEL=leonardo GRAPH=../ingress-table/graphs/PortalLights.fbp\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fc-base%2Fingress-table","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fc-base%2Fingress-table","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fc-base%2Fingress-table/lists"}