LogicMachine Forum
Scheduler more customisation needed - Printable Version

+- LogicMachine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: OLD visualization (https://forum.logicmachine.net/forumdisplay.php?fid=9)
+--- Thread: Scheduler more customisation needed (/showthread.php?tid=2900)



Scheduler more customisation needed - AlexLV - 14.10.2020

Hi,

how show data from scheduler in other visualization object? As example I need show time from scheduler 1 in visualization?

I created widget with scheduler, but can I hide selection of "Holidays" and bulls to other schedulers? May be I can hide also other elements?

I need not to allow customers change to many parameters, only time.

Is it possible? Not so strength in CSS still Sad

BR,

Alex


RE: Scheduler more customisation needed - buuuudzik - 14.10.2020

Currently it is possible to show only specified schedulers and hide holidays:
http://4n.lv:7999/scada-vis/schedulers?id=1&nohol
http://4n.lv:7999/scada-vis/schedulers?id=1,2&nohol

To allow further customization I've added yesteday another param support:
http://4n.lv:7999/scada-vis/schedulers?simple
http://4n.lv:7999/scada-vis/schedulers?id=1&nohol&simple

But to use it you must add below code section to your Custom Javascript:
Code:
$(function () {   // Simplify and limit scheduler form   if (location.href.match(/\/schedulers(.+)simple/g)) {     function setCustomSchedulerView() {       const inSchedulers = document.body.classList.contains("schedulers");       if (inSchedulers) {         const eventForm = document.getElementById("event-form");         if (!eventForm) return;         const findOnForm = (selector) => eventForm.querySelector(selector);         const hideEl = (el) => (el.style.display = "none");         const disableEl = (el) => (el.disabled = true);         const doOnSelector = (selector, handler) => {           const el = findOnForm(selector);           if (el) handler(el);         };         const doOnGlobalSelector = (selector, handler) => {             const el = document.querySelector(selector);             if (el) handler(el);           };         const doOnSelectorBeforeLabel = (selector, handler) => {           const el = findOnForm(selector);           if (             el &&             el.previousElementSibling &&             el.previousElementSibling.tagName === "LABEL"           )             handler(el.previousElementSibling);         };         const doOnSelectorAndParent = (selector, parentSelector, handler) => {           let el = findOnForm(selector);           if (el) {             handler(el);             let parent = null;             let limit = 10;             while (!parent && limit > 0) {               el = el.parentElement;               if (el && el.matches(parentSelector)) parent = el;               if (!el || parent) break;               limit--;             }             if (parent) handler(parent);           }         };         const hideSelector = (selector) => doOnSelector(selector, hideEl);         const hideGlobalSelector = (selector) => doOnGlobalSelector(selector, hideEl);         const hideSelectorAndParent = (selector, parentSelector) =>           doOnSelectorAndParent(selector, parentSelector, hideEl);         const hideSelectorBeforeLabel = (selector) =>           doOnSelectorBeforeLabel(selector, hideEl);         const disableSelector = (selector) => doOnSelector(selector, disableEl);         const disableGlobalSelector = (selector) => doOnGlobalSelector(selector, disableEl);         const disableSelectorAndParent = (selector, parentSelector) =>           doOnSelectorAndParent(selector, parentSelector, disableEl);         const schedulerFormElementsConfig = [           // style can be one from: "visible", "hidden", "disabled"           {             name: "active",             style: "hidden",             selector: "#event-active",             parent: ".checkbox",           },           {             name: "name",             style: "disabled",             selector: "#event-name",           },           {             name: "type",             style: "visible",             selector: "#event-type",           },           {             name: "type-sunrise-sunset",             style: "visible",             selector: "#event-type-sunrise-sunset",           },           {             name: "daysofweek",             style: "hidden",             selector: "#event-daysofweek",           },           {             name: "dayweeknrs",             style: "hidden",             selector: "#event-dayweeknrs",           },           {             name: "daysofmonth",             style: "hidden",             selector: "#event-daysofmonth",           },           {             name: "months",             style: "hidden",             selector: "#event-months",           },           {             name: "holidays",             style: "hidden",             selector: "#event-holidays",           },           {             name: "year",             style: "hidden",             selector: "#event-year",             parent: ".checkbox",           },           {             name: "value-bool",             style: "disabled",             selector: "#event-value-bool",           },           {             name: "value-color",             style: "disabled",             selector: "#event-value-color",           },           {             name: "value-spinner",             style: "disabled",             selector: "#event-value-spinner",           },           {             name: "value-slider",             style: "disabled",             selector: "#event-value-slider",           },           {             name: "value-enums",             style: "disabled",             selector: "#event-value-enums",           },           {             name: "value-text",             style: "disabled",             selector: "#event-value-text",           },           {             name: "value-lighting",             style: "disabled",             selector: "#event-value-lighting",           },         ];         schedulerFormElementsConfig.forEach((config) => {           switch (config.style) {             case "hidden":               if (!config.parent) {                 hideSelector(config.selector);                 hideSelectorBeforeLabel(config.selector);               } else {                 hideSelectorAndParent(config.selector, config.parent);                 hideSelectorBeforeLabel(config.parent);               }               break;             case "disabled":               if (!config.parent) {                 disableSelector(config.selector);               } else {                 disableSelectorAndParent(config.selector, config.parent);               }               break;             case "visible":             default:           }         });         const schedulerGlobalButtonsConfig = [           {             name: "logout",             style: "hidden",             selector: ".btn-logout",           },           {             name: "home",             style: "hidden",             selector: ".btn-home",           },           {             name: "scheduler-edit",             style: "hidden",             selector: ".scheduler-edit",           },           {             name: "add",             style: "hidden",             selector: "#event-add",           },           {             name: "delete",             style: "hidden",             selector: ".actions .delete",           },         ];         schedulerGlobalButtonsConfig.forEach((config) => {           switch (config.style) {             case "hidden":               hideGlobalSelector(config.selector);               break;             case "disabled":               disableGlobalSelector(config.selector);               break;             case "visible":             default:           }         });       }     }     setCustomSchedulerView();   } });


Every element you can customize by setting "visible", "hidden" or "disabled".


RE: Scheduler more customisation needed - AlexLV - 15.10.2020

Hi buuuudzik,

great work, will try today. Thank you!

Alex


RE: Scheduler more customisation needed - buuuudzik - 15.10.2020

Enjoy and feel free to share here new ideasWink


RE: Scheduler more customisation needed - AlexLV - 16.10.2020

Hi,

but is possible somehow show at visu times from scheduler or copy them to groups? I want show times at visualization, but if needed - than open scheduler for corrections..

Alex


RE: Scheduler more customisation needed - admin - 16.10.2020

See this: https://forum.logicmachine.net/showthread.php?tid=686


RE: Scheduler more customisation needed - AlexLV - 16.10.2020

Thank you admin,

As I see from example from link you given:

hour = 12 -- event time / start hour
min = 30 -- event time / minute
id = 42 -- event DB id

db:update('scheduler_events', {
start_hour = hour,
start_min = min
}, { id = id })

possible update local db. I think it also means that the same way I can just read db with existing setting and than copy them to group. After that I can show data at visu..

So how I can just read existing scheduler parameters (need Time hour and minute at least) and copy it to groups..

BR,

Alex


RE: Scheduler more customisation needed - admin - 16.10.2020

You can get all events for a certain scheduler via a DB query:
Code:
scheduler_id = 123 events = db:getall('SELECT * FROM scheduler_events WHERE scheduler=?', scheduler_id) log(events)



RE: Scheduler more customisation needed - AlexLV - 16.10.2020

Super,

thank you, I will use it to take details about existing settings.

Alex


RE: Scheduler more customisation needed - josemabera - 17.10.2020

(14.10.2020, 22:31)buuuudzik Wrote: Currently it is possible to show only specified schedulers and hide holidays:
http://4n.lv:7999/scada-vis/schedulers?id=1&nohol
http://4n.lv:7999/scada-vis/schedulers?id=1,2&nohol

To allow further customization I've added yesteday another param support:
http://4n.lv:7999/scada-vis/schedulers?simple
http://4n.lv:7999/scada-vis/schedulers?id=1&nohol&simple

But to use it you must add below code section to your Custom Javascript:
Code:
$(function () {   // Simplify and limit scheduler form   if (location.href.match(/\/schedulers(.+)simple/g)) {     function setCustomSchedulerView() {       const inSchedulers = document.body.classList.contains("schedulers");       if (inSchedulers) {         const eventForm = document.getElementById("event-form");         if (!eventForm) return;         const findOnForm = (selector) => eventForm.querySelector(selector);         const hideEl = (el) => (el.style.display = "none");         const disableEl = (el) => (el.disabled = true);         const doOnSelector = (selector, handler) => {           const el = findOnForm(selector);           if (el) handler(el);         };         const doOnGlobalSelector = (selector, handler) => {             const el = document.querySelector(selector);             if (el) handler(el);           };         const doOnSelectorBeforeLabel = (selector, handler) => {           const el = findOnForm(selector);           if (             el &&             el.previousElementSibling &&             el.previousElementSibling.tagName === "LABEL"           )             handler(el.previousElementSibling);         };         const doOnSelectorAndParent = (selector, parentSelector, handler) => {           let el = findOnForm(selector);           if (el) {             handler(el);             let parent = null;             let limit = 10;             while (!parent && limit > 0) {               el = el.parentElement;               if (el && el.matches(parentSelector)) parent = el;               if (!el || parent) break;               limit--;             }             if (parent) handler(parent);           }         };         const hideSelector = (selector) => doOnSelector(selector, hideEl);         const hideGlobalSelector = (selector) => doOnGlobalSelector(selector, hideEl);         const hideSelectorAndParent = (selector, parentSelector) =>           doOnSelectorAndParent(selector, parentSelector, hideEl);         const hideSelectorBeforeLabel = (selector) =>           doOnSelectorBeforeLabel(selector, hideEl);         const disableSelector = (selector) => doOnSelector(selector, disableEl);         const disableGlobalSelector = (selector) => doOnGlobalSelector(selector, disableEl);         const disableSelectorAndParent = (selector, parentSelector) =>           doOnSelectorAndParent(selector, parentSelector, disableEl);         const schedulerFormElementsConfig = [           // style can be one from: "visible", "hidden", "disabled"           {             name: "active",             style: "hidden",             selector: "#event-active",             parent: ".checkbox",           },           {             name: "name",             style: "disabled",             selector: "#event-name",           },           {             name: "type",             style: "visible",             selector: "#event-type",           },           {             name: "type-sunrise-sunset",             style: "visible",             selector: "#event-type-sunrise-sunset",           },           {             name: "daysofweek",             style: "hidden",             selector: "#event-daysofweek",           },           {             name: "dayweeknrs",             style: "hidden",             selector: "#event-dayweeknrs",           },           {             name: "daysofmonth",             style: "hidden",             selector: "#event-daysofmonth",           },           {             name: "months",             style: "hidden",             selector: "#event-months",           },           {             name: "holidays",             style: "hidden",             selector: "#event-holidays",           },           {             name: "year",             style: "hidden",             selector: "#event-year",             parent: ".checkbox",           },           {             name: "value-bool",             style: "disabled",             selector: "#event-value-bool",           },           {             name: "value-color",             style: "disabled",             selector: "#event-value-color",           },           {             name: "value-spinner",             style: "disabled",             selector: "#event-value-spinner",           },           {             name: "value-slider",             style: "disabled",             selector: "#event-value-slider",           },           {             name: "value-enums",             style: "disabled",             selector: "#event-value-enums",           },           {             name: "value-text",             style: "disabled",             selector: "#event-value-text",           },           {             name: "value-lighting",             style: "disabled",             selector: "#event-value-lighting",           },         ];         schedulerFormElementsConfig.forEach((config) => {           switch (config.style) {             case "hidden":               if (!config.parent) {                 hideSelector(config.selector);                 hideSelectorBeforeLabel(config.selector);               } else {                 hideSelectorAndParent(config.selector, config.parent);                 hideSelectorBeforeLabel(config.parent);               }               break;             case "disabled":               if (!config.parent) {                 disableSelector(config.selector);               } else {                 disableSelectorAndParent(config.selector, config.parent);               }               break;             case "visible":             default:           }         });         const schedulerGlobalButtonsConfig = [           {             name: "logout",             style: "hidden",             selector: ".btn-logout",           },           {             name: "home",             style: "hidden",             selector: ".btn-home",           },           {             name: "scheduler-edit",             style: "hidden",             selector: ".scheduler-edit",           },           {             name: "add",             style: "hidden",             selector: "#event-add",           },           {             name: "delete",             style: "hidden",             selector: ".actions .delete",           },         ];         schedulerGlobalButtonsConfig.forEach((config) => {           switch (config.style) {             case "hidden":               hideGlobalSelector(config.selector);               break;             case "disabled":               disableGlobalSelector(config.selector);               break;             case "visible":             default:           }         });       }     }     setCustomSchedulerView();   } });


Every element you can customize by setting "visible", "hidden" or "disabled".
 
I can't access the virtual LM , what's the username and password? , with admin user and admin password no access


RE: Scheduler more customisation needed - Erwin van der Zwart - 18.10.2020

Yeah I noticed that last week, this happens sometimes when someone in the demo LM changes the password, some people do not understand that they should not do that (:

@Edgars: Can you reset the PW?


RE: Scheduler more customisation needed - Josema - 18.10.2020

(18.10.2020, 07:04)Erwin van der Zwart Wrote: Yeah I noticed that last week, this happens sometimes when someone in the demo LM changes the password, some people do not understand that they should not do that (:

@Edgars: Can you reset the PW?

 Done!
Thank you very much