This commit is contained in:
Alex Solomaha
2017-07-25 17:49:42 +03:00
parent a09f6ed086
commit c393461aa7
4 changed files with 93 additions and 86 deletions

View File

@@ -1,4 +1,4 @@
Solomaha Home
Smart Home
============================
This is core center for Solomaha Home system. Includes Web Panel and API.
@@ -14,22 +14,11 @@ Feel free to contribute!
FEATURES
------------
- Real time updates via WebSocket protocol
- Real time via WebSocket protocol
- Universal Admin Panel for creating Items, managing Boards, configure application, etc
- Triggers (Events) with tasks (when triggered - doing tasks)
- API
- Web Panel
DEVICES & ROMS
------------
I've selected ESP8266 NodeMCU boards for low price and websocket module support. It uses lua firmware
- [NodeMCU #2](https://github.com/CyanoFresh/SmartHome-NodeMCU-2)
- [NodeMCU #3](https://github.com/CyanoFresh/SmartHome-NodeMCU-3)
- [WeMos D1 Mini #1](https://github.com/CyanoFresh/SmartHome-Wemos-1)
- ...
- Event system with multiple conditions and tasks
- HTTP REST API
- Web Panel for any device
REQUIREMENTS
------------

View File

@@ -25,20 +25,20 @@
"yiisoft/yii2-gii": "*"
},
"config": {
"process-timeout": 1800
},
"extra": {
"asset-installer-paths": {
"npm-asset-library": "vendor/npm",
"bower-asset-library": "vendor/bower"
},
"asset-repositories": [
{
"type": "bower-github",
"url": "https://github.com/CyanoFresh/snackbarjs",
"name": "bower-asset/snackbarjs"
}
]
"process-timeout": 1800,
"fxp-asset": {
"installer-paths": {
"npm-asset-library": "vendor/npm",
"bower-asset-library": "vendor/bower"
},
"repositories": [
{
"type": "bower-github",
"url": "https://github.com/CyanoFresh/snackbarjs",
"name": "bower-asset/snackbarjs"
}
]
}
},
"scripts": {
"post-install-cmd": "php init --env=Development --overwrite=n"

121
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"content-hash": "35e60f6ad07a422f7ff3675cdb46b5dd",
"content-hash": "54e6990d68fd3b947dc85dfa293d2dd4",
"packages": [
{
"name": "bower-asset/bootstrap",
@@ -447,16 +447,16 @@
},
{
"name": "cebe/markdown",
"version": "1.1.1",
"version": "1.1.2",
"source": {
"type": "git",
"url": "https://github.com/cebe/markdown.git",
"reference": "c30eb5e01fe021cc5bba2f9ee0eeef96d4931166"
"reference": "25b28bae8a6f185b5030673af77b32e1163d5c6e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/cebe/markdown/zipball/c30eb5e01fe021cc5bba2f9ee0eeef96d4931166",
"reference": "c30eb5e01fe021cc5bba2f9ee0eeef96d4931166",
"url": "https://api.github.com/repos/cebe/markdown/zipball/25b28bae8a6f185b5030673af77b32e1163d5c6e",
"reference": "25b28bae8a6f185b5030673af77b32e1163d5c6e",
"shasum": ""
},
"require": {
@@ -503,7 +503,7 @@
"markdown",
"markdown-extra"
],
"time": "2016-09-14T20:40:20+00:00"
"time": "2017-07-16T21:13:23+00:00"
},
{
"name": "container-interop/container-interop",
@@ -538,21 +538,24 @@
},
{
"name": "evenement/evenement",
"version": "v2.0.0",
"version": "v2.1.0",
"source": {
"type": "git",
"url": "https://github.com/igorw/evenement.git",
"reference": "f6e843799fd4f4184d54d8fc7b5b3551c9fa803e"
"reference": "6ba9a777870ab49f417e703229d53931ed40fd7a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/igorw/evenement/zipball/f6e843799fd4f4184d54d8fc7b5b3551c9fa803e",
"reference": "f6e843799fd4f4184d54d8fc7b5b3551c9fa803e",
"url": "https://api.github.com/repos/igorw/evenement/zipball/6ba9a777870ab49f417e703229d53931ed40fd7a",
"reference": "6ba9a777870ab49f417e703229d53931ed40fd7a",
"shasum": ""
},
"require": {
"php": ">=5.4.0"
},
"require-dev": {
"phpunit/phpunit": "^6.0||^5.7||^4.8.35"
},
"type": "library",
"extra": {
"branch-alias": {
@@ -571,8 +574,7 @@
"authors": [
{
"name": "Igor Wiedler",
"email": "igor@wiedler.ch",
"homepage": "http://wiedler.ch/igor/"
"email": "igor@wiedler.ch"
}
],
"description": "Événement is a very simple event dispatching library for PHP",
@@ -580,7 +582,7 @@
"event-dispatcher",
"event-emitter"
],
"time": "2012-11-02T14:49:47+00:00"
"time": "2017-07-17T17:39:19+00:00"
},
{
"name": "ezyang/htmlpurifier",
@@ -946,22 +948,32 @@
},
{
"name": "intervention/httpauth",
"version": "2.0.2",
"version": "2.0.3",
"source": {
"type": "git",
"url": "https://github.com/Intervention/httpauth.git",
"reference": "407203e29fc5b3f2c4dd2f1849a799a72aa15b1c"
"reference": "69d4627c398c2d74b1c70aae7de7121e0b627c17"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Intervention/httpauth/zipball/407203e29fc5b3f2c4dd2f1849a799a72aa15b1c",
"reference": "407203e29fc5b3f2c4dd2f1849a799a72aa15b1c",
"url": "https://api.github.com/repos/Intervention/httpauth/zipball/69d4627c398c2d74b1c70aae7de7121e0b627c17",
"reference": "69d4627c398c2d74b1c70aae7de7121e0b627c17",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"Intervention\\Httpauth\\HttpauthServiceProvider"
],
"aliases": {
"Httpauth": "Intervention\\Httpauth\\Facades\\Httpauth"
}
}
},
"autoload": {
"psr-4": {
"Intervention\\Httpauth\\": "src/Intervention/Httpauth"
@@ -985,20 +997,20 @@
"http",
"laravel"
],
"time": "2017-01-29T12:04:52+00:00"
"time": "2017-06-28T17:37:25+00:00"
},
{
"name": "kartik-v/bootstrap-fileinput",
"version": "v4.4.1",
"version": "v4.4.2",
"source": {
"type": "git",
"url": "https://github.com/kartik-v/bootstrap-fileinput.git",
"reference": "aa4e1a520cef078922ed2c7c8e3e944d496388f6"
"reference": "28c89de2708f32814879241b6f112ee27b8f4ec8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/kartik-v/bootstrap-fileinput/zipball/aa4e1a520cef078922ed2c7c8e3e944d496388f6",
"reference": "aa4e1a520cef078922ed2c7c8e3e944d496388f6",
"url": "https://api.github.com/repos/kartik-v/bootstrap-fileinput/zipball/28c89de2708f32814879241b6f112ee27b8f4ec8",
"reference": "28c89de2708f32814879241b6f112ee27b8f4ec8",
"shasum": ""
},
"type": "library",
@@ -1038,7 +1050,7 @@
"progress",
"upload"
],
"time": "2017-05-25T19:06:59+00:00"
"time": "2017-06-24T05:15:30+00:00"
},
{
"name": "kartik-v/bootstrap-star-rating",
@@ -1086,19 +1098,24 @@
},
{
"name": "kartik-v/dependent-dropdown",
"version": "v1.4.4",
"version": "v1.4.5",
"source": {
"type": "git",
"url": "https://github.com/kartik-v/dependent-dropdown.git",
"reference": "a13970aec78e8eaae5cb9f1168df20d443f95113"
"reference": "1f6dbe5bcd144eaaec726409f03be49ce3392269"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/kartik-v/dependent-dropdown/zipball/a13970aec78e8eaae5cb9f1168df20d443f95113",
"reference": "a13970aec78e8eaae5cb9f1168df20d443f95113",
"url": "https://api.github.com/repos/kartik-v/dependent-dropdown/zipball/1f6dbe5bcd144eaaec726409f03be49ce3392269",
"reference": "1f6dbe5bcd144eaaec726409f03be49ce3392269",
"shasum": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4.x-dev"
}
},
"autoload": {
"psr-4": {
"kartik\\plugins\\depdrop\\": ""
@@ -1124,7 +1141,7 @@
"option",
"select"
],
"time": "2015-12-16T18:15:01+00:00"
"time": "2017-07-11T08:14:34+00:00"
},
{
"name": "kartik-v/php-date-formatter",
@@ -2504,25 +2521,29 @@
},
{
"name": "pimple/pimple",
"version": "v3.0.2",
"version": "v3.2.2",
"source": {
"type": "git",
"url": "https://github.com/silexphp/Pimple.git",
"reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a"
"reference": "4d45fb62d96418396ec58ba76e6f065bca16e10a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/silexphp/Pimple/zipball/a30f7d6e57565a2e1a316e1baf2a483f788b258a",
"reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a",
"url": "https://api.github.com/repos/silexphp/Pimple/zipball/4d45fb62d96418396ec58ba76e6f065bca16e10a",
"reference": "4d45fb62d96418396ec58ba76e6f065bca16e10a",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
"php": ">=5.3.0",
"psr/container": "^1.0"
},
"require-dev": {
"symfony/phpunit-bridge": "^3.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0.x-dev"
"dev-master": "3.2.x-dev"
}
},
"autoload": {
@@ -2546,7 +2567,7 @@
"container",
"dependency injection"
],
"time": "2015-09-11T15:10:35+00:00"
"time": "2017-07-23T07:32:15+00:00"
},
{
"name": "psr/container",
@@ -3281,16 +3302,16 @@
},
{
"name": "symfony/event-dispatcher",
"version": "v3.3.2",
"version": "v3.3.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "4054a102470665451108f9b59305c79176ef98f0"
"reference": "67535f1e3fd662bdc68d7ba317c93eecd973617e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4054a102470665451108f9b59305c79176ef98f0",
"reference": "4054a102470665451108f9b59305c79176ef98f0",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/67535f1e3fd662bdc68d7ba317c93eecd973617e",
"reference": "67535f1e3fd662bdc68d7ba317c93eecd973617e",
"shasum": ""
},
"require": {
@@ -3340,20 +3361,20 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
"time": "2017-06-04T18:15:29+00:00"
"time": "2017-06-09T14:53:08+00:00"
},
{
"name": "symfony/http-foundation",
"version": "v3.3.2",
"version": "v3.3.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "80eb5a1f968448b77da9e8b2c0827f6e8d767846"
"reference": "e307abe4b79ccbbfdced9b91c132fd128f456bc5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/80eb5a1f968448b77da9e8b2c0827f6e8d767846",
"reference": "80eb5a1f968448b77da9e8b2c0827f6e8d767846",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/e307abe4b79ccbbfdced9b91c132fd128f456bc5",
"reference": "e307abe4b79ccbbfdced9b91c132fd128f456bc5",
"shasum": ""
},
"require": {
@@ -3393,7 +3414,7 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
"time": "2017-06-05T13:06:51+00:00"
"time": "2017-07-17T14:07:10+00:00"
},
{
"name": "symfony/polyfill-mbstring",
@@ -3456,16 +3477,16 @@
},
{
"name": "symfony/routing",
"version": "v3.3.2",
"version": "v3.3.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "39804eeafea5cca851946e1eed122eb94459fdb4"
"reference": "dc70bbd0ca7b19259f63cdacc8af370bc32a4728"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/39804eeafea5cca851946e1eed122eb94459fdb4",
"reference": "39804eeafea5cca851946e1eed122eb94459fdb4",
"url": "https://api.github.com/repos/symfony/routing/zipball/dc70bbd0ca7b19259f63cdacc8af370bc32a4728",
"reference": "dc70bbd0ca7b19259f63cdacc8af370bc32a4728",
"shasum": ""
},
"require": {
@@ -3530,7 +3551,7 @@
"uri",
"url"
],
"time": "2017-06-02T09:51:43+00:00"
"time": "2017-06-24T09:29:48+00:00"
},
{
"name": "tubalmartin/cssmin",

View File

@@ -285,18 +285,15 @@ class CoreServer implements MessageComponentInterface
throw new UnauthorizedHttpException('Wrong credentials');
}
$board = Board::findOne([
'id' => $boardID,
'type' => Board::TYPE_WEBSOCKET,
'secret' => $boardSecret,
]);
$board = Board::findOne($boardID);
if ( ! $board) {
if ( ! $board or $board->secret !== $boardSecret or $board->type !== Board::TYPE_WEBSOCKET ) {
$this->log("Board [$boardID] not found!");
throw new NotFoundHttpException("Board with given ID does not exists");
}
// Check if from local network
$ip = $conn->WebSocket->request->getHeader('X-Forwarded-For') != null ? $conn->WebSocket->request->getHeader('X-Forwarded-For') : $conn->remoteAddress;
if ( ! $board->remote_connection and ! IPHelper::isLocal($ip)) {