css,js,ws

This commit is contained in:
Victor Alexandrovich Tsyrenschikov
2026-01-02 21:44:28 +05:00
parent 8a36155c20
commit 4609cbfb21
154 changed files with 22491 additions and 1226 deletions

0
app/__init__.py Normal file
View File

0
app/home/__init__.py Normal file
View File

3
app/home/admin.py Normal file
View File

@@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

6
app/home/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class HomeConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'home'

3
app/home/models.py Normal file
View File

@@ -0,0 +1,3 @@
from django.db import models
# Create your models here.

View File

@@ -0,0 +1,73 @@
{% load static %}
<div class="banner-area bg-cover" style="background-image: url(assets/img/shape-1.png);">
<div id="bootcarousel" class="carousel light-bg top-padding text-dark slide animate_text" data-ride="carousel">
<!-- Wrapper for slides -->
<div class="carousel-inner">
<div class="item active">
<div class="container">
<div class="row">
<div class="double-items">
<div class="col-md-7">
<div class="info">
<h2 data-animation="animated slideInLeft">Умный
<strong>Дом</strong></h2>
<ul data-animation="animated fadeInLeft">
<li>Безопасность</li>
<li>Техническая поддержка</li>
<li>Панель администратора</li>
<li>Адаптивный дизайн</li>
</ul>
<a data-animation="animated fadeInDown" class="btn circle btn-theme effect btn-md"
href="#">Learn more</a>
</div>
</div>
<div class="col-md-5">
<div class="thumb" data-animation="animated slideInRight">
<img src="{% static 'file/home/img/illustrations/2.svg' %}" alt="Thumb">
</div>
</div>
</div>
</div>
</div>
</div>
<div class="item">
<div class="container">
<div class="row">
<div class="double-items">
<div class="col-md-7">
<div class="info">
<h2 data-animation="animated slideInLeft">We're offering <strong>Standard</strong>
services</h2>
<ul data-animation="animated fadeInLeft">
<li>Full Security</li>
<li>Team Collaboration</li>
<li>Poweful admin panel</li>
<li>Create and design responsive</li>
</ul>
<a data-animation="animated fadeInDown" class="btn circle btn-theme effect btn-md"
href="#">Learn more</a>
</div>
</div>
<div class="col-md-5">
<div class="thumb" data-animation="animated slideInRight">
<img src="{% static 'file/home/img/illustrations/1.svg' %}" alt="Thumb">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- End Wrapper for slides -->
<!-- Left and right controls -->
<a class="left carousel-control theme" href="#bootcarousel" data-slide="prev">
<i class="fa fa-angle-left"></i>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control theme" href="#bootcarousel" data-slide="next">
<i class="fa fa-angle-right"></i>
<span class="sr-only">Next</span>
</a>
</div>
</div>

View File

@@ -0,0 +1,13 @@
<!DOCTYPE html>
{% load static %}
<html lang="ru"
class="light-style layout-menu-fixed layout-compact"
data-theme="theme-default"
data-assets-path="{% static 'assets' %}"
data-template="vertical-menu-template-free">
<head>
{% include 'home/base/head.html' %}
</head>
{% block content %}
{% endblock %}
</html>

View File

@@ -0,0 +1,127 @@
{% load static %}
<footer>
<div class="svg-shape">
<svg xmlns="http://www.w3.org/2000/svg" class="gray" preserveAspectRatio="none" viewBox="0 0 1070 52">
<path d="M0,0S247,91,505,32c261.17-59.72,565-13,565-13V0Z"></path>
</svg>
</div>
<div class="container">
<div class="f-items default-padding">
<div class="row">
<div class="col-md-4 col-sm-6 equal-height item">
<div class="f-item about">
<img src="assets/img/logo.png" alt="Logo">
<p>
Celebrated conviction stimulated principles day. Sure fail or in said west. Right my front
it wound cause fully am sorry if. She jointure goodness interest debating did outweigh.
</p>
<h5>Stay Update With Us</h5>
<form action="#">
<div class="input-group stylish-input-group">
<input type="email" placeholder="Enter your e-mail here" class="form-control"
name="email">
<span class="input-group-addon">
<button type="submit">
<i class="fa fa-paper-plane"></i>
</button>
</span>
</div>
</form>
</div>
</div>
<div class="col-md-2 col-sm-6 equal-height item">
<div class="f-item link">
<h4>Company</h4>
<ul>
<li>
<a href="#">Home</a>
</li>
<li>
<a href="#">About us</a>
</li>
<li>
<a href="#">Compnay History</a>
</li>
<li>
<a href="#">Features</a>
</li>
<li>
<a href="#">Blog Page</a>
</li>
</ul>
</div>
</div>
<div class="col-md-2 col-sm-6 equal-height item">
<div class="f-item link">
<h4>Resources</h4>
<ul>
<li>
<a href="#">Career</a>
</li>
<li>
<a href="#">Leadership</a>
</li>
<li>
<a href="#">Strategy</a>
</li>
<li>
<a href="#">Services</a>
</li>
<li>
<a href="#">History</a>
</li>
</ul>
</div>
</div>
<div class="col-md-4 col-sm-6 equal-height item">
<div class="f-item twitter-widget">
<h4>Contact Info</h4>
<p>
Possible offering at contempt mr distance stronger an. Attachment excellence announcing
</p>
<div class="address">
<ul>
<li>
<div class="info">
<h5>Email:</h5>
<span>support@validtheme.com</span>
</div>
</li>
<li>
<div class="info">
<h5>Phone:</h5>
<span>+44-20-7328-4499</span>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Start Footer Bottom -->
<div class="footer-bottom bg-light">
<div class="container">
<div class="row">
<div class="col-md-6">
<p>&copy; Copyright 2020. All Rights Reserved by <a href="#">validthemes</a></p>
</div>
<div class="col-md-6 text-right link">
<ul>
<li>
<a href="#">Terms</a>
</li>
<li>
<a href="#">Privacy</a>
</li>
<li>
<a href="#">Support</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<!-- End Footer Bottom -->
</footer>

View File

@@ -0,0 +1,43 @@
{% load static %}
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <!--metatextblock--> <title>Умный дом под
ключ | Заказать системы умного дома: расчет, установка и подключение оборудования, готовые
комплекты</title>
<meta name="description"
content="Умный дом под ключ по всей России с гарантией. Заказать систему умный дом от проектирования и расчета стоимости до подключения и установки оборудования и готовых комплектов умного дома.">
<meta name="keywords" content="умный дом">
<meta property="og:url" content="http://miroca.ru">
<meta property="og:title" content="Miroca">
<meta property="og:description"
content="Установка системы умный дом по всей России. От проектирования до монтажа и обслуживания. Рассчитайте свой проект.">
<meta property="og:type" content="website">
<link rel="canonical" href="https://miroca.ru/"> <!--/metatextblock-->
<meta name="format-detection" content="telephone=no">
<meta http-equiv="x-dns-prefetch-control" content="on">
<link rel="shortcut icon" href="{% static 'file/home/img/favicon.ico' %}" type="image/x-icon">
<!-- ========== Start Stylesheet ========== -->
<link href="{% static 'file/home/css/bootstrap.min.css' %}" rel="stylesheet" />
<link href="{% static 'file/home/css/font-awesome.min.css' %}" rel="stylesheet" />
<link href="{% static 'file/home/css/themify-icons.css' %}" rel="stylesheet" />
<link href="{% static 'file/home/css/flaticon-set.css' %}" rel="stylesheet" />
<link href="{% static 'file/home/css/magnific-popup.css' %}" rel="stylesheet" />
<link href="{% static 'file/home/css/owl.carousel.min.css' %}" rel="stylesheet" />
<link href="{% static 'file/home/css/owl.theme.default.min.css' %}" rel="stylesheet" />
<link href="{% static 'file/home/css/animate.css' %}" rel="stylesheet" />
<link href="{% static 'file/home/css/bootsnav.css' %}" rel="stylesheet" />
<link href="{% static 'file/home/css/style.css' %}" rel="stylesheet">
<link href="{% static 'file/home/css/responsive.css' %}" rel="stylesheet" />
<!-- ========== End Stylesheet ========== -->
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="{% static 'file/js/html5/html5shiv.min.js' %}"></script>
<script src="{% static 'file/js/html5/respond.min.js' %}"></script>
<![endif]-->
<!-- ========== Google Fonts ========== -->
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Poppins:400,500,600,700,800" rel="stylesheet">

View File

@@ -0,0 +1,57 @@
{% load static %}
<header id="home">
<!-- Start Navigation -->
<nav class="navbar navbar-default active-bg inc-border navbar-fixed dark no-background bootsnav">
<div class="container-full">
<!-- Start Atribute Navigation -->
<div class="attr-nav button fixed-nav">
<ul>
<li>
<a href="#">Вход</a>
</li>
<li>
<a href="#">Регистрация</a>
</li>
</ul>
</div>
<!-- End Atribute Navigation -->
<!-- Start Header Navigation -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-menu">
<i class="fa fa-bars"></i>
</button>
<a class="navbar-brand" href="/">
<img src="{% static 'file/home/img/miroca.png' %}" class="logo" alt="Logo">
</a>
</div>
<!-- End Header Navigation -->
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="navbar-menu">
<ul class="nav navbar-nav navbar-right" data-in="#" data-out="#">
<li class="dropdown active dropdown-right">
<a href="#home">Главная</a>
</li>
<li>
<a class="smooth-menu" href="#services">Сервис</a>
</li>
<li>
<a class="smooth-menu" href="#overview">Обзор</a>
</li>
<li>
<a class="smooth-menu" href="#pricing">Прайс</a>
</li>
<li>
<a class="smooth-menu" href="#contact">Контакты</a>
</li>
</ul>
</div><!-- /.navbar-collapse -->
</div>
</nav>
<!-- End Navigation -->
</header>

View File

