MagicMirror²
Re: MagicMirror²
Bonjour,
Pour des tests uniquement, essaies d'enlever le login/password de domoticz.
Le module Domoticz est un peu plus long que les autres à remonter les infos.
Pour des tests uniquement, essaies d'enlever le login/password de domoticz.
Le module Domoticz est un peu plus long que les autres à remonter les infos.
Re: MagicMirror²
Salut manu,manu663 a écrit : 13 mars 2019, 16:40 Bonjour,
Pour des tests uniquement, essaies d'enlever le login/password de domoticz.
Le module Domoticz est un peu plus long que les autres à remonter les infos.
Meme en enlevant l'utilisateur et le mot de passe, cela reste en "loading domoticz data" sur le magic mirror.
Si tu pouvais mettre a dispo le dossier module domoticz ainsi que le fichier config.js ça serait super cool.
Si tu passes par la, un petit coup de main pour finaliser mon projet serait top
Re: MagicMirror²
Oups, je t'ai oublié!
Promis je m'en occupe ce soir !
Promis je m'en occupe ce soir !
Re: MagicMirror²
Bon, comme pour tout le reste , le fichier domoticz.js à placer au bon endroit. (fais moi signe si tu galères, je te guiderai un peu plus précisément!)
Rien a changer à part l'adresse IP et le port
Dans le config.js, ajouter les lignes ci-dessous en modifiant une fois encore l'IP et le Port:
Voilà, Chez moi tout fonctionne pour peu que le User + Password ne soit pas renseigné.
J'ai fait d'autres essais avec un module modifié, mais je n'y ai pas accès, le Raspberry est "out" ce soir.
En espérant avoir été utile !
Manu
Rien a changer à part l'adresse IP et le port
Code : Tout sélectionner
/* global Module */
/* Magic Mirror
* Module: Domoticz
*
* By Mathias Arvidsson
*/
Module.register("domoticz",{
defaults: {
units: config.units,
updateInterval: 50,
animationSpeed: 1000,
timeFormat: config.timeFormat,
lang: config.language,
initialLoadDelay: 0,
retryDelay: 2500,
apiBase: "http://192.168.0.33", // IP domoticz
apiPort: "8080", // Port
sensors: [
{
idx: "1",
symbolon: "fa fa-user",
symboloff: "fa fa-user-o",
hiddenon: false,
hiddenoff: false,
customTitle: "",
},
],
},
firstEvent: false,
getStyles: function() {
return ['font-awesome.css'];
},
// Define required scripts.
getScripts: function() {
return ["moment.js"];
},
// Define start sequence.
start: function() {
Log.info("Starting module: " + this.name);
// Set locale.
moment.locale(config.language);
this.loaded = false;
this.status1 = false;
this.title = "Loading...";
this.scheduleUpdate(this.config.initialLoadDelay);
this.sensors = [];
for (var c in this.config.sensors) {
var sensor = this.config.sensors[c];
var newSensor = {idx:sensor.idx, symbolon:sensor.symbolon, symboloff:sensor.symboloff, hiddenon:sensor.hiddenon, hiddenoff:sensor.hiddenoff, customTitle:sensor.customTitle, status:"", sname:"",type:""};
console.log(sensor.idx);
this.sensors.push(newSensor);
}
console.log(this.sensors);
},
// Override dom generator.
getDom: function() {
var wrapper = document.createElement("div");
if (!this.loaded) {
wrapper.innerHTML = "Loading...";
wrapper.className = "dimmed light small";
return wrapper;
}
var tableWrap = document.createElement("table");
tableWrap.className = "small";
for (var c in this.sensors) {
var sensor = this.sensors[c];
if((sensor.status=="On" && sensor.hiddenon)||(sensor.status=="Off" && sensor.hiddenoff)) continue;
var sensorWrapper = document.createElement("tr");
sensorWrapper.className = "normal";
var symbolTD = document.createElement('td');
symbolTD.className = "symbol";
var symbol = document.createElement('i');
var symbolClass = sensor.symboloff
if(sensor.status=="On") symbolClass = sensor.symbolon
symbol.className = symbolClass;
symbolTD.appendChild(symbol);
sensorWrapper.appendChild(symbolTD);
var titleTD = document.createElement('td');
titleTD.className = "title bright";
if(sensor.status=="Off") titleTD.className = "title light";
titleTD.innerHTML = sensor.sname;
if(typeof sensor.customTitle !== 'undefined') titleTD.innerHTML = sensor.customTitle;
sensorWrapper.appendChild(titleTD);
var statusTD = document.createElement('td');
statusTD.className = "time light";
statusTD.innerHTML = sensor.status;
sensorWrapper.appendChild(statusTD);
tableWrap.appendChild(sensorWrapper);
}
wrapper.appendChild(tableWrap);
return wrapper;
},
updateDomo: function() {
var i = 0;
for (var c in this.sensors) {
console.log("this is c: " + c);
var sensor = this.sensors[c];
var url = this.config.apiBase + ":" + this.config.apiPort + "/json.htm?type=devices&rid=" + sensor.idx;
var self = this;
var domoRequest = new XMLHttpRequest();
domoRequest.open("GET", url, true);
domoRequest.onreadystatechange = function() {
if (this.readyState === 4) {
if (this.status === 200) {
self.processJson(JSON.parse(this.response));
console.log("Loaded data");
} else {
Log.error(self.name + ": Could not load data.");
console.log("Did not load data");
}
}
};
domoRequest.send();
i++;
}
},
processJson: function(data) {
console.log("****Parsing data: " + c + " " + data.result[0].Name);
if (!data) {
// Did not receive usable new data.
// Maybe this needs a better check?
return;
}
for (var c in this.sensors) {
var sensor = this.sensors[c];
if(sensor.idx == data.result[0].idx){
this.sensors[c].sname = data.result[0].Name;
this.sensors[c].status = data.result[0].Data;
this.sensors[c].type = data.result[0].Type;
}
}
this.loaded = true;
this.updateDom(this.config.animationSpeed);
},
scheduleUpdate: function(delay) {
console.log("Updating..");
var nextLoad = this.config.updateInterval;
if (typeof delay !== "undefined" && delay >= 0) {
nextLoad = delay;
}
var self = this;
setInterval(function() {
self.updateDomo();
}, 50000);
}
});
Code : Tout sélectionner
{
module: 'domoticz',
position: 'top_left',
header: 'Domoticz',
config: {
apiBase: "http://192.168.0.33",
apiPort: "8080",
sensors: [
{
idx: "966",
symbolon: "fa fa-thermometer-half",
symboloff: "fa fa-thermometer-half",
customTitle: "Chambre 1",
},
{
idx: "3887",
symbolon: "fa fa-thermometer-half",
symboloff: "fa fa-thermometer-half",
customTitle: "Chambre 2",
},
{
idx: "3886",
symbolon: "fa fa-thermometer-half",
symboloff: "fa fa-thermometer-half",
customTitle: "Cuisine",
},
{
idx: "520",
symbol: "fa fa-thermometer-half",
symboloff: "fa fa-thermometer-half",
customTitle: "Salon SaM",
},
{
idx: "3880",
symbol: "fa fa-thermometer-half",
symboloff: "fa fa-thermometer-half",
customTitle: "SdB RdC",
},
{
idx: "272",
symbol: "fa fa-bolt",
symboloff: "fa fa-bolt",
customTitle: "Consommation cumulée Maison",
unit : "kWh",
},
{
idx: "473",
symbolon: "fa fa-toggle-on",
symboloff: "fa fa-toggle-off",
customTitle: "VMC SdB RdC",
},
{
idx: "382",
symbolon: "fa fa-toggle-on",
symboloff: "fa fa-toggle-off",
customTitle: "Téléphone",
},
{
idx: "383",
symbolon: "fa fa-toggle-on",
symboloff: "fa fa-toggle-off",
customTitle: "Sonnette",
},
{
idx: "3913",
symbolon: "fa fa-exclamation-circle",
symboloff: "fa fa-thumbs-up",
customTitle: "Portail 1",
},
{
idx: "3910",
symbolon: "fa fa-exclamation-circle",
symboloff: "fa fa-thumbs-up",
customTitle: "Portail 2",
},
]
}
},J'ai fait d'autres essais avec un module modifié, mais je n'y ai pas accès, le Raspberry est "out" ce soir.
En espérant avoir été utile !
Manu
Re: MagicMirror²
Salut Manu, merci pour ton retourmanu663 a écrit : 19 mars 2019, 22:55 Bon, comme pour tout le reste , le fichier domoticz.js à placer au bon endroit. (fais moi signe si tu galères, je te guiderai un peu plus précisément!)
Rien a changer à part l'adresse IP et le port
Dans le config.js, ajouter les lignes ci-dessous en modifiant une fois encore l'IP et le Port:Code : Tout sélectionner
/* global Module */ /* Magic Mirror * Module: Domoticz * * By Mathias Arvidsson */ Module.register("domoticz",{ defaults: { units: config.units, updateInterval: 50, animationSpeed: 1000, timeFormat: config.timeFormat, lang: config.language, initialLoadDelay: 0, retryDelay: 2500, apiBase: "http://192.168.0.33", // IP domoticz apiPort: "8080", // Port sensors: [ { idx: "1", symbolon: "fa fa-user", symboloff: "fa fa-user-o", hiddenon: false, hiddenoff: false, customTitle: "", }, ], }, firstEvent: false, getStyles: function() { return ['font-awesome.css']; }, // Define required scripts. getScripts: function() { return ["moment.js"]; }, // Define start sequence. start: function() { Log.info("Starting module: " + this.name); // Set locale. moment.locale(config.language); this.loaded = false; this.status1 = false; this.title = "Loading..."; this.scheduleUpdate(this.config.initialLoadDelay); this.sensors = []; for (var c in this.config.sensors) { var sensor = this.config.sensors[c]; var newSensor = {idx:sensor.idx, symbolon:sensor.symbolon, symboloff:sensor.symboloff, hiddenon:sensor.hiddenon, hiddenoff:sensor.hiddenoff, customTitle:sensor.customTitle, status:"", sname:"",type:""}; console.log(sensor.idx); this.sensors.push(newSensor); } console.log(this.sensors); }, // Override dom generator. getDom: function() { var wrapper = document.createElement("div"); if (!this.loaded) { wrapper.innerHTML = "Loading..."; wrapper.className = "dimmed light small"; return wrapper; } var tableWrap = document.createElement("table"); tableWrap.className = "small"; for (var c in this.sensors) { var sensor = this.sensors[c]; if((sensor.status=="On" && sensor.hiddenon)||(sensor.status=="Off" && sensor.hiddenoff)) continue; var sensorWrapper = document.createElement("tr"); sensorWrapper.className = "normal"; var symbolTD = document.createElement('td'); symbolTD.className = "symbol"; var symbol = document.createElement('i'); var symbolClass = sensor.symboloff if(sensor.status=="On") symbolClass = sensor.symbolon symbol.className = symbolClass; symbolTD.appendChild(symbol); sensorWrapper.appendChild(symbolTD); var titleTD = document.createElement('td'); titleTD.className = "title bright"; if(sensor.status=="Off") titleTD.className = "title light"; titleTD.innerHTML = sensor.sname; if(typeof sensor.customTitle !== 'undefined') titleTD.innerHTML = sensor.customTitle; sensorWrapper.appendChild(titleTD); var statusTD = document.createElement('td'); statusTD.className = "time light"; statusTD.innerHTML = sensor.status; sensorWrapper.appendChild(statusTD); tableWrap.appendChild(sensorWrapper); } wrapper.appendChild(tableWrap); return wrapper; }, updateDomo: function() { var i = 0; for (var c in this.sensors) { console.log("this is c: " + c); var sensor = this.sensors[c]; var url = this.config.apiBase + ":" + this.config.apiPort + "/json.htm?type=devices&rid=" + sensor.idx; var self = this; var domoRequest = new XMLHttpRequest(); domoRequest.open("GET", url, true); domoRequest.onreadystatechange = function() { if (this.readyState === 4) { if (this.status === 200) { self.processJson(JSON.parse(this.response)); console.log("Loaded data"); } else { Log.error(self.name + ": Could not load data."); console.log("Did not load data"); } } }; domoRequest.send(); i++; } }, processJson: function(data) { console.log("****Parsing data: " + c + " " + data.result[0].Name); if (!data) { // Did not receive usable new data. // Maybe this needs a better check? return; } for (var c in this.sensors) { var sensor = this.sensors[c]; if(sensor.idx == data.result[0].idx){ this.sensors[c].sname = data.result[0].Name; this.sensors[c].status = data.result[0].Data; this.sensors[c].type = data.result[0].Type; } } this.loaded = true; this.updateDom(this.config.animationSpeed); }, scheduleUpdate: function(delay) { console.log("Updating.."); var nextLoad = this.config.updateInterval; if (typeof delay !== "undefined" && delay >= 0) { nextLoad = delay; } var self = this; setInterval(function() { self.updateDomo(); }, 50000); } });
Voilà, Chez moi tout fonctionne pour peu que le User + Password ne soit pas renseigné.Code : Tout sélectionner
{ module: 'domoticz', position: 'top_left', header: 'Domoticz', config: { apiBase: "http://192.168.0.33", apiPort: "8080", sensors: [ { idx: "966", symbolon: "fa fa-thermometer-half", symboloff: "fa fa-thermometer-half", customTitle: "Chambre 1", }, { idx: "3887", symbolon: "fa fa-thermometer-half", symboloff: "fa fa-thermometer-half", customTitle: "Chambre 2", }, { idx: "3886", symbolon: "fa fa-thermometer-half", symboloff: "fa fa-thermometer-half", customTitle: "Cuisine", }, { idx: "520", symbol: "fa fa-thermometer-half", symboloff: "fa fa-thermometer-half", customTitle: "Salon SaM", }, { idx: "3880", symbol: "fa fa-thermometer-half", symboloff: "fa fa-thermometer-half", customTitle: "SdB RdC", }, { idx: "272", symbol: "fa fa-bolt", symboloff: "fa fa-bolt", customTitle: "Consommation cumulée Maison", unit : "kWh", }, { idx: "473", symbolon: "fa fa-toggle-on", symboloff: "fa fa-toggle-off", customTitle: "VMC SdB RdC", }, { idx: "382", symbolon: "fa fa-toggle-on", symboloff: "fa fa-toggle-off", customTitle: "Téléphone", }, { idx: "383", symbolon: "fa fa-toggle-on", symboloff: "fa fa-toggle-off", customTitle: "Sonnette", }, { idx: "3913", symbolon: "fa fa-exclamation-circle", symboloff: "fa fa-thumbs-up", customTitle: "Portail 1", }, { idx: "3910", symbolon: "fa fa-exclamation-circle", symboloff: "fa fa-thumbs-up", customTitle: "Portail 2", }, ] } },
J'ai fait d'autres essais avec un module modifié, mais je n'y ai pas accès, le Raspberry est "out" ce soir.
En espérant avoir été utile !
Manu
J'ai placé le fichier domoticz.js dans le dossier module de la manière suivante: modules/fabio/domoticz/domoticz.js et ajouté les lignes comme ci dessus au fichier config.js
Je viens de tester et malheureusement je reste en loading sur le magic mirror. J'ai testé avec le module de base de M Arvidssson que l'on retrouve sur le Github suivant le lien ci dessous et j'arrive a récupérer mes infos de domoticz MAIS lorsque je change l'état de mes lumières par exemple, et bien cela ne bascule pas de off vers on sur le magic mirror
https://github.com/M-Arvidsson/MMM-domoticz
j'ai parcouru aussi le forum de magicmirror2 et j'ai trouvé le lien ci dessous pour ce probleme de mise a jour d'état mais meme avec les modifs de code a faire, je n'ai toujours pas la mise a jour de l'état dans le magicmirror
https://forum.magicmirror.builders/topi ... /11?page=2
J'ai installé la console du magic mirror pour voir si des erreurs du module domoticz remontaient mais rien apparaît dans la console en erreur.
Mes connaissances en .js étant proche du zéro, saurais tu me renseigner ou apporter une solution ?
merci pour ton aide
Re: MagicMirror²
Tiens essaies celui là:
CONFIG.JS
MODULE domoticz.js
Je ne sais plus d'où vient celui là mais c'est celui que j'ai en fonction en ce moment et il fonctionne à merveille.
Tiens moi au jus !
Manu
(au passage, tu peux mettre 2 paragraphes ou plus de "domoticz" dans ton config.JS pour séparer plusieurs zones)
CONFIG.JS
Code : Tout sélectionner
{
module: 'domoticz',
position: 'top_left',
header: 'Domoticz',
config: {
apiBase: "http://192.168.0.33",
apiPort: "8080",
apiUser: "XXXXX",
apiPw: "XXXXXXX",
sensors: [
{
idx: "3885",
symbolon: "fa fa-thermometer-half",
symboloff: "fa fa-thermometer-half",
customTitle: "Chambre 1",
},
{
idx: "3887",
symbolon: "fa fa-thermometer-half",
symboloff: "fa fa-thermometer-half",
customTitle: "Chambre 2",
},
{
idx: "3886",
symbolon: "fa fa-thermometer-half",
symboloff: "fa fa-thermometer-half",
customTitle: "Cuisine",
},
{
idx: "3880",
symbol: "fa fa-thermometer-half",
symboloff: "fa fa-thermometer-half",
customTitle: "SdB RdC",
},
{
idx: "520",
symbol: "fa fa-thermometer-half",
symboloff: "fa fa-thermometer-half",
customTitle: "Salon SaM",
},
{
idx: "4093",
symbol: "fa fa-thermometer-half",
symboloff: "fa fa-thermometer-half",
customTitle: "Chambre étage",
},
]
}
},MODULE domoticz.js
Code : Tout sélectionner
/* global Module */
/* Magic Mirror
* Module: Domoticz
*
* By Mathias Arvidsson
*/
Module.register("domoticz",{
defaults: {
units: config.units,
updateInterval: 50,
animationSpeed: 1000,
timeFormat: config.timeFormat,
lang: config.language,
initialLoadDelay: 0,
retryDelay: 2500,
apiBase: "http://192.168.0.33", // IP domoticz
apiPort: "8080", // Port
sensors: [
{
idx: "1",
symbolon: "fa fa-user",
symboloff: "fa fa-user-o",
hiddenon: false,
hiddenoff: false,
customTitle: "",
},
],
},
firstEvent: false,
getStyles: function() {
return ['font-awesome.css'];
},
// Define required scripts.
getScripts: function() {
return ["moment.js"];
},
// Define start sequence.
start: function() {
Log.info("Starting module: " + this.name);
// Set locale.
moment.locale(config.language);
this.loaded = false;
this.status1 = false;
this.title = "Loading...";
this.scheduleUpdate(this.config.initialLoadDelay);
this.sensors = [];
for (var c in this.config.sensors) {
var sensor = this.config.sensors[c];
var newSensor = {idx:sensor.idx, symbolon:sensor.symbolon, symboloff:sensor.symboloff, hiddenon:sensor.hiddenon, hiddenoff:sensor.hiddenoff, customTitle:sensor.customTitle, status:"", sname:"",type:""};
console.log(sensor.idx);
this.sensors.push(newSensor);
}
console.log(this.sensors);
},
// Override dom generator.
getDom: function() {
var wrapper = document.createElement("div");
if (!this.loaded) {
wrapper.innerHTML = "Loading...";
wrapper.className = "dimmed light small";
return wrapper;
}
var tableWrap = document.createElement("table");
tableWrap.className = "small";
for (var c in this.sensors) {
var sensor = this.sensors[c];
if((sensor.status=="On" && sensor.hiddenon)||(sensor.status=="Off" && sensor.hiddenoff)) continue;
var sensorWrapper = document.createElement("tr");
sensorWrapper.className = "normal";
var symbolTD = document.createElement('td');
symbolTD.className = "symbol";
var symbol = document.createElement('i');
var symbolClass = sensor.symboloff
if(sensor.status=="On") symbolClass = sensor.symbolon
symbol.className = symbolClass;
symbolTD.appendChild(symbol);
sensorWrapper.appendChild(symbolTD);
var titleTD = document.createElement('td');
titleTD.className = "title bright";
if(sensor.status=="Off") titleTD.className = "title light";
titleTD.innerHTML = sensor.sname;
if(typeof sensor.customTitle !== 'undefined') titleTD.innerHTML = sensor.customTitle;
sensorWrapper.appendChild(titleTD);
var statusTD = document.createElement('td');
statusTD.className = "time light";
statusTD.innerHTML = sensor.status;
sensorWrapper.appendChild(statusTD);
tableWrap.appendChild(sensorWrapper);
}
wrapper.appendChild(tableWrap);
return wrapper;
},
updateDomo: function() {
var i = 0;
for (var c in this.sensors) {
console.log("this is c: " + c);
var sensor = this.sensors[c];
var url = this.config.apiBase + ":" + this.config.apiPort + "/json.htm?type=devices&rid=" + sensor.idx;
var self = this;
var domoRequest = new XMLHttpRequest();
domoRequest.open("GET", url, true);
domoRequest.onreadystatechange = function() {
if (this.readyState === 4) {
if (this.status === 200) {
self.processJson(JSON.parse(this.response));
console.log("Loaded data");
} else {
Log.error(self.name + ": Could not load data.");
console.log("Did not load data");
}
}
};
domoRequest.send();
i++;
}
},
processJson: function(data) {
console.log("****Parsing data: " + c + " " + data.result[0].Name);
if (!data) {
// Did not receive usable new data.
// Maybe this needs a better check?
return;
}
for (var c in this.sensors) {
var sensor = this.sensors[c];
if(sensor.idx == data.result[0].idx){
this.sensors[c].sname = data.result[0].Name;
this.sensors[c].status = data.result[0].Data;
this.sensors[c].type = data.result[0].Type;
}
}
this.loaded = true;
this.updateDom(this.config.animationSpeed);
},
scheduleUpdate: function(delay) {
console.log("Updating..");
var nextLoad = this.config.updateInterval;
if (typeof delay !== "undefined" && delay >= 0) {
nextLoad = delay;
}
var self = this;
setInterval(function() {
self.updateDomo();
}, 50000);
}
});
Tiens moi au jus !
Manu
(au passage, tu peux mettre 2 paragraphes ou plus de "domoticz" dans ton config.JS pour séparer plusieurs zones)
Re: MagicMirror²
Salut manu
Me revoila après la petite panne du forum. J'ai testé tes fichiers mes rien a faire je reste en loading data. Par contre si je change, dans le domoticz.js la valeur 50000 par nextLoad dans la dernière fonction (comme dans le programme d'origine de Mathias Arvidsson) alors les infos s'affichent sur le magic mirror mais ne se mettent pas a jour apres un changement d'état. J'ai aussi manipulé toutes les variables de temps au début du fichier mais rien n'y fait.
As tu une idée?
Sinon peut etre que si j'utilise l'interface monitor de vil1driver en la mettant dans un module Iframe du magic mirror avec refresh de la page, ça peut éventuellement le faire ?
merci pour les futures réponses
Me revoila après la petite panne du forum. J'ai testé tes fichiers mes rien a faire je reste en loading data. Par contre si je change, dans le domoticz.js la valeur 50000 par nextLoad dans la dernière fonction (comme dans le programme d'origine de Mathias Arvidsson) alors les infos s'affichent sur le magic mirror mais ne se mettent pas a jour apres un changement d'état. J'ai aussi manipulé toutes les variables de temps au début du fichier mais rien n'y fait.
As tu une idée?
Sinon peut etre que si j'utilise l'interface monitor de vil1driver en la mettant dans un module Iframe du magic mirror avec refresh de la page, ça peut éventuellement le faire ?
merci pour les futures réponses
Re: MagicMirror²
tu as bien essayé en enlevant le login / password de domoticz ?
Re: MagicMirror²
Salut manu, je viens enfin de trouver le probleme. en faisant un ctrl + shift+ i lorsque le magic mirror est en fonctionnement on a accès a la console et j'ai pu voir les erreurs concernant le module domoticz. Il s'agissait du code "console.log" qui était en erreur. Du coup j'ai commenté tous les "console.log" du module pour qu'ils ne soient pas pris en compte et ...tada c'est fonctionnel.manu663 a écrit : 01 avr. 2019, 19:36 tu as bien essayé en enlevant le login / password de domoticz ?
Merci encore pour le soutien
A+
Re: MagicMirror²
Mister T
Merci pour le retour ! Mais tu ne dois ton succès qu'à toi même !
Bravo !
Merci pour le retour ! Mais tu ne dois ton succès qu'à toi même !
Bravo !