You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have identified an issue with state creation under 0_userdata.0 and by using the new, yet undocumented, ioBroker function existsState() versus using $-Selector$().length to check for state existment.
I was able to isolate this as follows:
The following script creates a state under 0_userdata.0 by using setObject(). Afterwards, it checks in an interval (10x 2 seconds), if the state was deleted in the meantime.
If DELETE_STATE = true, then the script will delete the state in the 5th interval (after 10 seconds). If set to false, the tester needs to delete the state manually right after script start (so delete within ioBroker admin interface, tab "Objects").
Test Summary:
Deletion of a state, that was created by setObject(), seems to be not correctly recognized.
State deleted manually:
$-selector: correct
existsState(): not correct (still returns true)
State deleted through deleteState():
$-selector: not correct ($().length still returns >0)
existsState(): correct
However, we would expect that both existsState() would return false and $().length would return 0, if a state is deleted either manually within ioBroker admin, or by using deleteState() function.
Result of Test 1:DELETE_STATE = true
ioBroker Function existsState() identifies the state deletion. This is correct.
$(TEST_STATE).length falsely returns 1 ("Yes" in Script), which is not correct.
Result of Test 2:DELETE_STATE = false
About 10 seconds after script start, I have manually deleted the state 0_userdata.0.Test_1 within ioBroker admin Objects menu. Result:
ioBroker Function existsState() does not identify the state deletion. So not correct.
$(TEST_STATE).length correctly returns <1 ("No" in Script), which is correct.
The Script:
const DELETE_STATE = true;
const TEST_STATE = '0_userdata.0.Test_1';
//const TEST_STATE = 'javascript.0.Test_1';
log('______________________________________________________________________________________');
// First of all, we delete the state through JavaScript
deleteState(TEST_STATE);
// Next, we proceed accordingly. We use timeout of 2 seconds to make sure that the state is deleted.
setTimeout(function(){
log('Start creating state [' + TEST_STATE + ']. Option DELETE_STATE set to ' + DELETE_STATE);
if (!DELETE_STATE) log('Please note: for this test, you need to delete the state after creation by this script manually within ioBroker admin, tab "Objects". You will have max 18 seconds to proceed.', 'warn')
createTestState();
//createState('javascript.0.Test_1', {'name':'Test', 'type':'boolean', 'read':true, 'write':true, 'def':false });
let intervalTimer;
let counter = 0;
let max = 10;
intervalTimer = setInterval(function() {
counter++;
log ('=== Execution ' + counter + ' of ' + max + ' =====');
if(DELETE_STATE && counter===5) {
deleteState(TEST_STATE);
log('######## State deleted through deleteState() function. ########')
}
if (counter <= max) {
log('Does state exist per existsState(): ' + ((!existsState(TEST_STATE)) ? 'NO' : 'YES'));
log('Does state exist per $(TEST_STATE).length: ' + (($(TEST_STATE).length < 1 ) ? 'NO' : 'YES'));
} else {
log(max + ' intervals completed. We stop further execution.')
clearInterval(intervalTimer);
intervalTimer = null;
}
}, 2000);
}, 2000);
function createTestState() {
let obj = {};
obj.type = 'state';
obj.native = {};
obj.common = {'name':'Test', 'type':'boolean', 'read':true, 'write':true, 'def':false };
setObject(TEST_STATE, obj, function (err) {
if (err) {
log('Cannot write object for state [' + TEST_STATE + ']: ' + err);
} else {
let init = null;
if(obj.common.def === undefined) {
if(obj.common.type === 'number') init = 0;
if(obj.common.type === 'boolean') init = false;
if(obj.common.type === 'string') init = '';
} else {
init = obj.common.def;
}
// Timeout due to https://github.com/ioBroker/ioBroker.javascript/issues/474
setTimeout(function() {
setState(TEST_STATE, init, true);
}, 50 );
}
});
}
Log of Test 1:
18:59:18.016 info javascript.0 (14362) Start javascript script.js.E-Test.ERR_setObject
18:59:18.038 info javascript.0 (14362) script.js.E-Test.ERR_setObject: ______________________________________________________________________________________
18:59:18.039 info javascript.0 (14362) script.js.E-Test.ERR_setObject: registered 0 subscriptions and 0 schedules
18:59:20.043 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Start creating state [0_userdata.0.Test_1]. Option DELETE_STATE set to true
18:59:22.049 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 1 of 10 =====
18:59:22.050 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): YES
18:59:22.051 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: YES
18:59:24.050 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 2 of 10 =====
18:59:24.051 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): YES
18:59:24.052 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: YES
18:59:26.051 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 3 of 10 =====
18:59:26.051 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): YES
18:59:26.052 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: YES
18:59:28.051 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 4 of 10 =====
18:59:28.051 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): YES
18:59:28.053 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: YES
18:59:30.051 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 5 of 10 =====
18:59:30.052 info javascript.0 (14362) script.js.E-Test.ERR_setObject: ######## State deleted through deleteState() function. ########
18:59:30.052 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): NO
18:59:30.053 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: YES
18:59:32.051 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 6 of 10 =====
18:59:32.051 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): NO
18:59:32.053 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: YES
18:59:34.052 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 7 of 10 =====
18:59:34.052 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): NO
18:59:34.053 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: YES
18:59:36.052 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 8 of 10 =====
18:59:36.052 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): NO
18:59:36.054 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: YES
18:59:38.051 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 9 of 10 =====
18:59:38.052 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): NO
18:59:38.053 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: YES
18:59:40.054 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 10 of 10 =====
18:59:40.055 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): NO
18:59:40.057 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: YES
18:59:42.055 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 11 of 10 =====
18:59:42.055 info javascript.0 (14362) script.js.E-Test.ERR_setObject: 10 intervals completed. We stop further execution.
Log of Test 2:
19:09:37.203 info javascript.0 (14362) Start javascript script.js.E-Test.ERR_setObject
19:09:37.207 info javascript.0 (14362) script.js.E-Test.ERR_setObject: ______________________________________________________________________________________
19:09:37.208 info javascript.0 (14362) script.js.E-Test.ERR_setObject: registered 0 subscriptions and 0 schedules
19:09:39.208 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Start creating state [0_userdata.0.Test_1]. Option DELETE_STATE set to false
19:09:39.209 warn javascript.0 (14362) script.js.E-Test.ERR_setObject: Please note: for this test, you need to delete the state after creation by this script manually within ioBroker admin, tab "Objects". You will have max 18 seconds to proceed.
19:09:41.210 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 1 of 10 =====
19:09:41.211 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): YES
19:09:41.212 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: YES
19:09:43.210 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 2 of 10 =====
19:09:43.210 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): YES
19:09:43.212 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: YES
19:09:45.210 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 3 of 10 =====
19:09:45.211 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): YES
19:09:45.212 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: YES
19:09:47.211 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 4 of 10 =====
19:09:47.211 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): YES
19:09:47.212 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: NO
19:09:49.211 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 5 of 10 =====
19:09:49.211 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): YES
19:09:49.212 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: NO
19:09:51.210 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 6 of 10 =====
19:09:51.211 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): YES
19:09:51.212 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: NO
19:09:53.211 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 7 of 10 =====
19:09:53.211 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): YES
19:09:53.213 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: NO
19:09:55.211 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 8 of 10 =====
19:09:55.211 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): YES
19:09:55.212 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: NO
19:09:57.211 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 9 of 10 =====
19:09:57.212 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): YES
19:09:57.213 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: NO
19:09:59.212 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 10 of 10 =====
19:09:59.212 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per existsState(): YES
19:09:59.213 info javascript.0 (14362) script.js.E-Test.ERR_setObject: Does state exist per $(TEST_STATE).length: NO
19:10:01.212 info javascript.0 (14362) script.js.E-Test.ERR_setObject: === Execution 11 of 10 =====
19:10:01.212 info javascript.0 (14362) script.js.E-Test.ERR_setObject: 10 intervals completed. We stop further execution.
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs within the next 7 days. Please check if the issue is still relevant in the most current version of the adapter and tell us. Also check that all relevant details, logs and reproduction steps are included and update them if needed. Thank you for your contributions.
Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivitäten gab. Es wird geschlossen, wenn nicht innerhalb der nächsten 7 Tage weitere Aktivitäten stattfinden. Bitte überprüft, ob das Problem auch in der aktuellsten Version des Adapters noch relevant ist, und teilt uns dies mit. Überprüft auch, ob alle relevanten Details, Logs und Reproduktionsschritte enthalten sind bzw. aktualisiert diese. Vielen Dank für Eure Unterstützung.
This issue has been automatically closed because of inactivity. Please open a new issue if still relevant and make sure to include all relevant details, logs and reproduction steps. Thank you for your contributions.
Dieses Problem wurde aufgrund von Inaktivität automatisch geschlossen. Bitte öffnet ein neues Issue, falls dies noch relevant ist und stellt sicher das alle relevanten Details, Logs und Reproduktionsschritte enthalten sind. Vielen Dank für Eure Unterstützung.
Hi,
I have identified an issue with state creation under
0_userdata.0
and by using the new, yet undocumented, ioBroker functionexistsState()
versus using $-Selector$().length
to check for state existment.I was able to isolate this as follows:
The following script creates a state under
0_userdata.0
by usingsetObject()
. Afterwards, it checks in an interval (10x 2 seconds), if the state was deleted in the meantime.If
DELETE_STATE = true
, then the script will delete the state in the 5th interval (after 10 seconds). If set to false, the tester needs to delete the state manually right after script start (so delete within ioBroker admin interface, tab "Objects").Test Summary:
Deletion of a state, that was created by
setObject()
, seems to be not correctly recognized.$-selector
: correctexistsState()
: not correct (still returns true)deleteState()
:$-selector
: not correct ($().length
still returns >0)existsState()
: correctHowever, we would expect that both
existsState()
would return false and$().length
would return 0, if a state is deleted either manually within ioBroker admin, or by usingdeleteState()
function.Result of Test 1:
DELETE_STATE = true
existsState()
identifies the state deletion. This is correct.$(TEST_STATE).length
falsely returns 1 ("Yes" in Script), which is not correct.Result of Test 2:
DELETE_STATE = false
About 10 seconds after script start, I have manually deleted the state
0_userdata.0.Test_1
within ioBroker admin Objects menu. Result:existsState()
does not identify the state deletion. So not correct.$(TEST_STATE).length
correctly returns <1 ("No" in Script), which is correct.The Script:
Log of Test 1:
Log of Test 2:
Thanks!
P.S. Using: _js-controller 2.2.7, JS Adapter 4.3.4
The text was updated successfully, but these errors were encountered: