First Commit

This commit is contained in:
sparks-alec
2021-10-18 04:55:03 -04:00
commit f3cb66b9f3
95 changed files with 18266 additions and 0 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.
+10
View File
@@ -0,0 +1,10 @@
.warning{
color: #e9873a;
}
.error{
color: #ed5f5d;
}
.ok{
color: #79b757;
}
+97
View File
@@ -0,0 +1,97 @@
<header>
<h1><%= listName %></h1>
</header>
<table class="cv-table">
<tr>
<td>Power</td>
<td><div>
<% if(data.power==0){ %><span class='error'>OFF</span><% } %>
<% if(data.power==1){ %><span class='ok'>ON</span><% } %>
<% if(data.power==2){ %><span class='warning'>COOLING DOWN</span><% } %>
<% if(data.power==3){ %><span class='warning'>WARMING UP</span><% } %>
</div></td>
</tr>
<tr>
<td>AV Mute</td>
<td><div>
<% if(data.avmute==11){ %><span class='error'>Video Mute</span><% } %>
<% if(data.avmute==21){ %><span class='error'>Audio Mute</span><% } %>
<% if(data.avmute==31){ %><span class='error'>Video &amp; Audio Mute</span><% } %>
<% if(data.avmute==30){ %>...<% } %>
</div></td>
</tr>
<tr>
<td>Errors</td>
<td><div>
<% if(data.fanError==1){ %><span class="warning">Fan Warning</span><br><% } %>
<% if(data.fanError==2){ %><span class="error">Fan Error</span><br><% } %>
<% if(data.lampError==1){ %><span class="warning">Lamp Warning</span><br><% } %>
<% if(data.lampError==2){ %><span class="error">Lamp Error</span><br><% } %>
<% if(data.tempError==1){ %><span class="warning">Temp Warning</span><br><% } %>
<% if(data.tempError==2){ %><span class="error">Temp Error</span><br><% } %>
<% if(data.coverError==1){ %><span class="warning">Cover Warning</span><br><% } %>
<% if(data.coverError==2){ %><span class="error">Cover Error</span><br><% } %>
<% if(data.filterError==1){ %><span class="warning">Filter Warning</span><br><% } %>
<% if(data.filterError==2){ %><span class="error">Filter Error</span><br><% } %>
<% if(data.otherError==1){ %><span class="warning">Other Warning</span><br><% } %>
<% if(data.otherError==2){ %><span class="error">Other Error</span><br><% } %>
&nbsp;</div></td>
</tr>
<tr>
<td>Input</td>
<td><div>
<% if(data.input){ %>
<% if(data.input[0]==1){ %>RGB<% } %>
<% if(data.input[0]==2){ %>Video<% } %>
<% if(data.input[0]==3){ %>Digital<% } %>
<% if(data.input[0]==4){ %>Storage<% } %>
<% if(data.input[0]==5){ %>Network<% } %>
<%= data.input[1] %>
<% } %>
</div></td>
</tr>
<% if(data.lamp){ %>
<% for(var i=0; i<data.lamp.length; i+=2){ %>
<tr>
<td>Lamp <%= i/2 %></td>
<td>
<% if(Number(data.lamp[i+1])){ %>
<div class='ok'>ON</div>
<% }else{ %>
<div class='error'>OFF</div>
<% } %>
</td>
</tr>
<% } %>
<% } %>
<tr>
<td>Name</td>
<td><div><%= data.name %></div></td>
</tr>
<tr>
<td>Info 1</td>
<td><div><%= data.info1 %></div></td>
</tr>
<tr>
<td>Info 2</td>
<td><div><%= data.info2 %></div></td>
</tr>
<tr>
<td>Serial Number</td>
<td><div><%= data.serial %></div></td>
</tr>
<tr>
<td>Version</td>
<td><div><%= data.version %></div></td>
</tr>
</table>
+116
View File
@@ -0,0 +1,116 @@
exports.defaultName = "PJLink Projector";
exports.connectionType = "TCPsocket";
exports.heartbeatInterval = 5000;
exports.searchOptions = {
type: "UDPsocket",
searchBuffer: Buffer.from([0x25, 0x32, 0x53, 0x52, 0x43, 0x48, 0x0d]),
devicePort: 4352,
listenPort: 4352,
validateResponse: function(msg, info){
return (msg.toString().indexOf("%2ACKN=")>=0);
}
}
exports.defaultPort = 4352;
exports.ready = function(device){
//Power status query
//device.send("%1POWR ?\r");
}
var password = false;
exports.data = function(device, message){
this.deviceInfoUpdate(device, "status", "ok");
var msg = message.toString();
const md5 = require("md5");
if(msg.substring(0, 8)=="PJLINK 1"){
password = md5(msg.substring(9, 17)+"JBMIAProjectorLink")
device.send(password+"%1POWR ?\r%1INPT ?\r%1AVMT ?\r%1ERST ?\r%1LAMP ?\r%1NAME ?\r%1INF1 ?\r%1INF2 ?\r%2SNUM ?\r%2SVER ?\r");
}
if(msg.substring(0, 7)=="%1POWR="){
processPJLink(device, msg, this);
}
if(msg.substring(0, 7)=="%1INPT="){
processPJLink(device, msg, this);
}
if(msg.substring(0, 7)=="%1AVMT="){
processPJLink(device, msg, this);
}
if(msg.substring(0, 7)=="%1ERST="){
processPJLink(device, msg, this);
}
if(msg.substring(0, 7)=="%1LAMP="){
processPJLink(device, msg, this);
}
if(msg.substring(0, 7)=="%1NAME="){
processPJLink(device, msg, this);
}
if(msg.substring(0, 7)=="%1INF1="){
processPJLink(device, msg, this);
}
if(msg.substring(0, 7)=="%1INF2="){
processPJLink(device, msg, this);
}
if(msg.substring(0, 7)=="%2SNUM="){
processPJLink(device, msg, this);
}
if(msg.substring(0, 7)=="%2SVER="){
processPJLink(device, msg, this);
}
}
function processPJLink(device, str, that){
var arr = str.split("%");
for(var key in arr){
var split = arr[key].split("=");
var key = split[0];
var value = split[1];
switch(key){
case "1POWR":
device.data.power = value;
break;
case "1INPT":
device.data.input = value;
break;
case "1AVMT":
device.data.avmute = value;
break;
case "1ERST":
device.data.fanError = value[0];
device.data.lampError = value[1];
device.data.tempError = value[2];
device.data.coverError = value[3];
device.data.filterError = value[4];
device.data.otherError = value[5];
break;
case "1LAMP":
device.data.lamp = value.split(" ");
break;
case "1NAME":
device.data.name = value;
that.deviceInfoUpdate(device, "defaultName", device.data.name);
break;
case "1INF1":
device.data.info1 = value;
break;
case "1INF2":
device.data.info2 = value;
break;
case "2SNUM":
device.data.serial = value;
break;
case "2SVER":
device.data.version = value;
break;
}
}
device.draw();
}
exports.heartbeat = function(device){
if(password){
device.send(password+"%1POWR ?\r%1INPT ?\r%1AVMT ?\r%1ERST ?\r%1LAMP ?\r%1NAME ?\r%1INF1 ?\r%1INF2 ?\r%2SNUM ?\r%2SVER ?\r");
}
}