Created
March 10, 2013 02:01
-
-
Save tagroup/5126760 to your computer and use it in GitHub Desktop.
Hack to test Multilevel openzwave Switches
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
///////////////////////// | |
// | |
//For multilevel put 0-99 in as a status and click the light bulb | |
// more at http://thomasloughlin.com/new-open-zwaveraspbian-image-ready-for-download/ | |
//////////////////////////// | |
session_start(); | |
define("ZWAVE_HOST", "localhost"); | |
define("ZWAVE_PORT", 6004); | |
function sendReceiveMessage($in) | |
{ | |
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); | |
if ($socket === false) { | |
return "ERROR: socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; | |
} | |
$result = socket_connect($socket, ZWAVE_HOST, ZWAVE_PORT); | |
if ($result === false) { | |
return "ERROR: socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n"; | |
} | |
socket_write($socket, $in, strlen($in)); | |
//TODO: should really change this to keep getting until \n | |
$data=socket_read($socket, 2048,PHP_NORMAL_READ ); | |
socket_close($socket); | |
usleep(250); //this just makes it happy | |
return $data; | |
} | |
function opposite($str) | |
{ | |
if($str=='On') | |
return 'Off'; | |
else | |
return 'On'; | |
} | |
function getDevices() | |
{ | |
$list=sendReceiveMessage('ALIST'); | |
$list = substr($list, 0, strlen($list) - 1); //doing this instead of trim | |
$devicesList = explode("#", $list); | |
$devices = array(); | |
$c=0; | |
foreach ($devicesList as $device) { | |
$device = explode("~", $device); | |
$devices[$c]['name']=$device[1] ; | |
$devices[$c]['node']=$device[2] ; | |
$devices[$c]['group']=$device[3] ; | |
$devices[$c]['type']=$device[4] ; | |
if(strpos($device[5],'Basic=255')!==false) | |
{ | |
$devices[$c]['status']='On'; | |
} | |
if(strpos($device[5],'Basic=0')!==false) | |
{ | |
$devices[$c]['status']='Off'; | |
} | |
if($device[4]=='Multilevel Power Switch') | |
{ | |
$temp=explode(' Basic=',$device[5]); | |
$temp= explode(' ',$temp[1]); | |
$devices[$c]['status']=$temp[0]; | |
} | |
$c++; | |
} | |
//var_dump($devices); | |
return $devices; | |
} | |
$devices=getDevices(); | |
sleep(1); | |
if($node=filter_input(INPUT_POST,'node_node',FILTER_VALIDATE_INT)) | |
{ | |
//die(nl2br(print_r($_POST,true))); | |
//DEVICE~2~255~Binary Switch | |
//SETNODE~2~TESTLAMP~1 | |
// | |
if($_POST['node_type']=='Multilevel Power Switch') | |
{ | |
$msg= "DEVICE~$node~". $_POST['node_status'] . "~". $_POST['node_type']; | |
} | |
if($_POST['node_type']=='Binary Power Switch' || $_POST['node_type']=='Binary Switch') | |
{ | |
$msg="DEVICE~$node~0~Binary Switch"; | |
if($_POST['node_status']=='On') | |
{ | |
$msg="DEVICE~$node~255~Binary Switch"; | |
} | |
} | |
//don't resubmit | |
if($devices[$node-2]['status']!=$_POST['node_status']) | |
{ | |
$_SESSION['msg']=sendReceiveMessage($msg); | |
sleep(1); | |
} | |
//not really the best way to get the node name (assumes no other controller is in the way) | |
if($_POST['node_name'] != $devices[$node-2]['name'] || $_POST['node_group'] != $devices[$node-2]['group']) | |
{ | |
$_SESSION['msg'].= ", " . sendReceiveMessage("SETNODE~". $node . "~" . $_POST['node_name'] ."~" . $_POST['node_group'] . "~"); | |
} | |
//sleep(2);// likes it | |
//$devices=getDevices(); | |
header('Location: ./'); | |
exit(); | |
} | |
///////////spit out template | |
?> | |
<head> | |
<style type="text/css"> | |
body{ | |
font-family: arial; | |
font-size: 12px; | |
line-height: 1.3em; | |
} | |
input[type=text] { | |
width:115px; | |
} | |
label { | |
width:45px;float:left; | |
} | |
.node{ | |
float:left; width:auto;min-width:280px; margin:5px;padding:15px;padding-right:10px;padding-left:10px;border:2px solid gray;border-radius: 15px;-moz-border-radius: 15px;background-color: #f5f5f5; | |
} | |
.pictureframe{ | |
float:left;margin-right:8px;border:1px solid #777777;border-radius: 5px;-moz-border-radius: 5px;background-color: white; | |
} | |
.field_container{ | |
margin-bottom: 2px; | |
} | |
#message{ | |
width:280px; | |
margin-left:auto; | |
margin-right: auto; | |
margin-top:20px; | |
} | |
</style> | |
<title>Lights</title> | |
<link rel="apple-touch-icon" href="./lights.png"/> | |
</head> | |
<body> | |
<div id="content" style="width:auto;margin:auto; padding:5px;"> | |
<?php | |
foreach($devices as $device) | |
{ | |
echo "<div class='node'><form method='post'><div class='pictureframe'><input type='image' width='100px' height='133px' src='images/"; | |
if(strtolower($device['status'])=='on' || $device['status'] >0) | |
{ | |
echo 'on'; | |
} | |
else | |
echo 'off'; | |
echo ".png' border='0' style='margin:2px;'></div> | |
<div class='field_container'><label>Name:</label><input type='text' name='node_name' value='" . $device['name'] . "'></div> | |
<div class='field_container'><label>Type:</label><input type='text' name='node_type' value='" . $device['type'] . "'></div> | |
<div class='field_container'><label>Group:</label><input type='text' name='node_group' value='" . $device['group'] . "'></div> | |
<div class='field_container'><label>Status: </label>"; | |
//horrible hack | |
if($device['type']=='Multilevel Power Switch') | |
{ | |
echo "<input type=text name='node_status' value='" . $device['status'] . "'></div>"; | |
} | |
else{ | |
echo "<input type=text value='" . $device['status'] . "' disabled></div><input type='hidden' name='node_status' value='" . opposite($device['status']) . "'>"; | |
} | |
echo "<input type='hidden' name='node_node' value='" . $device['node'] . "'> | |
</form></div> "; | |
} | |
?> | |
</div> | |
<?php | |
if($_SESSION['msg']) | |
{ | |
echo "<div style='clear:both'></div> <div id='message'><stong>Last MSG: </stong>" , $_SESSION['msg'], "</div>"; | |
} | |
?> | |
</body> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment