[RELEASE] OmniThing v0.8.2 - ESP8266/ESP32/RaspberryPi/Linux/Windows Web-based Configuration Tool

You can find the OmniThing GitHub here. The README explains what OmniThing is and how to use it.

Check out the OmniThing Website! It is home to a web-based configuration tool that makes setting up OmniThing easy.

OmniThing README:

9 Likes

Version History

Alpha

  • 0.8.2
    • Add optional InputFloat to SwitchLevel and DimmerSwitch
  • 0.8.1
    • Fix segfault caused by SwitchLevel and DimmerSwitch dereferencing null pointer
  • 0.8.0
    • Added CommandExecuterFloat OutputFloat type
      • sets the environment variable “OMNITHING_FLOAT_VAL” to the float value prior to running command
    • Added DimmerSwitch device type and handler
  • 0.7.3
    • Fix apt warnings due to OmniThing rpi repo missing files
  • 0.7.2
    • Fix parsing of device names with underscores
  • 0.7.1
    • Fix parsing of device names with spaces
  • 0.7.0
    • Add CommandParser InputFloat
  • 0.6.1
    • Fix compilation errors on Arduino platforms
  • 0.6.0
    • Added InputDebouncer
    • Fixed bug involving sending floats with too many digits in json strings
    • Added temperature conversion options from the ST_Anything groovy code
  • 0.5.1
    • Fixed nasty bug when using a CommandExecuter that could result in writing bogus to logs indefinitely.
  • 0.5
    • No longer need to specify ip address in network receiver for windows, linux, and rpi
    • Parse json with a more efficient method that also fixes a buffer overflow bug
    • Added optional input parameter for the Switch device. If provided, the switch will report its current state to SmartThings based on this input rather than what it most recently set the switch output to.
    • Added optional ignoreRedundant parameter to the switch device. If set to true, the switch will ignore commands that will not change the current state of the switch (i.e. an on command when the switch is currently on).
    • Made configuration webpage have the navbar fixed to the top for better usability
    • Added CommandReturnCode InputBool type. Provide a command to run in the shell. A return code of 0 evaluates to true. Any other return code evaluates to false.
    • Hubitat support
    • Added PwmOutputEsp32 which adds pwm support on esp32 using the ledc library.
  • 0.4
    • Allow for self-hosted web server configuration tool on linux platforms
    • Cmake install target support on linux systems
    • Created package repo for installing/updating omnithing with apt-get on raspberry pi
    • OmniThing and its webtool run as systemd services on linux targets
  • 0.3
    • Created the OmniThing web configuration tool
    • Fixed several json parsing bugs
  • 0.2
    • Added SwitchLevel Device type
    • Added PwmOutput OutputFloat type
    • Fixed build errors on windows
  • 0.1
    • Initial release to the public

Looks awesome! Nice job!!! Can’t wait to give it a try with my next ESP build. :+1:

1 Like

The support for Linux and Windows platforms is a very welcome addition! Nice work @leinax!

2 Likes

I have just released OmniThing v0.3.0. This is a major release, adding the first version of the OmniThing Website. This site provides a web-based configuration tool, allowing you to set up your OmniThing device without having to edit any json manually.

You can download the finished json file once you’re done editing your configuration. Additionally, you can import existing configurations to make further changes to them.

If you are using OmniThing on an ESP32 or ESP8266, you can even download a complete sketch which includes your configuration already. You just download the zip file, extract it, and open up the sketch in the Arduino IDE. You never even have to touch source code to get it running.

2 Likes

Hi,

I am unable to reach omnithing website. Are there any issues?

Thanks and regards,

Pugazhendhi M

Thanks for the heads up. The site should be back up now.

1 Like

I have just released OmniThing version 0.4.0. This release is focused on making OmniThing convenient to use on Raspberry Pis.

You can now install and update OmniThing using Raspbian’s native package manager.

Additionally, the OmniThing web configuration tool now runs locally on your Raspberry Pi. This allows you to directly edit your current configuration from your web browser. When you click update, the server will automatically restart the omnithing service, and your changes will take effect.

The Raspberry Pi installation instructions have been modified in the README, and I have copied the relevant section below:

Raspberry Pi

It is easy to install OmniThing on a Raspberry Pi and keep it updated. You can directly use the apt package manager like you would for any other raspbian package. You just need to add the OmniThing repository.

Add the OmniThing repository

sudo sh -c 'echo "deb http://omnithing.net/repository/rpi ./" >> /etc/apt/sources.list'

Install the omnithing package

sudo apt-get update && sudo apt-get install omnithing

Updating OmniThing

If a new version of OmniThing is released, you can update to it with the command below:
sudo apt-get update && sudo apt-get upgrade

Editing Configuration

You can edit the current OmniThing configuration using the self-hosted webserver running on port 3333. In your web browser, navigate to http://replace_with_your_pi_ip:3333

2 Likes