@@ -0,0 +1,811 @@
{% extends 'home/base/base.html' %}
{% load static %}
{% block content%}
<!-- Preloader Start -->
<div class="se-pre-con"></div>
<!-- Preloader Ends -->
<!-- Header
============================================= -->
{% include 'home/base/header.html' %}
<!-- End Header -->
<!-- Start Banner
============================================= -->
{% include 'home/base/banner.html' %}
<!-- End Banner -->
<!-- Start Our feature
============================================= -->
<div id="features" class="features-area bg-gray shape default-padding">
<div class="container">
<div class="row">
<!-- Start Features Content -->
<div class="features-content">
<div class="col-md-5 thumb">
<img src="assets/img/illustrations/9.svg" alt="Thumb">
</div>
<div class="col-md-7 info">
<div class="info-items">
<div class="features">
<div class="row">
<!-- Left Grid -->
<div class="col-md-6 col-sm-6 equal-height">
<div class="item">
<i class="flaticon-dashboard"></i>
<p>
situation perpetual allowance offending as principle satisfied. Improved
carriage securing.
</p>
<h4>Monitoring</h4>
</div>
<div class="item">
<i class="flaticon-question"></i>
<p>
Fortune account written prepare invited no passage. Garrets use ten you the
weather ferrars.
</p>
<h4>Support Chat</h4>
</div>
</div>
<!-- End Left Grid -->
<!-- Right Grid -->
<div class="col-md-6 col-sm-6 equal-height">
<div class="item">
<i class="flaticon-analysis"></i>
<p>
Offending delivered questions met. Acceptance she interested new boisterous
discretion celebrated.
</p>
<h4>System Analysis</h4>
</div>
<div class="item">
<i class="flaticon-rocket"></i>
<p>
Jennings dashwood to quitting marriage bachelor in. On as conviction in of
appearance.
</p>
<h4>First Run</h4>
</div>
</div>
<!-- End Right Grid -->
</div>
</div>
</div>
</div>
</div>
<!-- End Features Content -->
</div>
</div>
</div>
<!-- End Our Features -->
<!-- Start Our About
============================================= -->
<div id="about" class="about-area half-bg default-padding">
<div class="container">
<div class="row">
<!-- Start About Content -->
<div class="about-content">
<div class="col-md-12 info">
<div class="content-info">
<div class="row">
<div class="col-md-6 left-info text-light">
<h4>Our Story</h4>
<h2>We're knowledgeable about making benefits higher</h2>
<p>
Change wholly say why eldest period. Are projection put celebrated particular
unreserved joy unsatiable its. In then dare good am rose bred or. On am in nearer
square wanted.
</p>
<a class="popup-youtube light video-play-button relative"
href="https://www.youtube.com/watch?v=owhuBrGIOsE">
<i class="fa fa-play"></i>
</a>
</div>
<div class="col-md-6 right-info">
<p>
Fully begin on by wound an. Girl rich in do up or both. At declared in as rejoiced
of together. He impression collecting delightful unpleasant by prosperous as on. End
too talent she object mrs wanted remove giving.
</p>
<p>
In on announcing if of comparison pianoforte projection. Maids hoped gay yet bed
asked blind dried point. On abroad danger likely regret twenty edward do. Too
horrible consider followed may differed age. An rest if more five mr of. Age just
her rank met down way. unaffected partiality indulgence dispatched to of celebrated
remarkably. Unfeeling are had allowance own perceived abilities.
</p>
<a class="btn circle btn-theme border btn-md" href="#">Learn more</a>
</div>
</div>
</div>
</div>
</div>
<!-- End About -->
</div>
</div>
</div>
<!-- End Our About -->
<!-- Start Services Area
============================================= -->
<div id="services" class="services-area half-bg default-padding-top bottom-less">
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="site-heading text-center">
<h4>What we offer</h4>
<h2>Our <strong>Services</strong></h2>
<p>
Described questions for recommend advantage belonging estimable had. Pianoforte reasonable as so
am inhabiting. Chatty design remark and his abroad figure but its.
</p>
</div>
</div>
</div>
<div class="services-items text-center">
<div class="row">
<!-- Single Item -->
<div class="col-md-4 equal-height">
<div class="item">
<h4>Project creation</h4>
<div class="icon">
<i class="flaticon-architect"></i>
</div>
<p>
Intention defective at convinced. Led income months itself and houses you. After nor you
leave might share court balls.
</p>
<a href="#"><i class="fas fa-angle-right"></i> Learn more</a>
</div>
</div>
<!-- End Single Item -->
<!-- Single Item -->
<div class="col-md-4 equal-height">
<div class="item">
<h4>Software Development</h4>
<div class="icon">
<i class="flaticon-software"></i>
</div>
<p>
Intention defective at convinced. Led income months itself and houses you. After nor you
leave might share court balls.
</p>
<a href="#"><i class="fas fa-angle-right"></i> Learn more</a>
</div>
</div>
<!-- End Single Item -->
<!-- Single Item -->
<div class="col-md-4 equal-height">
<div class="item">
<h4>Porject Management</h4>
<div class="icon">
<i class="flaticon-testing"></i>
</div>
<p>
Intention defective at convinced. Led income months itself and houses you. After nor you
leave might share court balls.
</p>
<a href="#"><i class="fas fa-angle-right"></i> Learn more</a>
</div>
</div>
<!-- End Single Item -->
</div>
</div>
</div>
</div>
<!-- End Services Area -->
<!-- Start Work Process Area
============================================= -->
<div id="overview" class="process-area default-padding">
<div class="container">
<div class="row">
<div class="col-md-6 thumb">
<img src="assets/img/illustrations/5.svg" alt="Thumb">
</div>
<div class="col-md-6 info">
<h4>How it works</h4>
<h2>Designed for startups with expert developer</h2>
<!-- Tab Nav -->
<div class="tab-navigation text-center">
<ul class="nav nav-pills">
<li class="active">
<a data-toggle="tab" href="#tab1" aria-expanded="true">
Optimization
</a>
</li>
<li>
<a data-toggle="tab" href="#tab2" aria-expanded="false">
Integration
</a>
</li>
<li>
<a data-toggle="tab" href="#tab3" aria-expanded="false">
Performance
</a>
</li>
</ul>
</div>
<!-- End Tab Nav -->
<!-- Start Tab Content -->
<div class="tab-content">
<!-- Start Single Item -->
<div id="tab1" class="tab-pane fade active in">
<div class="info">
<p>
Celebrated conviction stimulated principles day. Sure fail or in said west. Right my
front it wound cause fully am sorry if. She jointure goodness interest debating did
outweigh. Is time from them.
</p>
<ul>
<li>
<h5>Amazingly Simple Use</h5>
Certainty arranging am smallness by conveying
</li>
<li>
<h5>Clear Documentation</h5>
Frankness pronounce daughters remainder extensive
</li>
<li>
<h5>Flexible user interface</h5>
Outward general passage another as it. Very his are come man walk one next.
Delighted prevailed supported
</li>
</ul>
</div>
</div>
<!-- End Single Item -->
<!-- Start Single Item -->
<div id="tab2" class="tab-pane fade">
<div class="info">
<p>
Consulted or acuteness dejection an smallness if. Outward general passage another as it.
Very his are come man walk one next. partiality affronting unpleasant why add. Esteem
garden men yet shy course Consulted.
</p>
<ul>
<li>
<h5>Amazingly Simple Use</h5>
Certainty arranging am smallness by conveying
</li>
<li>
<h5>Clear Documentation</h5>
Frankness pronounce daughters remainder extensive
</li>
<li>
<h5>Flexible user interface</h5>
Outward general passage another as it. Very his are come man walk one next.
Delighted prevailed supported
</li>
</ul>
</div>
</div>
<!-- End Single Item -->
<!-- Start Single Item -->
<div id="tab3" class="tab-pane fade">
<div class="info">
<p>
Celebrated conviction stimulated principles day. Sure fail or in said west. Right my
front it wound cause fully am sorry if. She jointure goodness interest debating did
outweigh. Is time from them.
</p>
<ul>
<li>
<h5>Amazingly Simple Use</h5>
Certainty arranging am smallness by conveying
</li>
<li>
<h5>Clear Documentation</h5>
Frankness pronounce daughters remainder extensive
</li>
<li>
<h5>Flexible user interface</h5>
Outward general passage another as it. Very his are come man walk one next.
Delighted prevailed supported
</li>
</ul>
</div>
</div>
<!-- End Single Item -->
</div>
<!-- End Tab Content -->
</div>
</div>
</div>
</div>
<!-- End Work Process Area -->
<!-- Start Pricing Area
============================================= -->
<div id="pricing" class="pricing-area bg-gray shape default-padding-top">
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="site-heading text-center">
<h4>Pricing Plan</h4>
<h2>Our <strong>Pricing</strong></h2>
<p>
Described questions for recommend advantage belonging estimable had. Pianoforte reasonable as so
am inhabiting. Chatty design remark and his abroad figure but its.
</p>
</div>
</div>
</div>
<div class="row">
<div class="pricing pricing-simple text-center">
<div class="col-md-12 pricing-items">
<div class="col-md-4 single-item">
<div class="pricing-item">
<ul>
<li class="pricing-header">
<i class="flaticon-start"></i>
<h4>Trial Version</h4>
</li>
<li class="price">
<h2>Free</h2>
</li>
<li>Demo file <span data-toggle="tooltip" data-placement="top" title=""
data-original-title="Available on pro version"><i
class="fas fa-info-circle"></i></span></li>
<li>Update</li>
<li>File compressed</li>
<li>Commercial use</li>
<li>Support <span data-toggle="tooltip" data-placement="top" title=""
data-original-title="Available on pro version"><i
class="fas fa-info-circle"></i></span></li>
<li>2 database</li>
<li>Documetation <span data-toggle="tooltip" data-placement="top" title=""
data-original-title="Available on pro version"><i
class="fas fa-info-circle"></i></span></li>
<li class="footer">
<a class="btn btn-dark border btn-sm" href="#">Try for free</a>
</li>
</ul>
</div>
</div>
<div class="col-md-4 single-item">
<div class="pricing-item active">
<ul>
<li class="pricing-header">
<i class="flaticon-quality-badge"></i>
<h4>Regular</h4>
</li>
<li class="price">
<h2><sup>$</sup>29 <sub>/ Mo</sub></h2>
</li>
<li>Demo file</li>
<li>Update <span data-toggle="tooltip" data-placement="top" title=""
data-original-title="Only for extended licence"><i
class="fas fa-info-circle"></i></span></li>
<li>File compressed</li>
<li>Commercial use</li>
<li>Support <span data-toggle="tooltip" data-placement="top" title=""
data-original-title="Only for extended licence"><i
class="fas fa-info-circle"></i></span></li>
<li>5 database</li>
<li>Documetation</li>
<li class="footer">
<a class="btn btn-theme effect btn-sm" href="#">Get Started</a>
</li>
</ul>
</div>
</div>
<div class="col-md-4 single-item">
<div class="pricing-item">
<ul>
<li class="pricing-header">
<i class="flaticon-value"></i>
<h4>Extended</h4>
</li>
<li class="price">
<h2><sup>$</sup>59 <sub>/ Mo</sub></h2>
</li>
<li>Demo file</li>
<li>Update</li>
<li>File compressed</li>
<li>Commercial use</li>
<li>Support</li>
<li>8 database</li>
<li>Documetation</li>
<li class="footer">
<a class="btn btn-dark border btn-sm" href="#">Get Started</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- End Pricing Area -->
<!-- Start Team Area
============================================= -->
<div id="team" class="team-area shape default-padding bottom-less">
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="site-heading text-center">
<h4>Meet our experts</h4>
<h2>Team <strong>Members</strong></h2>
<p>
Described questions for recommend advantage belonging estimable had. Pianoforte reasonable as so
am inhabiting. Chatty design remark and his abroad figure but its.
</p>
</div>
</div>
</div>
<div class="row">
<div class="team-items text-center">
<!-- Single Item -->
<div class="col-md-4 single-item">
<div class="item">
<div class="thumb">
<img src="assets/img/800x800.png" alt="Thumb">
<div class="social">
<ul>
<li class="facebook">
<a href="#"><i class="fab fa-facebook-f"></i></a>
</li>
<li class="twitter">
<a href="#"><i class="fab fa-twitter"></i></a>
</li>
<li class="instagram">
<a href="#"><i class="fab fa-instagram"></i></a>
</li>
<li class="linkedin">
<a href="#"><i class="fab fa-linkedin-in"></i></a>
</li>
</ul>
</div>
</div>
<div class="info">
<h4>Jessica Jones</h4>
<span>Sales & Marketing</span>
<p>
Required honoured trifling eat pleasure man relation. Assurance yet bed was improving
furniture Distrusts delighted
</p>
</div>
</div>
</div>
<!-- End Single Item -->
<!-- Single Item -->
<div class="col-md-4 single-item">
<div class="item">
<div class="thumb">
<img src="assets/img/800x800.png" alt="Thumb">
<div class="social">
<ul>
<li class="facebook">
<a href="#"><i class="fab fa-facebook-f"></i></a>
</li>
<li class="twitter">
<a href="#"><i class="fab fa-twitter"></i></a>
</li>
<li class="instagram">
<a href="#"><i class="fab fa-instagram"></i></a>
</li>
<li class="linkedin">
<a href="#"><i class="fab fa-linkedin-in"></i></a>
</li>
</ul>
</div>
</div>
<div class="info">
<h4>Amir Bubhan</h4>
<span>Data Scientist</span>
<p>
Required honoured trifling eat pleasure man relation. Assurance yet bed was improving
furniture Distrusts delighted
</p>
</div>
</div>
</div>
<!-- End Single Item -->
<!-- Single Item -->
<div class="col-md-4 single-item">
<div class="item">
<div class="thumb">
<img src="assets/img/800x800.png" alt="Thumb">
<div class="social">
<ul>
<li class="facebook">
<a href="#"><i class="fab fa-facebook-f"></i></a>
</li>
<li class="twitter">
<a href="#"><i class="fab fa-twitter"></i></a>
</li>
<li class="instagram">
<a href="#"><i class="fab fa-instagram"></i></a>
</li>
<li class="linkedin">
<a href="#"><i class="fab fa-linkedin-in"></i></a>
</li>
</ul>
</div>
</div>
<div class="info">
<h4>Ahel Natasha</h4>
<span>Chairman</span>
<p>
Required honoured trifling eat pleasure man relation. Assurance yet bed was improving
furniture Distrusts delighted
</p>
</div>
</div>
</div>
<!-- End Single Item -->
</div>
</div>
</div>
</div>
<!-- End Team Area -->
<!-- Start Testimonials Area
============================================= -->
<div class="testimonials-area default-padding bg-dark text-light">
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="site-heading text-center">
<h4>What people says</h4>
<h2>Customer <strong>Review</strong></h2>
</div>
</div>
</div>
<div class="col-md-8 col-md-offset-2">
<div class="row">
<div class="testimonial-items testimonial-carousel owl-carousel owl-theme">
<!-- Single Item -->
<div class="item">
<div class="col-md-5 thumb">
<img src="assets/img/800x800.png" alt="Thumb">
</div>
<div class="col-md-7 info">
<i class="ti-quote-left"></i>
<h4>Jessica Jones</h4>
<span>Market researcher</span>
<p>
Music leave say doors him. Tore bred form if sigh case as do. Staying he no looking if
do opinion. Sentiments way understood end partiality and his.
</p>
</div>
</div>
<!-- End Single Item -->
<!-- Single Item -->
<div class="item">
<div class="col-md-5 thumb">
<img src="assets/img/800x800.png" alt="Thumb">
</div>
<div class="col-md-7 info">
<i class="ti-quote-left"></i>
<h4>Jessica Jones</h4>
<span>Market researcher</span>
<p>
Music leave say doors him. Tore bred form if sigh case as do. Staying he no looking if
do opinion. Sentiments way understood end partiality and his.
</p>
</div>
</div>
<!-- End Single Item -->
</div>
</div>
</div>
</div>
</div>
<!-- End Testimonials Area -->
<!-- Start Contact Area
============================================= -->
<div id="contact" class="contact-area default-padding">
<div class="container">
<div class="contact-items">
<div class="row">
<div class="col-md-6 faq">
<div class="heading">
<h2>Answer & Questions</h2>
</div>
<div class="acd-items acd-arrow">
<div class="panel-group symb" id="accordion">
<!-- Single Item -->
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#ac1">
<strong>01</strong> Do I need a business plan?
</a>
</h4>
</div>
<div id="ac1" class="panel-collapse collapse in">
<div class="panel-body">
<p>
Removing welcomed civility or hastened is. Justice elderly but perhaps
expense six her are another passage. Full her ten open fond walk not
down.For request general express unknown are. Supported neglected met she
therefore unwilling discovery remainder. Way sentiments two indulgence
uncommonly own.
</p>
</div>
</div>
</div>
<!-- End Single Item -->
<!-- Single Item -->
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#ac2">
<strong>02</strong> How long should a business plan be?
</a>
</h4>
</div>
<div id="ac2" class="panel-collapse collapse">
<div class="panel-body">
<p>
Removing welcomed civility or hastened is. Justice elderly but perhaps
expense six her are another passage. Full her ten open fond walk not
down.For request general express unknown are. Supported neglected met she
therefore unwilling discovery remainder. Way sentiments two indulgence
uncommonly own.
</p>
</div>
</div>
</div>
<!-- End Single Item -->
<!-- Single Item -->
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#ac4">
<strong>03</strong> Where do I start?
</a>
</h4>
</div>
<div id="ac4" class="panel-collapse collapse">
<div class="panel-body">
<p>
Removing welcomed civility or hastened is. Justice elderly but perhaps
expense six her are another passage. Full her ten open fond walk not
down.For request general express unknown are. Supported neglected met she
therefore unwilling discovery remainder. Way sentiments two indulgence
uncommonly own.
</p>
</div>
</div>
</div>
<!-- Single Item -->
</div>
</div>
<!-- End Faq -->
<a class="btn btn-theme effect btn-sm" href="#">more questions ?</a>
</div>
<div class="col-md-6 contact-forms">
<div class="form-items bg-cover shadow dark-hard text-light"
style="background-image: url(assets/img/2440x1578.png);">
<h2>Do You Have Any <strong>Questions?</strong></h2>
<form action="assets/mail/contact.php" method="POST" class="contact-form">
<div class="col-md-12">
<div class="row">
<div class="form-group">
<input class="form-control" id="name" name="name" placeholder="Name"
type="text">
<span class="alert-error"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<input class="form-control" id="email" name="email" placeholder="Email*"
type="email">
<span class="alert-error"></span>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<input class="form-control" id="phone" name="phone" placeholder="Phone"
type="text">
<span class="alert-error"></span>
</div>
</div>
</div>
<div class="col-md-12">
<div class="row">
<div class="form-group comments">
<textarea class="form-control" id="comments" name="comments"
placeholder="Tell Us About Project *"></textarea>
</div>
</div>
</div>
<div class="col-md-12">
<div class="row">
<button type="submit" name="submit" id="submit">
Send Message
</button>
</div>
</div>
<!-- Alert Message -->
<div class="col-md-12 alert-notification">
<div id="message" class="alert-msg"></div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- End Contact Area -->
<!-- Start Companies Area
============================================= -->
<div class="companies-area bg-gray text-center default-padding">
<div class="container">
<div class="companies-items">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="heading">
<h4>We're thrusted by</h4>
<h2><strong>12k+</strong> Customer</h2>
<p>
Perceive screened throwing met not eat distance. Viewing hastily or written dearest elderly
up weather it as. So direction so sweetness or extremity at daughters. Provided put unpacked
now but bringing.
</p>
</div>
<div class="item-list companies-carousel owl-carousel owl-theme">
<div class="item">
<img src="assets/img/150x80.png" alt="Thumb">
</div>
<div class="item">
<img src="assets/img/150x80.png" alt="Thumb">
</div>
<div class="item">
<img src="assets/img/150x80.png" alt="Thumb">
</div>
<div class="item">
<img src="assets/img/150x80.png" alt="Thumb">
</div>
<div class="item">
<img src="assets/img/150x80.png" alt="Thumb">
</div>
<div class="item">
<img src="assets/img/150x80.png" alt="Thumb">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- End Companies Area -->
<!-- Start Footer
============================================= -->
{% include 'home/base/footer.html' %}
<!-- End Footer -->
<!-- jQuery Frameworks
============================================= -->
{% include 'home/jquery/jguery.html' %}
{% endblock content %}

