Skip to content

Commit

Permalink
лаб node-red to Google Sheet
Browse files Browse the repository at this point in the history
  • Loading branch information
pupenasan committed Apr 28, 2020
1 parent 609c4e5 commit f7c64e7
Show file tree
Hide file tree
Showing 10 changed files with 147 additions and 15 deletions.
2 changes: 1 addition & 1 deletion Довідники/googleauth.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Створення та налаштування сервісного аккаунту Google (для доступу як служби)
# Створення та налаштування сервісного аккаунту Google (для доступу іншого сервісу)

У даному додатку вкзаується як створювати аккаунт для доступу сервісів (сервісний аккаунт). Увага! Сервісний доступ за замовчуванням надає усі привілеї, тому нікому не передавайте облікові дані.

Expand Down
6 changes: 4 additions & 2 deletions Лабор/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@
- 6.1.[Встановлення та адміністрування СКБД "MariaDB" на MS Windows](labdb_1maria.md)
- 6.2.[Робота з SQL в NodeRED](labdb_2nodered.md)
- 6.3.[Приклад реалізації завдання на RPI](labdb_3rpi.md)

- ЛР7. Робота з JavaScript.
- 7.1. [Основи JavaScript](labjs_1js.md).
- 7.2. Робота з функціями в Node-RED.
- 7.2. [Робота з функціями в Node-RED](labjs_2node.md).
- ЛР8. Інтегрування з хмарними застосунками та сервісами.
- 8.1.[Інтегрування з застосунками Google](labcld_1.md).
- 8.2.

[<- На головну](../)
Binary file added Лабор/cldmedia/1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Лабор/cldmedia/2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Лабор/cldmedia/3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Лабор/cldmedia/4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Лабор/cldmedia/5.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
137 changes: 137 additions & 0 deletions Лабор/labcld_1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@


| <- до лаборних робіт](README.md) | [на основну сторінку курсу](../README.md) |
| -------------------------------- | ----------------------------------------- |
| | |

# Лабораторна робота №8. Інтегрування з хмарними застосунками та сервісами.

Рекомендується попередньо ознайомитися з матеріалами лекцій по:

- to do

## Частина 1. Інтегрування з застосунками Google.

У даній частині лабораторної роботи необхідно забезпечити запис значень з Node-RED в електронну таблицю, що обслуговується хмарним електронним застосунком `Google Sheet`.

###### 0.Створення облікового запису Google.

