Dobrý den, podle toho co se píše na jiném místě ve fóru, tak ta stávající verze SDS Control Panel se přestala vyvíjet, vyvíjí se nová. Ale prý se teď vývoj úplně zastavil, protože na to není čas… Ta nová verze je už sice ke stažení, ale stav výstupů zatím není implementován…
Mám také SDS IO6 a stejný problém. Tak jsem to nouzově vyřešil tak, že jsem drobně upravil User Program a User Web Page od rikitana (zdroj je na http://forum.merenienergie.cz//viewtopi … 4048#p4048, upravený kód je níže), aby to přepínalo a zobrazovalo aktuální stav všech 6 relé ve webovém prohlížeči (na mobilu i v PC).
Má to dvě nevýhody: po každém restartu SDS je nutné se znovu přihlásit, navíc přihlašování vás čeká z každé nové IP adresy, pokud si to namapujete např. pro přístup z venku přes vlastní veřejnou IP. Tam je potom navíc nebezpečí, že se vám někdo další na zařízení dostane a relé vám přepne. Tohle se dá asi řešit různě, já tu stránku proháním přes reverzní proxy + htpasswd na vlastním webserveru. Heslo pak uložím v prohlížeči. Pro SDS se to jeví jako byste se přihlašoval stále ze stejné vnitřní adresy.
Je to něco jako „drbání se levou rukou za pravým uchem“, ale jiné řešení mě zatím nenapadá. Původně jsem místo reverzní proxy používal VPNku, ale dost to vycucávalo baterku, takže to stejně nemohlo běžet pořád. Možná někdo další navrhne něco jednoduššího.
USER PROGRAM
#define REL1 sys[231]
#define REL2 sys[232]
#define REL3 sys[233]
#define REL4 sys[234]
#define REL5 sys[235]
#define REL6 sys[236]
main
{
if ( sys[144] ) {
if ( REL1 == 0 ) { REL1 = 1; echo(' rele1 ZAP'); }
}
else {
if ( REL1 != 0 ) { REL1 = 0; echo(' rele1 VYP'); }
}
if ( sys[145] ) {
if ( REL2 == 0 ) { REL2 = 1; echo(' rele2 ZAP'); }
}
else {
if ( REL2 != 0 ) { REL2 = 0; echo(' rele2 VYP'); }
}
if ( sys[146] ) {
if ( REL3 == 0 ) { REL3 = 1; echo(' rele3 ZAP'); }
}
else {
if ( REL3 != 0 ) { REL3 = 0; echo(' rele3 VYP'); }
}
if ( sys[147] ) {
if ( REL4 == 0 ) { REL4 = 1; echo(' rele4 ZAP'); }
}
else {
if ( REL4 != 0 ) { REL4 = 0; echo(' rele4 VYP'); }
}
if ( sys[148] ) {
if ( REL5 == 0 ) { REL5 = 1; echo(' rele5 ZAP'); }
}
else {
if ( REL5 != 0 ) { REL5 = 0; echo(' rele5 VYP'); }
}
if ( sys[149] ) {
if ( REL6 == 0 ) { REL6 = 1; echo(' rele6 ZAP'); }
}
else {
if ( REL6 != 0 ) { REL6 = 0; echo(' rele6 VYP'); }
}
}
USER WEB PAGE
<!DOCTYPE HTML>
<html lang="cs">
<head>
<TITLE>SDS-MICRO</TITLE>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML; CHARSET=WINDOWS-1250">
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<META HTTP-EQUIV="EXPIRES" CONTENT="0">
<style type="text/css">
body{
background:black;
color:white;
font-family:Verdana, Geneva, sans-serif;
font-size:18px;
margin:0 auto;
width:900px;
height: 960px;
}
div{
background-image:-moz-linear-gradient(top, #404040 0%, #000 100%);
background-image:-o-linear-gradient(top, #404040 0%, #000 100%);
background-image:-ms-linear-gradient(top, #404040 0%, #000 100%);
background-image:-webkit-linear-gradient(top, #404040 0%, #000 100%);
width:100%;
height:0em;
border:0px ridge DimGrey;
text-align:center;
padding:0px;
margin:0px 0px 0px;
border-radius: 0px 0px 0px;
font-size: 50px;
font-family: "Courier New", Courier, monospace;
}
.opt, .adi, .tem, .tin, .tax, .btn{
padding:5px;
margin:0px 30px 30px 30px;
float:none;
border-radius:0px 0px 0px;
border:0px grey;
}
.opt, .adi, .tem, .tin, .tax{
border:0px 0px 0px 0px solid grey;
width:20px;
}
.btn{
background:DimGrey;
color:white;
font-size:65px;
width:330px;
height: 280px;
border:8px solid grey;
border-radius:0px 0px 18px 18px;
}
.bto{
background:DimGrey;
color:white;
font-size:40px;
width:330px;
height: 80px;
padding:5px;
margin:30px 30px 0px 30px;
float:none;
border-radius:18px 18px 0px 0px;
border:8px solid grey;
}
.tin{ color:DeepSkyBlue;
}
.tax{ color:Yellow;
}
.adi1 { padding:5px;
margin:10px;
float:left;
border-radius:0px 0px 0px;
}
@supports (-moz-appearance:none) and (hyphens:none) {
#btn5{
float: left;
margin:0px 30px 0px 76px;}
#btn6{
margin:0px -50px 0px 59px;
float: left;
}
#btn9{
float:none;
margin:30px 30px 0px 21px;
}
#btn8{
float:none;
margin:30px -40px 0px 29px;
}
@media (min-width:1025px){
body{
font-size:18px;
width:900px;
height: 600px;
}
.btn{
margin:0px 20px 20px 20px;
float:none;
font-size:50px;
width:250px;
height: 100px;
border:5px solid grey;
border-radius:0px 0px 15px 15px;
}
.bto{
font-size:30px;
width:250px;
height: 60px;
padding:5px;
margin:20px 20px 0px 20px;
float:none;
border-radius:15px 15px 0px 0px;
border:5px solid grey;
}
@supports (-moz-appearance:none) and (hyphens:none) {
#btn5{
float: left;
margin:0px 0px 20px 163px;}
#btn6{
margin:0px 0px 20px 70px;
float: left;
}
#btn9{
float:none;
margin:20px 40px 0px 72px;
}
#btn8{
float:none;
margin:20px 16px 0px 0px;
}
}
}
</style>
<script type="text/javascript">
var i, r, t;
var val = new Array(0, 0, 0);
var reqA = false;
var reqO = false;
var reqT = false;
var reqR = false;
var reqU = false;
var sub = false;
function reqAc() {
if (reqA.readyState === 4) {
if (reqA.status === 200) {
var rE = reqA.responseText.split("|");
for (i = 1; i <= 4; i++) {
r = rE[i - 1] / 34.5;
if ( ! ( isNaN(r) )) {
document.getElementById("adi" + i).innerHTML = r.toFixed(1) + " V";
}
}
}
}
}
function reqOc() {
if (reqO.readyState === 4) {
if (reqO.status === 200) {
var rE = reqO.responseText.split("|");
for (i = 1; i <= 4; i++) {
if (rE[i - 1] == 0) {
document.getElementById("opt" + i).style.background = "Lime";
} else {
document.getElementById("opt" + i).style.background = "DarkGreen";
}
}
}
}
}
function reqTc() {
if (reqT.readyState === 4) {
if (reqT.status === 200) {
var rE = reqT.responseText.split("|");
btnSts(7, (rE[0] == 0) ? 0 : 1);
for (i = 1; i <= 7; i++) {
r = rE[i + 8] / 100;
document.getElementById("tem" + i).innerHTML = r.toFixed(1) + " \u00b0C";
}
}
}
}
function reqRc() {
if (reqR.readyState == 4) {
if (reqR.status == 200) {
var rE = reqR.responseText.split("|");
btnSts(1, (rE[0] == 0) ? 0 : 1);
btnSts(2, (rE[1] == 0) ? 0 : 1);
btnSts(3, (rE[2] == 0) ? 0 : 1);
btnSts(4, (rE[3] == 0) ? 0 : 1);
btnSts(5, (rE[4] == 0) ? 0 : 1);
btnSts(6, (rE[5] == 0) ? 0 : 1);
}
}
}
function reqUc() {
if (reqU.readyState === 4) {
if (reqU.status === 200) {
var rE = reqU.responseText.split("|");
for (i = 1; i <= 3; i++) {
r = rE[i - 1] / 100;
document.getElementById("tin" + i).innerHTML = r.toFixed(1) + " \u00b0C";
r = rE[i + 2] / 100;
document.getElementById("tax" + i).innerHTML = r.toFixed(1) + " \u00b0C";
}
}
}
}
function sdsps() {
reqA = false;
reqO = false;
reqT = false;
reqR = false;
reqU = false;
if (window.XMLHttpRequest) {
reqA = new XMLHttpRequest;
reqO = new XMLHttpRequest;
reqT = new XMLHttpRequest;
reqR = new XMLHttpRequest;
reqU = new XMLHttpRequest;
} else if (window.ActiveXObject) {
reqA = new ActiveXObject("Microsoft.XMLHTTP");
reqO = new ActiveXObject("Microsoft.XMLHTTP");
reqT = new ActiveXObject("Microsoft.XMLHTTP");
reqR = new ActiveXObject("Microsoft.XMLHTTP");
reqU = new ActiveXObject("Microsoft.XMLHTTP");
}
if (reqA) {
reqA.open("GET", "get_sys[431]?rn=4&rand=" + Math.random(), true);
reqA.onreadystatechange = reqAc;
reqA.send(null);
}
if (reqO) {
reqO.open("GET", "get_sys[151]?rn=4&rand=" + Math.random(), true);
reqO.onreadystatechange = reqOc;
reqO.send(null);
}
if (reqT) {
reqT.open("GET", "get_sys[301]?rn=14&rand=" + Math.random(), true);
reqT.onreadystatechange = reqTc;
reqT.send(null);
}
if (reqR) {
reqR.open("GET", "get_sys[231]?rn=6&rand=" + Math.random(), true);
reqR.onreadystatechange = reqRc;
reqR.send(null);
}
if (reqU) {
reqU.open("GET", "get_sys[140]?rn=6&rand=" + Math.random(), true);
reqU.onreadystatechange = reqUc;
reqU.send(null);
}
t = setTimeout("sdsps()", 2000);
}
function getSub() {
sub = false;
if (window.XMLHttpRequest) {
sub = new XMLHttpRequest;
} else {
if (window.ActiveXObject) {
sub = new ActiveXObject("Microsoft.XMLHTTP");
}
}
}
function sdsc_S(sysn) {
r = sysn - 144;
val[r] = (val[r] == 0) ? 1 : 0;
if(!sub) { getSub(); };
if (sub) {
sub.open("GET", "sdscep?sys" + sysn + "=" + val[r], true);
sub.onreadystatechange = reqRc;
sub.send(null);
}
}
function btnSts(id, sw) {
val[id-1] = sw;
if (sw) {
document.getElementById("btn" + id).style.background = "Red";
document.getElementById("btn" + id).value = "ON";
} else {
document.getElementById("btn" + id).style.background = "DarkGreen";
document.getElementById("btn" + id).value = "OFF";
}
}
</script>
</head>
<body onLoad="sdsps();">
<div>
<input type="button" value="zasuvka u krbu" class="bto"> <input type="button" value="topeni loznice" class="bto">
<input type="button" id="btn1" value="..." class="btn" onClick="javascript:sdsc_S(144);">
<input type="button" id="btn2" value="..." class="btn" onClick="javascript:sdsc_S(145);">
<input type="button" value="topeni mistnost" class="bto"> <input type="button" value="svetlo vchod" class="bto">
<input type="button" id="btn3" value="..." class="btn" onClick="javascript:sdsc_S(146);">
<input type="button" id="btn4" value="..." class="btn" onClick="javascript:sdsc_S(147);">
<input type="button" id="btn9" value="zamek branka" class="bto"> <input type="button" id="btn8" value="svetlo branka" class="bto">
<input type="button" id="btn5" value="..." class="btn" onClick="javascript:sdsc_S(148);">
<input type="button" id="btn6" value="..." class="btn" onClick="javascript:sdsc_S(149);">
</div>
</body>
</html>