View File

@@ -0,0 +1,18 @@
{% load static %}
<script src="{% static 'file/home/js/jquery-1.12.4.min.js' %}"></script>
<script src="{% static 'file/home/js/bootstrap.min.js' %}"></script>
<script src="{% static 'file/home/js/equal-height.min.js' %}"></script>
<script src="{% static 'file/home/js/jquery.appear.js' %}"></script>
<script src="{% static 'file/home/js/jquery.easing.min.js' %}"></script>
<script src="{% static 'file/home/js/jquery.magnific-popup.min.js' %}"></script>
<script src="{% static 'file/home/js/modernizr.custom.13711.js' %}"></script>
<script src="{% static 'file/home/js/owl.carousel.min.js' %}"></script>
<script src="{% static 'file/home/js/wow.min.js' %}"></script>
<script src="{% static 'file/home/js/progress-bar.min.js' %}"></script>
<script src="{% static 'file/home/js/isotope.pkgd.min.js' %}"></script>
<script src="{% static 'file/home/js/imagesloaded.pkgd.min.js' %}"></script>
<script src="{% static 'file/home/js/count-to.js' %}"></script>
<script src="{% static 'file/home/js/YTPlayer.min.js' %}"></script>
<script src="{% static 'file/home/js/circle-progress.js' %}"></script>
<script src="{% static 'file/home/js/bootsnav.js' %}"></script>
<script src="{% static 'file/home/js/main.js' %}"></script>

3
app/home/tests.py Normal file
View File

@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

6
app/home/urls.py Normal file
View File

@@ -0,0 +1,6 @@
from django.urls import path
from .import views
urlpatterns = [
path('', views.home, name='home'),
]

5
app/home/views.py Normal file
View File

@@ -0,0 +1,5 @@
from django.shortcuts import render
# Create your views here.
def home(request):
return render(request, 'home/content/index.html',)

22
app/manage.py Normal file
View File

@@ -0,0 +1,22 @@
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'miroca.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()

0
app/miroca/__init__.py Normal file
View File

16
app/miroca/asgi.py Normal file
View File

@@ -0,0 +1,16 @@
"""
ASGI config for miroca project.
It exposes the ASGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/6.0/howto/deployment/asgi/
"""
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'miroca.settings')
application = get_asgi_application()

135
app/miroca/settings.py Normal file
View File

@@ -0,0 +1,135 @@
"""
Django settings for miroca project.
Generated by 'django-admin startproject' using Django 6.0.
For more information on this file, see
https://docs.djangoproject.com/en/6.0/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/6.0/ref/settings/
"""
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/6.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-wk$33v@xp^n&mg1^#=h+_1ekmoeewyub5cyk_w62ocpp8-7rj@'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = ['miroca.ru']
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'upanel.apps.UpanelConfig',
'home.apps.HomeConfig',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'miroca.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'miroca.wsgi.application'
# Database
# https://docs.djangoproject.com/en/6.0/ref/settings/#databases
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
# }
# }
# Password validation
# https://docs.djangoproject.com/en/6.0/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/6.0/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/6.0/howto/static-files/
STATIC_URL = 'static/'
STATIC_ROOT = '/home/c76533/miroca.ru/www/static'
MEDIA_URL = '/media/'
MEDIA_ROOT = '/home/c76533/miroca.ru/www/media'
# database settings
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'HOST': 'postgres.c76533.h2',
'PORT': '5432',
'NAME': 'c76533_miroca_ru',
'USER': 'c76533_miroca_ru',
'PASSWORD': 'FeJhiKotdinuv65',
},
}

