• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Aplikacja do symulacji inteligentnego domu

Object Storage Arubacloud
+1 głos
510 wizyt
pytanie zadane 26 listopada 2020 w JavaScript przez kielek123 Nowicjusz (150 p.)
edycja 26 listopada 2020 przez kielek123

Cześć wszystkim, piszę aplikację jako projekt na uczelnię. Aplikacja ma symulować interfejs webowy z pracy inteligentnego domu, czyli wyświetlać stany (włączone/wyłączone) różnych urządzeń w domu, manipulować nimi np. przyciskiem "wyłącz wszystkie światła" - wszystko w czasie rzeczywistym. Całość opiera się na bazie danych do której trafiają zmienne. Póki co stworzyłem taki interfejs. 

Połączyłem się za pomocą PHP. Również w PHP podczas załadowania strony tworzy się tabela w bazie danych i dodają się stany (0 lub 1 czyli włączone lub wyłączone), daty i reszta kolumn. 

Teraz utknąłem:

1. Potrzebuję aby co X sekund aktualizowały się rekordy tabeli, wraz z datami dodania tych rekordów. Narazie działa przy odświeżaniu strony, a docelowo ma działać bez oraz losowo (znaczy raz zmieni się stan w 1 rekordzie, raz w 4, raz 7 itd) - taka symulacja.

2. Zaraz obok działania symulacji, przyciski poniżej tabel powinny funkcjonować zgodnie z opisem, niezależnie od symulacji  - np. program działa, wyłącza się światło (stan z 1 na 0), a ja przyciskiem włączam stan z 0 na 1 z powrotem. W jaki sposób manipulować w czasie rzeczywistym przyciskami i rekordami w tabeli?

Czy da się to zrobić przy pomocy samego php i js+ajax? Czytałem też o możliwości node.js + Express.

 

Poniżej kod z index.php.

<html>
<head>
	<title>Inteligentny dom</title>
	<link rel="stylesheet" href="style.css">
</head>
<body>
	<div class="data">
		<h1>Światło</h1>
		<table>
			<tr>
				<th>Nr</th>
				<th>Port</th>
				<th>Wejście/Wyjście</th>
				<th>Stan</th>
				<th>Obszar</th>
				<th>Poziom</th>
				<th>Pomieszczenie</th>
				<th>Nazwa</th>
				<th>Funkcja</th>
				<th>DataGodzina</th>
			</tr>


	<?php
	include 'connect.php';
	include 'deleteTableSwiatlo.php';
	include 'createTableSwiatlo.php';
	include 'addDataSwiatlo.php';
	

	$sql = "SELECT Nr, Port, wejscieWyjscie, Stan, Obszar, Poziom, Pomieszczenie, Nazwa, Funkcja, DataGodzina from swiatlo";
	$result = $conn-> query($sql);
	
	if($result-> num_rows > 0){
		while($row = $result-> fetch_assoc()){
			echo "<tr><td>".$row["Nr"]."</td><td>".$row["Port"]."</td><td>".$row["wejscieWyjscie"]."</td><td>".$row["Stan"]."</td><td>".$row["Obszar"]."</td><td>".$row["Poziom"]."</td><td>".$row["Pomieszczenie"]."</td><td>".$row["Nazwa"]."</td><td>".$row["Funkcja"]."</td><td>".$row["DataGodzina"]."</td></tr>";
		}
		echo "</table>";
	}
	else{
		echo "0";
	}

	?>
	</div>
		<form class="form" action="" method="POST">
			<div class="btn-group">
				<button type="submit" class="btn">Wyłącz wszystkie światła</button>
				<button type="submit" class="btn">Włącz wszystkie światła</button>
			</div>
			<div class="btn-group">
				<button type="submit" class="btn">Wyłącz światło w piwnicy</button>
				<button type="submit" class="btn">Włącz świtało w piwnicy</button>
			</div>
			<div class="btn-group">
				<button type="submit" class="btn">Wyłącz wszystkie światła na parterze</button>
				<button type="submit" class="btn">Włącz wszystkie światła na parterze</button>
			</div>
			<div class="btn-group">
				<button type="submit" class="btn">Wyłącz wszystkie światła na piętrze</button>
				<button type="submit" class="btn">Włącz wszystkie światła na piętrze</button>
			</div>
			<div class="btn-group">
				<button type="submit" class="btn">Wyłącz światło w ogrodzie</button>
				<button type="submit" class="btn">Włącz świtało w ogrodzie</button>
			</div>
			<div class="btn-group">
				<button type="submit" class="btn">Pokaż wszystkie zapalone światła</button>
			</div>
		</form>

