Narwhals Prolong Mischief

    smartthings-phone-presence-sensor

    1.1.4 • Public • Published

    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!

    Install

    npm i smartthings-phone-presence-sensor

    DownloadsWeekly Downloads

    3

    Version

    1.1.4

    License

    Apache-2.0

    Unpacked Size

    7.09 MB

    Total Files

    95

    Last publish

    Collaborators

    • vzakharchenko