node-red-contrib-alice 0.6.4 → 0.6.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -35,28 +35,6 @@ npm install node-red-contrib-alice
35
35
  Для того, что бы устройство ответило Алисе, что комманда выполнена успешно, на вход должно прийти соответсвующее значение.
36
36
  Если ваше устройство отвечает дольше или совсем не возвращает подтверждение просто добавьте оставьте галочку Response включенной
37
37
 
38
- ### Поддерживаемые устройства
39
- Тип | Описание | Пример устройства
40
- ---|---|---
41
- devices.types.light | Устройство, которое имеет управляемые светящиеся элементы. | Лампочка, светильник, ночник, люстра.
42
- devices.types.socket | Розетка. | Умная розетка.
43
- devices.types.switch | Выключатель. | Настенный выключатель света, тумблер, автомат в электрическом щитке, умное реле.
44
- devices.types.thermostat | Устройство с возможностью регулирования температуры. | Водонагреватель, теплый пол, обогреватель, электровентилятор. Для кондиционера рекомендуется использовать отдельный тип devices.types.thermostat.ac.
45
- devices.types.thermostat.ac | стройство, управляющее микроклиматом в помещении, с возможностью регулирования температуры и режима работы. | Кондиционер.
46
- devices.types.media_device | Аудио, видео, мультимедиа техника. Устройства, которые умеют воспроизводить звук и видео. | DVD-плеер, ресивер, медиаприставка и другие медиаустройства. Для телевизора рекомендуется использовать отдельный тип devices.types.media_device.tv.
47
- devices.types.media_device.tv | Устройство для просмотра видеоконтента. На устройстве можно изменять громкость и переключать каналы. | Умный телевизор, ИК-пульт от телевизора, медиа-приставка, ресивер.
48
- devices.types.media_device.tv_box | Устройство, подключаемое к телевизору или дисплею, для просмотра видеоконтента. На устройстве можно управлять громкостью воспроизведения и переключать каналы. | ИК-пульт от тв-приставки, умная тв-приставка.
49
- devices.types.media_device.receiver | Устройство, подключаемое к телевизору или дисплею, для просмотра видеоконтента. На устройстве можно изменять громкость, переключать каналы и источники аудио-/видеосигнала. | ИК-пульт от ресивера, AV-ресивер, спутниковый ресивер.
50
- devices.types.cooking | Различная умная кухонная техника. | Холодильник, духовой шкаф, кофеварка, мультиварка. Для чайника рекомендуется использовать отдельный тип devices.types.cooking.kettle, для кофеварки — devices.types.cooking.coffee_maker.
51
- devices.types.cooking.coffee_maker | стройство, которое умеет делать кофе. | Кофеварка, кофемашина.
52
- devices.types.cooking.kettle | Устройство, которое умеет кипятить воду и/или делать чай. | Умный чайник, термопот.
53
- devices.types.openable | Устройство, которое умеет открываться и/или закрываться. | Дверь, ворота, окно, ставни. Для штор и жалюзи рекомендуется использовать отдельный тип devices.types.openable.curtain.
54
- devices.types.openable.curtain | Устройство, которое выполняет функцию штор. | Шторы, жалюзи.
55
- devices.types.humidifier | Устройство, которое умеет изменять влажность в помещении. | Увлажнитель воздуха.
56
- devices.types.purifier | Устройство с функцией очистки воздуха. | Очиститель воздуха, мойка воздуха.
57
- devices.types.vacuum_cleaner | Устройство, которое выполняет функцию пылесоса. | Робот-пылесос.
58
- devices.types.washing_machine | Устройство для стирки белья. | Стиральная машина.
59
- devices.types.other | Остальные устройства. | Остальные устройства, не подходящие под типы выше.
60
38
 
61
39
  ## Instruction (ENG - Google Translate)
62
40
  The module allows you to use Node-Red together with the Yandex.Alice voice assistant service (voice control of smart home devices)
@@ -57,16 +57,21 @@ function AliceSensor(config){
57
57
  });
58
58
 