<!--TEMPERATURA-->
	<div class="data">
		<h1>Pomiar temperatury</h1>
		<table>
			<tr>
				<th>Nr</th>
				<th>Port</th>
				<th>Wejście/Wyjście</th>
				<th>Stan</th>
				<th>Obszar</th>
				<th>Poziom</th>
				<th>Pomieszczenie</th>
				<th>Nazwa</th>
				<th>Funkcja</th>
				<th>Wartość [&#x2103]</th>
				<th>DataGodzina</th>
			</tr>


	<?php
	include 'connect.php';
	include 'deleteTableTemp.php';
	include 'createTableTemp.php';
	include 'addDataTemp.php';
	

	$sql = "SELECT Nr, Port, wejscieWyjscie, Stan, Obszar, Poziom, Pomieszczenie, Nazwa, Funkcja, Wartość, DataGodzina from temperatura";
	$result = $conn-> query($sql);
	
	if($result-> num_rows > 0){
		while($row = $result-> fetch_assoc()){
			echo "<tr><td>".$row["Nr"]."</td><td>".$row["Port"]."</td><td>".$row["wejscieWyjscie"]."</td><td>".$row["Stan"]."</td><td>".$row["Obszar"]."</td><td>".$row["Poziom"]."</td><td>".$row["Pomieszczenie"]."</td><td>".$row["Nazwa"]."</td><td>".$row["Funkcja"]."</td><td>".$row["Wartość"]."</td><td>".$row["DataGodzina"]."</td></tr>";
		}
		echo "</table>";
	}
	else{
		echo "0";
	}

	?>
	</div>
	<form class="form" action="" method="POST">
		<div class="btn-group temp-div">
			<label class="temp-label" for="temp">Ustaw temperaturę w:</label>
			<select id="temp" name="temp" class="temp-select">
			<option value="1">Piwnica</option>
			<option value="2">Pokój gościnny</option>
			<option value="3">Kuchnia</option>
			<option value="4">Garaż</option>
			<option value="5">Salon</option>
			<option value="6">Łazienka1</option>
			<option value="7">Pokój1</option>
			<option value="8">Pokój2</option>
			<option value="9">Łazienka2</option>
			<option value="10">Garderoba</option>
			</select>
			<input type="text" class="temp-input" name="temp">
			<button type="submit" class="btn">Ustaw</button>
			
		</div>
	</form>

	<!--BRAMA GARAŻOWA-->
	<div class="data">
		<h1>Brama garażowa</h1>
		<table>
			<tr>
				<th>Nr</th>
				<th>Port</th>
				<th>Wejście/Wyjście</th>
				<th>Stan</th>
				<th>Obszar</th>
				<th>Poziom</th>
				<th>Pomieszczenie</th>
				<th>Nazwa</th>
				<th>Funkcja</th>
				<th>DataGodzina</th>
			</tr>


	<?php
	include 'connect.php';
	include 'deleteTableGarage.php';
	include 'createTableGarage.php';
	include 'addDataGarage.php';
	

	$sql = "SELECT Nr, Port, wejscieWyjscie, Stan, Obszar, Poziom, Pomieszczenie, Nazwa, Funkcja, DataGodzina from garaz";
	$result = $conn-> query($sql);
	
	if($result-> num_rows > 0){
		while($row = $result-> fetch_assoc()){
			echo "<tr><td>".$row["Nr"]."</td><td>".$row["Port"]."</td><td>".$row["wejscieWyjscie"]."</td><td>".$row["Stan"]."</td><td>".$row["Obszar"]."</td><td>".$row["Poziom"]."</td><td>".$row["Pomieszczenie"]."</td><td>".$row["Nazwa"]."</td><td>".$row["Funkcja"]."</td><td>".$row["DataGodzina"]."</td></tr>";
		}
		echo "</table>";
	}
	else{
		echo "0";
	}

	?>
	</div>
	<form class="form" action="" method="POST">
		<div class="btn-group">
			<button type="submit" class="btn">Otwórz bramę garażową</button>
			<button type="submit" class="btn">Zamknij bramę garażową</button>
		</div>
	</form>

	<!--OGRÓD: ZRASZACZE-->
	<div class="data">
		<h1>Zraszacze</h1>
		<table>
			<tr>
				<th>Nr</th>
				<th>Port</th>
				<th>Wejście/Wyjście</th>
				<th>Stan</th>
				<th>Obszar</th>
				<th>Poziom</th>
				<th>Pomieszczenie</th>
				<th>Nazwa</th>
				<th>Funkcja</th>
				<th>DataGodzina</th>
			</tr>


	<?php
	include 'connect.php';
	include 'deleteTableGarden.php';
	include 'createTableGarden.php';
	include 'addDataGarden.php';
	

	$sql = "SELECT Nr, Port, wejscieWyjscie, Stan, Obszar, Poziom, Pomieszczenie, Nazwa, Funkcja, DataGodzina from ogrod";
	$result = $conn-> query($sql);
	
	if($result-> num_rows > 0){
		while($row = $result-> fetch_assoc()){
			echo "<tr><td>".$row["Nr"]."</td><td>".$row["Port"]."</td><td>".$row["wejscieWyjscie"]."</td><td>".$row["Stan"]."</td><td>".$row["Obszar"]."</td><td>".$row["Poziom"]."</td><td>".$row["Pomieszczenie"]."</td><td>".$row["Nazwa"]."</td><td>".$row["Funkcja"]."</td><td>".$row["DataGodzina"]."</td></tr>";
		}
		echo "</table>";
	}
	else{
		echo "0";
	}

	?>
	</div>
	<form class="form" action="" method="POST">
		<div class="btn-group">
			<button type="submit" class="btn">Wyłącz zraszacze</button>
			<button type="submit" class="btn">Włącz zraszacze</button>
		</div>
	</form>

	<!--OGRÓD: ZRASZACZE-->
	<div class="data">
		<h1>Alarm</h1>
		<table>
			<tr>
				<th>Nr</th>
				<th>Port</th>
				<th>Wejście/Wyjście</th>
				<th>Stan</th>
				<th>Obszar</th>
				<th>Poziom</th>
				<th>Pomieszczenie</th>
				<th>Nazwa</th>
				<th>Funkcja</th>
				<th>DataGodzina</th>
			</tr>


	<?php
	include 'connect.php';
	include 'deleteTableAlarm.php';
	include 'createTableAlarm.php';
	include 'addDataAlarm.php';
	

	$sql = "SELECT Nr, Port, wejscieWyjscie, Stan, Obszar, Poziom, Pomieszczenie, Nazwa, Funkcja, DataGodzina from alarm";
	$result = $conn-> query($sql);
	
	if($result-> num_rows > 0){
		while($row = $result-> fetch_assoc()){
			echo "<tr><td>".$row["Nr"]."</td><td>".$row["Port"]."</td><td>".$row["wejscieWyjscie"]."</td><td>".$row["Stan"]."</td><td>".$row["Obszar"]."</td><td>".$row["Poziom"]."</td><td>".$row["Pomieszczenie"]."</td><td>".$row["Nazwa"]."</td><td>".$row["Funkcja"]."</td><td>".$row["DataGodzina"]."</td></tr>";
		}
		echo "</table>";
	}
	else{
		echo "0";
	}

	?>
	</div>
	<form class="form" action="" method="POST">
		<div class="btn-group">
			<button type="submit" class="btn">Wyłącz alarm</button>
			<button type="submit" class="btn">Włącz alarm</button>
		</div>
	</form>


	
</body>

</html>

addTableSwiatlo.php

<?php

$createDataGarden= "CREATE TABLE IF NOT EXISTS ogrod(Nr INT NOT NULL AUTO_INCREMENT,
Port INT,
wejscieWyjscie VARCHAR(55),
Stan INT,
Obszar VARCHAR(55),
Poziom INT,
Pomieszczenie VARCHAR(55),
Nazwa VARCHAR(55),
Funkcja VARCHAR(55),
DataGodzina DATETIME,
PRIMARY KEY (Nr)
)";

mysqli_query($conn,$createDataGarden);

addDataSwiatlo.php



	<?php

	//losowa data
	$start = strtotime("2020-11-19 00:00:00");
	$end =  strtotime("2020-11-20 23:59:59");
	//zmienne
	$pomieszczenia = array('piwnica', 'pokoj', 'kuchnia','garaż','salon','łazienka1','ogród','pokój1','pokój2','łazienka2','garderoba');
	$poziomy = array(-1,0,0,0,0,0,0,1,1,1,1);
	$stan = array();
	$randomDate = array();

	//pętla przypisująca dane
	for($x=0; $x<=10; $x++){
		array_push($stan, rand(0,1));
		array_push($randomDate, date("Y-m-d H:i:s", rand($start, $end)));
		$sql[$x] = "INSERT INTO swiatlo (Port,wejscieWyjscie,Stan,Obszar,Poziom,Pomieszczenie,Nazwa,Funkcja,DataGodzina) VALUES (8080,'wyjście','$stan[$x]','dom','$poziomy[$x]','$pomieszczenia[$x]','dom','światło','$randomDate[$x]')";
		mysqli_query($conn,$sql[$x]);
	}
	
	





	
	

Z góry dzięki!!

komentarz 26 listopada 2020 przez Oscar Nałogowiec (29,290 p.)
edycja 26 listopada 2020 przez Oscar
Trochę dziwne podejście. Bardziej naturalnie byłoby przygotować symulator samego domu, a resztę aplikacji napisać "naprawdę". Symulacja domu powinna obrazować stan oświetlenia (np. rozjaśnione okna), także symulować wyłączniki ręczne, powinna też umożliwiać ustawianie temperatur w różnych pomieszczeniach i inne aspekty, którymi ma sterować ten system automatyki. Umożliwiałoby to np. takie scenariusze - z aplikacji webowej włączamy światło, chwilkę później na zobrazowaniu domu rozjaśnia się okno. W symulatorze wpisujemy temperaturę w jakimś pomieszczeniu - za chwilę taka wartość pojawia się na stronie. Normalny działający system automatyki domowej raczej nie korzysta z bazy danych, najwyżej z małej pamięci ustawień.
komentarz 28 listopada 2020 przez kielek123 Nowicjusz (150 p.)
W sumie nie taki zły pomysł, może działanie na samej bazie danych nie jest tu dobre. A w czym polecałbyś stworzenie takiego symulatora? Musiałaby być możliwość podczas np. zmiany w symulatorze, wyświetlenia tego na stronie i na odwrót: na stronie naciskam przycisk i symulator to odbiera (a na stronie wyświetla się komunikat o zmianie).
komentarz 29 listopada 2020 przez Oscar Nałogowiec (29,290 p.)
Ten symulator to bardzo prosty kod, fajnie było by gdyby realizował jakiś prawdziwy protokół sterowania. W sumie to można nawet wziąć jakiś większy domek dla lalek, wbudować mu oświetlenie LED i małym kontrolerem tym sterować. Oczywiście, jeśli symulator będzie tylko programem na komputerze musi mieć własny interfejs użytkownika, może (nawet będzie fajne) być graficzny. Można zobrazować jakiś budynek, ale można też działać na czymś w stylu schematu budynku. Język jest dowolny, to nie jest ani wielkie, ani wydajne, taki "bajer".
komentarz 29 listopada 2020 przez kielek123 Nowicjusz (150 p.)
To znaczy nie chodzi o zrobienie samej symulacji na stronie ze zmienianiem światła. Sterowanie też musi być, ale w takiej formie:

sterowniik - baza danych - strona internetowa

I sterownik muszę zastąpić programem, jakimś "symulatorem" może być napisanym przeze mnie. Chodzi o  to, żebym miał możliwość wprowadzenia zmian, zmiany zapisują się w bazie, a strona pobiera i aktualizuje i wyświetla. To samo w drugą stronę - wprowadzam przyciskiem sygnał wyłączenia światła, i w tym "symulatorze" musi być widać ę zmianę.

Nie mam pomysłu co może być tym symulatorem, jakiś pomysł?
komentarz 22 grudnia 2020 przez Michał Kazula Pasjonat (19,540 p.)

@kielek123,

AD 1

Zapoznaj się z narzędziem cron https://pl.wikipedia.org/wiki/Cron

AD 2

Ajax-em to pociśniesz :-)

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 376 wizyt
pytanie zadane 2 listopada 2016 w Urządzenia mobilne przez Sinnley Stary wyjadacz (12,810 p.)
+1 głos
0 odpowiedzi 594 wizyt
0 głosów
1 odpowiedź 509 wizyt
pytanie zadane 3 lutego 2018 w PHP przez mi-20 Stary wyjadacz (13,190 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...