Nectar of the Programming Masses

    homebridge-connectedbytcp

    1.0.3 • Public • Published

    homebridge-connectedbytcp

    Home bridge Plugin for Connected by TCP

    Setting up your TCP Lights

    Fixtures are ignored - each individual bulb is exposed.

    Installation

    • Install homebridge using: npm install -g homebridge
    • Install this plugin using: npm install -g homebridge-connectedbytcp
    • Update your configuration file. See the sample below.

    Configuration

    You will need to have a static IP address assigned to your hub reachable by homebridge. If possible you can use your router and the MAC address of the device to consistently assign a static IP that can be referenced in the configuration.

    You will initially need to run by putting the hub into sync mode and not including the token in the config. When you run this way, the plugin will request a token a log it into your configure like so:

    Hub is synced, update your config.json to include:
      token: e2de937chr0lhrlqd6bus3l2z5jcy5p3vs7013bq
    

    Afterwards, add the token to your config and restart homebridge.

        "platforms": [
           {
             "platform": "ConnectedByTcp",
             "name": "ConnectedByTcp",
             "ip": "172.16.1.40",
             "loglevel":"3",
             "token":"e2de937chr0lhrlqd6bus3l2z5jcy5p3vs7013bq"
           }
        ],
    

    Optionally, set names for the deviceids in Homekit:

        "platforms": [
           {
             "platform": "ConnectedByTcp",
             "name": "ConnectedByTcp",
             "ip": "172.16.1.40",
             "loglevel":"3",
             "token":"e2de937chr0lhrlqd6bus3l2z5jcy5p3vs7013bq",
             "deviceNames": {
               "219373657216334108": "Desk Lamp",
               "219373657216334927": "Stand Lamp"
             }
           }
        ],
    

    TCP Connected API

    General documentation on what I have discovered about the TCP Connected API.

    Notes on the TCP API

    • Parameter Order Matters:
    1. cmd
    2. data
    3. fmt - always pass "fmt=xml" as the only supported option.

    GWRLogin

    This is required to create a token that can be used for subsequent calls to the hub. The hub needs to be placed in sync-mode, and then this call should be made passing in a GUID as the email and the password.

    Request:

    POST
    cmd:GWRLogin
    data:
    <gip>
      <version>1</version>
      <email>a1be5ae8-fe17-4946-a0e2-346ef7082f51</email>
      <password>a1be5ae8-fe17-4946-a0e2-346ef7082f51</password>
    </gip>
    

    Response:

    <gip>
       <version>1</version>
       <rc>200</rc>
       <token>e2de937chr0lhrlqd6bus3l2z5jcy5p3vs7013bq</token>
    </gip>
    

    Working CURL:

    curl -vvv -X POST -k -H "Content-Type: text/xml" -d "cmd=GWRLogin" -d "data=%3Cgip%3E%3Cversion%3E1%3C%2Fversion%3E%3Cemail%3Ea1be5ae8-fe17-4946-a0e2-346ef7082f51%3C%2Femail%3E%3Cpassword%3Ea1be5ae8-fe17-4946-a0e2-346ef7082f51%3C%2Fpassword%3E%3C%2Fgip%3E" -d "fmt=xml" "https://172.16.1.40/gwr/gop.php"
    

    RoomGetCarousel

    Returns a list of all of the rooms and devices inside of each individual room. The list of fields is carriage-return (\n) delimited in the string which will then get URL encoded in the message send (%0A).

    Request:

    POST
    cmd:RoomGetCarousel
    data:
    <gip>
      <version>1</version>
      <token>e2de937chr0lhrlqd6bus3l2z5jcy5p3vs7013bq</token>
      <fields>name
              control
              power
              product
              class
              realtype
              status
      </fields>
    </gip>
    

    Reponse:

    <gip>
      <version>1</version>
      <rc>200</rc>
      <room>
        <rid>2</rid>
        <name>Bedroom</name>
        <desc></desc>
        <known>1</known>
        <type>0</type>
        <color>004fd9</color>
        <colorid>2</colorid>
        <img>images/blue.png</img>
        <power>0</power>
        <poweravg>0</poweravg>
        <energy>0</energy>
        <device>
          <did>216518569934732173</did>
          <known>1</known>
          <lock>0</lock>
          <state>1</state>
          <level>100</level>
        </device>
        <device>
          <did>216518569935837586</did>
          <known>1</known>
          <lock>0</lock>
          <state>1</state>
          <level>100</level>
        </device>
      </room>
    </gip>
    

    DeviceSendCommand - On/Off

    Sends a command to a device, such as turning the lights on/off.

    Request:

    POST
    cmd:RoomGetCarousel
    data:
    <gip>
      <version>1</version>
      <token>e2de937chr0lhrlqd6bus3l2z5jcy5p3vs7013bq</token>
      <did>216518569934732173</did>
      <value>1</value>
    </gip>
    

    Result:

    <gip>
      <version>1</version>
      <rc>200</rc>
    </gip>
    

    DeviceSendCommand - Dimming

    Sends a command to a device for the level (dimming) of the device.

    Request:

    POST
    cmd:RoomGetCarousel
    data:
    <gip>
      <version>1</version>
      <token>e2de937chr0lhrlqd6bus3l2z5jcy5p3vs7013bq</token>
      <did>216518569934732173</did>
      <value>50</value>
      <type>level</type>
    </gip>
    

    Result:

    <gip>
      <version>1</version>
      <rc>200</rc>
    </gip>
    

    Get Scenes (SceneGetList)

    Get a list of the configured scenes for you devices.

    Request:

    cmd:SceneGetList
    fmt:xml
    data:
    <gip>
      <version>1</version>
      <token>e2de937chr0lhrlqd6bus3l2z5jcy5p3vs7013bq</token>
      <islocal>1</islocal>
    </gip>
    

    Example Response:

    <gip>
      <version>1</version>
      <rc>200</rc>
      <enable>1</enable>
      <scene>
        <sid>1</sid>
        <active>1</active>
        <name>Home</name>
        <desc></desc>
        <order>0</order>
        <type>manualcustom</type>
        <icon>img/scene/on/home.png</icon>
      </scene>
      <scene>
        <sid>2</sid>
        <active>1</active><name>Away</name>
        <desc></desc>
        <order>1</order>
        <type>manualcustom</type>
        <icon>img/scene/on/away.png</icon>
      </scene>
    </gip>
    

    Get Gateway Info (GatewayGetInfo)

    Request:

    cmd:GatewayGetInfo
    fmt:xml
    data:
    <gip>
      <version>1</version>
      <token>e2de937chr0lhrlqd6bus3l2z5jcy5p3vs7013bq</token>
      <fwnew>1</fwnew>
    </gip>
    

    Example Response:

    <gip>
      <version>1</version>
      <rc>200</rc>
      <gateway>
        <gid>138787592000000</gid>
        <online>1</online>
        <primary>1</primary>
        <fwversion>3.0.39</fwversion>
        <fwnew>3.0.39</fwnew>
        <mac>D4:A9:28:01:01:01</mac>
        <serial>16G1-1168-00000</serial>
        <lastreboot></lastreboot>
        <lastseen></lastseen>
        <lanip>172.16.1.40/24</lanip>
        <externalip></externalip>
        <gipserver>tcp.greenwavereality.com</gipserver>
      </gateway>
    </gip>
    

    UserGetListDefaultRooms

    Request:

    cmd:UserGetListDefaultRooms
    fmt:xml
    data:
    <gip>
      <version>1</version>
      <token>1234567890</token>
    </gip>
    

    Example Response:

    <gip>
      <version>1</version>
      <rc>200</rc>
      <room>
        <id>1</id>
        <name>Other</name>
        <desc>Other</desc>
      </room>
      <room>
        <id>2</id>
        <name>Living Room</name>
        <desc>Living Room</desc>
      </room>
      <room>
        <id>3</id>
        <name>Bedroom</name>
        <desc>Bedroom</desc>
      </room>
      <room>
        <id>4</id>
        <name>Kitchen</name>
        <desc>Kitchen</desc>
      </room>
      <room>
        <id>5</id>
        <name>Dining Room</name>
        <desc>Dining Room</desc>
      </room>
      <room>
        <id>6</id>
        <name>Family Room</name>
        <desc>Family Room</desc>
      </room>
      <room>
        <id>7</id>
        <name>Bathroom</name>
        <desc>Bathroom</desc>
      </room>
      <room>
        <id>8</id>
        <name>Garage</name>
        <desc>Garage</desc>
      </room>
      <room>
        <id>9</id>
        <name>Laundry Room</name>
        <desc>Laundry Room</desc>
      </room>
      <room>
        <id>10</id>
        <name>Utility Room</name>
        <desc>Utility Room</desc>
      </room>
      <room>
        <id>11</id>
        <name>Office</name>
        <desc>Office</desc>
      </room>
      <room>
        <id>12</id>
        <name>Hallway / Stairway</name>
        <desc>Hallway / Stairway</desc>
      </room>
      <room>
        <id>13</id>
        <name>Exterior</name>
        <desc>Exterior</desc>
      </room>
    </gip>
    

    UserGetListDefaultColors

    Request:

    cmd:UserGetListDefaultColors
    fmt:xml
    data:
    <gip>
      <version>1</version>
      <token>1234567890</token>
    </gip>
    

    Example Response:

    <gip>
      <version>1</version>
      <rc>200</rc>
      <color>
        <id>0</id>
        <name>Black</name>
        <value>000000</value>
      </color>
      <color>
        <id>1</id>
        <name>Green</name>
        <value>00bd1f</value>
      </color>
      <color>
        <id>2</id>
        <name>Blue</name>
        <value>004fd9</value>
      </color>
      <color>
        <id>3</id>
        <name>Red</name>
        <value>e30000</value>
      </color>
      <color>
        <id>4</id>
        <name>Yellow</name>
        <value>dde500</value>
      </color>
      <color>
        <id>5</id>
        <name>Purple</name>
        <value>845fcf</value>
      </color>
      <color>
        <id>6</id>
        <name>Orange</name>
        <value>fa8a00</value>
      </color>
      <color>
        <id>7</id>
        <name>Aqua</name>
        <value>4bc3de</value>
      </color>
      <color>
        <id>8</id>
        <name>Pink</name>
        <value>ff59b7</value>
      </color>
      <color>
        <id>9</id>
        <name>White</name>
        <value>ffffff</value>
      </color>
    </gip>
    

    Batch Commands (GWRBatch)

    Runs a batch of commands against the hub.

    Request:

    cmd:GWRBatch
    fmt:xml
    data:
    <gwrcmds>
      <gwrcmd>
        <gcmd>SceneGetList</gcmd>
        <gdata>
          <gip>
            <version>1</version>
            <token>1234567890</token>
            <islocal>1</islocal>
          </gip>
        </gdata>
      </gwrcmd>
    </gwrcmds>
    

    Example Response:

    <gwrcmds>
      <gwrcmd>
        <gcmd>SceneGetList</gcmd>
        <gdata>
          <gip>
            <version>1</version>
            <rc>200</rc>
            <enable>1</enable>
            <scene>
              <sid>1</sid>
              <active>1</active>
              <name>Home</name>
              <desc></desc>
              <order>0</order>
              <type>manualcustom</type>
              <icon>img/scene/on/home.png</icon>
            </scene>
            <scene>
              <sid>2</sid>
              <active>1</active>
              <name>Away</name>
              <desc></desc>
              <order>1</order>
              <type>manualcustom</type>
              <icon>img/scene/on/away.png</icon>
            </scene>
          </gip>
        </gdata>
      </gwrcmd>
    </gwrcmds>
    

    Thanks

    Thanks to (stockmopar) who figured out security when TCP added the token that required syncing the hub. This article was vital in getting me back in business: http://home.stockmopar.com/updated-connected-by-tcp-api/

    Install

    npm i homebridge-connectedbytcp

    DownloadsWeekly Downloads

    7

    Version

    1.0.3

    License

    ISC

    Last publish

    Collaborators

    • chanomie