npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

smartthings-phone-presence-sensor

v1.1.4

Published

Presence detection by reading leases on DHCP server

Downloads

53

Readme

smartthings router connection

Docker
Node.js CI
NPM
donate

Description

With this project you can use your router as a presence detector for your phones.
Reads known personal mobile device's MAC address(using DHCP leases) to check each person's presence.

Features

Supported device list:

  • Asus:

    Firmware version should be later than 3.0.0.4.380:

    • All 802.11ax line up
    • All ROG Rapture line up
    • Blue Cave
    • BRT-AC828
    • RT-AC5300
    • RT-AC3100
    • RT-AC88U
    • RT-AC3200
    • RT-AC2900
    • RT-AC87U/R
    • RT-AC86U
    • RT-AC85U
    • RT-AC85P
    • RT-AC65P
    • RT-AC57U
    • RT-AC68U/R/P/W/UF
    • RT-AC65U
    • RT-AC1900
    • RT-AC1900P/U
    • RT-AC1750
    • RT-AC1750 B1
    • RT-AC66U/R/W
    • RT-AC66U B1
    • RT-AC66U+
    • RT-AC1300UHP
    • RT-AC1200
    • RT-AC1200G/HP/G+
    • RT-AC58U
    • RT-AC57U
    • RT-AC56U/R/S
    • RT-AC55U
    • RT-AC55UHP
    • RT-AC53U
    • RT-AC53
    • RT-AC52U
    • RT-AC52U B1
    • RT-AC51U
    • RT-AC51U+
    • RT-ACRH17
    • RT-ACRH13
    • RT-N66U/R/W
    • RT-N18U
    • RT-N16
    • RT-N14UHP
    • RT-N12E B1/C1
    • RT-N12HP B1
    • RT-N12VP B1
    • RT-N12+
    • RT-N12+ B1
    • RT-N12D1
    • DSL-AC68U/R
  • TpLink: tested on TP-LINK Touch P5

  • Mikrotik:

  • all devices

Docker Installation

  • prepare installation
sudo apt-get -y install  curl
sudo apt-get -y remove docker docker.io containerd runc
curl -sSL https://get.docker.com | sudo bash
sudo groupadd docker
sudo usermod -aG docker $USER
  • Configuration inside Docker container
docker run -d --name=smartthings-phone-presence-sensor  -p 5000:5000 --restart=always vassio/smartthings-phone-presence-sensor:latest
  • Configuration outside Docker container
mkdir -p /opt/config/router
echo "{}">/opt/config/router/routerConfig.json
docker run -d --name=smartthings-phone-presence-sensor  -p 5000:5000 -v /opt/config/router/routerConfig.json:/opt/config/routerConfig.json --restart=always vassio/smartthings-phone-presence-sensor:latest
  • Configuration outside Docker container with keycloak.json
mkdir -p /opt/config/router
echo "{}">/opt/config/router/routerConfig.json
docker run -d --name=smartthings-phone-presence-sensor  -p 5000:5000 -v /opt/config/router/routerConfig.json:/opt/config/routerConfig.json -v /opt/config/router/keycloak.json:/opt/config/router/keycloak.json --restart=always vassio/smartthings-phone-presence-sensor:latest

Installation Steps:

  1. Install server
  • using npm manager:
sudo wget -qO- https://getpm2.com/install.sh | bash
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u ${currentUser} --hp ${HOME}
sudo npm i smartthings-phone-presence-sensor -g
sudo pm2 start `npm root -g`/smartthings-phone-presence-sensor/RouterSmartAppServer.js
sudo pm2 save
  1. open link http:/<YOUR_SERVER_IP>:5000
  2. open router Setting tab
  3. select router type: asus or tplink or mikrotik
  4. set ip(hostname) of router web admin UI
  5. set port of router web admin UI (microtik rest API sevice). Default is 80 (microtik: 8728)
  6. set login and password of router web admin UI
  7. install SmartApp Source
  8. Create new device handler
  9. Add new SmartApp to SmartThings
  10. Assign Phone Mac address to SmartThing Device
  11. add more devices if necessary, for this repeat steps 7-10 to do this
  12. now you can use Smartthings Device for automation

Installation Outside your network:

Change presence status for Location where server is not accessible. Example:

  • Location 1 has server
  • Location 2 does not have server I would like to change my presence status to Leave for location 2 if my phone is in location 1.
  1. Install server
  • using npm manager:
