How to use many Pixelblaze on a network (Firestorm)

One of the first questions I was asked when I introduced Pixelblaze was “how can I control many at the same time?”

Originally Pixelblaze didn’t have anything like that, but around summer of '18 I worked on a project to sync and control a whole network of Pixelblaze for a theme camp. Whats a lot of 'blaze? A Firestorm!

Pixelblaze Firestorm synchronizes the animation timers of multiple Pixelblaze on a network, and allows for switching patterns simultaneously.

Firestorm also exposes a simple API, and can be used for all kinds of smart home integration projects, or used as a base for creating your own Pixelblaze control console.

Firestorm was designed with reliability in mind as well. It remembers the current settings and last command and will resend those in case of a network error or a device reset.

Firestorm is a web server application that runs on a computer. Once installed and running, it can server out web pages from that computer to mobile devices.

It can run on a laptop, or desktop, or something like a Raspberry Pi. It’s based on NodeJS, https://nodejs.org/en/about/ and can run anywhere that NodeJS does.

I include instructions for installing on a Raspberry Pi on the GitHub page. It would be similar for other Linux based systems, but would vary for Windows and Mac (and I don’t have install instructions for them).

Go check out Firestorm on GitHub

I’m following the guide on github to installing Firestorm on a raspberry pi. When entering the line:

sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u pi --hp /home/pi

I receive the following error:
env: ‘/usr/lib/node_modules/pm2/bin/pm2’: No such file or directory

Would anyone be able to help here?

Thanks!

Hi bubbahana,
You might be missing pm2. Did you run this?

sudo npm install -g pm2

What do you get when you run

which pm2

Try it with that path if it is different.

1 Like

Got it! The path was /usr/local/bin
Thanks for the help! It is refreshing to find a group that doesnt ridicule you for not being able to figure stuff out. :smiley:

2 Likes

Happy to help! I might need to update my instructions!

Hi, I also had to update my command with /usr/local/bin for the path to pm2, FYI.

In case anyone else runs into this. After installing and getting everything running, I had some issues with Firestorm not showing PB’s on the network. FYI I was testing with multiple PB’s and cloning my Debian OS to prep for multiple Pi/PB setups - so something may have happened in all that. I found after you cd into firestorm and set that up, I followed with yarn, yarn build and then yarn init. Then finished with pm2 start server.js and pm2 save. All my issues seemed to be from yarn, hopefully it was just me - but if not maybe this can help.

2 Likes

When using firestorm, is it possible to set the value of sliders? For example, I might have a slider that sets the speed of a pattern. Adjusting it via an api command would allow it to change the speed of the pattern without having to have several duplicate patterns with slightly different speeds. As far as I can tell from the Firestorm docs all I can change is the current pattern, but nothing below that.

Firestorm doesn’t have controls support yet in the interface. Partly because I’ve been busy with other stuff, but also I’m not 100% sure how it should work with multiple patterns. Do I group them by name, and show every unique name (similar to switching patterns)?

Thoughts?

You mean that you could have several pixel blazes with the same pattern name (so that they are all synchronized) but the underlying pattern is different? I was thinking that instead of the following post command

{
  "command": {
    "programName": "blink fade"
  },
  "ids": [
    6909667,
    9398311
  ]
}

you could have something like (syntax is probably wrong)

{
  "command": {
    "programName": "blink fade"
  },
"Sliders":[slider1,0.2,slider2,0.4,...etc],
  "ids": [
    6909667,
    9398311
  ]
}

And if the pattern on a given device had something named slider1, slider2, etc it would use the value associated with that, and it would ignore it otherwise.