Якщо у Вас немає облікового запису Google - створіть його [на сайті](https://www.google.com/). Це безкоштовно, потребується тільки поштова скринька і номер телефону.

###### 1.Створення та налаштування сервісного аккаунту Google (для доступу іншого сервісу)

Використовуючи рекомендації з довідника з [створення та налаштування сервісного аккаунту Google (для доступу іншого сервісу)](../Довідники/googleauth.md):

- створіть сервісний аккаунт, для якого добавте ключ
- активуйте доступ до хмарного застосунку`Google Sheets`

**Увага! Нікому не передавайте інформацію про свої ключі , так як їх можна використати для доступу до всіх ваших відкритих застосунків в Google.**

###### 2.Встановлення бібліотеки node-red-contrib-google-sheets

- запустіть Node-RED
- встановіть бібліотеку `node-red-contrib-google-sheets`

###### 3.Створення таблиці `Google Sheet`

`Google Sheet` - це хмарний застосунок від Google для роботи з електронними таблицями. За функціональністю і принципами роботи він схожий на `Microsoft Excel`. Усі створені таблиці зберігаються на Гугд Диску (`Google Drive`)

- Зайдіть на головну сторінку [Google](https://www.google.com/) і зайдіть в застосунок `Google Sheet`(`Таблиці`)

![](cldmedia/1.png)

рис.1

Альтернативно можна відразу перейти [на сторінку](https://docs.google.com/spreadsheets)

- У новому вікні натисніть кнопку "+" (створити) щоб створити нову електронну таблицю
- збережіть документ на Гугл диску

###### 4.Створення фрагменту для наповнення буферу

У даному пункті необхідно створити фрагмент, який буде вміщувати буфер останніх 60-ти значень імітованих змінних `rad ` та `val` а також дати та часу їх зміни. Такий буфер можна організувати різним чином, однак для спрощення були використані властивості масивів в JavaSript як черг та стеків. Кожне нове обчислення записується на верх масиву. Таким чином, спочатку "буфер-масив" буде наповнюватися аж до 60-го елементу. Коли елементів стане більше ніж 60 (тобто 61), нижні елементи виймаються, і масив "зсувається" вниз. І так кожного разу при виклику функції. Для збереження даних масиву між викликами використовується контекст потоку.

Про всяк випадок, зроблена також перевірка на переповнення масиву: коли кількість елементів повинна бути 60, а вона все одно більша - масив обрізається до 60-ти елементів. Така ситуація не повинна відбуватися, але бажано передбачати такі випадки.

- Створіть новий потік з назвою "clouds".

- добавте туди фрагмент, який наведений на рисунку, код функції наведений під рисунком 2

![](cldmedia/2.png)

рис.2

```javascript
let now = new Date ();//сьогодні
//trend - 2-мірний масив 3x60, на 60 останніх значень
//читання з контексту потоку або ініціалізація масиву-буферу
let trend = flow.get ("trend") || [[now.getTime()],[0],[0]];
let l = trend[0].length; //довжина мавису
//з кожним викликом збільшуємо градуси в радіанах
let rad = trend[1][l-1] + Math.PI/5;
if (rad>=Math.PI*2) rad=0;//обнуляємо після повного кола
let val = Math.sin (rad); //вираховуємо синус
//на "верх" масиву добавляємо елементи
trend[0].push (now.toLocaleString());//дата час
trend[1].push (rad); //радіани
trend[2].push (val); //значення синусу
//якщо масив заповнився до 60
if (trend[0].length >60){
trend[0].shift ();//вилучаємо перший (найстаріший) елемент
trend[1].shift ();
trend[2].shift ();
//після цього масиви повинні зменшитися на 1 елемент (60)
//і зсунутися вниз
//у випадку, якщо раптом елементів більше 60
//наприклад були добавлені випадково стороннім кодом
//зробити кількість елементів =60
trend[0].length = 60;//
trend[1].length = 60;
trend[2].length = 60;
}
flow.set ("trend", trend);//записати в контекст потоку
return msg;
```

- зробіть розгортання потоку
- проаналізуйте контекст потоку, як він наповнюється з кожною секундою, він повинен мати вигляд як на рисунку 2 (не забудьте натискати кнопку оновлення), в

###### 5.Створення фрагменту запису в електронну таблицю значень буферу

- Користуючись рекомендаціями щодо [роботи з базовими функціями читання та запису Google Sheet](https://pupenasan.github.io/NodeREDGuidUKR/google/googlesheet.html) :
- надайте доступ до Гугл таблиці створеному раніше сервісному аккаунту
- добавте наступний фрагмент потоку.

![](cldmedia/3.png)

рис.3

- зробіть розгортання потоку
- перейдіть до Гугл таблиці там повинні відображатися дані з буфера і кожні 5 секунд оновлюватися

![](cldmedia/4.png)

рис.4

###### 6.Створення діаграми

- Виділіть три рядки з даними і створіть по ним діаграму залежності значень змінних від часу

![](cldmedia/5.png)

рис.4



| <- до лаборних робіт](README.md) | [на основну сторінку курсу](../README.md) |
| -------------------------------- | ----------------------------------------- |
| | |

Цікаві посилання.

http://tbarmann.webfactional.com/presentations/nenpa/google-sheets-updating-charts.pdf

https://developers-dot-devsite-v2-prod.appspot.com/chart/interactive/docs

https://flows.nodered.org/node/node-red-contrib-google-sheets

8 changes: 0 additions & 8 deletions Лабор/labgoogle.md

This file was deleted.

9 changes: 5 additions & 4 deletions план2020.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,15 @@

- [ ] Тиждень 18,19 (27.04-10.05) 35, 36
- [ ] Лек. Використання хмарних сервісів для IoT.
- [ ] Лек. Node.js.
- [ ] ЛР. Dropbox, IFTTT, TelegramBot ([https://ifttt.com](https://ifttt.com))
- [ ] Лек. Методи автентифікації при роботі з хмарними сервісами.
- [ ] ЛР. Google, Dropbox, IFTTT, TelegramBot ([https://ifttt.com](https://ifttt.com))

- [ ] Тиждень 20,21 (11.05-24.05) 37,38
- [ ] Лек. Аналітика. Використання підсистеми звітності. Grafana.
- [ ] Лек. DevOps.
- [ ] Лек. Аналітика. Використання підсистеми звітності. Grafana.
- [ ] Лек. Node.js.
- [ ] Лаб. Аналітика. Використання підсистеми звітності.

- [ ] Тиждень 22, 23 (25.05-7.06) 39, 40 - підсумковий модульний

- [ ] DevOps.
- [ ] Лаб. Розробка власних вузлів NodeRED.

0 comments on commit f7c64e7

Please sign in to comment.