sudo wget -qO- https://getpm2.com/install.sh | bash
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u ${currentUser} --hp ${HOME}
sudo npm i smartthings-phone-presence-sensor -g
sudo pm2 start `npm root -g`/smartthings-phone-presence-sensor/RouterSmartAppServer.js
sudo pm2 save
  1. open link http:/<YOUR_SERVER_IP>:5000
  2. open router Setting tab
  3. select router type: asus or tplink or mikrotik
  4. set ip(hostname) of router web admin UI
  5. set port of router web admin UI (microtik rest API sevice). Default is 80 (microtik: 8728)
  6. set login and password of router web admin UI
  7. install SmartApp Source
  8. Create new device handler
  9. Add new SmartApp to SmartThings with device name
  10. Assign Phone Mac address to SmartThing Device
  11. add more devices if necessary, for this repeat steps 7-10 to do this
  12. now you can use Smartthings Device for automation

Manual Server Installation Steps:

  1. setup linux on RaspberryPi https://ubuntu.com/download/iot/raspberry-pi-2-3
  2. install node.
sudo apt-get install curl
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install nodejs

or

sudo apt-get install snapd
sudo snap install node --channel=14/stable --classic
  1. install git sudo apt-get install git
  2. install pm2 sudo npm i pm2 -g
  3. add pm2 to autostart
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u ${currentUser} --hp ${HOME}
  1. make directory /opt/app
 sudo mkdir -p /opt/app
  1. make directory /opt/config
  2. change ownership of /opt/app and /opt/config
 sudo chown -R <USER>:<USER> /opt/app
sudo chown -R <USER>:<USER> /opt/config
  1. checkout project
 cd /opt/app
 git clone https://github.com/vzakharchenko/https://github.com/vzakharchenko/smartthings-phone-presense-sensor router
  1. copy config cp -n /opt/app/router/config/config.json /opt/config/routerConfig.json
  2. install and build project
cd /opt/app/router
npm i
cd router-ui
npm i
npm build
cd ..
  1. add poject to pm2
cd /opt/app/router
pm2 start RouterSmartAppServer.js
pm2 save

Router setting

  1. open link http:/<YOUR_SERVER_IP>:5000
  2. open router Setting tab
  3. select router type: asus or tplink or mikrotik
  4. set ip(hostname) of router web admin UI
  5. set port of router web admin UI (microtik rest API sevice). Default is 80 (microtik: 8728)
  6. set login and password of router

install SmartApp Source

  1. open https://graph.api.smartthings.com/location/list with your samsung account
  2. select your location
  3. add new smartapp
  4. select "From Code" insert code from https://github.com/vzakharchenko/smartthings-phone-presence-sensor/blob/master/smartapps/WiFi%20%20Presence.groovy
  5. open App-Setting
  6. enable oauth in smartapp
  7. save and publish

install device Handler

  1. open https://graph.api.smartthings.com/location/list with your samsung account
  2. select your location
  3. goto "My Device Handlers" -> "Create New Device Handler"
  4. select "From Code" insert code from https://github.com/vzakharchenko/smartthings-phone-presence-sensor/blob/master/smartapps/WiFi%20%20Presence.groovy

Add a new SmartApp to SmartThings

  1. install SmartThings
  2. open "+"->"SmartApps"
  3. add "WiFi Device Presence"
  4. set Server IP, port and Presence Sensor Name and click save

Add a new SmartApp to SmartThings Outside network

Change presence status for Location where server is not accessible. Example:

  • Location 1 has server
  • Location 2 does not have server I would like to change my presence status to Leave for location 2 if my phone is in location 1.
  1. install SmartThings
  2. open "+"->"SmartApps"
  3. add "WiFi Device Presence"
  4. set Presence Sensor Name and click save
  5. Manually add Integration between SmartApp and nodejs server

Assign Phone Mac address to SmartThing Device

  1. open link http:/<YOUR_SERVER_IP>:5000
  2. goto Device Tab
  3. assign network device to Smartthings Device

Remove Mac address from SmartThings Device

  1. open link http:/<YOUR_SERVER_IP>:5000
  2. goto "SmartThing Devices" Tab
  3. click "unAssign"

Manually add Integration between SmartApp and nodejs server

  1. get applicationId and secret from SmartApp
  2. open link http:/<YOUR_SERVER_IP>:5000
  3. goto "SmartThing Devices" Tab
  4. set applicationId and secret from step 1, and click "add Device"

Protect Admin UI using keycloak SSO (Optional)

  1. download keycloak.json from the keycloak admin ui https://www.keycloak.org/docs/latest/securing_apps/.
  2. save keycloak.json to /opt/config/router/keycloak.json or ./config/keycloak.json

example of keycloak.json

{
  "realm": "REALM",
  "auth-server-url": "https://localhost:8090/auth",
  "ssl-required": "external",
  "resource": "testClient",
  "credentials": {
    "secret": "secret"
  },
  "confidential-port": 0
}

If you find these useful, please Donate!