Uw opmerkingen
here with some modifications
server
function clone(obj) { if (null == obj || "object" != typeof obj) return obj; var copy = obj.constructor(); for (var attr in obj) {//if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr]; } return copy; } if (!Array.isArray) { Array.isArray = function(arg) { return Object.prototype.toString.call(arg) === '[object Array]'; }; } var schedule; // creating a string with schedule data var EventChanger = function() { var EventBuff = []; //function EventP() { } //MonkeyPathcing var EventProt = { //constructor: EventP, Name: undefined, // event name Start: undefined, // event start date-time End: undefined, // event finish date-time Enabled: undefined, Type: undefined, //Parent: undefined, Day: undefined, End: undefined, WeekDays: undefined, RepeatEnd: undefined, MonthRepeatType: undefined, MonthDays: undefined, DayNumber: undefined, WeekDay: undefined, StartSunType: undefined, //TODO: Sun Offset } //EventP.prototype=EventProt; /* var Event = function(inp) { this.Name; // event name this.Start; // event start date-time this.End; // event finish date-time this.Enabled; this.Type; this.Day; this.End; this.WeekDays; this.RepeatEnd; this.MonthRepeatType; this.MonthDays; this.DayNumber; this.WeekDay; this.StartSunType; //TODO: Sun Offset for (var inpn in inp) { this[inpn] = inp[inpn]; //if (inp.hasOwnProperty(inpn) && inp[inpn]!==undefined){ //IR.Log("add prop " + inpn.toString() + " = " + inp[inpn]); //this[inpn.toString()] = inp[inpn]; //} } } */ // writing schedule data in virtual tag this.Write = function(in_events) { EventBuff = []; for(i in in_events) { //.propertyIsEnumerable("Name")); in_events[i].__proto__= EventProt; var d2 = clone(in_events[i]); EventBuff.push(d2); } var string = JSON.Stringify(EventBuff); IR.SetVariable("Server.Tags.EventData_from_server", string); } // reading schedule data in virtual tag this.Read = function(in_schedule, in_NewData) { for (u=0;u<in_newdata.length;++u) {="" in_newdata_u="in_NewData[u];" ir.log("update="" "="" +="" in_newdata_u.name);="" eventedit="in_schedule.GetEvent(in_NewData_u.Name);" eventedit.start="Math.floor(new" date(in_newdata_u.start));="" eventedit.end="Math.floor(new" date(in_newdata_u.end));="" eventedit.enabled="(in_NewData_u.Enabled" =="1);" eventedit.done();="" event="" update="" }="" var="" eventsobj="new" eventchanger();="" getting="" schedule="" data="" at="" server="" start="" ir.addlistener(ir.event_start,0,function()="" svddata="IR.GetVariable("Server.Tags.EventData_from_server");" 1");="" if="" (svddata)="" ir.log("saveved="" svddata);="" eventsobj.read(schedule,="" json.parse(svddata));="" else="" events="schedule.GetEvents();" eventsobj.write(events);="" });="" new="" from="" panel="" ir.setgloballistener(ir.event_global_tag_change,="" function(in_sname,="" in_svalue)="" newdata="JSON.Parse(in_sValue);" ?="" [newdata]:newdata;="" newdata);="" systembase.execute("commit");="" subscribing="" for="" tag="" changes="" ir.subscribetagchange("server.channels.eventdata_to_server");="" <="" pre=""></in_newdata.length;++u)>
client
var Server = IR.GetDevice("iRidium Server"); var ListBox = IR.GetItem("Page 1").GetItem("ListBox"); var EventNameField = IR.GetItem("Page 1").GetItem("EventName"); var Lamp = IR.GetItem("Page 1").GetItem("Lamp"); var Switch = IR.GetItem("Page 1").GetItem("Switch"); var EventStartField = IR.GetItem("Page 1").GetItem("EventStart"); var EventFinishField = IR.GetItem("Page 1").GetItem("EventFinish"); var EventStartField1 = IR.GetItem("Page 1").GetItem("EventStart 1"); var EventFinishField1 = IR.GetItem("Page 1").GetItem("EventFinish 1"); var UpdateButton = IR.GetItem("Page 1").GetItem("UpdateBtn"); var EventsObj; var selectedItem = 0; var events = []; var EventProt = {} /* var Event = function(inp) { this.Name; // event name this.Start; // event start date-time this.End; // event finish date-time this.Enabled; this.Type; this.Day; this.End; this.WeekDays; this.RepeatEnd; this.MonthRepeatType; this.MonthDays; this.DayNumber; this.WeekDay; //TODO: Sun Offset for (var inpn in inp) { if (inp.hasOwnProperty(inpn)) this[inpn] = inp[inpn]; } } */ var EventChanger = function(in_list) { var list = in_list; // link to GUI list with items and data var that = this; // read event data from virtual tag in JSON format and fill the list with items this.Read = function(in_ChannelName, in_Value) { if (in_ChannelName == "EventData_from_server") { //IR.Log("Now we parse " + in_Value); events = JSON.Parse(in_Value); for (i in events) { list.CreateItem(parseInt(i), 1, {Text: events[i].Name}); } fill(selectedItem); } } // write new date-times of event in virtual tag this.Write = function(NEvent) { Server.Set("EventData_to_server", JSON.Stringify(NEvent)); } } IR.AddListener(IR.EVENT_START,0,function() { EventsObj = new EventChanger(ListBox); }); IR.AddListener(IR.EVENT_ITEM_SELECT, ListBox, function(item, subitem) { selectedItem = item; fill(selectedItem); }); IR.AddListener(IR.EVENT_TAG_CHANGE, Server, function(name, value) { EventsObj.Read(name, value); }); fill = function (in_item) { startTime = new Date(events[in_item].Start * 1000); finishTime = new Date(events[in_item].End * 1000); EventNameField.Text = events[in_item].Name; Lamp.Value = events[in_item].Enabled; Switch.Value = events[in_item].Enabled; EventStartField.Text = startTime; EventFinishField.Text = finishTime; EventStartField1.Text = startTime; EventFinishField1.Text = finishTime; } IR.AddListener(IR.EVENT_ITEM_PRESS, UpdateButton, function() { startTime = new Date(EventStartField1.Text); finishTime = new Date(EventFinishField1.Text); //var NEvent = new Event({Name:EventNameField.Text, Start: Math.floor(startTime.getTime()/1000), End: Math.floor(finishTime.getTime()/1000), Enabled: Switch.Value}); var NEvent = {Name:EventNameField.Text, Start: Math.floor(startTime.getTime()/1000), End: Math.floor(finishTime.getTime()/1000), Enabled: Switch.Value}; EventsObj.Write(NEvent); });
linked:
IR.AddListener(IR.EVENT_START,0,function() { //AV & Custom Systems (File) var device = IR.CreateDevice(IR.DEVICE_CUSTOM_STREAM, "name", {FileName:'/home/user/abc'}); var val = 0; IR.AddListener(IR.EVENT_ONLINE, device, function() { IR.Log("ONLINE"); }); IR.AddListener(IR.EVENT_OFFLINE, device, function() { IR.Log("OFFLINE"); }); IR.AddListener(IR.EVENT_RECEIVE_DATA, device, function(data) { IR.Log("DATA RECEIVED: " + data); }); function Blink() { val = (val) ? 0 : 1; if(device) device.Send([val.toString()]); } //IR.SetInterval(5000, Blink); });
$ echo command:1 > /home/user/abc
ls -l /home/user/abc
chmod 744 /home/user/abc
Commercial displays support telnet on 9761 port? Protocol for RS232 is similar
http://www.proaudioinc.com/Dealer_Area/RS232C_EN_160526.pdf p13
https://www.lg.com/us/commercial/documents/47wv30bs-owner-manual.pdf p67
Нет, просто перенести имя фидбэка в кавычки, "16534" тоже должно работать, если фидбэк так называется
Channel_Feedback 16406
это было имя feedback'а, для Item'ов добавлять не надо
только должно быть верное имя feedback'а в сравнении
name=="abcde 16534"
Если я правильно понял что такое "квадраты"
IR.GetPage("Page 1").GetItem("Item 1").Value=high
Feedback = None
по ссылке выше моем комментарии
IR.AddListener(IR.EVENT_TAG_CHANGE, IR.GetDevice("Modbus TCP")), function(name, value) { IR.Log(" Name: " + name + " Value: " + value); if (name=="Channel_Feedback 16406") { var high = ((value >> 8) & 0xff); var low = value & 0xff; IR.Log(value + " h: " + high + " l: " + low); //dev.Set("Channel_Command 16406", value ); } });
если не по событию
var dev=IR.GetDevice("Modbus TCP"); var value=dev.GetFeedback("Channel_Feedback 16406");
Customer support service by UserEcho
При тестировании проекта https://support.iridiummobile.net/communities/18/topics/21470-iridium-schedule-edit-server-client-project#comment-138847
выяснилось, что при Store In DB = String UTF8 запись значений происходит с некоторой задержкой,
т.е. если выключить сервер, то данные пропадут
1. Как это исправить?
2. Какое время записи в БД по умолчанию
на сервере (Win) настройки такие: