Presence detection by reading leases on DHCP server
npm install smartthings-phone-presence-sensor!Docker
!Node.js CI


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
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:
`bash
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
`
- Docker Installation
- Manual Server Installation Steps
2. open link http:/:5000
3. open router Setting tab 
4. select router type: asus or tplink or mikrotik
5. set ip(hostname) of router web admin UI
6. set port of router web admin UI (microtik rest API sevice). Default is 80 (microtik: 8728)
7. set login and password of router web admin UI
8. install SmartApp Source
9. Create new device handler
10. Add new SmartApp to SmartThings
11. Assign Phone Mac address to SmartThing Device
12. add more devices if necessary, for this repeat steps 7-10 to do this
13. 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:
`bash
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
`
- Docker Installation
- Manual Server Installation Steps
2. open link http:/:5000
3. open router Setting tab 
4. select router type: asus or tplink or mikrotik
5. set ip(hostname) of router web admin UI
6. set port of router web admin UI (microtik rest API sevice). Default is 80 (microtik: 8728)
7. set login and password of router web admin UI
8. install SmartApp Source
9. Create new device handler
10. Add new SmartApp to SmartThings with device name
11. Assign Phone Mac address to SmartThing Device
12. add more devices if necessary, for this repeat steps 7-10 to do this
13. now you can use Smartthings Device for automationManual Server Installation Steps:
1. setup linux on RaspberryPi https://ubuntu.com/download/iot/raspberry-pi-2-3
2. install node.
`bash
sudo apt-get install curl
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install nodejs
`
or
`bash
sudo apt-get install snapd
sudo snap install node --channel=14/stable --classic
`
3. install git
sudo apt-get install git
4. install pm2
sudo npm i pm2 -g
5. add pm2 to autostart
`bash
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u ${currentUser} --hp ${HOME}
`
6. make directory /opt/app
`bash
sudo mkdir -p /opt/app
`
7. make directory /opt/config
8. change ownership of /opt/app and /opt/config
`bash
sudo chown -R : /opt/app
sudo chown -R : /opt/config
`
9. checkout project
`bash
cd /opt/app
git clone https://github.com/vzakharchenko/https://github.com/vzakharchenko/smartthings-phone-presense-sensor router
`
10. copy config cp -n /opt/app/router/config/config.json /opt/config/routerConfig.json
11. install and build project
`bash
cd /opt/app/router
npm i
cd router-ui
npm i
npm build
cd ..
`
12. add poject to pm2
`bash
cd /opt/app/router
pm2 start RouterSmartAppServer.js
pm2 save
`Router setting
1. open link http:/: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 routerinstall 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 publishinstall 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" 
4. add "WiFi Device Presence"
5. 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" 
4. add "WiFi Device Presence"
5. set Presence Sensor Name and click save 
6. Manually add Integration between SmartApp and nodejs server
Assign Phone Mac address to SmartThing Device
1. open link http:/:5000
2. goto Device Tab
3. assign network device to Smartthings Device Remove Mac address from SmartThings Device
1. open link http:/:5000
2. goto "SmartThing Devices" Tab
3. click "unAssign" Manually add Integration between SmartApp and nodejs server
1. get applicationId and secret from SmartApp
- open smartapp on phone: 
or
- open smartapp on smartthing portal:   
2. open link http:/: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.jsonexample of keycloak.json
`json
{
"realm": "REALM",
"auth-server-url": "https://localhost:8090/auth",
"ssl-required": "external",
"resource": "testClient",
"credentials": {
"secret": "secret"
},
"confidential-port": 0
}
``