NEWS
Mein erstes Skript und Probleme!
-
Anbei mein erster Versuch eines Skriptes und habe keinen Erfolg:
var idtimenew = "javascript.0.VIS.Laufzeit"; var idSekunden = "system.adapter.admin.0.uptime"; var idtage = '0'; var idstunden = '0'; var idminuten = '0'; createState(idtimenew, '0', { def: '0', type: 'string', role: 'text' }); on(idSekunden, function (data) { if (data.state.val >= 86400) setState(idtage, Math.floor(data.state.val / 86400 )), setState(idSekunden, data.state.val - (86400 * parseInt(idtage))); if (data.state.val >= 3600) setState(idstunden, Math.floor(data.state.val / 3600 )), setState(idSekunden, data.state.val - (3600 * parseInt(idstunden))); if (data.state.val >= 60) setState(idminuten, Math.floor(data.state.val / 60 )); if (parseInt(idtage) > 0) setState(idtimenew, idtage + ' Tg. ' + idstunden + ' Std. ' + idminuten + ' Min.'); else setState(idtimenew, idstunden + ' Std. ' + idminuten + ' Min.'); });
Wo liegt der Fehler?
Für Hilfe dankbar!!!
MfG
Wastl -
@Langer sagte:
Wo liegt der Fehler?
Du verwechselst Datenpunkte mit Variablen.
var idtimenew = "javascript.0.VIS.Laufzeit"; var idSekunden = "system.adapter.admin.0.uptime"; createState(idtimenew, '0', { def: '0', type: 'string', role: 'text' }); on(idSekunden, function (data) { let tage = Math.floor(data.state.val / 86400); let sekunden = data.state.val - (86400 * tage); let stunden = Math.floor(sekunden / 3600); sekunden = sekunden - 3600 * stunden; let minuten = Math.round(sekunden / 60); let text = stunden + ' Std. ' + minuten + ' Min.'; if (tage > 0) text = tage + ' Tg. ' + stunden + ' Std. ' + minuten + ' Min.'; setState(idtimenew, text, true); });
-
-
Hallo,
bin dabei mein erstes Skript weiter auszubauen und habe ein Problem:
Unter "Global" habe ich folgende Funktion abgelegt:
function SekToTime(uptime_sek, objekt) { let tage = Math.floor(uptime_sek / 86400); let sekunden = uptime_sek - (86400 * tage); let stunden = Math.floor(sekunden / 3600); sekunden = sekunden - 3600 * stunden; let minuten = Math.round(sekunden / 60); let text = stunden + ' Std. ' + minuten + ' Min.'; if (tage > 0) text = tage + ' Tg. ' + stunden + ' Std. ' + minuten + ' Min.'; setState(objekt, text, true); };
Wobei erster Parameter die Uptime von z.B. adapter Admin ist in sekunden, der zweite Parameter ist das Objekt, in dem der erechnete Wert abgelegt werden soll.
Unter "Common" habe ich folgende Funktion:
function adapter_uptime() { SekToTime("system.adapter.admin.0.uptime","javascript.0.uptime.admin"); SekToTime("system.adapter.ble.0.uptime","javascript.0.uptime.ble"); } adapter_uptime();
Als Ausgabe bekomme ich in beiden Fällen:
NaN Std. NaN Min.
Was läuft falsch?
Danke vorab.
MfG
Wastl -
@Langer Wie auch vorher verwechselst Du was.
Deine Funktion benötigt als ersten parameter eine Zeit, als 2. Parameter die ID eines States.
Du übergibst der Funktion in beiden Parametern State-ID's. Das kann nicht gehen.
A.
-
@Langer sagte in:
Was läuft falsch?
"system.adapter.admin.0.uptime" ist keine Zahl, sondern eine ID. Versuche mal
function adapter_uptime() { SekToTime(getState("system.adapter.admin.0.uptime").val,"javascript.0.uptime.admin"); SekToTime(getState("system.adapter.ble.0.uptime").val,"javascript.0.uptime.ble"); } adapter_uptime();
-
Danke für die schnelle Antworten.
Habe es so gemacht, mit getState ().val, bekomme jetzt aber folgende Fehlermeldung im Log:
javascript.0 2020-12-15 13:49:56.486 error (5076) at Script.runInContext (vm.js:130:18) javascript.0 2020-12-15 13:49:56.486 error (5076) at script.js.common.admin_Uptime:7:1 javascript.0 2020-12-15 13:49:56.485 error (5076) at adapter_uptime (script.js.common.admin_Uptime:3:56) javascript.0 2020-12-15 13:49:56.485 error (5076) TypeError: Cannot read property 'val' of undefined javascript.0 2020-12-15 13:49:56.484 error (5076) ^ javascript.0 2020-12-15 13:49:56.484 error (5076) SekToTime(getState("system.adapter.admin.0.uptime").val,"javascript.0.uptime.admin"); javascript.0 2020-12-15 13:49:56.483 error (5076) script.js.common.admin_Uptime: script.js.common.admin_Uptime:3 javascript.0 2020-12-15 13:49:56.480 error (5076) script.js.common.admin_Uptime: Please disable that setting or use "getState" with a callback, e.g.: getState("system.adapter.admin.0.uptime", (err, state) => { ... }); javascript.0 2020-12-15 13:49:56.479 error (5076) script.js.common.admin_Uptime: The "getState" method cannot be used synchronously, because the adapter setting "Do not subscribe to all states on start" is enabled.
Wie schon geschrieben, absoluter Anfänger, kann mit der Meldung nichts anfangen.
MfG
Wastl -
@Langer sagte:
because the adapter setting "Do not subscribe to all states on start" is enabled.
Entferne den Haken in der Konfiguration der Javascript-Instanz.
-