23
app/miroca/urls.py Normal file
View File

@@ -0,0 +1,23 @@
"""
URL configuration for miroca project.
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/6.0/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('home.urls')),
]

16
app/miroca/wsgi.py Normal file
View File

@@ -0,0 +1,16 @@
"""
WSGI config for miroca project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/6.0/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'miroca.settings')
application = get_wsgi_application()

0
app/upanel/__init__.py Normal file
View File

0
app/upanel/admin.py Normal file
View File

6
app/upanel/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class UpanelConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'upanel'

9
app/upanel/logout.py Normal file
View File

@@ -0,0 +1,9 @@
from django.shortcuts import render, redirect
def logout_view(func):
def wrapper(request):
if request.method == 'POST':
request.session.clear()
return redirect ('login')
return func(request)
return wrapper

View File

@@ -0,0 +1,57 @@
# Generated by Django 5.1.3 on 2024-11-29 06:20
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Device',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('device_id', models.CharField(db_index=True, max_length=200, verbose_name='Id устройства')),
('name', models.TextField(max_length=300, null=True, verbose_name='Имя')),
('device_ip', models.CharField(db_index=True, max_length=200, null=True, verbose_name='IP адрес')),
('local_key', models.TextField(db_index=True, max_length=200, null=True, verbose_name='Ключ устройства')),
('device_version', models.FloatField(blank=True, null=True, verbose_name='Версия устройства')),
('on_off', models.BooleanField(null=True, verbose_name='Вкл')),
],
options={
'verbose_name': 'Устройство',
'verbose_name_plural': 'Устройства',
'ordering': ['device_id'],
},
),
migrations.CreateModel(
name='Hostname',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(blank=True, max_length=255, null=True)),
('area', models.CharField(blank=True, max_length=255, null=True, verbose_name='Зона температуры')),
],
options={
'verbose_name': 'Зона температуры',
'verbose_name_plural': 'Зона температуры',
'ordering': ['name'],
},
),
migrations.CreateModel(
name='Month',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(db_index=True, max_length=200, verbose_name='Месяц')),
('temp', models.JSONField(blank=True, default=list, null=True, verbose_name='Список температур')),
],
options={
'verbose_name': 'Месяц года',
'verbose_name_plural': 'Месяц года',
'ordering': ['name'],
},
),
]

View File

@@ -0,0 +1,21 @@
# Generated by Django 5.1.3 on 2024-11-30 14:32
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('upanel', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AddField(
model_name='device',
name='customuser',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Пользователь'),
),
]

View File

@@ -0,0 +1,21 @@
# Generated by Django 5.1.3 on 2024-11-30 15:03
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('upanel', '0002_device_customuser'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AddField(
model_name='hostname',
name='customuser',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Пользователь'),
),
]

View File

47
app/upanel/models.py Normal file
View File

@@ -0,0 +1,47 @@
from django.db import models
from django.db.models.deletion import CASCADE
from django.db.models.fields.related import ForeignKey
class Hostname(models.Model):
customuser = ForeignKey('auth_miroca.CustomUser', null=True, blank=True, on_delete=CASCADE, related_name='+', verbose_name='Пользователь')
name = models.CharField(max_length=255, null=True, blank=True)
area = models.CharField(max_length=255, null=True, blank=True, verbose_name='Зона температуры')
class Meta:
ordering = ['name']
verbose_name = 'Зона температуры'
verbose_name_plural = 'Зона температуры'
def __str__(self):
return self.name
class Month(models.Model):
name = models.CharField(max_length=200, db_index=True,verbose_name='Месяц')
temp = models.JSONField(default=list, null=True, blank=True, verbose_name='Список температур')
class Meta:
ordering = ['name']
verbose_name = 'Месяц года'
verbose_name_plural = 'Месяц года'
def __str__(self):
return self.name
class Device(models.Model):
customuser = ForeignKey('auth_miroca.CustomUser', null=True, blank=True, on_delete=CASCADE, related_name='+', verbose_name='Пользователь')
device_id=models.CharField(max_length=200,db_index=True,verbose_name='Id устройства')
name =models.TextField(max_length=300,null=True,verbose_name='Имя')
device_ip=models.CharField(max_length=200,db_index=True,null=True,verbose_name='IP адрес')
local_key=models.TextField(max_length=200,db_index=True,null=True,verbose_name='Ключ устройства')
device_version=models.FloatField(blank=True,null=True,verbose_name='Версия устройства')
on_off = models.BooleanField(null=True, verbose_name='Вкл')
class Meta:
ordering = ['device_id']
verbose_name = 'Устройство'
verbose_name_plural = 'Устройства'
def __str__(self):
return self.device_id

View File

@@ -0,0 +1,64 @@
<!DOCTYPE html>
<html lang="ru">
{% load static %}
<head>
<meta charset="UTF-8">
<title>Система Miroca</title>
<link rel="icon" type="image/x-icon" href="{% static 'file/login/img/miroca.svg' %}">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700" rel="stylesheet">
<link rel="stylesheet" href="{% static 'file/login/css/style.css' %}">
</head>
<body>
<body class="align">
<div class="grid">
<form method="post" class="form login">
{% csrf_token %}
<div class="miroca">
<img src="{% static 'file/login/img/miroca192.png' %}">
</div>
<div class="form__field">
<label for="login__username">
<svg class="icon">
<use xlink:href="#icon-user"></use>
</svg>
<span class="hidden">Имя</span></label>
<input autocomplete="username" id="login__username" type="text" name="username" class="form__input"
placeholder="Имя" required>
</div>
<div class="form__field">
<label for="login__password">
<svg class="icon">
<use xlink:href="#icon-lock"></use>
</svg>
<span class="hidden">Пароль</span></label>
<input id="login__password" type="password" name="password" class="form__input" placeholder="Пароль"
required>
</div>
<div class="form__field">
<input type="submit" value="Войти">
</div>
</form>
</div>
<svg xmlns="http://www.w3.org/2000/svg" class="icons">
<symbol id="icon-arrow-right" viewBox="0 0 1792 1792">
<path d="M1600 960q0 54-37 91l-651 651q-39 37-91 37-51 0-90-37l-75-75q-38-38-38-91t38-91l293-293H245q-52 0-84.5-37.5T128 1024V896q0-53 32.5-90.5T245 768h704L656 474q-38-36-38-90t38-90l75-75q38-38 90-38 53 0 91 38l651 651q37 35 37 90z"/>
</symbol>
<symbol id="icon-lock" viewBox="0 0 1792 1792">
<path d="M640 768h512V576q0-106-75-181t-181-75-181 75-75 181v192zm832 96v576q0 40-28 68t-68 28H416q-40 0-68-28t-28-68V864q0-40 28-68t68-28h32V576q0-184 132-316t316-132 316 132 132 316v192h32q40 0 68 28t28 68z"/>
</symbol>
<symbol id="icon-user" viewBox="0 0 1792 1792">
<path d="M1600 1405q0 120-73 189.5t-194 69.5H459q-121 0-194-69.5T192 1405q0-53 3.5-103.5t14-109T236 1084t43-97.5 62-81 85.5-53.5T538 832q9 0 42 21.5t74.5 48 108 48T896 971t133.5-21.5 108-48 74.5-48 42-21.5q61 0 111.5 20t85.5 53.5 62 81 43 97.5 26.5 108.5 14 109 3.5 103.5zm-320-893q0 159-112.5 271.5T896 896 624.5 783.5 512 512t112.5-271.5T896 128t271.5 112.5T1280 512z"/>
</symbol>
</svg>
</body>
</body>
</html>

View File

@@ -0,0 +1,61 @@
<!DOCTYPE html>
{% load static %}
<html lang="ru"
class="light-style layout-menu-fixed layout-compact"
dir="ltr"
data-theme="theme-default"
data-assets-path="{% static 'assets' %}"
data-template="vertical-menu-template-free">
<head>
<meta charset="utf-8"/>
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"/>
<title>Панель управления Умный дом Мирока</title>
<meta name="description" content=""/>
<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="{% static 'file/upanel/img/favicon.ico' %}"/>
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com"/>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/>
<link
href="https://fonts.googleapis.com/css2?family=Public+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap"
rel="stylesheet"/>
<link rel="stylesheet" href="{% static 'file/assets/vendor/fonts/boxicons.css' %}"/>
<!-- Core CSS -->
<link rel="stylesheet" href="{% static 'file/assets/vendor/css/core.css' %}" class="template-customizer-core-css">
<link rel="stylesheet" href="{% static 'file/assets/vendor/css/theme-default.css' %}"
class="template-customizer-theme-css">
<link rel="stylesheet" href="{% static 'file/assets/css/demo.css' %}">
<!-- Vendors CSS -->
<link rel="stylesheet" href="{% static 'file/assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.css' %}"/>
<link rel="stylesheet" href="{% static 'file/assets/vendor/libs/apex-charts/apex-charts.css' %}"/>
<!-- Page CSS -->
<!--Server CSS-->
<link rel="stylesheet" href="{% static 'file/upanel/css/style.css' %}">
<!--Server JS-->
<script src="{% static 'file/upanel/js/jquery-3.5.1.min.js' %}"></script>
<script src="{% static 'file/upanel/js/update_server.js' %}"></script>
<script type="text/javascript" src="{% static 'file/upanel/js/clock.js' %}"></script>
<!-- Helpers -->
<script src="{% static 'file/assets/vendor/js/helpers.js' %}"></script>
<!--! Template customizer & Theme config files MUST be included after core stylesheets and helpers.js in the <head> section -->
<!--? Config: Mandatory theme config file contain global vars & default theme options, Set your preferred theme option in this file. -->
<script src="{% static 'file/assets/js/config.js' %}"></script>
</head>
{% block content %}
{% endblock %}
</html>

View File

@@ -0,0 +1,9 @@
<button class="project-btn-more">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" class="feather feather-more-vertical">
<circle cx="12" cy="12" r="1"/>
<circle cx="12" cy="5" r="1"/>
<circle cx="12" cy="19" r="1"/>
</svg>
</button>

View File

@@ -0,0 +1,7 @@
{% load static %}
<div class="miroca">
<a href="/">
<img src="{% static 'file/upanel/img/miroca.svg' %}">
<h1>iroca</h1>
</a>
</div>

View File

@@ -0,0 +1,21 @@
{% load static %}
<div class="main-overview">
<div class="overviewCard">
<div class="overviewCard-icon overviewCard-icon--document">
<img src="{% static 'file/upanel/img/cloud.png' %}">
</div>
<div class="overviewCard-description">
<h3 id="update" class="overviewCard-title text-light"></h3>
<p class="overviewCard-subtitle">Облачный сервер</p>
</div>
</div>
<div class="overviewCard">
<div class="overviewCard-icon overviewCard-icon--calendar">
<img src="{% static 'file/upanel/img/server.png' %}">
</div>
<div class="overviewCard-description">
<h3 class="overviewCard-title text-light update">OK</h3>
<p class="overviewCard-subtitle">Система контроля</p>
</div>
</div>
</div>

View File

@@ -0,0 +1,29 @@
<div class='container'>
<div class='card temp'>
<div class='inner'>
<div class='icon'></div>
<div class='title'>
<div class='text'>ТЕМПЕРАТУРА</div>
</div>
<div class='number'>22</div>
<div class='measure'>(°C)</div>
</div>
</div>
<div class='card energy'>
<div class='inner'>
<div class='icon'></div>
<div class='title'>
<div class='text'>ВЛАЖНОСТЬ</div>
</div>
<div class='number'>45</div>
<div class='measure'>г<sup>3</sup></div>
</div>
</div>
<div class="diagram">
<div class="project-smart" style="background-color: #e9ebf0">
<div id="app">
<highcharts :options="options" ref="highcharts"></highcharts>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,22 @@
{% load static %}
<div class="view-actions dropdown-profile">
<button onclick="myFunction()" class="profile-btn">
<img class="image-vignesh dropbtn-profile" src="{% static 'file/upanel/img/1.png' %}"/>
<span class="dropbtn-profile">{{ user.username }}</span>
</button>
<div id="myDropdown" class="dropdown-content">
<a class="dropdown-item line" href="#">
<i class="mdi mdi-account-outline me-1 mdi-20px"></i>
<span class="align-middle">Профиль</span>
</a>
<a class="dropdown-item line" href="#">
<i class="mdi mdi-cog-outline me-1 mdi-20px"></i>
<span class="align-middle">Настройки</span>
</a>
<form method="post">
{% csrf_token %}
<input type="submit" class="fadeIn fourth" value="Выход">
</form>
</div>
</div>
</div>

View File

@@ -0,0 +1,51 @@
{% load static %}
<div class="content-wrapper">
<!-- Content -->
<div class="container-xxl flex-grow-1 container-p-y">
<div class="row">
<!--Top-->
{% include 'upanel/upanel/content/top.html' %}
<!--/End Top-->
<!--Ping server-->
{% include 'upanel/upanel/content/ping_server.html' %}
<!--End Ping server-->
<!--Показания теплицы-->
{% include 'upanel/upanel/content/greenhouse.html' %}
<!--End Показания теплицы-->
<!--/ Total Revenue -->
<div class="col-12 col-md-8 col-lg-4 order-3 order-md-2">
<div class="row">
<!--Показания датчиков-->
{% include 'upanel/upanel/content/total.html' %}
<!--End Показания датчиков-->
<!--Profile-->
{% include 'upanel/upanel/content/profile.html' %}
<!--End Profile-->
</div>
</div>
</div>
<div class="row">
<!-- Order Statistics -->
{% include 'upanel/upanel/content/orderstatic.html' %}
<!--/ Order Statistics -->
<!-- Transactions -->
{% include 'upanel/upanel/content/transaction.html' %}
<!--/ Transactions -->
</div>
</div>
<!-- / Content -->
<!-- Footer -->
{% include 'upanel/upanel/content/footer.html' %}
<!-- / Footer -->
<div class="content-backdrop fade"></div>
</div>

View File

@@ -0,0 +1,12 @@
<footer class="content-footer footer bg-footer-theme">
<div class="container-xxl d-flex flex-wrap justify-content-between py-2 flex-md-row flex-column">
<div class="mb-2 mb-md-0">
©
<script>
document.write(new Date().getFullYear());
</script>
, made with ❤️ by
<a href="https://tsyrenschikov.ru" target="_blank" class="footer-link fw-medium">tsyrenschikov</a>
</div>
</div>
</footer>

View File

@@ -0,0 +1,52 @@
<!-- Показания теплицы -->
<div class="col-12 col-lg-8 order-2 order-md-3 order-lg-2 mb-4">
<div class="card">
<div class="row row-bordered g-0">
<div class="col-md-8">
<h5 class="card-header m-0 me-2 pb-3">Теплица показания датчиков</h5>
<div id="totalRevenueChart" class="px-2"></div>
</div>
<div class="col-md-4">
<div class="card-body">
<div class="text-center">
<div class="dropdown">
<div class="dropdown-menu dropdown-menu-end" aria-labelledby="growthReportId">
</div>
</div>
</div>
</div>
<div id="growthChart"></div>
<div class="text-center fw-medium pt-3 mb-2">Показания датчиков теплицы</div>
<div class="d-flex px-xxl-4 px-lg-2 p-4 gap-xxl-3 gap-lg-1 gap-3 justify-content-between">
<div class="d-flex">
<div class="me-2">
<span class="badge bg-label-primary p-2"><i
class="bx bx-health text-primary"></i></span>
</div>
<div class="d-flex flex-column">
<small>Температура</small>
{% if temp != 0 %}
<h6 class="mb-0" id="temp_green">+{{ temp }}&degC</h6>
{% elif temp == 0 %}
<h6 class="mb-0" id="temp_green">+{{ temp }}&degC</h6>
{% else %}
<h6 class="mb-0" id="temp_green">-{{ temp }}&degC</h6>
{% endif %}
</div>
</div>
<div class="d-flex">
<div class="me-2">
<span class="badge bg-label-info p-2"><i
class="bx bx-water text-info"></i></span>
</div>
<div class="d-flex flex-column">
<small>Влаж. почвы</small>
<h6 id='damp' class="mb-0">{{ damp }}%</h6>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,100 @@
{% load static %}
<div class="col-md-6 col-lg-4 col-xl-4 order-0 mb-4">
<div class="card h-100">
<div class="card-header d-flex align-items-center justify-content-between pb-0">
<div class="card-title mb-0">
<h5 class="m-0 me-2">Order Statistics</h5>
<small class="text-muted">42.82k Total Sales</small>
</div>
<div class="dropdown">
<button
class="btn p-0"
type="button"
id="orederStatistics"
data-bs-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false">
<i class="bx bx-dots-vertical-rounded"></i>
</button>
<div class="dropdown-menu dropdown-menu-end" aria-labelledby="orederStatistics">
<a class="dropdown-item" href="javascript:void(0);">Select All</a>
<a class="dropdown-item" href="javascript:void(0);">Refresh</a>
<a class="dropdown-item" href="javascript:void(0);">Share</a>
</div>
</div>
</div>
<div class="card-body">
<div class="d-flex justify-content-between align-items-center mb-3">
<div class="d-flex flex-column align-items-center gap-1">
<h2 class="mb-2">8,258</h2>
<span>Total Orders</span>
</div>
<div id="orderStatisticsChart"></div>
</div>
<ul class="p-0 m-0">
<li class="d-flex mb-4 pb-1">
<div class="avatar flex-shrink-0 me-3">
<span class="avatar-initial rounded bg-label-primary"
><i class="bx bx-mobile-alt"></i
></span>
</div>
<div class="d-flex w-100 flex-wrap align-items-center justify-content-between gap-2">
<div class="me-2">
<h6 class="mb-0">Electronic</h6>
<small class="text-muted">Mobile, Earbuds, TV</small>
</div>
<div class="user-progress">
<small class="fw-medium">82.5k</small>
</div>
</div>
</li>
<li class="d-flex mb-4 pb-1">
<div class="avatar flex-shrink-0 me-3">
<span class="avatar-initial rounded bg-label-success"><i
class="bx bx-closet"></i></span>
</div>
<div class="d-flex w-100 flex-wrap align-items-center justify-content-between gap-2">
<div class="me-2">
<h6 class="mb-0">Fashion</h6>
<small class="text-muted">T-shirt, Jeans, Shoes</small>
</div>
<div class="user-progress">
<small class="fw-medium">23.8k</small>
</div>
</div>
</li>
<li class="d-flex mb-4 pb-1">
<div class="avatar flex-shrink-0 me-3">
<span class="avatar-initial rounded bg-label-info"><i
class="bx bx-home-alt"></i></span>
</div>
<div class="d-flex w-100 flex-wrap align-items-center justify-content-between gap-2">
<div class="me-2">
<h6 class="mb-0">Decor</h6>
<small class="text-muted">Fine Art, Dining</small>
</div>
<div class="user-progress">
<small class="fw-medium">849k</small>
</div>
</div>
</li>
<li class="d-flex">
<div class="avatar flex-shrink-0 me-3">
<span class="avatar-initial rounded bg-label-secondary"
><i class="bx bx-football"></i
></span>
</div>
<div class="d-flex w-100 flex-wrap align-items-center justify-content-between gap-2">
<div class="me-2">
<h6 class="mb-0">Sports</h6>
<small class="text-muted">Football, Cricket Kit</small>
</div>
<div class="user-progress">
<small class="fw-medium">99</small>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>

View File

@@ -0,0 +1,37 @@
{% load static %}
<div class="col-lg-4 col-md-4 order-1">
<div class="row">
<div class="col-lg-6 col-md-12 col-6 mb-4">
<div class="card">
<div class="card-body">
<div class="card-title d-flex align-items-start justify-content-between">
<div class="avatar flex-shrink-0">
<img
src="{% static 'file/assets/img/icons/unicons/data-collection.png' %}"
alt="chart success"
class="rounded"/>
</div>
</div>
<span class="fw-medium d-block mb-1">Сервер</span>
<h3 id="server"></h3>
</div>
</div>
</div>
<div class="col-lg-6 col-md-12 col-6 mb-4">
<div class="card">
<div class="card-body">
<div class="card-title d-flex align-items-start justify-content-between">
<div class="avatar flex-shrink-0">
<img
src="{% static 'file/assets/img/icons/unicons/internet.png' %}"
alt="temper"
class="rounded"/>
</div>
</div>
<span>Интернет</span>
<h3 id="ethernet"></h3>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,21 @@
<div class="col-12 mb-4">
<div class="card">
<div class="card-body">
<div class="d-flex justify-content-between flex-sm-row flex-column gap-3">
<div class="d-flex flex-sm-column flex-row align-items-start justify-content-between">
<div class="card-title">
<h5 class="text-nowrap mb-2">Profile Report</h5>
<span class="badge bg-label-warning rounded-pill">Year 2021</span>
</div>
<div class="mt-sm-auto">
<small class="text-success text-nowrap fw-medium"
><i class="bx bx-chevron-up"></i> 68.2%</small>
<h3 class="mb-0">$84,686k</h3>
</div>
</div>
<div id="profileReportChart"></div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,25 @@
{% load static %}
<div class="col-lg-8 mb-4 order-0">
<div class="card">
<div class="d-flex align-items-end row">
<div class="col-sm-7">
<div class="card-body">
<h5 class="card-title text-primary">Сервер конфигурации</h5>
<p class="mb-4">
Вы находитесь на <span class="fw-medium">главной</span> странице конфигуратора
</p>
</div>
</div>
<div class="col-sm-5 text-center text-sm-left">
<div class="card-body pb-0 px-0 px-md-4">
<img
src="{% static 'file/assets/img/illustrations/man-with-laptop-light.png' %}"
height="140"
alt="View Badge User"
data-app-dark-img="illustrations/man-with-laptop-dark.png"
data-app-light-img="illustrations/man-with-laptop-light.png"/>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,30 @@
{% load static %}
<div class="col-6 mb-4">
<div class="card">
<div class="card-body">
<div class="card-title d-flex align-items-start justify-content-between">
<div class="avatar flex-shrink-0">
<img src="{% static 'file/assets/img/icons/unicons/humidity.png' %}"
alt="wet"
class="rounded"/>
</div>
</div>
<span class="d-block mb-1">Влажность</span>
<h3 class="card-title text-nowrap mb-2">50%</h3>
</div>
</div>
</div>
<div class="col-6 mb-4">
<div class="card">
<div class="card-body">
<div class="card-title d-flex align-items-start justify-content-between">
<div class="avatar flex-shrink-0">
<img src="{% static 'file/assets/img/icons/unicons/temperature.png' %}"
alt="Credit Card" class="rounded"/>
</div>
</div>
<span class="fw-medium d-block mb-1">Блок</span>
<h3 class="card-title mb-2">$147</h3>
</div>
</div>
</div>