59
59
  this.on('input', (msg, send, done)=>{
60
- if (this.stype =='devices.properties.bool' && typeof msg.payload != 'boolean'){
61
- this.error("Wrong type! msg.payload must be boolean.");
62
- if (done) {done();}
63
- return;
64
- };
60
+ // if (this.stype =='devices.properties.bool' && typeof msg.payload != 'boolean'){
61
+ // this.error("Wrong type! msg.payload must be boolean.");
62
+ // if (done) {done();}
63
+ // return;
64
+ // };
65
65
  if (this.stype =='devices.properties.float' && typeof msg.payload != 'number'){
66
66
  this.error("Wrong type! msg.payload must be number.");
67
67
  if (done) {done();}
68
68
  return;
69
69
  };
70
+ if (this.unit == 'unit.percent'){
71
+ msg.payload = +msg.payload.toFixed(0);
72
+ }else {
73
+ msg.payload = +msg.payload.toFixed(2);
74
+ };
70
75
  if (msg.payload === this.value){
71
76
  this.debug("Value not changed. Cancel update");
72
77
  if (done) {done();}
package/nodes/alice.html CHANGED
@@ -1,7 +1,11 @@
1
1
 
2
- <script defer src="https://www.gstatic.com/firebasejs/7.14.5/firebase-app.js"></script>
2
+ <!-- <script defer src="https://www.gstatic.com/firebasejs/7.14.5/firebase-app.js"></script>
3
3
  <script defer src="https://www.gstatic.com/firebasejs/7.14.5/firebase-auth.js"></script>
4
- <script defer src="https://www.gstatic.com/firebasejs/7.14.5/firebase-firestore.js"></script>
4
+ <script defer src="https://www.gstatic.com/firebasejs/7.14.5/firebase-firestore.js"></script> -->
5
+
6
+ <script src="https://www.gstatic.com/firebasejs/9.0.2/firebase-app-compat.js"></script>
7
+ <script src="https://www.gstatic.com/firebasejs/9.0.2/firebase-firestore-compat.js"></script>
8
+ <script src="https://www.gstatic.com/firebasejs/9.0.2/firebase-auth-compat.js"></script>
5
9
 
6
10
  <script type="text/javascript">
7
11
  const firebaseConfig = {
@@ -14,6 +18,9 @@
14
18
  appId: "1:1049686868440:web:e5f5ef6a70ead338b6f2ad",
15
19
  measurementId: "G-MD0L6R9N79"
16
20
  };
21
+ var firebaseApp;
22
+ var firebaseDb;
23
+ var firebaseAuth;
17
24
  RED.nodes.registerType('alice-service',{
18
25
  category: 'config',
19
26
  defaults: {
@@ -26,6 +33,11 @@
26
33
  label: function() {
27
34
  return this.name || "Alice-Credentials";
28
35
  },
36
+ oneditprepare:function(){
37
+ firebaseApp = firebase.initializeApp(firebaseConfig);
38
+ firebaseDb = firebaseApp.firestore();
39
+ firebaseAuth = firebaseApp.auth();
40
+ },
29
41
  oneditsave: function(){
30
42
  nodename = $('#node-config-input-email').val();
31
43
  $('#node-config-input-name').val(nodename);
@@ -60,12 +72,13 @@
60
72
  };
61
73
  function SingUp(){
62
74
  // Initialize Firebase
63
- if (!firebase.apps.length) {
64
- firebase.initializeApp(firebaseConfig);
65
- };
75
+ // if (!firebase.apps.length) {
76
+ // firebase.initializeApp(firebaseConfig);
77
+ // };
78
+
66
79
  var email = document.getElementById("register_email").value;
67
80
  var password = document.getElementById("register_password").value;
68
- firebase.auth().createUserWithEmailAndPassword(email, password)
81
+ firebaseAuth.createUserWithEmailAndPassword(email, password)
69
82
  .then(function(r){
70
83
  document.getElementById("node-config-input-email").value = email;
71
84
  document.getElementById("node-config-input-password").value = password;
@@ -77,12 +90,12 @@
77
90
  })
78
91
  };
79
92
  function Restore(){
80
- // Initialize Firebase
81
- if (!firebase.apps.length) {
82
- firebase.initializeApp(firebaseConfig);
83
- };
93
+ // // Initialize Firebase
94
+ // if (!firebase.apps.length) {
95
+ // firebase.initializeApp(firebaseConfig);
96
+ // };
84
97
  var emailAddress = document.getElementById("restore_email").value;
85
- firebase.auth().sendPasswordResetEmail(emailAddress).then(function() {
98
+ firebaseAuth.sendPasswordResetEmail(emailAddress).then(function() {
86
99
  RED.notify("Password recovery email was sent successfully! Please check your email.", 'info');
87
100
  Activete();
88
101
  }).catch(function(error) {
@@ -90,16 +103,16 @@
90
103
  });
91
104
  }
92
105
  function DeleteAllDevices() {
93
- if (!firebase.apps.length) {
94
- firebase.initializeApp(firebaseConfig);
95
- };
96
- var db = firebase.firestore();
106
+ // if (!firebase.apps.length) {
107
+ // firebase.initializeApp(firebaseConfig);
108
+ // };
109
+ // var db = firebase.firestore();
97
110
  var email = document.getElementById("delete_email").value;
98
111
  var password = document.getElementById("delete_password").value;
99
- firebase.auth().signInWithEmailAndPassword(email, password)
112
+ firebaseAuth.signInWithEmailAndPassword(email, password)
100
113
  .then((res)=>{
101
114
  var user = res.user;
102
- db.collection('users').doc(user.uid).collection('devices').get()
115
+ firebaseDb.collection('users').doc(user.uid).collection('devices').get()
103
116
  .then(querySnapshot=>{
104
117
  querySnapshot.forEach(doc=>{
105
118
  doc.ref.collection('capabilities').get().then(capabSnapshot=>{
package/nodes/alice.js CHANGED
@@ -9,9 +9,10 @@ module.exports = function(RED) {
9
9
  var firebase = require('firebase/compat/app');
10
10
  require('firebase/compat/auth');
11
11
  require('firebase/compat/firestore');
12
-
13
12
  var mqtt = require('mqtt');
13
+
14
14
  var fb;
15
+ var auth;
15
16
  const email = this.credentials.email;
16
17
  const password = this.credentials.password;
17
18
  const firebaseConfig = {
@@ -33,19 +34,21 @@ module.exports = function(RED) {
33
34
 
34
35
  try {
35
36
  this.debug("Initialize firebase App ...");
36
- fb = firebase.initializeApp(firebaseConfig,this.id);
37
+ fb = firebase.initializeApp(firebaseConfig,this.id);
38
+ auth = fb.auth();
37
39
  } catch (error) {
38
40
  if (error.code == 'app/duplicate-app'){
39
41
  this.debug("Dublicated firebase app");
40
42
  fb = firebase.app(this.id);
43
+ auth = fb.auth();
41
44
  }else{
42
45
  this.error(error);
43
46
  }
44
47
  }
45
-
48
+
46
49
  this.signIn = ()=>{
47
50
  this.debug("SignIn to firebase ...");
48
- fb.auth().signInWithEmailAndPassword(email, password)
51
+ auth.signInWithEmailAndPassword(email, password)
49
52
  .then(u=>{
50
53
  this.emit('online');
51
54
  this.debug("SignIn to firebase Success. Send signal to online");
@@ -53,6 +56,11 @@ module.exports = function(RED) {
53
56
  })
54
57
  .catch(err=>{
55
58
  this.error(err.message);
59
+ this.debug("Firebase Auth error: "+err.code);
60
+ if (err.code == 'auth/network-request-failed'){
61
+ this.debug("Authentication failed, retry after 10 seconds");
62
+ setTimeout(this.signIn, 10000);
63
+ }
56
64
  this.emit('offline');
57
65
  });
58
66
  }
@@ -145,6 +153,10 @@ module.exports = function(RED) {
145
153
 
146
154
  this.on('online', ()=>{
147
155
  this.isOnline = true;
156
+ fb.auth().currentUser.getIdToken(/* forceRefresh */ true)
157
+ .then(token=>{
158
+ this.trace("New firebase token:"+token);
159
+ })
148
160
  })
149
161
 
150
162
  this.on('close',(done)=>{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-red-contrib-alice",
3
- "version": "0.6.4",
3
+ "version": "0.6.8",
4
4
  "description": "",
5
5
  "main": "alice.js",
6
6
  "scripts": {
@@ -35,7 +35,7 @@
35
35
  },
36
36
  "homepage": "https://github.com/efa2000/node-red-contrib-alice#readme",
37
37
  "dependencies": {
38
- "firebase": "9.0.1",
38
+ "firebase": "9.1.2",
39
39
  "mqtt": "^4.2.6"
40
40
  }
41
41
  }