Aller au contenu
Inkew

Accès extérieur api HC3 JS

Recommended Posts

Bonjour,

 

Venant du monde eedomus et chez fibaro depuis maintenant 8 mois, j'avais un script hébergé à l'extérieur qui allait me chercher une valeur d'un device qui avait cette forme :

var json = UrlFetchApp.fetch("http://api.eedomus.com/get?action=periph.caract&periph_id=XXX&api_user=XXX&api_secret=XXX");
var jsonVariable = JSON.parse(json)

//var name = jsonVariable.body.name
var last_value = jsonVariable.body.last_value

Savez-vous si c'est possible avec une HC3? Si oui quelqu'un a une idée de son écriture?

Merci!

Partager ce message


Lien à poster
Partager sur d’autres sites

D'après mes recherches, ça ne semble pas ouf de rediriger un port vers la HC3 juste pour une fonctionnalité d'archivage..

Mon script était hébergé sur google drive et remplissait un fichier Gdrive avec ce genre de code :

var ss = SpreadsheetApp.openById("1CEYijVL5l-HdJ-03GbeRqsslgK-jX3L4r2mECfeTB8o");  // Spreadsheet id goes here
SpreadsheetApp.setActiveSpreadsheet(ss);
data_sheet =  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
Calculs_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Calculs")
  
var DateMin=new Date()
DateMin.setTime(DateMin.getTime())
var Datetimestamp = new Date
Datetimestamp = Utilities.formatDate(new Date(), "GMT+01", "yyyy-MM-dd")
var Balance
var Conso
  
var last_row = data_sheet.getLastRow();
var Last_Date = data_sheet.getRange("A"+last_row).getValue();
Last_Date = Utilities.formatDate(new Date(Last_Date), "GMT+2", "yyyy-MM-dd")

if (Last_Date==Datetimestamp) {var next_empty_row = last_row} else {var next_empty_row = last_row+1};

var last_value = jsonVariable.body.last_value

data_sheet.setActiveCell("A"+next_empty_row);
data_sheet.getActiveCell().setValue(Datetimestamp); 
data_sheet.setActiveCell("B"+next_empty_row);
data_sheet.getActiveCell().setValue(Math.round(last_value/1000)); 

 

J'ai bien conscience que je vais poser une question de débutant : est-ce que ce script ne peut-il pas être converti dans un QA ou je fais complètement fausse route? (je ne suis pas sûr que des lignes comme "var last_row = data_sheet.getLastRow();" peuvent être interprétées dans un QA?

Partager ce message


Lien à poster
Partager sur d’autres sites

Il est super simple de récupérer une propriété d'un module en passant par /api/devices/ID, mais comme tu le dis, il faut rendre accessible ta box depuis Internet si tu veux y accéder depuis un script hébergé à l'extérieur.

 

Je suppose qu'il doit être possible de faire le travail en LUA dans un QuickApp en local sur la box, mais je ne sais pas ce que fait ton script, en fait je n'ai jamais programmé sur Google Drive.

Partager ce message


Lien à poster
Partager sur d’autres sites

Au risque de te faire sourire, ce script récupérait mon index compteur maison, l'enregistrait au bon endroit dans une feuille de calcul. Cette feuille me calculait ma consommation annuelle glissante et la comparait à ma consommation annuelle pour une année de référence. Je convertissait cette consommation en kWh(ep).m-2.an-1 (habitant une maison passive, je suis sensé consommer moins de 120), et la renvoyait dans un device pour la visualiser.

Cette unique valeur a un sens pour moi. Je ne me sens malgré tout pas la compétence de le faire en lua, car je pressent qu'il faut utiliser une base de données, et je ne suis pas à l'aise avec tout ça..

Ca n'a pas l'air compliqué à faire en gardant mon script en l'état, mais est-ce que ça représente un risque de rediriger vers la HC et de l'exposer à l'extérieur? (en partant du principe que je peux créer un utilisateur spécifique avec un accès unique à 2 devices)?

Partager ce message


Lien à poster
Partager sur d’autres sites

OK je vois.

J'ai un système similaire, mais tout en local, avec une base de données sur le NAS, etc.

 

Je pense que pour toi le plus simple, et de loin, c'est de conserver ton mode de fonctionnement actuel.

Si tu rends ton HC3 accessible depuis l'extérieur, il faut bien évidemment utiliser un compte dédié à ton script Google avec un accès limité aux seuls modules nécessaires.

Penses aussi à bien renforcer le mot de passe des autres comptes, et particulièrement du compte admin principal.
 

Évite d'utiliser les classiques ports 80 ou 443, mais plutôt un port aléatoire assez haut. Cacher n'a jamais été une bonne solution pour renforcer la sécurité, mais ça évitera au moins 99% des scans automatiques.

Idéalement il faudrait protéger la HC3 derrière un Reverse Proxy isolé en DMZ, mais il faut pour cela un nom de domaine, une machine pour faire tourner le Reverse Proxy, quelques compétences et un peu de temps.

Partager ce message


Lien à poster
Partager sur d’autres sites

×