Report Bug · Request Feature · Join Our Slack · Twitter
- Privacy first: no user data collected or stored; no cookies; no tracking; no ads
- Decentralized: your hub is independent from your neighbor's; there is no central control over any hub
- Secure: TLS-secure communication from device and hub, and from hub to browser
- Device targets: target popular SBCs and microcontrollers such as Raspberry Pi and Arduino
- No app to install: runs as a responsive, single page web application; all you need is a browser
- Containerized: runs in a docker container; no dependencies to install
- Small footprint: minimum hardware specification is 0.1 vCPU, 256MB of RAM and 10GB of disk space.
- 100% Open Source: written in Go and TinyGo (and some html/css/javascript for the UI)
Click the button to install Merliot Hub on the Koyeb cloud (a Koyeb account is required).
Review the settings and click Apply. It takes a few minutes for the hub to start. Browse to https://APP.koyeb.app/
to view hub and deploy devices.
docker pull merliot/hub
docker run -p 80:8000 merliot/hub
Browse to http://<host>
to view hub and deploy devices, where <host>
is your IP address or hostname of your computer.
Install Merliot Hub locally on your computer, on the cloud, or both, using our Docker image, without having to install all the dependencies. (If you don't have Docker, you can install the hub from source).
Install Merliot Hub on a computer on your local network. The devices will dial into the hub on your local network. You access the hub at it's local IP address.
Note
Prerequisite: Installed Docker environment.
docker pull ghcr.io/merliot/hub
docker run -p 8000:8000 merliot/hub
Browse to http://<host>:8000
to view hub and deploy devices, where <host>
is your IP address or hostname of your computer.
You can pass in environment variables. For example, to set the Wifi SSID/Passphrase to be programmed into the devices:
docker run -e WIFI_SSIDS="My SSID" -e WIFI_PASSPHRASES="mypassphrase" -p 8000:8000 merliot/hub
Or to protect your hub with a user/password:
docker run -e USER="xxx" -e PASSWD="yyy" -p 8000:8000 merliot/hub
You can install Merliot Hub on the Internet using a cloud providers such as Koyeb, Digital Ocean, and GCP (Google Cloud Platform), to name a few. The docker image path is:
docker pull ghcr.io/merliot/hub
PORT=8000
. The hub listens on port :8000.
WS_SCHEME=wss://
. This uses the secure websocket scheme to connect to the hub.
(See additional environment variables).
Click the button to install Merliot Hub on Koyeb, for Free! A Koyeb account is required.
All cloud providers require an account, there's no getting around that. Some have free-tiers or introductory credits to get started. Koyeb offers a free virtual machine with more than enough resources to run a hub.
Review the settings for the virtual machine (VM) and click Apply. It takes a few minutes for the VM to start. Your new hub will have an Internet URL in the format:
https://hub-ACCOUNT.koyeb.app/
Where ACCOUNT is your Koyeb account name.
Tip
If you own a domain name, you can map it to the hub URL.
Install Merliot Hub on a local computer and on the cloud, and the devices will dial into both.
On one hub, call it primary, set BACKUP
environment to the URL of a backup hub. Do the oposite, setting BACKUP
on backup to point to primary's URL. This way, regardless of which hub a device is created on, the device will dial into both hubs.
git clone https://github.com/merliot/hub.git
cd hub
go run ./cmd
Browse to http://<host>
to view hub and deploy devices, where <host>
is your IP address or hostname of your computer.
You can pass in environment variables. For example, to set the user/passwd:
USER=foo PASSWD=bar go run ./cmd`
A device is a gadget you build. The picture-equation for a device is:
A device comprises a platform, some I/O, and the software (firmware) that runs on the device. In this picture, the Raspberry Pi is the platform, the I/O is the relay and flow meter. The device control code is written in Go; the device view code is written in HTML/JS/CSS.
The device dials into the hub so you can monitor and control the device from the hub. Multiple devices, of different types, can dial into the hub.
The device is also a local web server, so you can browse directly to the device's address, skipping the hub.
Merliot Hub supports devices created on these platforms:
- Skeleton Device (template for new devices)
- Device Hub (a hub is a device also)
- Relay Controller
- Garage Door Opener
- MorningStar ProStar Solar Charge Controller (Modbus)
These variables configure the hub and devices:
By default, the each device will dial into the hub that created the device. To also dial into a backup hub, set BACKUP
to the backup hub's address.
For example, a primary hub is at local address http://192.168.1.10
. Any device created on the primary hub will dial into the primary hub's address. A backup hub is at cloud address https://hub.merliot.net
. Set BACKUP=https://hub.merliot.net
on the primary hub. Now the devices created on the primary hub will dial into both hubs.
Tip
You can additionally set BACKUP=http://192.168.1.10
on the backup hub, so regardless of which hub creates the device, the device will dial into both hubs.
Important
The backup hub must have the same USER/PASSWD and WIFI settings as the primary hub.
Run hub in demo mode, default is false
. Implies LOCKED
, if set true
.
Hub devices. This is a JSON-formatted list of devices. The format is:
{
"<id>": {
"Model": "<model>",
"Name": "<name>",
"DeployParams": "<deploy params>"
},
}
Example with two devices:
{
"6bb645c9-db12e9c9": {
"Model": "skeleton",
"Name": "example",
"DeployParams": "target=demo\u0026gpio-default=on"
},
"6bccaffd-6d8fab72": {
"Model": "garage",
"Name": "garage",
"DeployParams": "target=demo\u0026door=garage+door\u0026relay=DEMO0"
},
}
Lock the hub making it read-only, default is false
.
Port the hub listens on, default is PORT=8000
.
Set user and password for HTTP Basic Authentication on the hub. The user will be prompted for user/password when browsing to the hub. These values (if set) are automatically passed down to the device when deployed, and the device connects to the hub using these creditials. For example:
USER=foo
PASSWD=bar
Set Wifi SSID(s) and passphrase(s) for Wifi-enabled devices built with TinyGo. These are matched comma-delimited lists. For each SSID, there should be a matching passphrase. For example:
WIFI_SSIDS="test,backup"
PASSPHRASES="testtest,backdown"
So testtest goes with SSID test, and backdown goes with SSID backup.
Websocket scheme to use for dialing back into the hub. Default is WS_SCHEME=ws://
. If the hub is running under https://
, then set WS_SCHEME=wss://
.
The hub consumes little memory (or CPU) and can run on a Linux machine (or virtual machine) with a minimum of 256M and 2G disk space.