ioBroker.nuki
ioBroker.nuki copied to clipboard
Batterie Status
hi, i have nuki power pack and in nuki app i see the % from batterie at moment 46%, can i see that with iobroaker? at moment only status critical or not critical. an update here would be fine please
Hi there, this is a nice suggestion. But this adapter is based on the latest NUKI bridge API which doesn't deliver this information. I'm guessing the percentage you are receiving in the app is brought to you via direct Blutooth connection or maybe via NUKI web API. Till now these connection types are not supported by this adapter. Sorry.
Regards Sven
I had another look at the API and found that actually the %-value can be provided by the bridge.
I'm going to implement this in the next version.
Hi Sven,
vielen Dank für die Programmierung des Adapters. Funktioniert bestens.
Ich hätte auch großes Interesse an einem Prozentwert des Akkus. Hast Du das bereits eingebaut und ich habs übersehen?
Vielen Dank & viele Grüße Tom
Hi, der Ladezustand der Batterie ist jetzt in Version 1.7.0 integriert. Leider habe ich noch ein paar Probleme mit der Umsetzung der Token-Verschlüsselung, daher kann ich die Version noch nicht freigeben.
Gruß Sven
Vielen Dank für das Update und die Mühe. Gibt es hier eventuell schon etwas Neues? Leider aktuallisiert sich der Akkustand nur bei einem Neustart des Adapters.
Hi, ich habe das per JS in ioBroker so gelöst:
// V24.04.001
// Nuki Smart Lock Battery Status
//
// Dieses Skript überwacht den Batteriestatus eines Nuki Smart Lock (Version 3 oder 4), das mit einer Nuki Bridge verbunden ist.
// Die Batteriestatusinformationen werden regelmäßig abgerufen und in einem ioBroker-Datenpunkt (dataPath) gespeichert.
const axios = require('axios');
// Pfad für die Datenpunkte
var dataPath = "javascript.0.nuki-battery-state";
// URL für die NUKI Bridge API-Anfrage (ersetze <bridge_ip> und <token> durch deine Werte)
var url = "http://<bridge_ip>:8080/list?token=<token>";
// Funktion zur Aktualisierung eines Zustands, falls vorhanden, oder zur Erstellung eines neuen Zustands
function updateOrCreateState(path, value, callback) {
getObject(path, function (err, obj) {
if (!err && obj) {
// Der Zustand existiert bereits, aktualisiere ihn
setState(path, value, true, callback);
} else {
// Zustand erstellen
createState(path, value, true, callback);
}
});
}
// Funktion zum Abrufen und Speichern des Batteriestatus
function saveBatteryStatus() {
axios.get(url).then(response => {
// Überprüfe, ob die Antwort ein Array mit mindestens einem Element enthält
if (response.data && response.data.length > 0) {
// Zugriff auf den Batterieladestatus des ersten Geräts
var batteryChargeState = response.data[0].lastKnownState.batteryChargeState;
// Speichern des Wertes in ioBroker
updateOrCreateState(dataPath + ".batteryChargeState", batteryChargeState, function () {});
}
}).catch(error => {
log("Fehler beim Abrufen des Batteriestatus: " + error);
});
}
// Initialer Aufruf der Funktion, um den Batteriestatus sofort zu speichern
saveBatteryStatus();
// Funktion zur regelmäßigen Aktualisierung (täglich)
schedule("0 0 * * *", function () {
saveBatteryStatus();
});
Beim ersten Ausführen des JS und falls der Datenpunkt noch nicht angelegt wurde, tritt der Fehler „Object can't be copied: {}“ auf. Dies deutet wohl auf eine Problematik bei der Adressierung des Datenpunktes hin, sofern dieser noch nicht existiert. Trotz dieses Fehlers funktioniert das Skript in meinem Fall einwandfrei, weswegen dieser Fehler meiner Einschätzung nach ignoriert werden kann.
PS: benötigt Smart Lock Firmware 2.8.1/1.10.0 oder höher