Nö, das scheint irgendwas am Abfrageintervall zu sein.
Wenn ich direkt den Wert abfrage:
! ````
var request = require('request');
var link = "http://192.168.XXX.XXX:2323/?cmd=deviceInfo&type=json&password=XXX";
var state = "javascript.0.Allgemein.Akku_Tablet"/Akku_Tablet/;
! function fully() {
request(link, function(error,response, body) {
if(error) log('Fehler request: ' + error, 'error');
else {
objects = JSON.parse(body);
bat = objects.batteryLevel;
setState(state, bat);
log ("batteryLevel = " + bat);
}
});
}
! fully();
schedule('*/10 * * * *', fully);
Und den dann zum Laden verwende:
>! ````
const idBatt = 'javascript.0.Allgemein.Akku_Tablet'; // Batterielevel in %
const idPlug = 'sonoff.0.Ladestecker.POWER'; // Ladegerät ein
const idVis = 'Vis.Batterieanzeige'; // Für Vis
>! createState(idVis, 0, {
type: 'number',
min: 0,
max: 7,
role: 'level',
states: {
0: 'leer',
1: '20 %',
2: '40 %',
3: '60 %',
4: '80 %',
5: 'voll',
6: 'Ladegerät'
}
});
>! var level = getState(idBatt).val;
var plug = getState(idPlug).val;
>! function batt() {
var state = 5; // full 80 %
if(level <= 79) state = 4; // 79 %
if(level <= 60) state = 3; // 60 %
if(level <= 40) state = 2; // 40 %
if(level <= 30) state = 1; // 20 %
if(level <= 22) state = 0; // empty 20 %
if(plug) state = 6; // Ladegerät ein
setState(idVis, state, true);
if(level >= 80 && plug) setState(idPlug, false);
if(level <= 30 && !plug) setState(idPlug, true);
}
>! batt(); // Skriptstart
>! on(idBatt, function(dp) {
level = dp.state.val;
batt();
});
>! on(idPlug, function(dp) {
plug = dp.state.val;
batt();
});
habe ich den Effekt nicht.
Also aus Fully scheint der Wert korrekt zu kommen ohne Schwankungen.
Der Ladestecker ist direkt in meinem Büro. So konnte ich das Schalten deutlich hören. Ich habe zwar keine Fehlersuche gemacht, aber als ich aus einem anderen Grund das Script nicht mehr zum Laden verwendet habe war das Schalten plötzlich wieder weg.