Skip to content

Commit

Permalink
Develop (#89)
Browse files Browse the repository at this point in the history
* issues #69 API Notifications, SMS, telegram, slack, email

* issues #84 update documentation

* issues #64 technical debt

* swagger

* issues #64 technical debt

* issues #84 update documentation

* issues #84 update documentation

* issues #84 update documentation

* issues #84 update documentation

* issues #84 update documentation

* issues #64 technical debt

* issues #64 modbus rtu/tcp

* issues #64 modbus rtu/tcp

* issues #64 technical debt

* issues #64 technical debt

* issues #64 technical debt
  • Loading branch information
e154 authored Nov 20, 2019
1 parent 2f3fb8f commit 17dad75
Show file tree
Hide file tree
Showing 38 changed files with 488 additions and 333 deletions.
4 changes: 2 additions & 2 deletions Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ services.

The basic principles underlying the system being developed are ease of setup, low cost of content and accessibility of the component base.

- [Features](#features)
- [Demo access](#demo-access)
- [Supported system](#supported-system)
- [Quick installation](#quick-installation)
Expand All @@ -49,6 +50,22 @@ The basic principles underlying the system being developed are ease of setup, lo
- [See also](#see-also)
- [License](#license)

### Features

1. The ultimate smart thing solution - server, configurator, nodes, gateway, mobile application
2. Open API
3. Cross-platform Linux, MacOS, Windows ...
4. Convenient WEB-configurator for fine-tuning
5. Mobile application for equipment management
6. Role system for separation of access rights
7. Programs in javaScript, coffeeScript, typeScript
8. Notification system SMS, Email, Slack, Telegram
9. If MODBUS is small, you can work through calling external programs / scripts, which greatly expands the possibilities
10. Autonomous system.
11. Quick backup of all data, and recovery - literally in two teams
12. Have Docker images to enhance system security
13. Minimum consumption of resources.

### Demo access

[dashboard](https://board.e154.ru) (https://board.e154.ru) <br />
Expand Down
17 changes: 17 additions & 0 deletions README.ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@

Основные принципы лежащие в основе разрабатываемой системы - простота настройки, дешевизна содержания и доступность компонентной базы.

- [Features](#features)
- [Demo](#demo-access)
- [Поддерживаемые системы](#%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC%D1%8B%D0%B5-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B)
- [Быстрая установка](#%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0)
Expand All @@ -49,6 +50,22 @@
- [Коммерческие аналоги](#%D0%9A%D0%BE%D0%BC%D0%BC%D0%B5%D1%80%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5-%D0%B0%D0%BD%D0%B0%D0%BB%D0%BE%D0%B3%D0%B8)
- [License](#%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F)

### Features

1. Законченное решение умных вещей, и для автоматизации процессов - сервер,конфигуратор,ноды,шлюз,мобильное приложение
2. Открытое API
3. Кроссплатформенность Linux,MacOS,Windows …
4. Удобный WEB конфигуратор для тонкой настройки
5. Мобильное приложение для управления устройствами
6. Система ролей для разделения прав доступа
7. Программы на javaScript, coffeeScript, typeScript
8. Система уведомлений SMS, Email, Slack, Telegram
9. Если MODBUS мало можно работать через вызовы внешних программ/скриптов, что сильно расширяет возможности
10. Автономная система, если не требуются уведомления и доступ из вне
11. Быстрое резервное копирование всех данных, и восстановление - буквально в две команды
12. Есть Docker образы для повышения безопасности системы
13. Минимальное потребление ресурсов, позволяет развернуть комплекс на слабом железе

### Demo access

[dashboard](https://board.e154.ru) (https://board.e154.ru) <br />
Expand Down
16 changes: 15 additions & 1 deletion adaptors/log.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package adaptors

import (
"github.com/jinzhu/gorm"
"github.com/e154/smart-home/db"
m "github.com/e154/smart-home/models"
"github.com/jinzhu/gorm"
gormbulk "github.com/t-tiger/gorm-bulk-insert"
)

type Log struct {
Expand All @@ -28,6 +29,19 @@ func (n *Log) Add(ver *m.Log) (id int64, err error) {
return
}

func (n *Log) AddMultiple(items []*m.Log) (err error) {

insertRecords := make([]interface{}, 0, len(items))
for _, ver := range items {
dbVer := n.toDb(ver)
insertRecords = append(insertRecords, *dbVer)
}

err = gormbulk.BulkInsert(n.db, insertRecords, len(insertRecords))

return
}

func (n *Log) GetById(verId int64) (ver *m.Log, err error) {

var dbVer *db.Log
Expand Down
16 changes: 16 additions & 0 deletions common/validation.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package common

import "github.com/e154/smart-home/system/validation"

type Validation struct {
}

func (d Validation) Valid() (ok bool, errs []*validation.Error) {

valid := validation.Validation{}
if ok, _ = valid.Valid(d); !ok {
errs = valid.Errors
}

return
}
1 change: 1 addition & 0 deletions container.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ func BuildContainer() (container *dig.Container) {
container.Provide(stream.NewHub)
container.Provide(telemetry.NewTelemetry)
container.Provide(logging.NewLogBackend)
container.Provide(logging.NewLogDbSaver)
container.Provide(endpoint.NewEndpoint)
container.Provide(gate_client.NewGateClient)
container.Provide(notify.NewNotify)
Expand Down
16 changes: 8 additions & 8 deletions doc/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -135,14 +135,14 @@ Languages:
url: "#install-configuration-conf"
- title: "Настройка ноды"
url: "#install-node-conf"
- title: "База mysql"
url: "#install-mysql"
- title: "База postgres"
url: "#install-postgres"
- title: "Запуск"
url: "#install-exec"
- title: "Обновление"
url: "#update"
- title: "Обновление базы mysql"
url: "#migrate-mysql"
- title: "Обновление базы postgres"
url: "#migrate-postgres"
- title: "Автозапуск"
url: "#service"
- title: "Сборка из исходного кода"
Expand Down Expand Up @@ -351,14 +351,14 @@ Languages:
url: "#install-configuration-conf"
- title: "Install node conf"
url: "#install-node-conf"
- title: "Install mysql"
url: "#install-mysql"
- title: "Install postgres"
url: "#install-postgres"
- title: "Install exec"
url: "#install-exec"
- title: "Update"
url: "#update"
- title: "Migrate mysql"
url: "#migrate-mysql"
- title: "Migrate postgres"
url: "#migrate-postgres"
- title: "Run as service"
url: "#service"
- title: "Install from source"
Expand Down
101 changes: 39 additions & 62 deletions doc/content/getting-started/_install.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ groups:
* <a href="#install-server-conf">Настройка сервера</a>
* <a href="#install-configuration-conf">Настройка конфигуратора</a>
* <a href="#install-node-conf">Настройка ноды</a>
* <a href="#install-mysql">База mysql</a>
* <a href="#install-postgres">База postgres</a>


<div class="row">
Expand Down Expand Up @@ -88,101 +88,78 @@ tree

```bash
cd /opt/smart-home/server
sed 's/dev\/app.conf/prod\/app.conf/' conf/app.sample.conf > conf/app.conf
cp conf/prod/app.sample.conf conf/prod/app.conf
cp conf/prod/db.sample.conf conf/prod/db.conf
cp conf/config.dev.conf conf/config.conf
```

Основные значения:
Важные поля:

* **httpaddr** - адрес сервера REST API
* **httpport** - порт сервера REST API
* **data_dir** - директория хранения общих файлов
* **db_user** - пользователь для соединени mysql
* **db_pass** - пароль доступка к mysql
* **db_host** - адрес сервера mysql
* **db_name** - название базы mysql
* **db_port** - порт сервера mysql

Для работы сервера требуется подключение к базе mysql. Отредактируйте файл */opt/smart-home/server/conf/prod/db.conf*
* **server_host** - адрес сервера REST API
* **server_port** - порт сервера REST API
* **pg_user** - пользователь для соединени postgresql
* **pg_pass** - пароль доступка к postgresql
* **pg_host** - адрес сервера postgresql
* **pg_name** - название базы postgresql
* **pg_port** - порт сервера postgresql

```bash
db_user = smarthome
db_pass = smarthome
db_host = "127.0.0.1"
db_name = smarthome
db_port = "3306"
db_type = mysql
pg_user = smart_home
pg_pass = smart_home
pg_host = "127.0.0.1"
pg_name = smart_home
pg_port = "5432"
```

<h3 id="install-configuration-conf">Настройка конфигуратора</h3>

```bash
cd /opt/smart-home/configurator
sed 's/dev\/app.conf/prod\/app.conf/' conf/app.sample.conf > conf/app.conf
cp conf/prod/app.sample.conf conf/prod/app.conf
cp conf/prod/db.sample.conf conf/prod/db.conf
cp conf/config.dev.conf conf/config.conf
```

Основные значения:

* **httpaddr** - адрес веб интерфеса конфигуратора
* **httpport** - порт веб интерфеса конфигуратора
* **serveraddr** - порт сервера REST API
* **serverport** - порт сервера REST API
* **data_dir** - директория хранения общих файлов
* **api_addr** - порт сервера REST API
* **api_port** - порт сервера REST API
* **api_scheme** - схема общения с сервером


<h3 id="install-node-conf">Настройка ноды</h3>

```bash
cd /opt/smart-home/node
cp conf/node.sample.conf conf/node.conf
cp conf/config.dev.conf conf/config.conf
```

Основные значения:

* **app_version** - версия внутреннего api ноды
* **ip** - адрес ожидания соединения от сервера
* **port** - порт ожидания соединения от сервера
* **baud** - скорость работы порта ввода вывода, используется если с сервера пришёл запрос на
обращение к устройству, но baud не был указан
* **timeout** - используется при обработке ошибок связи с устройствами
* **stopbits** - стоп бит, используется в общении с устройствами
* **name** - системное назание ноды (прим. node1)
* **topic** - канал для общения с сервером (прим. node1)
* **mqtt_keep_alive** - тонкие настройки (прим. 300)
* **mqtt_connect_timeout** - тонкие настройки (прим. 2)
* **mqtt_sessions_provider** - тонкие настройки (прим. "mem")
* **mqtt_topics_provider** - тонкие настройки (прим. "mem)
* **mqtt_username** - пользователь указанный при регистрации ноды на сервере
* **mqtt_password** - павроль указанный при регистрации ноды на сервере
* **mqtt_ip** - ip адрес сервера **умный дом**
* **mqtt_port** - порт для подключения нод к **умный дом**
* **serial** - спискок портов которые будет слушать нода для поиска устройств


<h3 id="install-mysql">База mysql</h3>

Подключение к консоли mysql, потребуется пароль рута:

```bash
mysql -u root -p
```
<h3 id="install-postgres">База postgres</h3>

Создание базы сервера **умный дом**:
Подключение к консоли Postgresql, потребуется пароль рута:

```bash
CREATE DATABASE smarthome;
sudo -u postgres psql
postgres=# create database smart_home;
postgres=# create user smart_home with encrypted password 'smart_home';
postgres=# grant all privileges on database smart_home to smart_home;
```

Создание нового пользователя, с соответствующими правами **smarthome** из консоли mysql

* **smarthome** - пользователь
* **smarthome** - пароль


```bash
CREATE USER 'smarthome'@'localhost' IDENTIFIED BY 'smarthome';
GRANT ALL PRIVILEGES ON smarthome . * TO 'smarthome'@'localhost';
FLUSH PRIVILEGES;
```

импорт базы

```bash
use smarthome
source /opt/smart-home/server/dump.sql
```
система базы данных имеет внтренный миханизм миграций. При подключении сервер проверяет текущую версию,
и запускает миграции если сервер их имеет.

<h3 id="install-exec">Запуск</h3>

Expand Down
Loading

0 comments on commit 17dad75

Please sign in to comment.