View File

@@ -0,0 +1,120 @@
{% load static %}
<div class="col-md-6 col-lg-4 order-2 mb-4">
<div class="card h-100">
<div class="card-header d-flex align-items-center justify-content-between">
<h5 class="card-title m-0 me-2">Transactions</h5>
<div class="dropdown">
<div class="dropdown-menu dropdown-menu-end" aria-labelledby="transactionID">
<a class="dropdown-item" href="javascript:void(0);">Last 28 Days</a>
<a class="dropdown-item" href="javascript:void(0);">Last Month</a>
<a class="dropdown-item" href="javascript:void(0);">Last Year</a>
</div>
</div>
</div>
<div class="card-body">
<ul class="p-0 m-0">
<li class="d-flex mb-4 pb-1">
<div class="avatar flex-shrink-0 me-3">
<img src="{% static 'file/assets/img/icons/unicons/paypal.png' %}"
alt="User"
class="rounded"/>
</div>
<div class="d-flex w-100 flex-wrap align-items-center justify-content-between gap-2">
<div class="me-2">
<small class="text-muted d-block mb-1">Paypal</small>
<h6 class="mb-0">Send money</h6>
</div>
<div class="user-progress d-flex align-items-center gap-1">
<h6 class="mb-0">+82.6</h6>
<span class="text-muted">USD</span>
</div>
</div>
</li>
<li class="d-flex mb-4 pb-1">
<div class="avatar flex-shrink-0 me-3">
<img src="{% static 'file/assets/img/icons/unicons/wallet.png' %}" alt="User"
class="rounded"/>
</div>
<div class="d-flex w-100 flex-wrap align-items-center justify-content-between gap-2">
<div class="me-2">
<small class="text-muted d-block mb-1">Wallet</small>
<h6 class="mb-0">Mac'D</h6>
</div>
<div class="user-progress d-flex align-items-center gap-1">
<h6 class="mb-0">+270.69</h6>
<span class="text-muted">USD</span>
</div>
</div>
</li>
<li class="d-flex mb-4 pb-1">
<div class="avatar flex-shrink-0 me-3">
<img src="{% static 'file/assets/img/icons/unicons/chart.png' %}"
alt="User"
class="rounded"/>
</div>
<div class="d-flex w-100 flex-wrap align-items-center justify-content-between gap-2">
<div class="me-2">
<small class="text-muted d-block mb-1">Transfer</small>
<h6 class="mb-0">Refund</h6>
</div>
<div class="user-progress d-flex align-items-center gap-1">
<h6 class="mb-0">+637.91</h6>
<span class="text-muted">USD</span>
</div>
</div>
</li>
<li class="d-flex mb-4 pb-1">
<div class="avatar flex-shrink-0 me-3">
<img src="{% static 'file/assets/img/icons/unicons/cc-success.png' %}"
alt="User"
class="rounded"/>
</div>
<div class="d-flex w-100 flex-wrap align-items-center justify-content-between gap-2">
<div class="me-2">
<small class="text-muted d-block mb-1">Credit Card</small>
<h6 class="mb-0">Ordered Food</h6>
</div>
<div class="user-progress d-flex align-items-center gap-1">
<h6 class="mb-0">-838.71</h6>
<span class="text-muted">USD</span>
</div>
</div>
</li>
<li class="d-flex mb-4 pb-1">
<div class="avatar flex-shrink-0 me-3">
<img src="{% static 'file/assets/img/icons/unicons/wallet.png' %}"
alt="User"
class="rounded"/>
</div>
<div class="d-flex w-100 flex-wrap align-items-center justify-content-between gap-2">
<div class="me-2">
<small class="text-muted d-block mb-1">Wallet</small>
<h6 class="mb-0">Starbucks</h6>
</div>
<div class="user-progress d-flex align-items-center gap-1">
<h6 class="mb-0">+203.33</h6>
<span class="text-muted">USD</span>
</div>
</div>
</li>
<li class="d-flex">
<div class="avatar flex-shrink-0 me-3">
<img src="{% static 'file/assets/img/icons/unicons/cc-warning.png' %}"
alt="User"
class="rounded"/>
</div>
<div class="d-flex w-100 flex-wrap align-items-center justify-content-between gap-2">
<div class="me-2">
<small class="text-muted d-block mb-1">Mastercard</small>
<h6 class="mb-0">Ordered Food</h6>
</div>
<div class="user-progress d-flex align-items-center gap-1">
<h6 class="mb-0">-92.45</h6>
<span class="text-muted">USD</span>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>

View File

