UA-23773963-1
Ваш браузер устарел. Рекомендуем обновить его до последней версии.
Это пример JavaScript
 создающего кнопочное меню для управения устрйствами Х10 через X10comander
 
 
<html>
<head>
<title>Web X10comander</title>
<!-- version 2.0a  9/6/2010 -->
<script type="text/JavaScript" language="JavaScript">
// XXX: This script is known not to work with the Opera Mini mobile browser.
var version = "2.0";
// Some constants to make the code a little more readable.
var NODIM = 0, DIM = 1, PLC = 0, RF = 1;
 
// ********************** START EDITING HERE ***************************
 
// Host name or IP address of the machine running the X10 Commander server
// You MUST edit this.
var server = "192.168.1.2";
 
// You MUST edit the devices array to match your setup.
//
// Devices array contains 4 entries per device.
// 1. Device address (house code & unit number)
// 2. Device name to display
// 3. Device dimability - NODIM or DIM
// 4. X10 transmission method - PLC (power line) or RF (radio frequency)
var devices = new Array(
    "J4",    "All Lights",           NODIM,  PLC,
    "L5",    "Den Floor Lamp",       DIM,    PLC,
    "L2",    "Downstairs Hall",      DIM,    PLC,
    "L1",    "Foyer, Top of Stairs", DIM,    PLC,
    "L3",    "Garden Room",          DIM,    PLC,
    "K1",    "Kitchen Chandelier",   DIM,    PLC,
    "K3",    "Kitchen Fluorescents", NODIM,  PLC,
    "K5",    "Kitchen Heater",       NODIM,  PLC,
    "K2",    "Kitchen Track Lights", DIM,    PLC,
    "M1",    "TV Room Backlight",    NODIM,  RF,
    "M2",    "TV Room Floodlights",  DIM,    PLC,
    "M3",    "TV Room Floor Lamp",   NODIM,  PLC,
    "O4",    "Outside Back Yard",    DIM,    PLC,
    "O1",    "Outside Front Door",   DIM,    PLC,
    "O2",    "Outside Front Gate",   DIM,    PLC,
    "O3",    "Outside Garden Room",  DIM,    PLC,
    "O5",    "Outside Trash Area",   DIM,    PLC,
    // Devices array ends with a special token so we do not have to worry about
    // that last trailing comma when items get rearranged. Do not change it.
    "END"
);
 
// Some global flags to customize script behavior.
// You don't have to change them unless you don't like the standard behavior.
//
// Personalize the page heading any way you like by changing myHeading
var myHeading = "X10 Controls for My House";
// Set showServer to false to omit showing the server name or address on page
var showServer = true;
// Set shortButtons to true to omit Dim/Bright percentages from button labels (good for mobile devices)
var shortButtons = false;
// Set percentage to dim BY with Dim buttons. Default of 50 seems good.
// Understand that "DIM 25" means to dim by 25%, not dim to 25%.
var dimPercent = 50;
// Set percentage to brighten TO with Bright buttons. Default of 100 seems good.
// Understand that "BRIGHT 75" means to brighten to 75%, not brighten by 75%.
var brightPercent = 100;
// Set showCodes to true to show device X10 addresses & transmit methods as well as names on page
var showCodes = false;
// Set showStatus to false to disable browser status line updating
var showStatus = true;
// Set showHovertext to false to not show hovertext.
// Some broswers put this in the status line, distractingly, instead of as hovertext.
var showHovertext = true;
 
// Some global flags to control how the HTTP command is sent.
// Change these if you have problems with the standard configuration.
// 
// Set useAjax to false only if it consistently fails.
var useAjax = true;
// Sometimes an exception will be thrown but the command will succeed anyway.
// If this happens all the time, you can change allowFallback and allowErrorAlert
// to false.
var allowFallback = true; // set to false to disable fallback to window.open() if AJAX throws an exception
var allowErrorAlert = true; // set to false if you get error pop-ups and don't want to see them
 
// If you are running this via the http: protocol, and your HTTP server needs
// a user ID and password for authentication, set them here. Just leave them
// empty unless you get authentication errors or prompts from your HTTP server.
// XXX: this is untested. Kindly report authentication problems to the author.
var serverID = "";
var serverPassword = "";
 
// Set debug to true to show debug output in a popup window. Not for general use.
var debug = false;
 
// ********************** STOP EDITING HERE ****************************
// *********************** THIS MEANS YOU! *****************************
 
// Connect to the X10 Commander server by opening a window.
// The AJAX method should be preferred.
function windowMethod(url, closeIt) {
    if (closeIt) {
        var w = window.open(url, "X10Window", 
          "dependent,height=1,width=1,location=no,menubar=no,scrollbars=no,status=no,toolbar=no");
        // Immediately close the window.
        w.close();
    }
    else {
      window.open(url, "X10Window", 
        "dependent,height=100,width=700,location=yes,menubar=no,scrollbars=no,status=yes,toolbar=no");
    }
}
 
