{"_id":"@docbliny/haiku-senseme","_rev":"4-c9920ee236582dfe9af04ad6e9c0012b","name":"@docbliny/haiku-senseme","dist-tags":{"latest":"2.0.3"},"versions":{"2.0.0":{"name":"@docbliny/haiku-senseme","version":"2.0.0","description":"Control SenseME enabled devices from Haiku","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/forty2/haiku-senseme.git"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","docs":"babel --no-babelrc --plugins syntax-function-bind,transform-function-bind,transform-object-rest-spread -D -d docsrc src && jsdoc2md -f docsrc/*.js > API.md","build":"babel src -d dist -D","clean":"rm -rf dist/ && rm -rf docsrc/","example":"node ./dist/example.js","prepublish":"npm run build"},"author":{"name":"Zach Bean","email":"zb@forty2.com"},"license":"MIT","dependencies":{"any-observable":"^0.2.0","compute-polynomial":"^1.1.0","debug":"^2.6.6","just-compose":"^1.0.6","just-remove":"^1.1.22","just-values":"^1.0.0","message-socket":"^1.0.3"},"devDependencies":{"@babel/cli":"^7.1.2","@babel/core":"^7.0.0","@babel/plugin-proposal-function-bind":"^7.0.0","@babel/plugin-syntax-function-bind":"^7.0.0","@babel/preset-env":"^7.0.0"},"babel":{"presets":["@babel/preset-env"],"plugins":["@babel/plugin-proposal-function-bind","@babel/plugin-syntax-function-bind"]},"gitHead":"c100f37db09e91fe18b1a4ceec718a47dc68ad63","bugs":{"url":"https://github.com/forty2/haiku-senseme/issues"},"homepage":"https://github.com/forty2/haiku-senseme#readme","_id":"@docbliny/haiku-senseme@2.0.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"docbliny","email":"tomi.blinnikka@bliny.net"},"dist":{"integrity":"sha512-RoY9UoWrXsw/vGkmMzuZDe0DKL6Oa0D4BXy670NzZQMfD0gjZpxU3rrkCpTQP0TAHZQJFogbnFkW1nqvZbw5kQ==","shasum":"1a940b85c7d76db7a27578c42c5a7f6d53dc63e9","tarball":"https://registry.npmjs.org/@docbliny/haiku-senseme/-/haiku-senseme-2.0.0.tgz","fileCount":25,"unpackedSize":83795,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbsSo9CRA9TVsSAnZWagAAvJQP/0GP58RhUCX1z2wuRK+8\n9AZB6z5Fa8iTTKo1K5sUb89HySOLYBDK7et22lv/7YY5MzkrCwgfgLDb2jct\nwL4BYtrJEE5FaTbnca7QPdKQBXCiLcYucS7OOg2jPL/eLrFmf+TmUJlJURQW\nS9vq5Z1djr40Yr0maFdYGYwA4PW1hM1nCd1UjzypRuQJ9N6B9S62igKTPA9y\nU87EO1pi2qEp00V3rPH/Sm1nHKTdyW/g0RbHhMFV2ex7z2eMoPT6r63J7fci\nWRW9IlRS2iI+sXDG9GJhAdq3D5/T+CrG3X3DEqyGpLeTWqIwpBQf0/GDxA/I\nOT+xW9CVxdPFmZVot0K4stCXQPu2UpoLj9vvUf2d25gDoihk+Y9iFeDFcb4r\nifVcB60iqoYpgw8Dn6n5vhDHq5kJ7nr38qZj8qAIDPQDVWnw4bN1yedR20MC\n4kXyz0vdKEJyugfBYolQslzZHXmLuAXM6UhSzJ8Nid64kfNrkRnfijyp9bvP\nukbcZW1eLF6giVfKk6TeJF70H5zOLMYXM/OUzaffYbJqrGurxhY0FVPhO6cb\nkh9Zg+NXfnCw+UF1y9WZP5vh5fUDtFRJp15F/742pSAMOkIJ+Oy5VNCiOSKK\nW++65HEjmCiSQ+kJI5Bgip1jGEpaqdEvfdE6HKg58qezrCLRI3Mh8xN1yjw5\nyIpg\r\n=xMvd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrEO6AH9R1+N4DJiI3lCLqHqWcnGqsdtXkFhWAbCFw3wIgCaTWN6eU5hUXvvsoYNDVdE6yux4QFR2QDjvXb9VZDxc="}]},"maintainers":[{"name":"docbliny","email":"tomi.blinnikka@bliny.net"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/haiku-senseme_2.0.0_1538337341075_0.8242641539208984"},"_hasShrinkwrap":false},"2.0.1":{"name":"@docbliny/haiku-senseme","version":"2.0.1","description":"Control SenseME enabled devices from Haiku","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/docbliny/haiku-senseme.git"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","docs":"babel --no-babelrc --plugins syntax-function-bind,transform-function-bind,transform-object-rest-spread -D -d docsrc src && jsdoc2md -f docsrc/*.js > API.md","build":"babel src -d dist -D","clean":"rm -rf dist/ && rm -rf docsrc/","example":"node ./dist/example.js","prepublish":"npm run build"},"author":{"name":"Tomi Blinnikka","email":"tomi.blinnikka@bliny.net"},"license":"MIT","dependencies":{"any-observable":"^0.2.0","compute-polynomial":"^1.1.0","debug":"^2.6.6","just-compose":"^1.0.6","just-remove":"^1.1.22","just-values":"^1.0.0","message-socket":"^1.0.3"},"devDependencies":{"@babel/cli":"^7.1.2","@babel/core":"^7.0.0","@babel/plugin-proposal-function-bind":"^7.0.0","@babel/plugin-syntax-function-bind":"^7.0.0","@babel/preset-env":"^7.0.0"},"babel":{"presets":["@babel/preset-env"],"plugins":["@babel/plugin-proposal-function-bind","@babel/plugin-syntax-function-bind"]},"gitHead":"71775a7ba5ade43379c717e7e7035f12659accdb","bugs":{"url":"https://github.com/docbliny/haiku-senseme/issues"},"homepage":"https://github.com/docbliny/haiku-senseme#readme","_id":"@docbliny/haiku-senseme@2.0.1","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"docbliny","email":"tomi.blinnikka@bliny.net"},"dist":{"integrity":"sha512-JqgRqcJhDmZiklwT77J7FMRkZviXNCVmZkOXco61jMehxbuzvBRM3l+u3aBCXd/L2/FoAcGHCwHdi/Dz8WmcsQ==","shasum":"50f672ee57b988aaa306503bbf1a5d27b68b8791","tarball":"https://registry.npmjs.org/@docbliny/haiku-senseme/-/haiku-senseme-2.0.1.tgz","fileCount":25,"unpackedSize":83813,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbsSz/CRA9TVsSAnZWagAA6IMQAJu4IfG0IlhiegT2jn9s\nx+E+i1mvZYn9ZlSSjZxucdukcXk0ID8G9sm+blS/LLHZ33zA2wbrQNdiXbQC\nTwRDy1IB+DGGDUGe0DJ1Wj+qrLIJ+Y166O0t37WqJ42n+f8fb9vjxw5J7S3F\nilzjHaAaEaJL/1vsoAenjkuuDnvrUnfDivN7dl+F12FpLPF4gHnePFHYh30E\nw8mVkGVDSG/jJvjumwxXhHPcFtBcIm+GiH9cn9vvx5baIQBJ/3rnq49noCU/\nqCQpaHpFFXnBW94NORRgZT5fQZ7dyxdxXVhfBrdT0zIGHKxpzBId39Z1P4SY\nrgn4lJ3jXUkVFoo2Tz93EGzpAqmIGblsnqi22+jFw2CkOMJOOqRuXJ+uLXX1\nIwIHWV6jGFxLIjL6dv97nRKLeNwhdrxlVngRbZCLO+JqEwcEY2KTeUpJfmo6\nsszxiZti7vCExxZdtkDgaHKch430ZHVP/xNno2iD6xEn5WXaDklModR1mGLR\nj1o0Ee4ZSUMEyINBFGC3JWv/1OGoZAgZmEFTv8tGHTGiKObte+cKwSk8/05y\nwIem5xsa3HRx+hy1Mgzoejw+UyJB48X60AD7uY4IitiA34Pgs5oUnRCTz7IP\n0tlZ91traq/hHQ/141nr7kK+hr+iNpPleybSvrrO3ujVi6pMD5BqpfVImDvX\n5ccu\r\n=nMBA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7eb+/NHVvEynYubvu1bxta4pE0U8D7J3bVz8THAx+vwIhALp633cYWs0dVTNhy/gLSJfBhmeydy+Ova4VSWgFdr1R"}]},"maintainers":[{"name":"docbliny","email":"tomi.blinnikka@bliny.net"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/haiku-senseme_2.0.1_1538338047060_0.6933869493956137"},"_hasShrinkwrap":false},"2.0.2":{"name":"@docbliny/haiku-senseme","version":"2.0.2","description":"Control SenseME enabled devices from Haiku","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/docbliny/haiku-senseme.git"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","docs":"babel --no-babelrc --plugins syntax-function-bind,transform-function-bind,transform-object-rest-spread -D -d docsrc src && jsdoc2md -f docsrc/*.js > API.md","build":"babel src -d dist -D","clean":"rm -rf dist/ && rm -rf docsrc/","example":"node ./dist/example.js","prepublish":"npm run build"},"author":{"name":"Tomi Blinnikka","email":"tomi.blinnikka@bliny.net"},"license":"MIT","dependencies":{"any-observable":"^0.2.0","compute-polynomial":"^1.1.0","debug":"^2.6.6","just-compose":"^1.0.6","just-remove":"^1.1.22","just-values":"^1.0.0","message-socket":"^1.0.3"},"devDependencies":{"@babel/cli":"^7.1.2","@babel/core":"^7.0.0","@babel/plugin-proposal-function-bind":"^7.0.0","@babel/plugin-syntax-function-bind":"^7.0.0","@babel/preset-env":"^7.0.0"},"babel":{"presets":["@babel/preset-env"],"plugins":["@babel/plugin-proposal-function-bind","@babel/plugin-syntax-function-bind"]},"gitHead":"71775a7ba5ade43379c717e7e7035f12659accdb","bugs":{"url":"https://github.com/docbliny/haiku-senseme/issues"},"homepage":"https://github.com/docbliny/haiku-senseme#readme","_id":"@docbliny/haiku-senseme@2.0.2","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"docbliny","email":"tomi.blinnikka@bliny.net"},"dist":{"integrity":"sha512-dtORPkO+JYLwjplWQAGjhtLdmerDVGizE72LXK05vEQrthK0GmcbLdGkuNA/knydIfTODN+JdRUy0N6T6IbcAw==","shasum":"1f4e1240c719f921441d06020f2547e45e93104b","tarball":"https://registry.npmjs.org/@docbliny/haiku-senseme/-/haiku-senseme-2.0.2.tgz","fileCount":25,"unpackedSize":83813,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbsXKfCRA9TVsSAnZWagAAPpwP/2FaQKWSloB2u9lcL/SJ\np8GEdinpfKHCdfD/9SFXT5lzWWw5Fw23+7G6li09LgSGmHHgUn6AksUCXYW2\nQ6O38ss8SAmk26gkRaxw0cYxhqV+pEaop097gxQF0hLl2yF2NnZXiKhC2Duk\nOgbx0eBaUZ5OQL9ETTsYh+K0DhHas6aP78XbAYAsumHjoLtZyzzMDYNM/Pwy\nrhDeHq5oWh4m2+/RWVKFZpE2mcte5KHNtlpO9dukPJRHmrnSucNoo/BJsS5a\ncYVnbVHDFMbjB4qO1e2YTLZSZnmomYNhoXoDnDRKorakiexKQWkMcDwTJlCh\n5KOVjUzF/TzKWqLRbPNg554TzVT88fAgR9wqTWtc9pxDDLJnEAIwaZq8TqVC\nAbBN+vYeLgWBfLD146QWnVAMHkwMKy4WVxYx3iiVYR5QMBQLUXRoUpyz+Tj3\niK712kiTP+w2WI3UMhXvzrgZaXkkD6+9aM/t2KNhlp9zdURjuzQ8cPXj692u\np1Y2WbOCVWMP4zyJSr00SZsLeHGf/UMzmmLbCIo6h/W5izX48xgt7NNUZvhu\nw+rmf8nUxMPfR6Qp3/3sBBtKOEmEWg80kQBnlgKpoHo00wKnRpYzJzWHcqvN\nwyp6CM33uxaZas9FzF8lxscDdoCLrCZVAnVeYvwI838pFZDnp7EIdWUkg46X\nAQxd\r\n=dL7t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJaD0jsqIh8U0sdsDyQZQKIPJ1OUiLGppzbTsMrN+KvwIgHGt/ad4kEjzMwvIgKTse0WYWiZzrie/ORqFzCLpGUZg="}]},"maintainers":[{"name":"docbliny","email":"tomi.blinnikka@bliny.net"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/haiku-senseme_2.0.2_1538355870599_0.1788310484300506"},"_hasShrinkwrap":false},"2.0.3":{"name":"@docbliny/haiku-senseme","version":"2.0.3","description":"Control SenseME enabled devices from Haiku","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/docbliny/haiku-senseme.git"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","docs":"babel --no-babelrc --plugins syntax-function-bind,transform-function-bind,transform-object-rest-spread -D -d docsrc src && jsdoc2md -f docsrc/*.js > API.md","build":"babel src -d dist -D","clean":"rm -rf dist/ && rm -rf docsrc/","example":"node ./dist/example.js","prepublish":"npm run build"},"author":{"name":"Tomi Blinnikka","email":"tomi.blinnikka@bliny.net"},"license":"MIT","dependencies":{"any-observable":"^0.2.0","compute-polynomial":"^1.1.0","debug":"^2.6.6","just-compose":"^1.0.6","just-remove":"^1.1.22","just-values":"^1.0.0","message-socket":"^1.0.3"},"devDependencies":{"@babel/cli":"^7.1.2","@babel/core":"^7.0.0","@babel/plugin-proposal-function-bind":"^7.0.0","@babel/plugin-syntax-function-bind":"^7.0.0","@babel/preset-env":"^7.0.0"},"babel":{"presets":["@babel/preset-env"],"plugins":["@babel/plugin-proposal-function-bind","@babel/plugin-syntax-function-bind"]},"gitHead":"4dd5b88f7aea7c3445fcd36e1df47a73ae537923","bugs":{"url":"https://github.com/docbliny/haiku-senseme/issues"},"homepage":"https://github.com/docbliny/haiku-senseme#readme","_id":"@docbliny/haiku-senseme@2.0.3","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"docbliny","email":"tomi.blinnikka@bliny.net"},"dist":{"integrity":"sha512-AjnluSxHDTfZQ7tLA8ZsDbFLeVc5qxc4qrAxi51jj7z+h9NQLiyGWxu8txDVHp8V930uCG1itsBNJOtmcgnXGw==","shasum":"c489f3de319bcfeb38feff7b35aeedc3bb85004f","tarball":"https://registry.npmjs.org/@docbliny/haiku-senseme/-/haiku-senseme-2.0.3.tgz","fileCount":25,"unpackedSize":83859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbsr9+CRA9TVsSAnZWagAAKwMQAJP1ThQGqhlHXoeTRJsI\nC3bNvnv9LjiuBMPnjyoyL/L7le3BATnSwmadJApSXnmgdIDlPwrZpo/kzO3c\nkMdvS6Z7FLPZNTrjMtwxvuxbklKhR2E2j74ma64dc4E+7nOUTiv9BuTUyJ43\ntzjEoBX/zvFuDwb+RrJY3XfNyzmxbb66NeMP8nmwY1cRd3g/Q+ZEaeWIVzI5\n+E49HylrfNoZagTQSnaVCtu4Ual6aNGPhmb7Xico9ecVFKhct5kpO1UXqsoR\nczMt6281fzK3M3u3u/XMRj6BdZlx0FySEV1AV4OLTa5v6kKy4HnFCJ7VAWZL\neH4l7V1/aMwxPm++9J5LdyYSkGPAtzh0jFN8K5LpWo4vOffPkQYWWyIEada4\nlJiBt2bRCyQejdkjkenlZ6UB6kFm7udezu8TgzdRQb4eDyIlEWkSPFWCjZ6B\nu3eHjnSm1iNQD4GZ2B1G/BSAmGeVcvYD6E5mzIVsHmaPZzDtSMRI4tAaeW/u\nuToitg8vR1zlhgWghGXKjtTp9yehBqxWEseUDp981ikOW+sGPcOuFQMA6mQ4\nw4dbO45dvTMt5SBqs7kBw4TMlzIJ+LMkJuAkRUtu26Nsd29TUGK6MVv9z3ZX\nCaJrD3lWnviprCOdY5qPquc4xQi00LP81n9UqI8Q2qTPHktgVybRZ16b0Z+K\nsi6x\r\n=7+xb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0o6zB4lzWMVV7fGwZjZ3orOzrx9V0GuwIrI/bo2J8UQIhAOngpsiOjBgjKTUVJ1bwrTqBodE48v/ZEZtsc+ycx2Yl"}]},"maintainers":[{"name":"docbliny","email":"tomi.blinnikka@bliny.net"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/haiku-senseme_2.0.3_1538441085615_0.8051161462063976"},"_hasShrinkwrap":false}},"time":{"created":"2018-09-30T19:55:40.915Z","2.0.0":"2018-09-30T19:55:41.293Z","modified":"2022-04-05T05:02:10.674Z","2.0.1":"2018-09-30T20:07:27.164Z","2.0.2":"2018-10-01T01:04:30.718Z","2.0.3":"2018-10-02T00:44:45.876Z"},"maintainers":[{"name":"docbliny","email":"tomi.blinnikka@bliny.net"}],"description":"Control SenseME enabled devices from Haiku","homepage":"https://github.com/docbliny/haiku-senseme#readme","repository":{"type":"git","url":"git+https://github.com/docbliny/haiku-senseme.git"},"author":{"name":"Tomi Blinnikka","email":"tomi.blinnikka@bliny.net"},"bugs":{"url":"https://github.com/docbliny/haiku-senseme/issues"},"license":"MIT","readme":"# haiku-senseme\n> Control your fans and other Big Ass devices\n\n[![NPM Version][npm-image]][npm-url]\n[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE.md)\n![Dependency status](https://david-dm.org/forty2/haiku-senseme.svg)\n\nhaiku-senseme is a Node.js module for controlling SenseME-enabled devices by [Haiku](http://www.haikuhome.com/).\n\n## Fork info\nThis fork incorporates the following changes:\n* https://github.com/forty2/haiku-senseme/pull/3\n* Adds support for running on machines with multiple network interfaces. The original only sent out the discovery request on the (first?) interface\n* Misc build updates\n\n## Installation\n\nThis module is distributed through NPM:\n\n```sh\nnpm install haiku-senseme --save\n```\n\n## Examples\n\nThis module handles two aspects of working with SenseME devices: discovery and control.  Discovered devices are presented as a series of `founddevice` events; when devices disappear, a `lostdevice` event will be emitted.\n\nFor example, to print the names of all SenseME devices on the local network:\n\n```javascript\nimport { SenseME } from 'haiku-senseme';\n\nSenseME\n  .on('founddevice', dev => {\n    console.log(`Found: ${dev.name}`);\n  })\n  .on('lostdevice', dev => {\n    console.log(`Lost: ${dev.name}`);\n  })\n  .discover();\n```\n\nDiscovery will continue indefinitely until you stop it:\n\n```javascript\nimport { SenseME } from 'haiku-senseme';\n\nSenseME.cancelDiscovery();\nSenseME.getAllDevices().forEach(dev => dev.disconnect());\n```\n\nIf you know the IP address and either the name or the MAC address of your device, you can skip discovery altogether if you prefer:\n\n```javascript\nimport { Device } from 'haiku-senseme';\n\nconst dev = new Device({ name: 'Living Room Fan', ip: 'aaa.bbb.ccc.ddd' });\n\n// It's too cold in here.\ndev.fan.power.value = 'off';\n```\n\nControllable properties of the fan are exposed as a set of nested properties on the Device object.  For instance:\n\n```javascript\n// Turn the fan on\ndev.fan.power.value = 'on';\n\n// How about a light breeze?\ndev.fan.whooshMode.value = 'on';\n\n// Plus, it's a little dark...\ndev.light.power.value = 'on';\n\n// But that's too much!\ndev.light.brightness.value = 3;\n```\n\nFor full details, see the [API docs](API.md).\n\nSince other devices on the network might change some of these values, it's also possible to request fresh values directly from the fan, as well as to get notification when values change:\n\n```javascript\ndev.fan.speed.refresh();\n\n// keep track of changes in speed\ndev.fan.speed.listen()\n  .on('change', speed => console.log(`Current speed: ${speed}`));\n\n// keep track of any change to any property\ndev.listenAll()\n  .on('change', ({ path, value }) => {\n      console.log(JSON.stringify(path));\n      // prints [\"fan\", \"speed\"]\n\n      console.log(value);\n      // prints 5\n  });\n\ndev.fan.speed.value = 5;\n```\n\nIf you install one of the `Observable` libraries supported by [any-observable](http://www.npmjs.org/package/any-observable/), you can also get property change notifications as an `Observable` stream:\n\n```javascript\nimport 'any-observable/register/rxjs-all';\nimport { Device } from 'haiku-senseme';\n\nconst dev = new Device({ name: 'Living Room', ip: '...' });\n\n// It's very important that I know when the fan speed drops below 3...\ndev.fan.speed\n  .observe()\n  .map(x => x < 3)\n  .distinctUntilChanged()\n  .filter(x => x)\n  .subscribe(\n    x => console.log(`Oh no! The fan's going too slow! (current speed: ${x}`)\n  );\n\n// You can also observe changes in all properties\ndev.observeAll()\n  // but really I only care about fan properties\n  .filter(({ path: [category] }) => category === 'fan')\n  .subscribe(\n    ({ path: [, ...prop], value }) => {\n      console.log(`Something about the fan has changed: ${prop}, ${value}`);\n    }\n  );\n```\n\n## Contributing\n\nContributions are of course always welcome.  If you find problems, please report them in the [Issue Tracker](http://www.github.com/forty2/haiku-senseme/issues/).  If you've made an improvement, open a [pull request](http://www.github.com/forty2/haiku-senseme/pulls).\n\nGetting set up for development is very easy:\n```sh\ngit clone <your fork>\ncd haiku-senseme\nnpm install -g babel-cli # if you don't already have it\nnpm install\n```\n\nAnd the development workflow is likewise straightforward:\n```sh\n# make a change to the src/ file, then...\nnpm run build\nnpm run example # run the bundled example script\n\n# if you change the documentation:\nnpm run docs\n\n# or if you want to clean up all the leftover build products:\nnpm run clean\n```\n\n## Release History\n\n* 1.1.0\n    * Split QueuedSocket.js into its own module, now called `message-socket`\n    * Switch from `js-logger` to `debug` for logging.\n\n* 1.0.0\n    * The first release.\n\n## Meta\n\nZach Bean – zb@forty2.com\n\nDistributed under the MIT license. See [LICENSE](LICENSE.md) for more detail.\n\n[npm-image]: https://img.shields.io/npm/v/haiku-senseme.svg?style=flat\n[npm-url]: https://npmjs.org/package/haiku-senseme\n[npm-downloads]: https://img.shields.io/npm/dm/haiku-senseme.svg?style=flat\n","readmeFilename":"README.md"}