{"version":3,"sources":["jsdelivr-header.js","/npm/iobroker.statemachine@0.0.2/statemachine.js"],"names":[],"mappings":"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","file":"/npm/iobroker.statemachine@0.0.2/statemachine.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/iobroker.statemachine@0.0.2/statemachine.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// yjshint -W097  jshint strict:false\n/*jslint node: true */\n\"use strict\";\n\n// you have to require the utils module and call adapter function\nconst utils = require(__dirname + '/lib/utils'); // Get common adapter utils\n\n// you have to call the adapter function and pass a options object\n// name has to be set and has to be equal to adapters folder name and main file name excluding extension\n// adapter will be restarted automatically every time as the configuration changed, e.g system.adapter.template.0\nconst adapter = utils.adapter('statemachine'),\n    //    assert = require('assert'),\n    MA = require('./myAdapter'),\n    A = MA.MyAdapter,\n    //    moment = require('moment'),\n    schedule = require('node-schedule'),\n    SunCalc = require('suncalc'),\n    Setter = MA.Setter;\n\nclass List {\n    constructor() {\n        return this;\n    }\n\n    add(name, item) {\n        var ni = this[name];\n        if (!ni)\n            ni = this[name] = [];\n        ni.push(item);\n    }\n\n    fireAll(name, val) {\n        return A.seriesOf(this[name], (x) => x.fire(val), 1);\n    }\n}\n\nconst REGEXP = 'regexp',\n    IDNAME = 'id',\n    SCHEDULE = 'schedule',\n    EVERY = 'every',\n    DELAY = 'delay',\n    EXEC = 'exec',\n    EVAL = 'eval',\n    STATE = 'state',\n    UNKNOWN = 'unknown',\n    MACHINE = 'machine',\n    SCENE = 'scene',\n    EVENT = 'event',\n    ASTRO = 'astro',\n    LINK = 'link',\n    TIMER = 'timer',\n    FOLDER = 'folder',\n\n    F_id = ' id',\n    F_default = ' default',\n    // F_expanded = ' expanded',\n    F_type = ' type',\n    F_disabled = ' disabled',\n    F_timeout = ' timeout',\n    F_fire = ' fire',\n    F_onFire = ' onfire',\n    F_onEnter = ' onenter',\n    F_onExit = ' onexit',\n    F_function = ' function',\n    regIdAction = /^\\s*([^\\/\\!\\&\\=\\~]+)(&\\s*)?(!\\s*)?(\\/\\s*)?(\\~\\s*|\\=\\+\\s*|\\=\\-\\s*|\\=\\!\\s*|\\=\\?\\s*|\\=.+|\\s*)$/,\n    regEval = /^\\s*(\\(.+\\))\\s*$/,\n    regExec = /^\\s*\\$\\s*(.+)$/,\n    regAstro = /^\\s*@\\s*([A-Z]+)\\s*([\\+\\-]\\d+)?\\s*$/i,\n    regDelay = /^\\s*(\\d+m)?\\s*(\\d+s)?\\s*(\\d+(?:ms)?)?\\s*$/,\n    regTimer = /^\\s*(\\d+h)?\\s*(\\d+m(?!s))?\\s*(\\d+s?)?\\s*(\\d+ms)?\\s*$/i,\n    regEvery = /^\\s*(\\d+w)?\\s*(\\d+d)?\\s*(\\d+h)?\\s*(\\d+m)?\\s*(\\d+s?)?$/i,\n    regTime = /^\\s*([\\d\\-\\*\\,\\/]+)\\s*:\\s*([\\d\\-\\*\\,\\/]+)\\s*(?::\\s*([\\d\\-\\*\\,\\/]+))?$/i,\n    regSchedule = /^\\s*((?:[0-9]?\\d|\\*)(?:(?:[\\/-][0-9]?\\d)|(?:,[0-9]?\\d)+)?\\s*){5}((?:[0-9]?\\d|\\*)(?:(?:[\\/-][0-9]?\\d)|(?:,[0-9]?\\d)+)?)?$/,\n    regId =\n    /^\\s*([^@][^\\?\\&\\!\\~\\><\\=\\^\\$#]+)([\\?\\&\\!]?)\\s*(~?)\\s*(\\+(?=\\s*$)|\\-(?=\\s*$)|\\=|\\!=|>\\=|>|<\\=|<|\\?|\\^|\\$|\\#|$)\\s*(.*)$/,\n    regRegexp = /^\\s*(\\/.+\\/i?)\\s*([\\?\\&\\!]?)\\s*(~?)\\s*(\\+(?=\\s*$)|\\-(?=\\s*$)|\\=|\\!=|>\\=|>|<\\=|<|\\?|\\^|\\$|\\#|$)\\s*(.*)$/;\n\n\nconst stateDisabled = '._disabled',\n    stateDebug = '_debugLevel';\n\nvar setter, queueAll, stq,\n    ids = {},\n    everys = new List(),\n    schedules = new List(),\n    eids = new List(),\n    rids = new List(),\n    astros = new List(),\n    eevents = new List();\n\nfunction stripFrom(from) {\n    return from.startsWith('system.adapter.') ? from.slice(15) : from;\n}\n\nclass MState {\n    constructor(options, idfrom, last) {\n        if (A.T(options) !== 'object')\n            options = {\n                val: options,\n                ts: Date.now()\n            };\n        this.val = options.val;\n        this.ack = options.ack;\n        this.ts = options.ts !== undefined ? options.ts : Date.now();\n        this.lc = options.lc;\n        this.num = options.num;\n        this.old = options;\n        this.last = last;\n        if (typeof idfrom === 'string')\n            this.id = stripFrom(idfrom);\n        else if (A.T(idfrom) === 'object' && idfrom.id)\n            this.id = stripFrom(idfrom.id);\n        return this;\n    }\n\n    toString() {\n        return `MS(${A.T(this.val)=== 'symbol' ? this.val.toString() : this.val},  '${this.sfrom}', ${this.num !== undefined ? this.num : ''})`;\n    }\n    get from() {\n        var from = this.id ? this.id : '';\n        if (this.old && this.old.from) {\n            if (from)\n                from += ' | ' + stripFrom(this.old.from);\n            else\n                from = stripFrom(this.old.from);\n        }\n        return from;\n    }\n    get sfrom() {\n        var from = this.from;\n        return from.length > 75 ? from.slice(0, 37) + ' ... ' + from.slice(-37) : from;\n    }\n\n    hasLast(last) {\n        if (last === undefined)\n            last = this.last;\n        if (this.old && this.old.last)\n            return this.old.last === last ? true : this.old.hasLast(last);\n        else if (this.old && this.old.hasLast)\n            return this.old.hasLast(last);\n        return false;\n    }\n}\n\nclass BaseSM {\n    constructor(id, type, icon) {\n        this._id = id;\n        if (typeof id === 'string')\n            ids[id] = this;\n        this._type = type;\n        this._parent = null;\n        if (icon)\n            this._icon = icon;\n    }\n\n    toString() {\n        return `${this.constructor.name}(${this.id}${this.disabled ? ', disabled' : ''})`;\n    }\n\n    get id() {\n        return this._id;\n    }\n    get type() {\n        return this._type;\n    }\n\n    get disabled() {\n        return this._disabled || (this.parent && this.parent.disabled);\n    }\n    set disabled(bool) {\n        if (bool)\n            this._disabled = bool;\n        else\n            delete this._disabled;\n\n    }\n\n    get val() {\n        return undefined;\n    }\n\n    get parent() {\n        return this._parent;\n    }\n\n    get expanded() {\n        return this._expanded;\n    }\n    set expanded(bool) {\n        if (bool)\n            this._expanded = bool;\n        else\n            delete this._expanded;\n\n    }\n\n    get active() {\n        return !this.disabled;\n    }\n\n    fire() {}\n    init() {}\n}\n\nclass BaseActions {\n    constructor(parent) {\n        this._parent = parent;\n        this._list = [];\n    }\n    get list() {\n        return this._list;\n    }\n    get disabled() {\n        return this._parent.disabled;\n    }\n    get parent() {\n        return this._parent;\n    }\n    toString() {\n        return `${this.constructor.name}(${this._parent}, ${this.length}, ${this.disabled})`;\n    }\n\n    get length() {\n        return this._list.length;\n    }\n\n    init() {\n        for (let i in this._list)\n            this._list[i].init(parseInt(i) + 1);\n    }\n\n}\n\nclass SEvent {\n    constructor(parent, text) {\n        this._parent = parent;\n        this._text = text;\n        this._type = UNKNOWN;\n        this._parse(text);\n    }\n\n    get parent() {\n        return this._parent;\n    }\n\n    toString() {\n        return `${this.constructor.name}(${this._type}, '${this._text}')`;\n    }\n\n    _parse(name) {\n        name = name.trim();\n        var m;\n        if ((m = name.match(regEvery))) { // evry xxx timer\n            var ts = 0;\n            for (var i = 1; i < 6; ++i) {\n                var s = m[i];\n                if (s) {\n                    if (s[s.length - 1] > '9')\n                        s = s.slice(0, -1);\n                    s = parseInt(s);\n                    ts += s * [0, 7 * 24 * 60 * 60, 24 * 60 * 60, 60 * 60, 60, 1][i];\n                }\n            }\n            ts = ts > 0 ? ts : 1;\n            this._type = EVERY;\n            this._timer = ts;\n            return this;\n        }\n        if ((m = name.match(regTime))) { // time\n            if (m[3] === undefined)\n                m[3] = 0;\n            this._schedule = m[3] + ' ' + m[2] + ' ' + m[1] + ' * * *';\n            this._type = SCHEDULE;\n            return this;\n        }\n        if ((m = name.match(regAstro))) { // astro\n            this._astro = m[1] + m[2];\n            this._type = ASTRO;\n            return this;\n        }\n        if ((m = name.match(regSchedule))) { // schedule\n            this._schedule = (!m[2] ? '* ' : '') + name;\n            this._type = SCHEDULE;\n            return this;\n        } // id + verifier\n        if ((m = name.match(regRegexp)))\n            this._type = REGEXP;\n        else if (!(m = name.match(regId)))\n            return A.W(`Invalid Event '${name}'`);\n        else\n            this._type = IDNAME;\n        this._onchange = !!m[3];\n        this._ack = m[2];\n        this._id = m[1].trim();\n        if (this._type === IDNAME && this._id.indexOf('*') >= 0) {\n            this._id = '/^' + this._id.replace('.', '\\.').replace(/\\*/g, '.*') + '$/';\n            this._type = REGEXP;\n        }\n        if (this._type === REGEXP) {\n            var r = this._id.match(/^\\s*\\/(.+)\\/(i)?\\s*$/);\n            this._regexp = new RegExp(r[1], r[2]);\n        }\n        this._test = m[5] ? m[5].trim() : undefined;\n        this._check = m[4];\n        return this;\n    }\n\n    execute() {\n        return A.resolve( /* Events will not be executed */ );\n    }\n\n    init(num) {\n        var e = new TheEvent(this, num);\n        switch (this._type) {\n            case EVERY:\n                everys.add(this._timer, e);\n                break;\n            case SCHEDULE:\n                schedules.add(this._schedule, e);\n                break;\n            case IDNAME:\n                eids.add(this._id, e);\n                break;\n            case REGEXP:\n                rids.add(this._regexp, e);\n                break;\n            case ASTRO:\n                astros.add(this._astro, e);\n                break;\n        }\n    }\n\n    doFire(state) {\n        if (this._type !== IDNAME && this._type !== REGEXP)\n            return true;\n        if (this._onchange && state && state.old)\n            if (state.ack === state.old.ack && state.val === state.old.val)\n                return false;\n        if (this._ack === '&' && !state.ack)\n            return false;\n        if (this.ack === '!' && state.ack)\n            return false;\n        var last = this._test ? this._test : (state && state.old && state.old.val);\n        switch (this._check) {\n            case '+':\n                return !!state.val;\n            case '-':\n                return !state.val;\n            case '=':\n                /* jshint -W116 */\n                return state.val == last;\n            case '!=':\n                return state.val != last;\n            case '>':\n                /* jshint +W116 */\n                return state.val > last;\n            case '>=':\n                return state.val >= last;\n            case '<':\n                return state.val < last;\n            case '<=':\n                return state.val <= last;\n            case '?':\n                return state.val.indexOf(last) >= 0;\n            case '#':\n                return state.val.indexOf(last) < 0;\n            case '^':\n                return state.val.startsWith(last);\n            case '$':\n                return state.val.endsWith(last);\n            default:\n                return true;\n        }\n        return true;\n    }\n}\n\n\nclass Events extends BaseActions {\n    constructor(parent, alist) {\n        super(parent);\n        if (alist)\n            for (let i of alist)\n                this._list.push(new SEvent(this, i));\n        return this;\n    }\n}\n\nclass SAction {\n    constructor(parent, text) {\n        this._text = text;\n        this._parent = parent;\n        this._type = UNKNOWN;\n        this._parse(text);\n    }\n\n    get parent() {\n        return this._parent;\n    }\n\n    toString() {\n        return `${this.constructor.name}('${this._text}')`;\n    }\n\n    _parse(name) {\n        let m; // delay xxx ms\n        if ((m = name.match(regDelay))) {\n            var ts = 0;\n            for (let i = 1; i < 4; ++i) {\n                let s = m[i];\n                if (s) {\n                    while (s[s.length - 1] > '9')\n                        s = s.slice(0, -1);\n                    s = parseInt(s);\n                    ts += s * [0, 60 * 1000, 1000, 1][i];\n                }\n            }\n            this._time = ts > 0 ? ts : 0;\n            this._fun = (that) => A.wait(that._time);\n            // this._type = DELAY;\n            return this;\n        } // exec command on system\n        if ((m = name.match(regExec))) {\n            this._cmd = m[1].trim();\n            this._fun = (that) => {\n                var fun = that._cmd;\n                var args = that.parent.parent._vars;\n                var nf = Array.isArray(args) ? fun.replace(/@(\\d+)/g, (match, p1) => args[p1]) : fun;\n                var mp = new A.Sequence();\n                var mn = 0,\n                    m = [];\n                nf = nf.replace(/@(?!\\()([\\w\\-\\$\\.]+)/g, (match, p1) => {\n                    var ret = '@' + mn++;\n                    mp.p = A.myGetState(p1).then(x => x.val, () => undefined).then(v => m.push(v));\n                    return ret;\n                });\n                nf = nf.replace('@@', '@');\n                /*jshint -W061 */\n                nf = nf.replace(/@(\\([^\\(\\)]+\\))/g, (match, p1) => eval(p1));\n                /*jshint +W061 */\n                return mp.p.then(() => nf.replace(/@(\\d+)/g, (match, p1) => m[p1]))\n                    .then(f => A.exec(f)).then(x => x, x => x);\n            };\n            // this._type = EXEC;\n            return this;\n        } // eval javascript\n        if ((m = name.match(regEval))) {\n            this._cmd = m[1].trim();\n            this._fun = (that) =>\n                myEval(that._cmd, that.parent.parent._vars);\n            // this._type = EVAL;\n            return this;\n        } // id + verifier\n        if (!(m = name.match(regIdAction)))\n            return A.W(`Invalid Action '${name}'`);\n        // this._type = STATE;\n        this._exec = m[5] ? m[5].trim() : '';\n        this._always = !!m[4];\n        this._ack = !!m[3];\n        this._queue = !!m[2];\n        this._id = m[1].trim();\n        switch (this._exec) {\n            case '~':\n                this._fun = (that) => A.myGetState(that._id).then((st) => mySetState(that._queue, that._id, !st.val, that._ack, that._always));\n                break;\n            case '=+':\n                this._fun = (that) => mySetState(that._queue, that._id, true, that._ack, that._always);\n                break;\n            case '=-':\n                this._fun = (that) => mySetState(that._queue, that._id, false, that._ack, that._always);\n                break;\n            case '=!':\n                this._fun = (that, from) => mySetState(that._queue, that._id, !from.val, that._ack, that._always);\n                break;\n            case '=?':\n            case '':\n            case undefined:\n                this._fun = (that, from) => mySetState(that._queue, that._id, from.val, that._ack, that._always);\n                break;\n            default:\n                if (this._exec && this._exec.startsWith('='))\n                    this._exec = this._exec.slice(1).trim();\n                if ((m = this._exec.match(/^\\(.+\\)$/)))\n                    this._fun = (that, from) => A.myGetState(that._id)\n                    .then((oval) => myEval(that._exec, [oval.val, from.val]))\n                    .then((val) => mySetState(that._queue, that._id, val, that._ack, that._always));\n                else\n                    this._fun = (that) => mySetState(that._queue, that._id, that._exec, that._ack, that._always);\n                break;\n        }\n        return this;\n    }\n\n    execute(from) {\n        if (this.parent.disabled)\n            return A.resolve();\n        //        from = new MState(from, this._id, this);\n        _D(3, `Execute \"${this}\" from: ${from.sfrom}`);\n        return this._fun(this, from);\n    }\n\n    init() {}\n}\n\nclass Actions extends BaseActions {\n    constructor(parent, alist) {\n        super(parent);\n        if (alist)\n            for (let i of alist)\n                this._list.push(new SAction(this, i));\n    }\n\n    execute(from) {\n        return (this.disabled) ? A.resolve() :\n            A.seriesOf(this._list, (x) =>\n                x.execute(from), 1).catch(e => A.W(`Actions: ${this} err: ${e}`));\n    }\n}\n\nclass Link extends BaseSM {\n    constructor(parent, obj, to) {\n        super(obj[F_id], obj[F_type]);\n        this._parent = parent;\n        this._events = new Events(this, obj[F_fire]);\n        this._to = to;\n    }\n    execute(from) {\n        from = new MState(from, this.id, this);\n        if (this.disabled || from.hasLast())\n            return A.resolve();\n        _D(3, `Execute ${this} from: ${from.sfrom}`);\n        from.val = this._to;\n        return this.parent.parent.execute(from).catch(e => A.W(`Execute: ${this} err: ${e}`));\n    }\n\n    get active() {\n        return this._parent.active;\n    }\n}\n\nclass Scene extends BaseSM {\n    constructor(parent, obj, role, icon) {\n        super(obj[F_id], obj[F_type], icon ? icon : 'lib/img/list.png');\n        this._parent = parent;\n        this._actions = new Actions(this, obj[F_onFire]);\n        this._disabled = obj[F_disabled];\n        if (this.type !== 'folder') A.addq = A.makeState({\n            id: this.id,\n            icon: this._icon ? this._icon : undefined,\n            type: role === undefined ? 'boolean' : 'mixed',\n            role: role === undefined ? 'button' : role,\n            def: false,\n            write: true,\n        }, undefined, true);\n        if (this.id !== '_init' && this.id !== '_debugLevel')\n            A.addq = A.myGetState(this.id + stateDisabled).then((s) => s.val, () => this._disabled)\n            .then(e => A.makeState({\n                id: this.id + stateDisabled,\n                type: 'boolean',\n                role: 'switch',\n                icon: 'lib/img/power-off.png',\n                def: false,\n                write: true,\n            }, e, true));\n    }\n    execute(from) {\n        from = new MState(from, this.id, this);\n        if (this.disabled || from.hasLast())\n            return A.resolve();\n        _D(2, `Execute ${this} from: ${from.sfrom}`);\n        return this._actions.execute(from).catch(e => A.W(`Execute: ${this} err: ${e}`));\n    }\n    init() {\n        this._actions.init();\n    }\n\n}\n\nclass Event extends Scene {\n    constructor(parent, obj, role) {\n        super(parent, obj, role ? role : 'value', 'lib/img/flash.png');\n        this._list = new Events(this, obj[F_fire]);\n        this._vars = new Array(this._list.length + 1);\n        this._function = obj[F_function];\n        this._disabled = obj[F_disabled];\n    }\n    execute(from) {\n        from = new MState(from, this.id, this);\n        if (this.disabled || from.hasLast())\n            return A.resolve();\n        var vold = this._vars[0];\n        if (from.num && this._vars.length > from.num)\n            this._vars[from.num] = from.val;\n        var that = this;\n        return (this._function ? myEval(this._function, this._vars.concat(from.num)) : Promise.resolve(from.val))\n            .then(v => {\n                _D(2, `Set ${that}=${v} from: ${from.sfrom}`);\n                if (v !== undefined) {\n                    from.val = that._vars[0] = v;\n                    if (v !== vold)\n                        return _setState(that.id, v, true, true);\n                }\n            }).then(() => that._actions.execute(from).catch(e => A.W(`Execute: ${this} err: ${e}`)));\n    }\n\n    get val() {\n        return this._vars[0];\n    }\n    init() {\n        this._actions.init();\n        if (A.states[this.id])\n            this._vars[0] = A.states[this.id].val;\n        this._list.init();\n    }\n}\n\nclass State extends Link {\n    constructor(parent, obj) {\n        super(parent, obj);\n        this._list = [];\n        for (let k of A.ownKeysSorted(obj).filter(x => !x.startsWith(' '))) {\n            this._list.push(new Link(this, obj[k], k));\n        }\n        this._onEnter = new Actions(this, obj[F_onEnter]);\n        this._onExit = new Actions(this, obj[F_onExit]);\n    }\n    enter(from) {\n        _D(3, `Enter ${this} from: ${from.sfrom}`);\n        return this._onEnter.execute(from).catch(e => A.W(`Enter: ${this} err: ${e}`));\n    }\n    exit(from) {\n        _D(3, `Exit ${this} from: ${from.sfrom}`);\n        return this._onExit.execute(from).catch(e => A.W(`Exit: ${this} err: ${e}`));\n    }\n    execute(from) {\n        from = new MState(from, this.id);\n        if (this.disabled || from.hasLast())\n            return A.resolve();\n        _D(3, `Execute ${this} from: ${from.sfrom}`);\n        // execute this,_function;\n        return this.parent.execute(from.val).catch(e => A.W(`Execute: ${this} err: ${e}`));\n    }\n    init() {\n        this._onEnter.init();\n        this._onExit.init();\n    }\n\n    get active() {\n        return this.parent.list[this.parent.val] === this;\n    }\n}\n\nclass Timer extends State {\n    constructor(parent, obj) {\n        super(parent, obj);\n        this._timeout = obj[F_timeout];\n        let t = this.id.split('.').slice(-1)[0];\n        t = t.match(regTimer);\n        let ms = 0;\n        for (var i = 1; i < 5; i++)\n            if (t[i]) {\n                let m = t[i].match(/^(\\d+)/);\n                ms = ms + [0, 60 * 60 * 1000, 60 * 1000, 1000, 1][i] * parseInt(m[1]);\n            }\n        this._time = ms;\n        this._timer = null;\n    }\n    enter(from) {\n        function timer(that) {\n            that._timer = null;\n            that._parent.execute({\n                val: that._timeout,\n                from: that.id\n            });\n        }\n        if (this._timer)\n            clearTimeout(this._timer);\n        this._timer = setTimeout(timer, this._time, this);\n        return super.enter(from);\n    }\n    exit(from) {\n        if (this._timer)\n            clearTimeout(this._timer);\n        return super.exit(from);\n    }\n}\nclass Machine extends BaseSM {\n    constructor(parent, obj) {\n        super(obj[F_id], obj[F_type], 'lib/img/gear.png');\n        this._disabled = obj[F_disabled];\n        this._list = [];\n        //        this._expanded = obj[F_expanded];\n        this._auto = [];\n        this._names = [];\n        this._state = obj[F_default];\n        this._val = undefined; // TODO\n        for (let k of A.ownKeysSorted(obj).filter(x => !x.startsWith(' '))) {\n            if (k.startsWith('*')) {\n                this._auto.push(new Link(this, obj[k], k.slice(1)));\n            } else {\n                if (k.match(regTimer))\n                    this._list.push(new Timer(this, obj[(this._names.push(k), k)]));\n                else\n                    this._list.push(new State(this, obj[(this._names.push(k), k)]));\n            }\n        }\n        A.addq = A.makeState({\n            id: this.id,\n            type: 'number',\n            role: 'value',\n            icon: this._icon ? this._icon : undefined,\n            state: STATE,\n            min: 0,\n            max: this._list.length - 1,\n            def: false,\n            write: true,\n            states: this._list.map((x, n) => ('' + n + ':' + this._names[n])).join(';')\n        }, undefined, true, false, true);\n        A.addq = A.makeState({\n            id: this.id + stateDisabled,\n            type: 'boolean',\n            role: 'switch',\n            icon: 'lib/img/power-off.png',\n            def: false,\n            write: true,\n        }, this._disabled, true, true);\n\n    }\n    execute(from) {\n        from = new MState(from, this.id);\n        if (this.disabled || from.hasLast())\n            return A.resolve();\n        _D(1, 'should switch to state ' + from.val);\n        var ost = this._val;\n        var nst = from.val;\n        if (typeof nst === 'string') {\n            nst = nst.split('.').slice(-1)[0];\n            nst = this._names.indexOf(nst);\n            if (nst < 0)\n                return A.resolve(A.W(`Invalid state name \"${from.val}\" for machine '${this.id}'`));\n        }\n        if (nst > this._list.length)\n            return A.resolve(A.W(`Invalid state name \"${from.val}\" for machine '${this.id}'`));\n        this._val = nst;\n        _D(1, `Execute ${this} statechange ${this._names[ost]}>${this._names[nst]} from: ${from.sfrom}`);\n        return (this._list[ost] && ost !== nst ? this._list[ost].exit(from) : A.resolve())\n            .then(() => this._list[nst].enter(from))\n            .then(() => A.makeState(this.id, nst, true, true))\n            .catch(e => A.W(`Machine e-err: ${this} err: ${e}`));\n    }\n    get val() {\n        return this._val;\n    }\n    init() {\n        for (let f in this._list)\n            this._list[f].init();\n        if (A.states[this.id])\n            this._val = A.states[this.id].val;\n        else if (this._state) {\n            this._state = this._names.indexOf(this._state);\n            if (this._state >= 0)\n                A._setState(this.id, (this._val = this._state), true, true);\n        }\n    }\n}\n\nclass TheEvent {\n    constructor(sevent, num) {\n        this.num = num;\n        this.event = sevent;\n        this.id = sevent._text;\n    }\n\n    fire(val) {\n        var p = this.event.parent.parent;\n        if (typeof val !== 'object' || !val.from)\n            val = {\n                val: val,\n                from: '' + this.event,\n            };\n        val.num = this.num;\n        var val1 = val.fid ? new MState(val, A.idName(val.fid)) : val;\n        return p.active && this.event.doFire(val) ? p.execute(val1) : Promise.resolve();\n    }\n}\n\nclass Folder extends BaseSM {\n    constructor(obj) {\n        super(obj[F_id], obj[F_type], 'lib/img/folder.png');\n        this._list = [];\n        //        let id = obj[F_id];\n        //        this._expanded = obj[F_expanded];\n        A.addq = A.makeState({\n            id: this.id + stateDisabled,\n            type: 'boolean',\n            role: 'switch',\n            icon: 'lib/img/power-off.png',\n            def: false,\n            write: true,\n        }, this.disabled, true, true);\n        for (let k of A.ownKeysSorted(obj).filter(x => !x.startsWith(' '))) {\n            switch (obj[k][F_type]) {\n                case MACHINE:\n                    this._list.push(new Machine(this, obj[k]));\n                    break;\n                case SCENE:\n                    this._list.push(new Scene(this, obj[k]));\n                    break;\n                case EVENT:\n                    this._list.push(new Event(this, obj[k]));\n                    break;\n            }\n        }\n    }\n    init() {\n        for (let f in this._list)\n            this._list[f].init();\n    }\n}\n\n/*jshint -W098 */\n/*jshint -W061 */\n\nfunction myEval(fun, args) {\n    var nf = Array.isArray(args) ? fun.replace(/@(\\d+)/g, (match, p1) => 'a[' + p1 + ']') : fun;\n    var mp = Promise.resolve();\n    var mn = 0,\n        m = [];\n    nf = nf.replace(/@([\\w\\-\\$\\.]+)/g, (match, p1) => {\n        var ret = 'ma[' + mn++ + ']';\n        mp = mp.then(() => A.myGetState(p1)).then(x => x.val, () => undefined).then(v => m.push(v));\n        return ret;\n    });\n    nf = nf.replace('@@', '@');\n    return mp.then(() => {\n        var res, ma = m,\n            a = args;\n        // A.D(`call eval(${nf}) ma=${ma}, a=${a}`);\n        try {\n            res = eval(nf);\n        } catch (e) {\n            A.W(`Error in eval of \"${fun}\": ${e}`);\n        }\n        return Promise.resolve(res);\n    });\n}\n/*jshint +W098 */\n/*jshint +W061 */\n\nfunction _setState(id, val, ack, allways) {\n    if (allways === undefined)\n        allways = true;\n    var nid = ids[id];\n    if (nid)\n        return A.makeState(id, val, ack, allways);\n    else {\n        nid = A.sstate[id];\n        if (nid) {\n            if (nid.startsWith(A.ain))\n                return A.makeState(id.slice(A.ain.length), val, ack, allways);\n\n            A.states[nid] = {\n                val: val,\n                ack: ack\n            };\n            return A.setForeignState(nid, val, ack);\n        }\n        return A.reject(`could not find id: '${id}'`);\n    }\n}\n\nfunction mySetState(q, id, val, ack, allways) {\n    _D(3, `SetState ${q || queueAll ? 'queued ': ''} ${id} to '${val}' with ack=${ack}`);\n    return (q || queueAll ? setter.add(id, val, ack, allways) : _setState(id, val, ack, allways))\n        .catch((e) => A.W(`mySetState got error: ${e} on ${id} with value='${val}'`));\n}\n\n\nclass StateMachine extends BaseSM {\n    constructor() {\n        super(null, 'stateMachine');\n        return StateMachine;\n    }\n    static init(config) {\n        function eevp(id, i) {\n            return A.myGetState(id).\n            then(x => x && i.event.parent.parent._vars ?\n                    i.event.parent.parent._vars[i.num] = x.val : null)\n                .catch(() => null);\n        }\n\n        ids = {};\n        everys = new List();\n        schedules = new List();\n        eids = new List();\n        rids = new List();\n        astros = new List();\n        eevents = new List();\n        let k;\n        this._folders = [];\n        this._debug = config.debugLevel;\n        if (A.states[A.ain + stateDebug] !== undefined)\n            this.debug = A.states[A.ain + stateDebug].val;\n        stq = A.wait(10);\n\n        //        for (let i of A.ownKeys(A.objects))\n        //            addSState(A.objects[i], i);\n        if (config && config.folders)\n            for (let f in config.folders)\n                this._folders.push(new Folder(config.folders[f]));\n        else\n            this._folders.push(new Folder(''));\n\n        setter = new Setter(_setState, parseInt(config.queueTime));\n        queueAll = config.queueAll;\n\n        for (k in this._folders)\n            this._folders[k].init();\n\n        var p = new A.Sequence();\n\n        for (k in eids) {\n            var l = eids[k];\n            for (var i of l) {\n                var id = A.sstate[i.id];\n                if (!id)\n                    id = A.sstate[A.ain + i.id];\n                if (!id)\n                    continue;\n                //                console.log(k + '(' + id + '): ', i);\n                // A.adapter.subscribeForeignStates(id);\n                eevents.add(id, i);\n                if (i.num)\n                    p.add(eevp(id, i));\n            }\n        }\n\n        return (ids._init && ids._init.type === SCENE ? ids._init.execute('init') : A.resolve())\n            .then(() => A.seriesIn(everys, (k) => {\n                setInterval((n) => everys.fireAll(n), parseInt(k) * 1000, k);\n                return everys.fireAll(k);\n            }, 1))\n            .then(() => A.seriesIn(astros, (k) => {\n                function nextSunCalc(name, delay) {\n                    let n = Date.now();\n                    let t = n + delay * 60 * 1000;\n                    let sc = SunCalc.getTimes(new Date(t), A.C.latitude, A.C.longitude);\n                    let end = 0;\n                    if (sc[name]) {\n                        while (sc[name] < new Date(n)) {\n                            t += 60 * 60 * 1000;\n                            sc = SunCalc.getTimes(new Date(t), A.C.latitude, A.C.longitude);\n                        }\n                        end = sc[name].valueOf();\n                    }\n                    return end - n;\n                }\n\n                function nextSun(name, add) {\n                    setTimeout(nextSun, nextSunCalc(name, add), name, add);\n                    astros.fireAll(k);\n                }\n                let m = k.match(/^([A-Z]+)([+-]?\\d+)?/i);\n                if (!m)\n                    return Promise.resolve(A.W(`Invalid Astro definition \"${k}\"`));\n                let s = SunCalc.getTimes(Date.now(), A.C.latitude, A.C.longitude);\n                var n = A.ownKeys(s).filter((x) => x.toLowerCase() === m[1].toLowerCase());\n                n = n.length > 0 ? n[0] : null;\n                if (!n)\n                    return Promise.resolve(A.W(`Invalid Astro Name \"${m[1]}\"`));\n                var addTime = m[2] ? parseInt(m[2]) : 0;\n                setTimeout(nextSun, nextSunCalc(n, addTime), n, addTime);\n                return Promise.resolve();\n            }, 1))\n            .then(() => A.seriesIn(schedules, (s) => {\n                schedule.scheduleJob(s, () => {\n                    schedules.fireAll(s);\n                });\n                return Promise.resolve();\n            }, 1))\n            .then(() => ids);\n    }\n\n    static allStates(id, state) {\n        var s = new A.Sequence();\n        if (state) {\n            if (!state.ack && id.startsWith(A.ain)) {\n                _D(3, `set \"${id}\" to: ${A.O(state)}`);\n                var sid = id.slice(A.ain.length);\n                if (sid === stateDebug)\n                    A.debug = (StateMachine.debug = state.val) > 2 ? true : state.val > 0 ? false : undefined;\n                else if (sid.endsWith(stateDisabled)) {\n                    sid = sid.slice(0, -stateDisabled.length);\n                    if (ids[sid])\n                        ids[sid].disabled = state.val;\n                } else if (ids[sid] && ids[sid].execute)\n                    s.add(ids[sid].execute(state).catch(e => A.W(`AllStates: ${id} err: ${e}`)));\n                // A.D(`${id}: ${A.O(state)}`);\n            }\n\n            state = A.clone(state);\n            state.old = A.states[id];\n            state.fid = id;\n            if (state.old && state.old.old)\n                delete state.old.old;\n            else if (state.old)\n                A.states[id] = state;\n\n            if (eevents[id]) {\n                // _D(3, `\"${id}\" triggers eid with: ${A.O(state)}`);\n                s.add(eevents.fireAll(id, state));\n            }\n\n            for (var r in rids)\n                if (id.match(rids[r][0].event._regexp)) {\n                    // _D(3, `\"${id}\" triggers rid with: ${A.O(state)}`);\n                    s.add(rids.fireAll(r, state));\n                }\n        }\n        return s.p;\n    }\n\n    static get ids() {\n        return ids;\n    }\n    static get debug() {\n        return this._debug;\n    }\n    static set debug(level) {\n        level = parseInt(level);\n        this._debug = A.debugLevel = level < 0 ? 0 : level > 3 ? 3 : level;\n        A.debug = level > 1;\n        return this._debug;\n    }\n}\n\nfunction _D(level, text, ret) {\n    if (StateMachine.debug < level)\n        return;\n    return level < 3 ? A.I(text, ret) : A.D(text, ret);\n}\n\n\nA.init(adapter, main);\nA.allStates = StateMachine.allStates;\n\n/*jshint -W098 */\n\nfunction main() {\n    var mf = StateMachine.init(adapter.config);\n    var mstates = A.sstate;\n    var ids = StateMachine.ids;\n    var v = 0;\n    var s = new A.Sequence(mf);\n    s.p = A.makeState({\n        id: '_debugLevel',\n        //        state: 'state',\n        role: 'level',\n        write: true\n    }, StateMachine.debug, false);\n    // s.p = A.makeState({\n    //         id: 'Event3',\n    //         state: 'state',\n    //         role: 'value',\n    //         write: true\n    //     }, 0, false);\n    // s.p = A.makeState({\n    //         id: 'timer',\n    //         state: 'state',\n    //         role: 'value',\n    //         write: true\n    //     }, 0, false);\n    s.p.then(() => A.I('started'));\n    // setInterval(() => A.makeState('Event3', (++v > 3 ? (v = 0) : v), false), 29000);\n    // setInterval(() => A.makeState('timer', new Date().getSeconds(), false), 10000);\n}"]}