@@ -0,0 +1,157 @@
{% extends 'upanel/upanel/base/base.html' %}
{% load static %}
{% block content%}
<body>
<!-- Layout wrapper -->
<div class="layout-wrapper layout-content-navbar">
<div class="layout-container">
<!--MENU-->
{# {% include 'upanel/upanel/menu.html' %}#}
<!-- Layout container -->
<div class="layout-page">
<!-- Navbar -->
<nav
class="layout-navbar container-xxl navbar navbar-expand-xl navbar-detached align-items-center bg-navbar-theme"
id="layout-navbar">
<div class="layout-menu-toggle navbar-nav align-items-xl-center me-3 me-xl-0 d-xl-none">
<a class="nav-item nav-link px-0 me-xl-4" href="javascript:void(0)">
<i class="bx bx-menu bx-sm"></i>
</a>
</div>
<div class="navbar-nav-right d-flex align-items-center" id="navbar-collapse">
<!-- Search -->
<div class="navbar-nav align-items-center">
<div class="nav-item d-flex align-items-center">
<i class="bx bx-search fs-4 lh-0"></i>
<input
type="text"
class="form-control border-0 shadow-none ps-1 ps-sm-2"
placeholder="Search..."
aria-label="Search..."/>
</div>
</div>
<!-- /Search -->
<ul class="navbar-nav flex-row align-items-center ms-auto">
<!-- Place this tag where you want the button to render. -->
<li class="nav-item lh-1 me-3">
<a
class="github-button"
href="https://github.com/themeselection/sneat-html-admin-template-free"
data-icon="octicon-star"
data-size="large"
data-show-count="true"
aria-label="Star themeselection/sneat-html-admin-template-free on GitHub"
>Star</a>
</li>
<!-- User -->
<li class="nav-item navbar-dropdown dropdown-user dropdown">
<a class="nav-link dropdown-toggle hide-arrow" href="javascript:void(0);"
data-bs-toggle="dropdown">
<div class="avatar avatar-online">
<img src="../assets/img/avatars/1.png" alt class="w-px-40 h-auto rounded-circle"/>
</div>
</a>
<ul class="dropdown-menu dropdown-menu-end">
<li>
<a class="dropdown-item" href="#">
<div class="d-flex">
<div class="flex-shrink-0 me-3">
<div class="avatar avatar-online">
<img src="../assets/img/avatars/1.png" alt
class="w-px-40 h-auto rounded-circle"/>
</div>
</div>
<div class="flex-grow-1">
<span class="fw-medium d-block">John Doe</span>
<small class="text-muted">Admin</small>
</div>
</div>
</a>
</li>
<li>
<div class="dropdown-divider"></div>
</li>
<li>
<a class="dropdown-item" href="#">
<i class="bx bx-user me-2"></i>
<span class="align-middle">My Profile</span>
</a>
</li>
<li>
<a class="dropdown-item" href="#">
<i class="bx bx-cog me-2"></i>
<span class="align-middle">Settings</span>
</a>
</li>
<li>
<a class="dropdown-item" href="#">
<span class="d-flex align-items-center align-middle">
<i class="flex-shrink-0 bx bx-credit-card me-2"></i>
<span class="flex-grow-1 align-middle ms-1">Billing</span>
<span class="flex-shrink-0 badge badge-center rounded-pill bg-danger w-px-20 h-px-20">4</span>
</span>
</a>
</li>
<li>
<div class="dropdown-divider"></div>
</li>
<li>
<form method="post">
{% csrf_token %}
<a class="dropdown-item">
<i class="bx bx-power-off me-2"></i>
<input type="submit" class="drop align-middle" value="Выход">
</a>
</form>
</li>
</ul>
</li>
<!--/ User -->
</ul>
</div>
</nav>
<!-- / Navbar -->
<!-- Content wrapper -->
{% include 'upanel/upanel/content/content_wrapper.html' %}
<!-- Content wrapper -->
</div>
<!-- / Layout page -->
</div>
<!-- Overlay -->
<div class="layout-overlay layout-menu-toggle"></div>
</div>
<!-- / Layout wrapper -->
<!-- Core JS -->
<!-- build:js assets/vendor/js/core.js -->
<script src="{% static 'file/assets/vendor/libs/jquery/jquery.js' %}"></script>
<script src="{% static 'file/assets/vendor/libs/popper/popper.js' %}"></script>
<script src="{% static 'file/assets/vendor/js/bootstrap.js' %}"></script>
<script src="{% static 'file/assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.js' %}"></script>
<script src="{% static 'file/assets/vendor/js/menu.js' %}"></script>
<!-- endbuild -->
<!-- Vendors JS -->
<script src="{% static 'file/assets/vendor/libs/apex-charts/apexcharts.js' %}"></script>
<!-- Main JS -->
<script src="{% static 'file/assets/js/main.js' %}"></script>
<!-- Page JS -->
<script src="{% static 'file/assets/js/dashboards-analytics.js' %}"></script>
<!-- Place this tag in your head or just before your close body tag. -->
<script async defer src="https://buttons.github.io/buttons.js"></script>
</body>
{% endblock content %}
</html>

View File

@@ -0,0 +1,65 @@
<!DOCTYPE html>
<html lang="ru">
{% load static %}
<head>
<meta charset="UTF-8">
<title>Система Miroca</title>
<link rel="icon" type="image/x-icon" href="{% static 'file/login/img/miroca.svg' %}">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700" rel="stylesheet">
<link rel="stylesheet" href="{% static 'file/login/css/style.css' %}">
</head>
<body>
<body class="align">
<div class="grid">
<form method="post" class="form login">
{% csrf_token %}
<div class="miroca">
<img src="{% static 'file/login/img/miroca.svg' %}">
<h1>iroca</h1>
</div>
<div class="form__field">
<label for="login__username">
<svg class="icon">
<use xlink:href="#icon-user"></use>
</svg>
<span class="hidden">Имя</span></label>
<input autocomplete="username" id="login__username" type="text" name="username" class="form__input"
placeholder="Имя" required>
</div>
<div class="form__field">
<label for="login__password">
<svg class="icon">
<use xlink:href="#icon-lock"></use>
</svg>
<span class="hidden">Пароль</span></label>
<input id="login__password" type="password" name="password" class="form__input" placeholder="Пароль"
required>
</div>
<div class="form__field">
<input type="submit" value="Войти">
</div>
</form>
</div>
<svg xmlns="http://www.w3.org/2000/svg" class="icons">
<symbol id="icon-arrow-right" viewBox="0 0 1792 1792">
<path d="M1600 960q0 54-37 91l-651 651q-39 37-91 37-51 0-90-37l-75-75q-38-38-38-91t38-91l293-293H245q-52 0-84.5-37.5T128 1024V896q0-53 32.5-90.5T245 768h704L656 474q-38-36-38-90t38-90l75-75q38-38 90-38 53 0 91 38l651 651q37 35 37 90z"/>
</symbol>
<symbol id="icon-lock" viewBox="0 0 1792 1792">
<path d="M640 768h512V576q0-106-75-181t-181-75-181 75-75 181v192zm832 96v576q0 40-28 68t-68 28H416q-40 0-68-28t-28-68V864q0-40 28-68t68-28h32V576q0-184 132-316t316-132 316 132 132 316v192h32q40 0 68 28t28 68z"/>
</symbol>
<symbol id="icon-user" viewBox="0 0 1792 1792">
<path d="M1600 1405q0 120-73 189.5t-194 69.5H459q-121 0-194-69.5T192 1405q0-53 3.5-103.5t14-109T236 1084t43-97.5 62-81 85.5-53.5T538 832q9 0 42 21.5t74.5 48 108 48T896 971t133.5-21.5 108-48 74.5-48 42-21.5q61 0 111.5 20t85.5 53.5 62 81 43 97.5 26.5 108.5 14 109 3.5 103.5zm-320-893q0 159-112.5 271.5T896 896 624.5 783.5 512 512t112.5-271.5T896 128t271.5 112.5T1280 512z"/>
</symbol>
</svg>
</body>
</body>
</html>

View File

@@ -0,0 +1,459 @@
<!-- Menu -->
{% load static %}
<aside id="layout-menu" class="layout-menu menu-vertical menu bg-menu-theme">
<div class="app-brand demo">
<a href="{{ home }}" class="app-brand-link">
<span class="app-brand-logo demo">
<img src="{% static 'file/upanel/img/miroca.svg' %}">
</svg>
</span>
<span class="app-brand-text demo menu-text fw-bold ms-2">iroca</span>
</a>
<a href="javascript:void(0);" class="layout-menu-toggle menu-link text-large ms-auto d-block d-xl-none">
<i class="bx bx-chevron-left bx-sm align-middle"></i>
</a>
</div>
<div class="menu-inner-shadow"></div>
<ul class="menu-inner py-1">
<!-- Dashboards -->
<li class="menu-item active open">
<a href="javascript:void(0);" class="menu-link menu-toggle">
<i class="menu-icon tf-icons bx bx-home-circle"></i>
<div data-i18n="Dashboards">Dashboards</div>
<div class="badge bg-danger rounded-pill ms-auto">5</div>
</a>
</li>
<!-- Layouts -->
<li class="menu-item">
<a href="javascript:void(0);" class="menu-link menu-toggle">
<i class="menu-icon tf-icons bx bx-layout"></i>
<div data-i18n="Layouts">Layouts</div>
</a>
<ul class="menu-sub">
<li class="menu-item">
<a href="layouts-without-menu.html" class="menu-link">
<div data-i18n="Without menu">Without menu</div>
</a>
</li>
<li class="menu-item">
<a href="layouts-without-navbar.html" class="menu-link">
<div data-i18n="Without navbar">Without navbar</div>
</a>
</li>
<li class="menu-item">
<a href="layouts-container.html" class="menu-link">
<div data-i18n="Container">Container</div>
</a>
</li>
<li class="menu-item">
<a href="layouts-fluid.html" class="menu-link">
<div data-i18n="Fluid">Fluid</div>
</a>
</li>
<li class="menu-item">
<a href="layouts-blank.html" class="menu-link">
<div data-i18n="Blank">Blank</div>
</a>
</li>
</ul>
</li>
<!-- Front Pages -->
<li class="menu-item">
<a href="javascript:void(0);" class="menu-link menu-toggle">
<i class="menu-icon tf-icons bx bx-store"></i>
<div data-i18n="Front Pages">Front Pages</div>
<div class="badge bg-label-primary fs-tiny rounded-pill ms-auto">Pro</div>
</a>
<ul class="menu-sub">
<li class="menu-item">
<a
href="https://demos.themeselection.com/sneat-bootstrap-html-admin-template/html/front-pages/landing-page.html"
class="menu-link"
target="_blank">
<div data-i18n="Landing">Landing</div>
</a>
</li>
<li class="menu-item">
<a
href="https://demos.themeselection.com/sneat-bootstrap-html-admin-template/html/front-pages/pricing-page.html"
class="menu-link"
target="_blank">
<div data-i18n="Pricing">Pricing</div>
</a>
</li>
<li class="menu-item">
<a
href="https://demos.themeselection.com/sneat-bootstrap-html-admin-template/html/front-pages/payment-page.html"
class="menu-link"
target="_blank">
<div data-i18n="Payment">Payment</div>
</a>
</li>
<li class="menu-item">
<a
href="https://demos.themeselection.com/sneat-bootstrap-html-admin-template/html/front-pages/checkout-page.html"
class="menu-link"
target="_blank">
<div data-i18n="Checkout">Checkout</div>
</a>
</li>
<li class="menu-item">
<a
href="https://demos.themeselection.com/sneat-bootstrap-html-admin-template/html/front-pages/help-center-landing.html"
class="menu-link"
target="_blank">
<div data-i18n="Help Center">Help Center</div>
</a>
</li>
</ul>
</li>
<li class="menu-header small text-uppercase">
<span class="menu-header-text">Apps &amp; Pages</span>
</li>
<!-- Apps -->
<li class="menu-item">
<a
href="https://demos.themeselection.com/sneat-bootstrap-html-admin-template/html/vertical-menu-template/app-email.html"
target="_blank"
class="menu-link">
<i class="menu-icon tf-icons bx bx-envelope"></i>
<div data-i18n="Email">Email</div>
<div class="badge bg-label-primary fs-tiny rounded-pill ms-auto">Pro</div>
</a>
</li>
<li class="menu-item">
<a
href="https://demos.themeselection.com/sneat-bootstrap-html-admin-template/html/vertical-menu-template/app-chat.html"
target="_blank"
class="menu-link">
<i class="menu-icon tf-icons bx bx-chat"></i>
<div data-i18n="Chat">Chat</div>
<div class="badge bg-label-primary fs-tiny rounded-pill ms-auto">Pro</div>
</a>
</li>
<li class="menu-item">
<a
href="https://demos.themeselection.com/sneat-bootstrap-html-admin-template/html/vertical-menu-template/app-calendar.html"
target="_blank"
class="menu-link">
<i class="menu-icon tf-icons bx bx-calendar"></i>
<div data-i18n="Calendar">Calendar</div>
<div class="badge bg-label-primary fs-tiny rounded-pill ms-auto">Pro</div>
</a>
</li>
<li class="menu-item">
<a
href="https://demos.themeselection.com/sneat-bootstrap-html-admin-template/html/vertical-menu-template/app-kanban.html"
target="_blank"
class="menu-link">
<i class="menu-icon tf-icons bx bx-grid"></i>
<div data-i18n="Kanban">Kanban</div>
<div class="badge bg-label-primary fs-tiny rounded-pill ms-auto">Pro</div>
</a>
</li>
<!-- Pages -->
<li class="menu-item">
<a href="javascript:void(0);" class="menu-link menu-toggle">
<i class="menu-icon tf-icons bx bx-dock-top"></i>
<div data-i18n="Account Settings">Account Settings</div>
</a>
<ul class="menu-sub">
<li class="menu-item">
<a href="pages-account-settings-account.html" class="menu-link">
<div data-i18n="Account">Account</div>
</a>
</li>
<li class="menu-item">
<a href="pages-account-settings-notifications.html" class="menu-link">
<div data-i18n="Notifications">Notifications</div>
</a>
</li>
<li class="menu-item">
<a href="pages-account-settings-connections.html" class="menu-link">
<div data-i18n="Connections">Connections</div>
</a>
</li>
</ul>
</li>
<li class="menu-item">
<a href="javascript:void(0);" class="menu-link menu-toggle">
<i class="menu-icon tf-icons bx bx-lock-open-alt"></i>
<div data-i18n="Authentications">Authentications</div>
</a>
<ul class="menu-sub">
<li class="menu-item">
<a href="auth-login-basic.html" class="menu-link" target="_blank">
<div data-i18n="Basic">Login</div>
</a>
</li>
<li class="menu-item">
<a href="auth-register-basic.html" class="menu-link" target="_blank">
<div data-i18n="Basic">Register</div>
</a>
</li>
<li class="menu-item">
<a href="auth-forgot-password-basic.html" class="menu-link" target="_blank">
<div data-i18n="Basic">Forgot Password</div>
</a>
</li>
</ul>
</li>
<li class="menu-item">
<a href="javascript:void(0);" class="menu-link menu-toggle">
<i class="menu-icon tf-icons bx bx-cube-alt"></i>
<div data-i18n="Misc">Misc</div>
</a>
<ul class="menu-sub">
<li class="menu-item">
<a href="pages-misc-error.html" class="menu-link">
<div data-i18n="Error">Error</div>
</a>
</li>
<li class="menu-item">
<a href="pages-misc-under-maintenance.html" class="menu-link">
<div data-i18n="Under Maintenance">Under Maintenance</div>
</a>
</li>
</ul>
</li>
<!-- Components -->
<li class="menu-header small text-uppercase"><span class="menu-header-text">Components</span></li>
<!-- Cards -->
<li class="menu-item">
<a href="cards-basic.html" class="menu-link">
<i class="menu-icon tf-icons bx bx-collection"></i>
<div data-i18n="Basic">Cards</div>
</a>
</li>
<!-- User interface -->
<li class="menu-item">
<a href="javascript:void(0)" class="menu-link menu-toggle">
<i class="menu-icon tf-icons bx bx-box"></i>
<div data-i18n="User interface">User interface</div>
</a>
<ul class="menu-sub">
<li class="menu-item">
<a href="ui-accordion.html" class="menu-link">
<div data-i18n="Accordion">Accordion</div>
</a>
</li>
<li class="menu-item">
<a href="ui-alerts.html" class="menu-link">
<div data-i18n="Alerts">Alerts</div>
</a>
</li>
<li class="menu-item">
<a href="ui-badges.html" class="menu-link">
<div data-i18n="Badges">Badges</div>
</a>
</li>
<li class="menu-item">
<a href="ui-buttons.html" class="menu-link">
<div data-i18n="Buttons">Buttons</div>
</a>
</li>
<li class="menu-item">
<a href="ui-carousel.html" class="menu-link">
<div data-i18n="Carousel">Carousel</div>
</a>
</li>
<li class="menu-item">
<a href="ui-collapse.html" class="menu-link">
<div data-i18n="Collapse">Collapse</div>
</a>
</li>
<li class="menu-item">
<a href="ui-dropdowns.html" class="menu-link">
<div data-i18n="Dropdowns">Dropdowns</div>
</a>
</li>
<li class="menu-item">
<a href="ui-footer.html" class="menu-link">
<div data-i18n="Footer">Footer</div>
</a>
</li>
<li class="menu-item">
<a href="ui-list-groups.html" class="menu-link">
<div data-i18n="List Groups">List groups</div>
</a>
</li>
<li class="menu-item">
<a href="ui-modals.html" class="menu-link">
<div data-i18n="Modals">Modals</div>
</a>
</li>
<li class="menu-item">
<a href="ui-navbar.html" class="menu-link">
<div data-i18n="Navbar">Navbar</div>
</a>
</li>
<li class="menu-item">
<a href="ui-offcanvas.html" class="menu-link">
<div data-i18n="Offcanvas">Offcanvas</div>
</a>
</li>
<li class="menu-item">
<a href="ui-pagination-breadcrumbs.html" class="menu-link">
<div data-i18n="Pagination &amp; Breadcrumbs">Pagination &amp; Breadcrumbs</div>
</a>
</li>
<li class="menu-item">
<a href="ui-progress.html" class="menu-link">
<div data-i18n="Progress">Progress</div>
</a>
</li>
<li class="menu-item">
<a href="ui-spinners.html" class="menu-link">
<div data-i18n="Spinners">Spinners</div>
</a>
</li>
<li class="menu-item">
<a href="ui-tabs-pills.html" class="menu-link">
<div data-i18n="Tabs &amp; Pills">Tabs &amp; Pills</div>
</a>
</li>
<li class="menu-item">
<a href="ui-toasts.html" class="menu-link">
<div data-i18n="Toasts">Toasts</div>
</a>
</li>
<li class="menu-item">
<a href="ui-tooltips-popovers.html" class="menu-link">
<div data-i18n="Tooltips & Popovers">Tooltips &amp; popovers</div>
</a>
</li>
<li class="menu-item">
<a href="ui-typography.html" class="menu-link">
<div data-i18n="Typography">Typography</div>
</a>
</li>
</ul>
</li>
<!-- Extended components -->
<li class="menu-item">
<a href="javascript:void(0)" class="menu-link menu-toggle">
<i class="menu-icon tf-icons bx bx-copy"></i>
<div data-i18n="Extended UI">Extended UI</div>
</a>
<ul class="menu-sub">
<li class="menu-item">
<a href="extended-ui-perfect-scrollbar.html" class="menu-link">
<div data-i18n="Perfect Scrollbar">Perfect scrollbar</div>
</a>
</li>
<li class="menu-item">
<a href="extended-ui-text-divider.html" class="menu-link">
<div data-i18n="Text Divider">Text Divider</div>
</a>
</li>
</ul>
</li>
<li class="menu-item">
<a href="icons-boxicons.html" class="menu-link">
<i class="menu-icon tf-icons bx bx-crown"></i>
<div data-i18n="Boxicons">Boxicons</div>
</a>
</li>
<!-- Forms & Tables -->
<li class="menu-header small text-uppercase"><span class="menu-header-text">Forms &amp; Tables</span>
</li>
<!-- Forms -->
<li class="menu-item">
<a href="javascript:void(0);" class="menu-link menu-toggle">
<i class="menu-icon tf-icons bx bx-detail"></i>
<div data-i18n="Form Elements">Form Elements</div>
</a>
<ul class="menu-sub">
<li class="menu-item">
<a href="forms-basic-inputs.html" class="menu-link">
<div data-i18n="Basic Inputs">Basic Inputs</div>
</a>
</li>
<li class="menu-item">
<a href="forms-input-groups.html" class="menu-link">
<div data-i18n="Input groups">Input groups</div>
</a>
</li>
</ul>
</li>
<li class="menu-item">
<a href="javascript:void(0);" class="menu-link menu-toggle">
<i class="menu-icon tf-icons bx bx-detail"></i>
<div data-i18n="Form Layouts">Form Layouts</div>
</a>
<ul class="menu-sub">
<li class="menu-item">
<a href="form-layouts-vertical.html" class="menu-link">
<div data-i18n="Vertical Form">Vertical Form</div>
</a>
</li>
<li class="menu-item">
<a href="form-layouts-horizontal.html" class="menu-link">
<div data-i18n="Horizontal Form">Horizontal Form</div>
</a>
</li>
</ul>
</li>
<!-- Form Validation -->
<li class="menu-item">
<a
href="https://demos.themeselection.com/sneat-bootstrap-html-admin-template/html/vertical-menu-template/form-validation.html"
target="_blank"
class="menu-link">
<i class="menu-icon tf-icons bx bx-list-check"></i>
<div data-i18n="Form Validation">Form Validation</div>
<div class="badge bg-label-primary fs-tiny rounded-pill ms-auto">Pro</div>
</a>
</li>
<!-- Tables -->
<li class="menu-item">
<a href="tables-basic.html" class="menu-link">
<i class="menu-icon tf-icons bx bx-table"></i>
<div data-i18n="Tables">Tables</div>
</a>
</li>
<!-- Data Tables -->
<li class="menu-item">
<a
href="https://demos.themeselection.com/sneat-bootstrap-html-admin-template/html/vertical-menu-template/tables-datatables-basic.html"
target="_blank"
class="menu-link">
<i class="menu-icon tf-icons bx bx-grid"></i>
<div data-i18n="Datatables">Datatables</div>
<div class="badge bg-label-primary fs-tiny rounded-pill ms-auto">Pro</div>
</a>
</li>
<!-- Misc -->
<li class="menu-header small text-uppercase"><span class="menu-header-text">Misc</span></li>
<li class="menu-item">
<a
href="https://github.com/themeselection/sneat-html-admin-template-free/issues"
target="_blank"
class="menu-link">
<i class="menu-icon tf-icons bx bx-support"></i>
<div data-i18n="Support">Support</div>
</a>
</li>
<li class="menu-item">
<a
href="https://demos.themeselection.com/sneat-bootstrap-html-admin-template/documentation/"
target="_blank"
class="menu-link">
<i class="menu-icon tf-icons bx bx-file"></i>
<div data-i18n="Documentation">Documentation</div>
</a>
</li>
</ul>
</aside>
<!-- / Menu -->

View File

@@ -0,0 +1,39 @@
{% extends 'upanel/upanel/base/base.html' %}
{% load static %}
{#Блоки температуры и влажности#}
{% block styleinclude %}
<link rel="stylesheet" href="{% static 'file/upanel/css/smart_style.css' %}">
{% endblock styleinclude %}
{#График#}
{% block js %}
<script src="{% static 'file/upanel/js/smart-size-reload.js' %}"></script>
<script src="{% static 'file/upanel/js/vue.min.js' %}"></script>
<script src="{% static 'file/upanel/js/highcharts.js' %}"></script>
<script src="{% static 'file/upanel/js/vue-highcharts.min.js' %}"></script>
{% endblock js %}
{% block content %}
<body onload="clockTimer();">
<div class="app-content">
<div class="projects-section">
<div class="projects-section-header">
{% include 'upanel/upanel/base/label.html' %}
<p class="time" id="dayOfWeek"></p>
{% include 'upanel/upanel/base/user.html' %}
<div class="projects-section-line">
{% include 'upanel/upanel/base/status.html' %}
<time id="clock"></time>
</div>
<ul class="breadcrumb">
<li><a href="{% url 'upanel' %}">Главная</a></li>
<li><a href="{% url 'smarthome' %}">Умный дом</a></li>
</ul>
<div class="breadcrumbs">
{% include 'upanel/upanel/base/temperature.html' %}
</div>
</div>
</div>
</div>
</div>
<script src="{% static 'file/upanel/js/script.js' %}"></script>
</body>
{% endblock content %}

15
app/upanel/test.py Normal file
View File

@@ -0,0 +1,15 @@
from sshtunnel import SSHTunnelForwarder
import os
hostname = "192.168.88.3"
response = os.system("ping -c 1 " + hostname)
if response == 0:
ssh_tunnel = SSHTunnelForwarder(
'192.168.88.3',
ssh_username="orangepi",
ssh_password="cbvgcjy0",
remote_bind_address=('192.168.88.3', 22)
)
ssh_tunnel.start()
print(ssh_tunnel.local_bind_port) # show assigned local port

3
app/upanel/tests.py Normal file
View File

@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

18
app/upanel/urls.py Normal file
View File

@@ -0,0 +1,18 @@
from django.urls import path
from django.contrib.auth.views import LoginView, LogoutView, PasswordChangeView, PasswordChangeDoneView
from django.contrib.auth import logout
from .import views
urlpatterns = [
path('', views.home, name='upanel'),
path('connect/', views.connect, name='connect'),
# path('greenhouse/', views.greenhouse, name='greenhouse'),
# path('server_smart/', views.server_smart, name='server_smart'),
path('upanel/login/', LoginView.as_view(template_name='upanel/login.html'), name='login'),
path('logout/', LoginView.as_view(template_name='upanel/login.html'), name='logout'),
path('password_change/', PasswordChangeView.as_view(template_name='upanel/change_password.html'),
name='password_change'),
path('password_change/done/', PasswordChangeDoneView.as_view(template_name='upanel/change_password_done.html'),
name='password_change_done'),
]

56
app/upanel/views.py Normal file
View File

@@ -0,0 +1,56 @@
import json
from django.contrib.auth import get_user_model
from routeros_api.exceptions import RouterOsApiConnectionError
# from synology_api.exceptions import JSONDecodeError
User = get_user_model()
import os, requests,re
from django.shortcuts import render, redirect
from django.http import JsonResponse
from django.contrib.auth.decorators import login_required
from .logout import logout_view
from upanel.models import *
import routeros_api
import datetime
@login_required(login_url='/login/')
def connect(request):
try:
hosts = User.objects.values('ipaddress').distinct()[0]
connection = routeros_api.RouterOsApiPool(hosts['ipaddress'], username='api', password='cbvgcjy0',
plaintext_login=True)
api = connection.get_api()
ping=api.get_binary_resource('/').call('ping', {'address': str.encode(hosts['ipaddress']), 'count': b'2'}) #блять тут надо перевести в байт str.encode
return JsonResponse({'ethernet': bytes.decode(max([i['time'] for i in ping]))})
except RouterOsApiConnectionError as e:
return JsonResponse({'ethernet': 'false'})
# def server_smart(request):
# month_int = sorted([int(datetime.datetime.now().strftime('%m'))-i for i in range(6)])
# pattern = r'\+\d{2}+\.\d+'
# return JsonResponse({'month':list(Month.objects.using('miroca').filter(id__in=month_int).order_by('id').values_list('name', flat=True)),
# 'smart_server_temp':max(map(float,re.findall(pattern, os.popen('sensors').read())))})
# # @login_required(login_url='/login/')
# # @logout_view
# def greenhouse(request):
# connect_timeout = 18
# read_timeout = 30
# host_name_green = Hostname.objects.values('area')[0]['area']
# try:
# response = requests.get("http://" + host_name_green, timeout=(connect_timeout, read_timeout))
# return JsonResponse(response.json() | {'host_name_green':host_name_green})
# except Exception as e:
# return JsonResponse({'temp': [' ', ' '], 'sensor_lend_web': [' '], 'host_name_green':host_name_green})
@login_required(login_url='/login/')
@logout_view
def home(request):
user = User.objects.get(id=request.user.id)
return render(request, 'upanel/upanel/index.html',# {'user': user, 'temp': res['temp'][0], 'damp': res['sensor_lend_web'][0]}
)

16
app/wsgi.py Normal file
View File

@@ -0,0 +1,16 @@
"""
WSGI config for miroca project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/6.0/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'miroca.settings')
application = get_wsgi_application()