// Connect to the X10 Commander server via AJAX.
function ajaxMethod(url) {
    try {
        // Send HTTP HEAD without opening a window.
        var request = new XMLHttpRequest();
        request.open("HEAD", url, true, serverID, serverPassword);
        request.send(null);
    }
    catch (e) {
        // Request threw an exception. This does not necessarily mean it failed.
        var err = e; // bring error into scope so it can be examined in debugger
        if (allowErrorAlert) {
            // Show the error message.
            var errString;
            if (typeof(err) == "string") {
                errString = err;
            }
            else {
                errString = err.toString();
                if (errString == null || errString == "" || errString == "[object Error]")
                    errString = err.name + ": " + err.message;
            }
            if (err.message.match(/Access is denied/))
                // Probably an IE security error.
                errString += "\nMake sure the server " + location.hostname +
                  " is in your local intranet or other trusted zone.";
            else if (err.message.match(/Security violation/))
                // Probably an Opera security error.
                errString +=
                  "\n\nSet \"useAjax\" to \"false\" in the Web X10der script source code \
because it will always fail with your browser (probably Opera).";
            alert(errString);
        }
        if (allowFallback)
            // Revert to using a browser window to send the command.
            windowMethod(url, true);
    }
}
 
// Turn a device on or off, or brighten or dim it.
function setDevice(deviceNum, state, transmitMethod) {
    // if (debug) alert("setDevice(" + deviceNum + ", " + state + ", " + transmitMethod + ");");
    // Do not change the 8086 or the funny characters in the url string.
    // X10 Commander server requires them as is.
    var url = "http://" + server + ":8086/?x10command=DEVICE~send" +
        transmitMethod + "~\"" + devices[deviceNum] + " " + state + "\"";
    // Kludge: append timestamp to URL to force IE to open it every time.
    // Other browsers don't seem to need this.
    var today = new Date;
    url += "&time=" + today.getTime();
    if (debug)
        // Open a window, leaving it open to show the command sent and the response received.
        windowMethod(url, false);
    else if (useAjax)
        // Use the AJAX method.
        ajaxMethod(url);
    else
        // Use the window.open() method.
        windowMethod(url, true);
    if (showStatus)
        window.status = devices[deviceNum+1] + " set to " + state + " via " +
          transmitMethod.toUpperCase();
}
 
// Function to generate the HTML for the page full of buttons.
function generate() {
    var s; // string accumulator
    // Write some text.
    if (myHeading != null && myHeading != "") document.writeln("<h3>" + myHeading + "</h3>");
    if (showServer) document.writeln("<h5>Server: " + server + "</h5>");
    // Write a table, one row per X10 device.
    document.writeln("<table>");
    for (var i = 0; devices[i] != "END"; i += 4) {
        var lcMethod, ucMethod; // lowercase & uppercase transmission methods
        if (devices[i+3] == RF) { lcMethod = "\"rf\""; ucMethod = "RF"; }
        else { lcMethod = "\"plc\""; ucMethod = "PLC"; }
        // Show the device name.
        document.write("<tr><td>" + devices[i+1] + "</td>");
        // Show the device address if user wants to see it.
        if (showCodes)
            document.write("<td>(" + devices[i] + " " + ucMethod + ")</td>");
        // Add Off and On buttons
        s = "<td><button type='button'";
        if (showHovertext) s += " title='" + devices[i] + " OFF " + ucMethod + "'";
        s += " onClick='setDevice(" + i + ", \"OFF\", " + lcMethod +
          ");'>&nbsp;&nbsp;Off&nbsp;&nbsp;</button></td>"
        document.write(s);
        s = "<td><button type='button'";
        if (showHovertext) s += " title='" + devices[i] + " ON " + ucMethod + "'";
        s += " onClick='setDevice(" + i + ", \"ON\", " + lcMethod +
          ");'>&nbsp;&nbsp;On&nbsp;&nbsp;</button></td>"
        document.write(s);
        // If device is dimmable...
        if (devices[i+2] == DIM) {
            // ... add Dim button... 
            s = "<td><button type='button'";
            if (showHovertext)
                s += "title='" + devices[i] + " DIM " + dimPercent + " " + ucMethod + "'";
            s += " onClick='setDevice(" + i + ", \"DIM " + dimPercent + "\", " +
              lcMethod + ");'>&nbsp;Dim";
            if (! shortButtons) s += " " + dimPercent + "%";
            s += "&nbsp;</button></td>";
            document.write(s);
            // ... and Bright button
            s = "<td><button type='button'";
            if (showHovertext)
                s += "title='" + devices[i] + " BRIGHT " + brightPercent + " " + ucMethod + "'";
            s += " onClick='setDevice(" + i + ", \"BRIGHT " + brightPercent + "\", " +
              lcMethod + ");'>&nbsp;Bright";
            if (! shortButtons) s += " " + brightPercent + "%";
            s += "&nbsp;</button></td>";
            document.write(s);
        }
        document.writeln("</tr>");
    }
    document.writeln("</table>");
    if (showStatus)
        window.status = "Thanks for using Web X10der v" + version;
}
 
</script>
</head>
 
<body>
<script type="text/JavaScript" language="JavaScript">
<!--
generate();
// -->
</script>
<noscript>
<h3>You must have JavaScript enabled to use this page.</h3>
</noscript>
<!-- vim: set tabstop=4 shiftwidth=4 expandtab lines=44 columns=120: -->
</body>
</html>