NEWS
AVM DECT200/smartfritz
-
Hallo Kollegen,
ich glänze mal wieder mit meinem JavaScript-Unwissen :roll:
Ich würde gerne das Modul 'smartfritz' (https://github.com/nischelwitzer/smartfritz) einbinden, um mein AVM DECT200 zu steuern. Die Installation mittels````
npm install smartfritzDoch wie benutze ich diese Bibliothek/dieses Modul?
var fritz = require('smartfritz');
liefert leider:
20:25:18.625 [error] javascript.0 script.js.selfmade.FritzDECT: Cannot find module '/opt/iobroker/node_modules/iobroker.javascript/node_modules/smartfritz' at script.js.selfmade.FritzDECT:1:13
20:25:18.626 [error] javascript.0 script.js.selfmade.FritzDECT: TypeError: Cannot read property 'getSessionID' of undefined at script.js.selfmade.FritzDECT:3:6Muss ich dem ****require**** noch den richtigen Pfad mitgeben?
-
Doch wie benutze ich diese Bibliothek/dieses Modul? `
Trage es in der Konfiguration der JS-Instanz unter "Zusätzliche NPM-Module" ein. -
Vielen Dank, jetzt funktioniert's.
-
Falls es noch jemanden interessiert, wie man die Werte des AVM Fritz! DECT200 in den ioBroker bekommt:
npm install smartfritz-promise ````in der Kommandozeile ausführen. Das Modul im JavaScript-Adapter eintragen. Folgendes Script anpassen (ain des DECT200 und user+password des FritzBox-Benutzers):
const ain = 'XXXXXXXXXXXX';
var fritz = require('smartfritz-promise');//Starte Scheduler (5s)
schedule("*/5 * * * * *", function () {
createStates();
getDeviceReadings(ain);
});function getDeviceReadings(devId) {
fritz.getSessionID("user", "password").then(function(sid) {
fritz.getSwitchPower(sid, devId).then(function(power) {
if (isNumeric(power)) {
var p = parseFloat(power);
//log('Power: ' + p);
setState('DECT200.Leistung', p);
}
});
fritz.getTemperature(sid, devId).then(function(temperature) {
if (isNumeric(temperature)) {
var t = parseFloat(temperature);
//log('Temperature: ' + t);
setState('DECT200.Temperatur', t);
}
});
});
}function createStates() {
createState('DECT200.Leistung', 0, {name: 'Leistung DECT200', type: 'number', unit:'W'});
createState('DECT200.Temperatur', 0, {name: 'Temperatur DECT200', type: 'number', unit:'°C'});
}function isNumeric(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}Ich bin ja wie gesagt noch Amateur in JavaScript, aber obiges Script läuft bisher ziemlich problemlos. [1340_js.png](/assets/uploads/files/1340_js.png)
-
npm install smartfritz-promise
in der Kommandozeile ausführen. `
Das ist nicht erforderlich. Der Eintrag in der JS-Instanz-Konfiguration ist ausreichend. -
ich kram den mal raus…
hat das einer am laufen... bekomme keine werte raus..
aber auch ohne fehlermeldung
axo.paket wurde umbenannt "fritzapi"
const ain = '4711'; var fritz = require('fritzapi'); var moreParam = { url:"192.168.13.1" }; //Starte Scheduler (5s) schedule("*/5 * * * * *", function () { createStates(); getDeviceReadings(ain); }); function getDeviceReadings(devId) { fritz.getSessionID("hier user ", "geheim").then(function(sid) { fritz.getSwitchPower(sid, devId).then(function(power) { if (isNumeric(power)) { var p = parseFloat(power); // log('Power: ' + p); setState('DECT200.Leistung', p); } }); fritz.getTemperature(sid, devId).then(function(temperature) { if (isNumeric(temperature)) { var t = parseFloat(temperature); // log('Temperature: ' + t); setState('DECT200.Temperatur', t); } }); }, moreParam); } function createStates() { createState('DECT200.Leistung', 0, {name: 'Leistung DECT200', type: 'number', unit:'W'}); createState('DECT200.Temperatur', 0, {name: 'Temperatur DECT200', type: 'number', unit:'°C'}); } function isNumeric(n) { return !isNaN(parseFloat(n)) && isFinite(n); }
-
Bei mir läuft das seit rund einem halben Jahr ohne Aussetzer. Die einzige Änderung war (wie Du ja schon bemerkt hast), dass das Paket inzwischen 'fritzapi' heißt.
Hast Du schon getestet, ob die Kommunikation prinzipiell funktioniert, in dem Du einzelne Befehle absetzt, wie z.B. den um eine SID zu bekommen?
-
na jetzt wo du es sagst.
18:47:40.880 [info] javascript.1 Stop script script.js.rest.dect200 18:47:40.888 [info] javascript.0 Stop script script.js.rest.dect200 18:47:40.955 [info] javascript.0 Start javascript script.js.rest.dect200 18:47:40.967 [info] javascript.0 script.js.rest.dect200: registered 0 subscriptions and 0 schedules
keine Fehlermeldung aber auch keine sid…
fritz.getSessionID("xxx", "xxxx", { url: "192.168.178.1", strictSSL: false }).then(function(sid) { console.log(sid); fritz.getSwitchList(sid, options).then(function(ains){ console.log(ains); }); });
was für ne fritzbox hasten du ??
-
Ich habe die 7490
-
softwareversion 6.60 ??
ich sehe gerade der upnp adapter liefert auch keine sid
-
Ja, die derzeit aktuellste (6.60).
-
hab ich auch.. muss ich nicht verstehen..
box gerade neu gestertet nix… keine sid...
vielleicht liegt es da dran dass meine 7490 an der 6360... obwohl neee... warum auch...
-
Hast Du dem Benutzer in den Einstellungen auch die "Smarthome"-Freigabe erteilt?
System->FRITZ!Box-Benutzer->Bearbeiten
-
türlich..
-
so ich habs
nachdem ich die index.js aus dem fritzapi auseinander genommen habe ….
die
getSessionID(username, password,"192.168.1.1").then(function(sid) {
war verkehrt..zumindest was die parameter angeht
-
Was genau musstest Du an meinem Skript ändern? Das würde eventuell anderen Interessierten weiter helfen.
Deine Box scheint nicht unter 'fritz.box' erreichbar zu sein oder warum verwendest Du
fritz.getSessionID("user", "password", { url: "192.168.178.1", strictSSL: false // workaround DEPTH_ZERO_SELF_SIGNED_CERT SSL error }).then(function(sid) { console.log(sid);
statt einfach nur
var fritz = require('fritzapi'); fritz.getSessionID("user", "password").then(function(sid) { console.log(sid); });
-
Was genau musstest Du an meinem Skript ändern? Das würde eventuell anderen Interessierten weiter helfen.
Deine Box scheint nicht unter 'fritz.box' erreichbar zu sein oder warum verwendest Du `
jep genau so ist es…
geändert habe ich nichts.. im Beispiel ist die nur die Parameterübergabe verkehrt
fritz.getSessionID("user", "password", { url: "192.168.178.1", strictSSL: false // workaround DEPTH_ZERO_SELF_SIGNED_CERT SSL error }).then(function(sid) {
sondern
fritz.getSessionID("user", "password", "192.168.178.1",
-
Hallo,
ich hab gerade das script getestet, läuft soweit.
jetzt hab ich bei mir 2 dect200, wo gebe ich in dem script an welcher stecker verwendet wird?
-
habs übersehen , die erste zeile
const ain = '4711';
ist die Lösung!!
-
Falls es von Interesse ist, ich hab einen Adapter iobroker.fritzdect mit geeigneten metro-widget erstellt.
Ist derzeitig noch nicht im admin Bereich gelistet, aber über npm installierbar.
Gruß
Klaus