https://github.com/emoncms/find
Find OpenEnergyMonitor devices on your local network
https://github.com/emoncms/find
Last synced: 3 months ago
JSON representation
Find OpenEnergyMonitor devices on your local network
- Host: GitHub
- URL: https://github.com/emoncms/find
- Owner: emoncms
- License: agpl-3.0
- Created: 2019-01-07T10:48:56.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2021-05-18T10:47:38.000Z (almost 5 years ago)
- Last Synced: 2024-04-15T06:59:46.555Z (almost 2 years ago)
- Language: JavaScript
- Homepage:
- Size: 172 KB
- Stars: 1
- Watchers: 7
- Forks: 4
- Open Issues: 2
-
Metadata Files:
- Readme: readme.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# emoncms/find
An emoncms module to find OpenEnergyMonitor devices on your local network.
hosted version: https://emoncms.org/find

## Problem
It can sometimes be an difficult finding a emonbase/emonpi on a home network to access the EmonCMS interface, hostname support can be tempremental and its easy to forget the router passwords to access the device list on the router. A network scan can be done using a 3rd party app like [fing](https://play.google.com/store/apps/details?id=com.overlook.android.fing) however this adds another step and complexity.
## Solution
We have created an emoncms module that can be accessed from an existing EmonCMS intallation or from [emoncms.org](https://emoncms.org/find) that can scan the local network for devices with EmonCMS installed.
#### This is done in 2 stages.
1. Read the local IP Address
2. Check every entry on the network for an EmonCMS installation.
The results are shown in a list along with the IP Address and type of device that returned a response. You can click any found device to access it's control panel.
### Requirements
These changes will be available with the normal EmonPi and EmonCMS updates. In the mean time you can use the following to test.
#### emonpi
The device type is set using the [emonpi](https://github.com/openenergymonitor/emonpi) repository. To update the code run the following:
```
$ cd /home/pi/emonpi
$ git checkout master
$ git pull
```
#### emoncms
For the device to respond with it's correct type you have to use the master branch of [emoncms](https://github.com/emoncms/emoncms).
```
$ cd /var/www/emoncms
$ git checkout master
$ git pull
```
---
### TLDR;
This is written in JavaScript and only ran in the user's browser using a standard API (webRTC). Nothing is transmitted outside the local network.
1. The RTCPeerConnection API allows the browser to open a connection to another ip address. Once this connection is initialised the local ip address can be read.
> This example shows what is returned by the WebRTC api (https://codepen.io/emrys/full/aPKPzv)
2. Send 253 ajax requests (0.0.0.1 - 0.0.0.254) to every IPv4 address possible in the current subnet testing for responses from an EmonCMS install (eg `http://192.168.1.136/emoncms/describe`). Only correctly formatted responses are displayed in the list, anything else is ignored.
4 different expected types are returned from an EmonCMS installation at the API endpoint `/describe`:-
1. emonpi
2. emonbase
3. emoncms
4. smartplug
5. openevse
The module asks for confirmation from the user because it must open another tab changing from `https` to `http`.
This tool does not work using `https` as the local installation of EmonCMS doesn't use TLS to encrypt the communication between the client and server. The ajax requests would fail if done over `https` and no devices would be found.