I have just release OmniThing alpha 0.5.0. The release notes are below:

  • 0.5
    • No longer need to specify ip address in network receiver for windows, linux, and rpi
    • Parse json with a more efficient method that also fixes a buffer overflow bug
    • Added optional input parameter for the Switch device. If provided, the switch will report its current state to SmartThings based on this input rather than what it most recently set the switch output to.
    • Added optional ignoreRedundant parameter to the switch device. If set to true, the switch will ignore commands that will not change the current state of the switch (i.e. an on command when the switch is currently on).
    • Made configuration webpage have the navbar fixed to the top for better usability
    • Added CommandReturnCode InputBool type. Provide a command to run in the shell. A return code of 0 evaluates to true. Any other return code evaluates to false.
    • Hubitat support
    • Added PwmOutputEsp32 which adds pwm support on esp32 using the ledc library.
1 Like

Nice! I have OmniThing running great on a Raspberry Pi Zero W. It is great to have such a flexible and easy to use solution for integrating a RPi with SmartThings.

2 Likes

Hi Team,

I am configuring a switch on wemos d1 but I am hitting the below. I am not sure what I am doing wrong. ANy help is appreciated.

sketch\frozen.cpp.o:(.text._Z12json_vprintfP8json_outPKc13__va_list_tag+0x1c): undefined reference to strspn' sketch\frozen.cpp.o: In functionjson_vprintf(json_out*, char const*, __va_list_tag)’:
sketch/frozen.cpp:1473: undefined reference to strspn' sketch\frozen.cpp.o: In functionjson_unescape(char const*, int, char*, int)’:
sketch/frozen.cpp:1473: undefined reference to sscanf' sketch\frozen.cpp.o: In functionb64dec’:
sketch/frozen.cpp:1473: undefined reference to sscanf' sketch\frozen.cpp.o: In functionjson_scanf_cb’:
sketch/frozen.cpp:1473: undefined reference to strcspn' sketch\frozen.cpp.o: In functionjson_vscanf(char const*, int, char const*, __va_list_tag)’:
sketch/frozen.cpp:1473: undefined reference to strcspn' sketch/frozen.cpp:1473: undefined reference tostrspn’
sketch\frozen.cpp.o: In function get_utf8_char_len': sketch/frozen.cpp:1473: undefined reference tostrspn’
sketch\frozen.cpp.o: In function json_vscanf(char const*, int, char const*, __va_list_tag)': sketch/frozen.cpp:1473: undefined reference tostrcspn’
collect2.exe: error: ld returned 1 exit status

Multiple libraries were found for “Servo.h”
Used: C:\Users\Pugaz\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.3.0\libraries\Servo
Not used: C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.15.0_x86__mdqgnx93n4wtt\libraries\Servo
exit status 1
Error compiling for board WeMos D1 R2 & mini.

Thanks in advance.

Pugazhendhi M

Hi Pugazhendhi,

Try updating your esp8266 library version to 2.4.2 in Tools->board->Boards Manager. OmniThing requires 2.4.2 to build.

Thanks Daniel,

That fixes the issue , I have added my first omnithing. But still I have to go a long way as there are no logs shows up on the IDE and i am unable to add the child device.

Will update my success later.

Thanks and regards,
Pugazhendhi M

1 Like

Any chance there is a version of this for Mac? I run most things off a headless Mac mini rather than a RPi and would love to use this there.

I don’t have a Mac to test this on myself, but I believe following the Linux build/installation instructions may work with little to no code modification. I can’t think of anywhere where I’m using Linux specific code that wouldn’t work on other unix-based systems. One thing that I know wouldn’t work is the systemd service files, since MacOS uses launchd as opposed to systemd, so OmniThing and its configuration tool would have to be started manually or a launchd configuration created for it.

To try this, you’ll want to make sure you have nodejs and cmake installed on your system. The Linux build instructions are in the GitHub readme.

1 Like

Got a slight problem. The Device Network it is trying to pull is the RPi’s MAC address. Unfortunately, I also use that Pi for Cast-Web-Api, which also uses the MAC address for the Device Network ID in ST. Any way we can set that to the MAC plus OT (for omni thing) or something similar?

Not that I know of. ST uses the MAC address of the LAN attached MCU to look up and find the corresponding ST Device with the matching DeviceNetworkID. This is done outside of any custom code.

I believe it is one ST Device per LAN attached MCU.

Just grab a $10 RPi ZeroW to run each application! :wink:

I believe this is possible on a Raspberry Pi, but it will require creating a virtual network interface. Basically, you can create a virtual interface that you can give any fake MAC address you want. Then you can have it use the actual Ethernet interface behind the scenes. I would have to add support to the NetworkSender and NetworkReceiver to allow specifying which interface to use, but I don’t think that should be too difficult. I can take a closer look at it tonight.

1 Like

I guess I could… Just trying to eliminate as many failure points as possible. More devices = more chances for something to go wrong.

Thanks for taking a look.