LaundrySorcery

IP-Enabling a 2011 Washing Machine
git clone git://xatko.vsos.ethz.ch/LaundrySorcery.git
Log | Files | Refs

commit c95c41b38b3616186df33b44999cf8cd4a546ea9
parent 0bd867f29c515e173a81a4139e711df0929e8aca
Author: Dominik Schmidt <das1993@hotmail.com>
Date:   Sun,  1 Jul 2018 18:35:38 +0000

Merge laundrysorcery.local:LaundrySorcery

Diffstat:
www/details.html | 11+++++++++++
www/index.cgi | 28++++++++++++++++++++++------
2 files changed, 33 insertions(+), 6 deletions(-)

diff --git a/www/details.html b/www/details.html @@ -4,9 +4,20 @@ <title>LaundrySorcery</title> <meta charset="UTF-8"/> <style type="text/CSS"> + body{ + max-width:80ex; + font-size:18px; + font:serif; + margin:10px auto; + background-color:#EEEEEE; + color:#111111; + } </style> </head> <body> + <H1 style="color:#e68616; text-align:center; text-shadow:0px 0px 5px;">We do what we must because we can</H1> + Have a look at <a href="http://xatko.vsos.ethz.ch:36492/git/LaundrySorcery/">The Codeā„¢</a><p /> + <H1>Controls</H1> <div id="CtrlPanel"><form action="control.cgi" method="GET"><input type="submit" name="restart" value="Restart"/> <input type="submit" name="reboot" value="Reboot"/> <input type="submit" name="shutdown" value="Shutdown" /></form></div> <H1>Light Sensor Data</H1> <div id="SensorPanel"> diff --git a/www/index.cgi b/www/index.cgi @@ -20,10 +20,10 @@ Content-Type: text/html text-align:center; font-size:x-large; } - #status.off #guessTime{ + #status.off .guess{ display:none; } - #guessTime{ + .guess{ font-size:large; } #power{ @@ -51,29 +51,31 @@ Content-Type: text/html <div id="status"> <div id="power"><img src="off.svg" /></div> <div id="delta_t"></div> - <div id="guessTime"></div> + <div id="guessTime" class="guess"></div> + <div id="guessProg" class="guess"></div> </div> <script type="text/JavaScript"> <!-- delta_t=${RTIME}; function updateDisplay(){ var g=document.getElementById("guessTime"); + var g2=document.getElementById("guessProg"); var dt=document.getElementById("delta_t"); var st=document.getElementById("status"); var txt=""; - var txt2=""; var classn=""; if(delta_t < 0){ txt="since "+timeSince(-delta_t); classn="off"; } else{ + c=guessCluster(delta_t); txt="since "+timeSince(delta_t); - txt2="The crystal ball guesses: "+timeSince(Math.round(guessTimeLeft(delta_t)))+" left" + g.textContent="The crystal ball guesses: "+timeSince(Math.round(guessTimeLeft(delta_t)))+" left"; + g2.textContent="Guessed program lasts "+timeSince(Math.round(c.mean)); classn="on"; } dt.textContent=txt; - g.textContent=txt2; st.setAttribute("class",classn); st.getElementsByTagName("img")[0].setAttribute("src",classn+".svg"); } @@ -102,6 +104,20 @@ Content-Type: text/html } } + function guessCluster(elapsed){ + var max=-Infinity; + var maxc={}; + for(var i=0; i<clusters.length; i++){ + var cluster=clusters[i] + var prob=cluster.apriori*(1-cluster.cdf(elapsed)); + if(prob>max){ + maxc=cluster; + max=prob; + } + } + return maxc; + } + function guessTimeLeft(elapsed){ return guessTime(elapsed)-elapsed; }