Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <html>
- <head>
- <meta charset="UTF-8"> <!-- kodowanie UTF-8 tego pliku teksotwego -->
- <!-- sciągnij z https://jquery.com/download/ najnowszy "compressed, production jQuery x.y.z" ,
- wrzuć sciągnięty plik 'jquery-x.y.z.min.js' do tego samego katalogu co ten plik html.
- Ah, jak klikniesz "Download ...." to otworzy się strona z "tekstem" - po prostu uzyj Plik->Zapisz aby zapisać 'jquery-x.y.z.min.js' :)
- Dla innych ludzi którzy dotrą do tego :) : popraw wersję jquery jak będziesz ściągał ("x.y.z" to będzie numer wersji) w tagu poniżej "script src=...."
- -->
- <script type="text/javascript" src="jquery-3.4.1.min.js"></script>
- <script>
- //http://<espeasyip>/control?cmd=<command>
- // globalne zmienne
- // adres espEasy - popraw na swój
- var espip = "192.168.x.x";
- // numer GPIO
- var espgpio = 15;
- function get_status(ip,gpio) {
- // sprawdzmy czy argumenty nie są "null" (czyli funkcja zostałą wywołana bez przekazanych argumentów)
- if (typeof(gpio) === "undefined") return;
- if (typeof(ip) === "undefined") return;
- // dodatkowe sprawdzenie
- if (!Number.isInteger(gpio)) {
- console.log("GPIO nie jest liczbą!");
- return;
- }
- if (gpio<0 || gpio>16) {
- console.log("GPIO ("+gpio+") poza zakresem!");
- return;
- }
- // ajax request
- // zwróć uwagę na sposób zapisu funkcji które są wywoływane po request'cie
- $.ajax({
- url: "http://"+ip+"/control?cmd=Status,GPIO,"+gpio,
- dataType: "json" // spodziewamy się odpowiedzi w fomracie json
- }) // <<-- tutaj nie ma średnika, ponieważ chcemy aby zostały wywołane funkcje w done lub fail :)
- // to jest wywoływane jeśli request się udał (http result code = 200)
- .done(function(data) {
- // ustawmy zawartość tagu span ze statusem
- // debug, uzyteczne jak nie jestes pewien co dostajesz :) , mozesz uzyc Developers Tools i tam krok po kroku
- // analizować skrypt JS i podglądać jakie są dane w jakich zmiennych ^u^
- //console.log("Status led: ");
- //console.log(data);
- if (data.state == 0) {
- $("#led-status").html("OFF");
- // zmieniamy kolor :)
- $("#led-status").css("background-color","#ff9673");
- } else if (data.state == 1) {
- $("#led-status").html("ON");
- // zmieniamy kolor :)
- $("#led-status").css("background-color","#79ff4c");
- } else {
- $("#led-status").html("-? ("+data.state+")-");
- // zmieniamy kolor :)
- $("#led-status").css("background-color","#ffff26");
- }
- })
- // jeśli będzie jakiś błąd (e.g. brak urządzenia , zły IP, etc...) to to się wykona:
- .fail(function(jqxhr, text, err) {
- console.log("AJAX query error! text="+text+" , error="+err);
- console.log(jqxhr);
- $("#led-status").html("ERROR: "+text);
- // zmieniamy kolor :)
- $("#led-status").css("background-color","#ff4000");
- })
- ; // tutaj jest koniec definicji .ajax(.........)
- }
- function set_status(ip,gpio,state) {
- // sprawdzmy czy argumenty nie są "null" (czyli funkcja zostałą wywołana bez przekazanych argumentów)
- if (typeof(gpio) === "undefined") return;
- if (typeof(ip) === "undefined") return;
- if (typeof(state) === "undefined") return;
- // dodatkowe sprawdzenie
- if (state != 0 && state != 1) return;
- if (!Number.isInteger(gpio)) {
- console.log("GPIO nie jest liczbą!");
- return;
- }
- if (gpio<0 || gpio>16) {
- console.log("GPIO ("+gpio+") poza zakresem!");
- return;
- }
- // ajax request - praktycznie kopiuj-wklej z "get_status" :)
- // zwróć uwagę na sposób zapisu funkcji które są wywoływane po request'cie
- $.ajax({
- url: "http://"+ip+"/control?cmd=GPIO,"+gpio+","+state, // dodajemy state do url :)
- dataType: "json" // spodziewamy się odpowiedzi w fomracie json
- })
- // to jest wywoływane jeśli request się udał (http result code = 200)
- .done(function(data) {
- // ustawmy zawartość tagu span ze statusem
- // debug, uzyteczne jak nie jestes pewien co dostajesz :) , mozesz uzyc Developers Tools i tam krok po kroku
- // analizować skrypt JS i podglądać jakie są dane w jakich zmiennych ^u^
- //console.log("Status led: ");
- //console.log(data);
- // aktualizacja tag'a ze stanem
- $("#led-status").html("-- 🗘 --");
- // zmieniamy kolor :)
- $("#led-status").css("background-color","#99b3ff");
- // odpytajmy stan GPIO za 500msec
- setTimeout(function() { get_status(ip,gpio); }, 500);
- })
- // jeśli będzie jakiś błąd (e.g. brak urządzenia , zły IP, etc...) to to się wykona:
- .fail(function(jqxhr, text, err) {
- console.log("AJAX query error! text="+text+" , error="+err);
- console.log(jqxhr);
- $("#led-status").html("ERROR: "+text);
- // zmieniamy kolor :)
- $("#led-status").css("background-color","#ff4000");
- })
- ; // tutaj jest koniec definicji .ajax(.........)
- }
- // funkcja wywoływana na klik butona
- function ledon() {
- set_status(espip,espgpio,1);
- }
- // funkcja wywoływana na klik butona
- function ledoff() {
- set_status(espip,espgpio,0);
- }
- function ledstatus() {
- // ' espip,espgpio ' = globalne zmienne , dla przenośności kodu :)
- get_status(espip,espgpio);
- }
- // i kolejny fajny "feature" z jQuery, możemy wywołać z łatwością funkcję po pełnym załądowaniu dokumentu :) (bez uzycia body onload=....)
- // mozna to zadeklarować w różnych miejscach i wiele razy wywołując inne funkcje
- $(document).ready(function() {
- ledstatus(); // (^o^)
- });
- </script>
- </head>
- <body>
- <!-- STatus led'a -->
- <div>
- Status: <span style="background-color: #ffff26;" id="led-status">-- ? --</span>
- </div>
- <!-- input'y pownny być w form tagu, onsubmit=return false - zapobiega wysłaniu formularza -->
- <form onsubmit="return false;">
- <input type="button" value="Włącz" onClick="ledon();">
- <input type="button" value="Wyłącz" onClick="ledoff();">
- <br />
- <br />
- <input type="button" value="Status" onClick="ledstatus();">
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement