diff --git a/JSON request to send data.txt b/JSON request to send data.txt
new file mode 100644
index 0000000..ec2ef38
--- /dev/null
+++ b/JSON request to send data.txt
@@ -0,0 +1,45 @@
+{
+ "leds1": {
+ "red": 0,
+ "green": 0,
+ "blue": 0
+ },
+ "leds2": {
+ "red": 0,
+ "green": 0,
+ "blue": 0
+ },
+ "leds3": {
+ "red": 84,
+ "green": 69,
+ "blue": 255
+ },
+ "leds4": {
+ "red": 0,
+ "green": 0,
+ "blue": 0
+ },
+ "leds5": {
+ "red": 102,
+ "green": 255,
+ "blue": 173
+ },
+ "leds6": {
+ "red": 0,
+ "green": 0,
+ "blue": 0
+ },
+ "leds7": {
+ "red": 222,
+ "green": 255,
+ "blue": 58
+ },
+ "leds8": {
+ "red": 0,
+ "green": 0,
+ "blue": 0
+ },
+ "LED1": false,
+ "LED2": false,
+ "LED3": false
+}
\ No newline at end of file
diff --git a/Main.py b/Main.py
new file mode 100644
index 0000000..cfd57a2
--- /dev/null
+++ b/Main.py
@@ -0,0 +1,300 @@
+from PyQt5 import QtCore, QtGui, QtWidgets
+from PyQt5 import uic
+from PyQt5.QtGui import QColor, QPalette
+from PyQt5.QtGui import QPixmap
+from PyQt5.QtCore import QTimer
+from PyQt5.QtWidgets import *
+from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
+
+import requests
+import time
+import json
+import Res_rc
+import copy
+import pyqtgraph as pg
+import sys
+#import matplotlib.pyplot as plt
+
+colors = {}
+last_clicked_label = None
+plotLen = 20
+valArr = [20] * plotLen
+plot = None
+
+def led1 (checked):
+ if checked:
+ form.pushButton_2.setText("Выкл")
+ print("I'm worked too much")
+ form.label_24.hide()
+ form.label_20.show()
+ else:
+ form.label_20.hide()
+ form.label_24.show()
+ form.pushButton_2.setText("Вкл")
+ print ("I'm worked too")
+
+def led2 (checked):
+ if checked:
+ form.pushButton_3.setText("Выкл")
+ print("I'm worked too much")
+ form.label_27.hide()
+ form.label_26.show()
+ else:
+ form.label_26.hide()
+ form.label_27.show()
+ form.pushButton_3.setText("Вкл")
+ print ("I'm worked too")
+
+def led3 (checked):
+ if checked:
+ form.pushButton_4.setText("Выкл")
+ print("I'm worked too much")
+ form.label_31.hide()
+ form.label_29.show()
+ #state = form.label_24.isVisible()
+
+ else:
+ form.label_29.hide()
+ form.label_31.show()
+ form.pushButton_4.setText("Вкл")
+ print ("I'm worked too")
+
+
+def updateLCD():
+ global temp
+ form.lcdNumber.display(temp)
+
+def sed ():
+ print ("I'm worked!")
+
+led_data = {
+ "leds1": {"red": 0, "green": 0, "blue": 0},
+ "leds2": {"red": 0, "green": 0, "blue": 0},
+ "leds3": {"red": 0, "green": 0, "blue": 0},
+ "leds4": {"red": 0, "green": 0, "blue": 0},
+ "leds5": {"red": 0, "green": 0, "blue": 0},
+ "leds6": {"red": 0, "green": 0, "blue": 0},
+ "leds7": {"red": 0, "green": 0, "blue": 0},
+ "leds8": {"red": 0, "green": 0, "blue": 0},
+}
+
+def vkl():
+ for led in form.leds:
+ #caution! Naming will be the same for a Led and JSON led objects
+ led.setStyleSheet(f"background-color: yellow;")
+ led_data[led.objectName()]["red"] = 255
+ led_data[led.objectName()]["green"] = 255
+ led_data[led.objectName()]["blue"] = 0
+
+def vikl():
+ for led in form.leds:
+ #caution! Naming will be the same for a Led and JSON led objects
+ led.setStyleSheet(f"background-color: black;")
+ led_data[led.objectName()]["red"] = 0
+ led_data[led.objectName()]["green"] = 0
+ led_data[led.objectName()]["blue"] = 0
+
+def color():
+ color = QColorDialog.getColor()
+ if color.isValid():
+ palette = QPalette()
+ palette.setColor(QPalette.Button, color)
+ form.color_b.setPalette(palette)
+ for led in form.leds:
+ led.setStyleSheet(f"background-color: {color.name()};")
+ led_data[led.objectName()]["red"] = color.red()
+ led_data[led.objectName()]["green"] = color.green()
+ led_data[led.objectName()]["blue"] = color.blue()
+
+def led_clicked(event):
+ colors = led.palette().color(QPalette.Background)
+ sender= QApplication.widgetAt(event.globalPos()) #QApplication.widgetAt() для получения текущего виджета, на котором было совершено действие
+ color = QColorDialog.getColor()
+ if color.isValid():
+ #caution! Naming will be the same for a Led and JSON led objects
+ sender.setStyleSheet(f"background-color: {color.name()};")
+ led_data[sender.objectName()]["red"] = color.red()
+ led_data[sender.objectName()]["green"] = color.green()
+ led_data[sender.objectName()]["blue"] = color.blue()
+ else:
+ form.leds.setStyleSheet(" ")
+
+def sendMessage():
+ url = form.lineEdit.text()
+ labels_dict = {}
+ labels_dict["LED1"] = form.label_20.isVisible()
+ labels_dict["LED2"] = form.label_26.isVisible()
+ labels_dict["LED3"] = form.label_29.isVisible()
+
+ json_data = {}
+ json_data.update(led_data)
+ json_data.update(labels_dict)
+ json_str = json.dumps(json_data, separators=(',', ':'))
+
+ data_str = 'Я отправляю текст на: ' + url + '\n'+ json_str
+ form.textEdit.setPlainText(data_str)
+
+ headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} #заголовки запроса
+ response = requests.post(url, json=json_data, headers=headers) #отправка POST запроса
+
+ # обрабатываем ответ и выводим его в поле вывода
+ if response.status_code == 200:
+ form.textEdit.append('О, все прошло успешно!\n') #выводим значение в line_edit
+ else:
+ form.textEdit.append('Ошибка при получении данных')
+
+
+
+def getValueFromMacket():
+ url = form.lineEdit_2.text()
+ response = requests.get(url) #отправка POST запроса
+
+ # обрабатываем ответ и выводим его в поле вывода
+ if response.status_code == 200:
+ data=response.json() #функция преобразования данных в объект питон
+ #Parse the date
+ form.textEdit.append(json.dumps(data)) #выводим значение в line_edit
+ form.textEdit.append(str(data["temperature"]))
+
+ bs = list()
+ bs.append(data["button1State"])
+ bs.append(data["button2State"])
+ bs.append(data["button3State"])
+ update_button(bs)
+
+ update_pressure(data["pressure"])
+
+ form.lcdNumber_7.display(data["ambient_light"])
+ form.lcdNumber_2.display (data["red_light"])
+ form.lcdNumber_3.display (data["green_light"])
+ form.lcdNumber_4.display (data["blue_light"])
+ form.lcdNumber_8.display (data["lightness"])
+
+ form.lcdNumber_5.display(data['acceleration_x'])
+ form.lcdNumber_9.display (data['acceleration_y'])
+ form.lcdNumber_6.display (data['acceleration_z'])
+
+ led1(data['LED1'])
+ led2(data['LED2'])
+ led3(data['LED3'])
+ valArr.pop(0)
+ valArr.append(data["temperature"])
+ print(valArr)
+ UpdatePlot(plot, valArr)
+ else:
+ form.textEdit.append('Ошибка при получении данных')
+
+
+#json.load(file) @ACHT! Method to convert Str to JSON
+
+
+def update_pressure(p):
+ form.lcd_pressure.display(p)
+
+def update_button (bs):
+ for i in range(1, 4):
+ button_state = bs[i-1]
+ if button_state == 'True':
+ getattr(form, f'on_{i}').show()
+ getattr(form, f'off_{i}').hide()
+ else:
+ getattr(form, f'on_{i}').hide()
+ getattr(form, f'off_{i}').show()
+
+
+def UpdatePlot(plot, val):
+ x = list(range(1, len(valArr)+1))
+ bargraph = pg.BarGraphItem(x = x, height = val, width = 0.6, brush ='g')
+ plot.clear()
+ plot.addItem(bargraph)
+
+def Plots(form, valArr):
+ widget = QWidget()
+ plot = pg.plot() #создает объект PlotWidget из библиотеки PyqtGraph
+
+ x = list(range(1, len(valArr)+1))
+ bargraph = pg.BarGraphItem(x = x, height = valArr, width = 0.6, brush ='g')
+ plot.addItem(bargraph)
+
+ # Creating a grid layout
+ layout = QGridLayout()
+ layout.addWidget(plot, 0,0)
+ form.plotwidget.setLayout(layout)
+
+ return plot
+
+def main():
+ with open('./config.json') as f: # открывает файл 'config.json'
+ conf = json.load(open('config.json')) # загружает его содержимое в переменную 'conf' в формате словаря (dictionary) при помощи функции 'json.load()'
+
+ # выводит все ключи словаря 'conf' при помощи цикла 'for'.
+ print("Find an arguments:")
+ for i in conf:
+ print(i)
+
+ Form, Window = uic.loadUiType(conf['uiPath'] + conf['uiFileName'])
+
+ app = QApplication(sys.argv) # Создаем экземпляр QApplication и передаем параметры командной строки
+ window = Window()
+ form = Form()
+ form.setupUi(window)
+ window.show() # Окна скрыты по умолчанию!
+ window.setWindowTitle('Lr4') #nazvanie
+ form.pushButton.clicked.connect(sendMessage) #привязываем функцию к кнопке Отправить
+ form.lineEdit.setText("http://" + conf['defaultMDNSname'] + conf['defaultPostRoute'])
+ form.lineEdit_2.setText("http://" + conf['defaultMDNSname'] + conf['defaultGetRoute'])
+ form.pushButton_5.clicked.connect(getValueFromMacket) #привязываем функцию к кнопке Отправить GET запрос
+
+
+ form.pushButton_2.setCheckable(True) #вкл режим перекл
+ form.pushButton_2.setChecked(False) #нач значение
+ form.label_20.hide()
+ form.pushButton_2.toggled["bool"].connect(led1)
+
+ form.pushButton_3.setCheckable(True) #вкл режим перекл
+ form.pushButton_3.setChecked(False) #нач значение
+ form.label_26.hide()
+ form.pushButton_3.toggled["bool"].connect(led2)
+
+ form.pushButton_4.setCheckable(True) #вкл режим перекл
+ form.pushButton_4.setChecked(False) #нач значение
+ form.label_29.hide()
+ form.pushButton_4.toggled["bool"].connect(led3)
+
+ form.on_1.hide()
+ form.on_2.hide()
+ form.on_3.hide()
+
+ form.lcdNumber.display(45)
+
+
+ form.leds = [form.leds1, form.leds2, form.leds3, form.leds4, form.leds5, form.leds6, form.leds7, form.leds8]
+
+
+ for led in form.leds:
+ led.mousePressEvent = led_clicked
+
+ timer = QTimer()
+ timer.setInterval(1000)
+
+ #Connect the timer to the update_pressure function
+ #TODO connect to getSensValue from macket
+ # timer.timeout.connect(update_pressure)
+ # timer.timeout.connect(update_button)
+ # timer.timeout.connect(update_light)
+ # timer.timeout.connect(update_acceleration)
+
+ timer.start()
+
+ form.vkl_b.clicked.connect(vkl)
+ form.vikl_b.clicked.connect(vikl)
+ form.color_b.clicked.connect(color)
+
+ plot = Plots(form, valArr)
+
+ sys.exit (app.exec_()) # Запуск цикла событий
+
+
+if __name__ == "__main__":
+ main()
+
\ No newline at end of file
diff --git a/Python-20230411T121747Z-001.zip b/Python-20230411T121747Z-001.zip
new file mode 100644
index 0000000..b57fc81
Binary files /dev/null and b/Python-20230411T121747Z-001.zip differ
diff --git a/Res_rc.py b/Res_rc.py
new file mode 100644
index 0000000..25a6e86
--- /dev/null
+++ b/Res_rc.py
@@ -0,0 +1,455 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created by: The Resource Compiler for PyQt5 (Qt v5.15.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x06\x1c\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x32\x33\x2e\x31\x2e\x30\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\x73\
+\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\xd0\xa1\
+\xd0\xbb\xd0\xbe\xd0\xb9\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
+\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
+\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\
+\x6f\x78\x3d\x22\x30\x20\x30\x20\x32\x35\x36\x20\x32\x35\x36\x22\
+\x20\x73\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\
+\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\
+\x30\x20\x32\x35\x36\x20\x32\x35\x36\x3b\x22\x20\x78\x6d\x6c\x3a\
+\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\
+\x3e\x0d\x0a\x3c\x73\x74\x79\x6c\x65\x20\x74\x79\x70\x65\x3d\x22\
+\x74\x65\x78\x74\x2f\x63\x73\x73\x22\x3e\x0d\x0a\x09\x2e\x73\x74\
+\x30\x7b\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\
+\x6b\x65\x3a\x23\x32\x41\x32\x45\x30\x30\x3b\x73\x74\x72\x6f\x6b\
+\x65\x2d\x77\x69\x64\x74\x68\x3a\x31\x36\x3b\x73\x74\x72\x6f\x6b\
+\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3a\x31\x30\x3b\x7d\x0d\x0a\x09\x2e\x73\x74\x31\x7b\x66\x69\
+\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\
+\x31\x35\x30\x30\x30\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
+\x64\x74\x68\x3a\x31\x32\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
+\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\
+\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\
+\x3b\x7d\x0d\x0a\x09\x2e\x73\x74\x32\x7b\x66\x69\x6c\x6c\x3a\x6e\
+\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x36\x36\x36\x36\
+\x36\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\
+\x31\x32\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\
+\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\
+\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x7d\x0d\x0a\
+\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
+\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x73\x74\x30\
+\x22\x20\x64\x3d\x22\x4d\x31\x38\x36\x2e\x38\x37\x2c\x34\x33\x63\
+\x32\x39\x2e\x38\x32\x2c\x31\x37\x2e\x36\x33\x2c\x33\x39\x2e\x30\
+\x37\x2c\x35\x35\x2e\x30\x36\x2c\x32\x30\x2e\x36\x35\x2c\x38\x33\
+\x2e\x36\x31\x63\x2d\x31\x34\x2e\x37\x34\x2c\x32\x32\x2e\x38\x34\
+\x2d\x34\x36\x2e\x30\x32\x2c\x32\x39\x2e\x39\x31\x2d\x36\x39\x2e\
+\x38\x38\x2c\x31\x35\x2e\x38\x31\x0d\x0a\x09\x09\x63\x2d\x31\x39\
+\x2e\x30\x39\x2d\x31\x31\x2e\x32\x38\x2d\x32\x35\x2d\x33\x35\x2e\
+\x32\x34\x2d\x31\x33\x2e\x32\x31\x2d\x35\x33\x2e\x35\x31\x63\x39\
+\x2e\x34\x33\x2d\x31\x34\x2e\x36\x31\x2c\x32\x39\x2e\x34\x35\x2d\
+\x31\x39\x2e\x31\x34\x2c\x34\x34\x2e\x37\x32\x2d\x31\x30\x2e\x31\
+\x32\x63\x31\x32\x2e\x32\x32\x2c\x37\x2e\x32\x32\x2c\x31\x36\x2c\
+\x32\x32\x2e\x35\x35\x2c\x38\x2e\x34\x36\x2c\x33\x34\x2e\x32\x35\
+\x0d\x0a\x09\x09\x63\x2d\x36\x2e\x30\x34\x2c\x39\x2e\x33\x35\x2d\
+\x31\x38\x2e\x38\x35\x2c\x31\x32\x2e\x32\x35\x2d\x32\x38\x2e\x36\
+\x32\x2c\x36\x2e\x34\x38\x63\x2d\x37\x2e\x38\x32\x2d\x34\x2e\x36\
+\x32\x2d\x31\x30\x2e\x32\x34\x2d\x31\x34\x2e\x34\x33\x2d\x35\x2e\
+\x34\x31\x2d\x32\x31\x2e\x39\x32\x63\x33\x2e\x38\x36\x2d\x35\x2e\
+\x39\x39\x2c\x31\x32\x2e\x30\x36\x2d\x37\x2e\x38\x34\x2c\x31\x38\
+\x2e\x33\x32\x2d\x34\x2e\x31\x34\x0d\x0a\x09\x09\x63\x35\x2c\x32\
+\x2e\x39\x36\x2c\x36\x2e\x35\x35\x2c\x39\x2e\x32\x34\x2c\x33\x2e\
+\x34\x36\x2c\x31\x34\x2e\x30\x33\x63\x2d\x32\x2e\x34\x37\x2c\x33\
+\x2e\x38\x33\x2d\x37\x2e\x37\x32\x2c\x35\x2e\x30\x32\x2d\x31\x31\
+\x2e\x37\x32\x2c\x32\x2e\x36\x35\x22\x2f\x3e\x0d\x0a\x09\x3c\x70\
+\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x73\x74\x31\x22\x20\
+\x64\x3d\x22\x4d\x31\x38\x36\x2e\x38\x37\x2c\x34\x33\x63\x32\x39\
+\x2e\x38\x32\x2c\x31\x37\x2e\x36\x33\x2c\x33\x39\x2e\x30\x37\x2c\
+\x35\x35\x2e\x30\x36\x2c\x32\x30\x2e\x36\x35\x2c\x38\x33\x2e\x36\
+\x31\x63\x2d\x31\x34\x2e\x37\x34\x2c\x32\x32\x2e\x38\x34\x2d\x34\
+\x36\x2e\x30\x32\x2c\x32\x39\x2e\x39\x31\x2d\x36\x39\x2e\x38\x38\
+\x2c\x31\x35\x2e\x38\x31\x0d\x0a\x09\x09\x63\x2d\x31\x39\x2e\x30\
+\x39\x2d\x31\x31\x2e\x32\x38\x2d\x32\x35\x2d\x33\x35\x2e\x32\x34\
+\x2d\x31\x33\x2e\x32\x31\x2d\x35\x33\x2e\x35\x31\x63\x39\x2e\x34\
+\x33\x2d\x31\x34\x2e\x36\x31\x2c\x32\x39\x2e\x34\x35\x2d\x31\x39\
+\x2e\x31\x34\x2c\x34\x34\x2e\x37\x32\x2d\x31\x30\x2e\x31\x32\x63\
+\x31\x32\x2e\x32\x32\x2c\x37\x2e\x32\x32\x2c\x31\x36\x2c\x32\x32\
+\x2e\x35\x35\x2c\x38\x2e\x34\x36\x2c\x33\x34\x2e\x32\x35\x0d\x0a\
+\x09\x09\x63\x2d\x36\x2e\x30\x34\x2c\x39\x2e\x33\x35\x2d\x31\x38\
+\x2e\x38\x35\x2c\x31\x32\x2e\x32\x35\x2d\x32\x38\x2e\x36\x32\x2c\
+\x36\x2e\x34\x38\x63\x2d\x37\x2e\x38\x32\x2d\x34\x2e\x36\x32\x2d\
+\x31\x30\x2e\x32\x34\x2d\x31\x34\x2e\x34\x33\x2d\x35\x2e\x34\x31\
+\x2d\x32\x31\x2e\x39\x32\x63\x33\x2e\x38\x36\x2d\x35\x2e\x39\x39\
+\x2c\x31\x32\x2e\x30\x36\x2d\x37\x2e\x38\x34\x2c\x31\x38\x2e\x33\
+\x32\x2d\x34\x2e\x31\x34\x0d\x0a\x09\x09\x63\x35\x2c\x32\x2e\x39\
+\x36\x2c\x36\x2e\x35\x35\x2c\x39\x2e\x32\x34\x2c\x33\x2e\x34\x36\
+\x2c\x31\x34\x2e\x30\x33\x63\x2d\x32\x2e\x34\x37\x2c\x33\x2e\x38\
+\x33\x2d\x37\x2e\x37\x32\x2c\x35\x2e\x30\x32\x2d\x31\x31\x2e\x37\
+\x32\x2c\x32\x2e\x36\x35\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\
+\x0a\x3c\x6c\x69\x6e\x65\x20\x63\x6c\x61\x73\x73\x3d\x22\x73\x74\
+\x32\x22\x20\x78\x31\x3d\x22\x31\x32\x39\x22\x20\x79\x31\x3d\x22\
+\x31\x37\x34\x22\x20\x78\x32\x3d\x22\x31\x30\x37\x22\x20\x79\x32\
+\x3d\x22\x32\x31\x39\x22\x2f\x3e\x0d\x0a\x3c\x6c\x69\x6e\x65\x20\
+\x63\x6c\x61\x73\x73\x3d\x22\x73\x74\x32\x22\x20\x78\x31\x3d\x22\
+\x31\x37\x31\x22\x20\x79\x31\x3d\x22\x31\x37\x32\x22\x20\x78\x32\
+\x3d\x22\x32\x30\x30\x22\x20\x79\x32\x3d\x22\x32\x34\x36\x22\x2f\
+\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x04\xc6\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x32\x33\x2e\x31\x2e\x30\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\x73\
+\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\xd0\xa1\
+\xd0\xbb\xd0\xbe\xd0\xb9\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
+\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
+\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\
+\x6f\x78\x3d\x22\x30\x20\x30\x20\x32\x35\x36\x20\x32\x35\x36\x22\
+\x20\x73\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\
+\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\
+\x30\x20\x32\x35\x36\x20\x32\x35\x36\x3b\x22\x20\x78\x6d\x6c\x3a\
+\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\
+\x3e\x0d\x0a\x3c\x73\x74\x79\x6c\x65\x20\x74\x79\x70\x65\x3d\x22\
+\x74\x65\x78\x74\x2f\x63\x73\x73\x22\x3e\x0d\x0a\x09\x2e\x73\x74\
+\x30\x7b\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\
+\x6b\x65\x3a\x23\x39\x39\x39\x39\x39\x39\x3b\x73\x74\x72\x6f\x6b\
+\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\x36\x3b\x73\x74\x72\x6f\x6b\
+\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3a\x31\x30\x3b\x7d\x0d\x0a\x09\x2e\x73\x74\x31\x7b\x66\x69\
+\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\
+\x34\x44\x34\x44\x34\x44\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
+\x64\x74\x68\x3a\x31\x35\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
+\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\
+\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\
+\x3b\x7d\x0d\x0a\x09\x2e\x73\x74\x32\x7b\x66\x69\x6c\x6c\x3a\x6e\
+\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x39\x39\x39\x39\
+\x39\x39\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\
+\x33\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\
+\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\
+\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x7d\x0d\x0a\
+\x09\x2e\x73\x74\x33\x7b\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\
+\x73\x74\x72\x6f\x6b\x65\x3a\x23\x36\x36\x36\x36\x36\x36\x3b\x73\
+\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\x31\x3b\x73\
+\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\
+\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\
+\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x7d\x0d\x0a\x09\x2e\x73\x74\
+\x34\x7b\x66\x69\x6c\x6c\x3a\x23\x33\x33\x30\x30\x30\x37\x3b\x7d\
+\x0d\x0a\x09\x2e\x73\x74\x35\x7b\x66\x6f\x6e\x74\x2d\x66\x61\x6d\
+\x69\x6c\x79\x3a\x27\x4d\x79\x72\x69\x61\x64\x50\x72\x6f\x2d\x52\
+\x65\x67\x75\x6c\x61\x72\x27\x3b\x7d\x0d\x0a\x09\x2e\x73\x74\x36\
+\x7b\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x31\x31\x37\x2e\x37\
+\x38\x37\x32\x70\x78\x3b\x7d\x0d\x0a\x3c\x2f\x73\x74\x79\x6c\x65\
+\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x63\
+\x6c\x61\x73\x73\x3d\x22\x73\x74\x30\x22\x20\x64\x3d\x22\x4d\x31\
+\x33\x33\x2c\x31\x39\x33\x63\x30\x2d\x38\x36\x2e\x37\x38\x2d\x35\
+\x30\x2e\x35\x34\x2d\x31\x35\x37\x2d\x31\x31\x33\x2d\x31\x35\x37\
+\x22\x2f\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\
+\x73\x3d\x22\x73\x74\x31\x22\x20\x64\x3d\x22\x4d\x31\x33\x33\x2c\
+\x31\x39\x33\x63\x30\x2d\x38\x36\x2e\x37\x38\x2d\x35\x30\x2e\x35\
+\x34\x2d\x31\x35\x37\x2d\x31\x31\x33\x2d\x31\x35\x37\x22\x2f\x3e\
+\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\x3c\x70\
+\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x73\x74\x32\x22\x20\
+\x64\x3d\x22\x4d\x32\x32\x2c\x32\x33\x35\x63\x37\x37\x2e\x34\x37\
+\x2d\x35\x37\x2e\x34\x35\x2c\x31\x37\x33\x2e\x36\x33\x2d\x35\x38\
+\x2e\x37\x39\x2c\x32\x31\x35\x2d\x33\x22\x2f\x3e\x0d\x0a\x09\x3c\
+\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x73\x74\x33\x22\
+\x20\x64\x3d\x22\x4d\x32\x32\x2c\x32\x33\x35\x63\x37\x37\x2e\x34\
+\x37\x2d\x35\x37\x2e\x34\x35\x2c\x31\x37\x33\x2e\x36\x33\x2d\x35\
+\x38\x2e\x37\x39\x2c\x32\x31\x35\x2d\x33\x22\x2f\x3e\x0d\x0a\x3c\
+\x2f\x67\x3e\x0d\x0a\x3c\x74\x65\x78\x74\x20\x74\x72\x61\x6e\x73\
+\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x38\
+\x30\x30\x32\x20\x30\x20\x30\x20\x31\x20\x31\x30\x30\x2e\x30\x34\
+\x33\x35\x20\x39\x33\x2e\x35\x35\x33\x32\x29\x22\x20\x63\x6c\x61\
+\x73\x73\x3d\x22\x73\x74\x34\x20\x73\x74\x35\x20\x73\x74\x36\x22\
+\x3e\x4f\x46\x46\x3c\x2f\x74\x65\x78\x74\x3e\x0d\x0a\x3c\x2f\x73\
+\x76\x67\x3e\x0d\x0a\
+\x00\x00\x04\xc1\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x32\x33\x2e\x31\x2e\x30\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\x73\
+\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\xd0\xa1\
+\xd0\xbb\xd0\xbe\xd0\xb9\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
+\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
+\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\
+\x6f\x78\x3d\x22\x30\x20\x30\x20\x32\x35\x36\x20\x32\x35\x36\x22\
+\x20\x73\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\
+\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\
+\x30\x20\x32\x35\x36\x20\x32\x35\x36\x3b\x22\x20\x78\x6d\x6c\x3a\
+\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\
+\x3e\x0d\x0a\x3c\x73\x74\x79\x6c\x65\x20\x74\x79\x70\x65\x3d\x22\
+\x74\x65\x78\x74\x2f\x63\x73\x73\x22\x3e\x0d\x0a\x09\x2e\x73\x74\
+\x30\x7b\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\
+\x6b\x65\x3a\x23\x39\x39\x39\x39\x39\x39\x3b\x73\x74\x72\x6f\x6b\
+\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\x36\x3b\x73\x74\x72\x6f\x6b\
+\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3a\x31\x30\x3b\x7d\x0d\x0a\x09\x2e\x73\x74\x31\x7b\x66\x69\
+\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\
+\x34\x44\x34\x44\x34\x44\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
+\x64\x74\x68\x3a\x31\x35\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
+\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\
+\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\
+\x3b\x7d\x0d\x0a\x09\x2e\x73\x74\x32\x7b\x66\x69\x6c\x6c\x3a\x6e\
+\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x39\x39\x39\x39\
+\x39\x39\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\
+\x33\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\
+\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\
+\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x7d\x0d\x0a\
+\x09\x2e\x73\x74\x33\x7b\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\
+\x73\x74\x72\x6f\x6b\x65\x3a\x23\x36\x36\x36\x36\x36\x36\x3b\x73\
+\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\x31\x3b\x73\
+\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\
+\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\
+\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x7d\x0d\x0a\x09\x2e\x73\x74\
+\x34\x7b\x66\x69\x6c\x6c\x3a\x23\x30\x34\x32\x30\x30\x30\x3b\x7d\
+\x0d\x0a\x09\x2e\x73\x74\x35\x7b\x66\x6f\x6e\x74\x2d\x66\x61\x6d\
+\x69\x6c\x79\x3a\x27\x4d\x79\x72\x69\x61\x64\x50\x72\x6f\x2d\x52\
+\x65\x67\x75\x6c\x61\x72\x27\x3b\x7d\x0d\x0a\x09\x2e\x73\x74\x36\
+\x7b\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x31\x31\x37\x2e\x37\
+\x38\x37\x32\x70\x78\x3b\x7d\x0d\x0a\x3c\x2f\x73\x74\x79\x6c\x65\
+\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x63\
+\x6c\x61\x73\x73\x3d\x22\x73\x74\x30\x22\x20\x64\x3d\x22\x4d\x31\
+\x33\x33\x2c\x31\x39\x33\x63\x30\x2d\x39\x30\x2e\x36\x35\x2c\x34\
+\x38\x2e\x33\x2d\x31\x36\x34\x2c\x31\x30\x38\x2d\x31\x36\x34\x22\
+\x2f\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\
+\x3d\x22\x73\x74\x31\x22\x20\x64\x3d\x22\x4d\x31\x33\x33\x2c\x31\
+\x39\x33\x63\x30\x2d\x39\x30\x2e\x36\x35\x2c\x34\x38\x2e\x33\x2d\
+\x31\x36\x34\x2c\x31\x30\x38\x2d\x31\x36\x34\x22\x2f\x3e\x0d\x0a\
+\x3c\x2f\x67\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\x3c\x70\x61\x74\
+\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x73\x74\x32\x22\x20\x64\x3d\
+\x22\x4d\x32\x32\x2c\x32\x33\x35\x63\x37\x37\x2e\x34\x37\x2d\x35\
+\x37\x2e\x34\x35\x2c\x31\x37\x33\x2e\x36\x33\x2d\x35\x38\x2e\x37\
+\x39\x2c\x32\x31\x35\x2d\x33\x22\x2f\x3e\x0d\x0a\x09\x3c\x70\x61\
+\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x73\x74\x33\x22\x20\x64\
+\x3d\x22\x4d\x32\x32\x2c\x32\x33\x35\x63\x37\x37\x2e\x34\x37\x2d\
+\x35\x37\x2e\x34\x35\x2c\x31\x37\x33\x2e\x36\x33\x2d\x35\x38\x2e\
+\x37\x39\x2c\x32\x31\x35\x2d\x33\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\
+\x3e\x0d\x0a\x3c\x74\x65\x78\x74\x20\x74\x72\x61\x6e\x73\x66\x6f\
+\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x38\x30\x30\
+\x32\x20\x30\x20\x30\x20\x31\x20\x34\x2e\x30\x34\x33\x35\x20\x39\
+\x33\x2e\x35\x35\x33\x32\x29\x22\x20\x63\x6c\x61\x73\x73\x3d\x22\
+\x73\x74\x34\x20\x73\x74\x35\x20\x73\x74\x36\x22\x3e\x4f\x4e\x3c\
+\x2f\x74\x65\x78\x74\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\
+\x00\x00\x07\x72\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x32\x33\x2e\x31\x2e\x30\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\x73\
+\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\xd0\xa1\
+\xd0\xbb\xd0\xbe\xd0\xb9\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
+\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
+\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\
+\x6f\x78\x3d\x22\x30\x20\x30\x20\x32\x35\x36\x20\x32\x35\x36\x22\
+\x20\x73\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\
+\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\
+\x30\x20\x32\x35\x36\x20\x32\x35\x36\x3b\x22\x20\x78\x6d\x6c\x3a\
+\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\
+\x3e\x0d\x0a\x3c\x73\x74\x79\x6c\x65\x20\x74\x79\x70\x65\x3d\x22\
+\x74\x65\x78\x74\x2f\x63\x73\x73\x22\x3e\x0d\x0a\x09\x2e\x73\x74\
+\x30\x7b\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\
+\x6b\x65\x3a\x23\x46\x46\x46\x43\x33\x45\x3b\x73\x74\x72\x6f\x6b\
+\x65\x2d\x77\x69\x64\x74\x68\x3a\x39\x3b\x73\x74\x72\x6f\x6b\x65\
+\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\
+\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\
+\x3a\x31\x30\x3b\x7d\x0d\x0a\x09\x2e\x73\x74\x31\x7b\x66\x69\x6c\
+\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x37\
+\x30\x37\x31\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\
+\x74\x68\x3a\x31\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\
+\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\
+\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\
+\x7d\x0d\x0a\x09\x2e\x73\x74\x32\x7b\x66\x69\x6c\x6c\x3a\x6e\x6f\
+\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x46\x34\x46\x46\x30\
+\x32\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x31\
+\x32\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\
+\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\
+\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x7d\x0d\x0a\x09\
+\x2e\x73\x74\x33\x7b\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\
+\x74\x72\x6f\x6b\x65\x3a\x23\x36\x36\x36\x36\x36\x36\x3b\x73\x74\
+\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x31\x32\x3b\x73\x74\
+\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\
+\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\
+\x69\x6d\x69\x74\x3a\x31\x30\x3b\x7d\x0d\x0a\x3c\x2f\x73\x74\x79\
+\x6c\x65\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\
+\x20\x63\x6c\x61\x73\x73\x3d\x22\x73\x74\x30\x22\x20\x64\x3d\x22\
+\x4d\x31\x38\x2e\x35\x2c\x31\x32\x37\x2e\x35\x63\x30\x2d\x36\x32\
+\x2e\x34\x36\x2c\x34\x34\x2e\x37\x33\x2d\x31\x31\x33\x2c\x31\x30\
+\x30\x2d\x31\x31\x33\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\
+\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\x22\x73\x74\x30\
+\x22\x20\x64\x3d\x22\x4d\x34\x36\x2c\x31\x33\x36\x63\x30\x2d\x35\
+\x35\x2e\x32\x37\x2c\x32\x39\x2e\x39\x37\x2d\x31\x30\x30\x2c\x36\
+\x37\x2d\x31\x30\x30\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\
+\x63\x6c\x61\x73\x73\x3d\x22\x73\x74\x30\x22\x20\x64\x3d\x22\x4d\
+\x37\x31\x2e\x35\x2c\x31\x34\x36\x2e\x35\x63\x30\x2d\x34\x35\x2e\
+\x38\x38\x2c\x31\x35\x2e\x32\x31\x2d\x38\x33\x2c\x33\x34\x2d\x38\
+\x33\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\
+\x73\x3d\x22\x73\x74\x30\x22\x20\x64\x3d\x22\x4d\x39\x30\x2e\x35\
+\x2c\x31\x35\x34\x2e\x35\x63\x30\x2d\x33\x33\x2e\x31\x36\x2c\x34\
+\x2e\x30\x33\x2d\x36\x30\x2c\x39\x2d\x36\x30\x22\x2f\x3e\x0d\x0a\
+\x3c\x67\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\
+\x73\x3d\x22\x73\x74\x31\x22\x20\x64\x3d\x22\x4d\x31\x38\x36\x2e\
+\x38\x37\x2c\x34\x33\x63\x32\x39\x2e\x38\x32\x2c\x31\x37\x2e\x36\
+\x33\x2c\x33\x39\x2e\x30\x37\x2c\x35\x35\x2e\x30\x36\x2c\x32\x30\
+\x2e\x36\x35\x2c\x38\x33\x2e\x36\x31\x63\x2d\x31\x34\x2e\x37\x34\
+\x2c\x32\x32\x2e\x38\x34\x2d\x34\x36\x2e\x30\x32\x2c\x32\x39\x2e\
+\x39\x31\x2d\x36\x39\x2e\x38\x38\x2c\x31\x35\x2e\x38\x31\x0d\x0a\
+\x09\x09\x63\x2d\x31\x39\x2e\x30\x39\x2d\x31\x31\x2e\x32\x38\x2d\
+\x32\x35\x2d\x33\x35\x2e\x32\x34\x2d\x31\x33\x2e\x32\x31\x2d\x35\
+\x33\x2e\x35\x31\x63\x39\x2e\x34\x33\x2d\x31\x34\x2e\x36\x31\x2c\
+\x32\x39\x2e\x34\x35\x2d\x31\x39\x2e\x31\x34\x2c\x34\x34\x2e\x37\
+\x32\x2d\x31\x30\x2e\x31\x32\x63\x31\x32\x2e\x32\x32\x2c\x37\x2e\
+\x32\x32\x2c\x31\x36\x2c\x32\x32\x2e\x35\x35\x2c\x38\x2e\x34\x36\
+\x2c\x33\x34\x2e\x32\x35\x0d\x0a\x09\x09\x63\x2d\x36\x2e\x30\x34\
+\x2c\x39\x2e\x33\x35\x2d\x31\x38\x2e\x38\x35\x2c\x31\x32\x2e\x32\
+\x35\x2d\x32\x38\x2e\x36\x32\x2c\x36\x2e\x34\x38\x63\x2d\x37\x2e\
+\x38\x32\x2d\x34\x2e\x36\x32\x2d\x31\x30\x2e\x32\x34\x2d\x31\x34\
+\x2e\x34\x33\x2d\x35\x2e\x34\x31\x2d\x32\x31\x2e\x39\x32\x63\x33\
+\x2e\x38\x36\x2d\x35\x2e\x39\x39\x2c\x31\x32\x2e\x30\x36\x2d\x37\
+\x2e\x38\x34\x2c\x31\x38\x2e\x33\x32\x2d\x34\x2e\x31\x34\x0d\x0a\
+\x09\x09\x63\x35\x2c\x32\x2e\x39\x36\x2c\x36\x2e\x35\x35\x2c\x39\
+\x2e\x32\x34\x2c\x33\x2e\x34\x36\x2c\x31\x34\x2e\x30\x33\x63\x2d\
+\x32\x2e\x34\x37\x2c\x33\x2e\x38\x33\x2d\x37\x2e\x37\x32\x2c\x35\
+\x2e\x30\x32\x2d\x31\x31\x2e\x37\x32\x2c\x32\x2e\x36\x35\x22\x2f\
+\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x63\x6c\x61\x73\x73\x3d\
+\x22\x73\x74\x32\x22\x20\x64\x3d\x22\x4d\x31\x38\x36\x2e\x38\x37\
+\x2c\x34\x33\x63\x32\x39\x2e\x38\x32\x2c\x31\x37\x2e\x36\x33\x2c\
+\x33\x39\x2e\x30\x37\x2c\x35\x35\x2e\x30\x36\x2c\x32\x30\x2e\x36\
+\x35\x2c\x38\x33\x2e\x36\x31\x63\x2d\x31\x34\x2e\x37\x34\x2c\x32\
+\x32\x2e\x38\x34\x2d\x34\x36\x2e\x30\x32\x2c\x32\x39\x2e\x39\x31\
+\x2d\x36\x39\x2e\x38\x38\x2c\x31\x35\x2e\x38\x31\x0d\x0a\x09\x09\
+\x63\x2d\x31\x39\x2e\x30\x39\x2d\x31\x31\x2e\x32\x38\x2d\x32\x35\
+\x2d\x33\x35\x2e\x32\x34\x2d\x31\x33\x2e\x32\x31\x2d\x35\x33\x2e\
+\x35\x31\x63\x39\x2e\x34\x33\x2d\x31\x34\x2e\x36\x31\x2c\x32\x39\
+\x2e\x34\x35\x2d\x31\x39\x2e\x31\x34\x2c\x34\x34\x2e\x37\x32\x2d\
+\x31\x30\x2e\x31\x32\x63\x31\x32\x2e\x32\x32\x2c\x37\x2e\x32\x32\
+\x2c\x31\x36\x2c\x32\x32\x2e\x35\x35\x2c\x38\x2e\x34\x36\x2c\x33\
+\x34\x2e\x32\x35\x0d\x0a\x09\x09\x63\x2d\x36\x2e\x30\x34\x2c\x39\
+\x2e\x33\x35\x2d\x31\x38\x2e\x38\x35\x2c\x31\x32\x2e\x32\x35\x2d\
+\x32\x38\x2e\x36\x32\x2c\x36\x2e\x34\x38\x63\x2d\x37\x2e\x38\x32\
+\x2d\x34\x2e\x36\x32\x2d\x31\x30\x2e\x32\x34\x2d\x31\x34\x2e\x34\
+\x33\x2d\x35\x2e\x34\x31\x2d\x32\x31\x2e\x39\x32\x63\x33\x2e\x38\
+\x36\x2d\x35\x2e\x39\x39\x2c\x31\x32\x2e\x30\x36\x2d\x37\x2e\x38\
+\x34\x2c\x31\x38\x2e\x33\x32\x2d\x34\x2e\x31\x34\x0d\x0a\x09\x09\
+\x63\x35\x2c\x32\x2e\x39\x36\x2c\x36\x2e\x35\x35\x2c\x39\x2e\x32\
+\x34\x2c\x33\x2e\x34\x36\x2c\x31\x34\x2e\x30\x33\x63\x2d\x32\x2e\
+\x34\x37\x2c\x33\x2e\x38\x33\x2d\x37\x2e\x37\x32\x2c\x35\x2e\x30\
+\x32\x2d\x31\x31\x2e\x37\x32\x2c\x32\x2e\x36\x35\x22\x2f\x3e\x0d\
+\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x6c\x69\x6e\x65\x20\x63\x6c\x61\
+\x73\x73\x3d\x22\x73\x74\x33\x22\x20\x78\x31\x3d\x22\x31\x32\x39\
+\x22\x20\x79\x31\x3d\x22\x31\x37\x34\x22\x20\x78\x32\x3d\x22\x31\
+\x30\x37\x22\x20\x79\x32\x3d\x22\x32\x31\x39\x22\x2f\x3e\x0d\x0a\
+\x3c\x6c\x69\x6e\x65\x20\x63\x6c\x61\x73\x73\x3d\x22\x73\x74\x33\
+\x22\x20\x78\x31\x3d\x22\x31\x37\x31\x22\x20\x79\x31\x3d\x22\x31\
+\x37\x32\x22\x20\x78\x32\x3d\x22\x32\x30\x30\x22\x20\x79\x32\x3d\
+\x22\x32\x34\x36\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
+\x0a\
+"
+
+qt_resource_name = b"\
+\x00\x03\
+\x00\x00\x70\x37\
+\x00\x69\
+\x00\x6d\x00\x67\
+\x00\x0b\
+\x05\x2c\x2e\x07\
+\x00\x6c\
+\x00\x65\x00\x64\x00\x5f\x00\x6f\x00\x66\x00\x66\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x07\
+\x05\xc9\x5a\x27\
+\x00\x6f\
+\x00\x66\x00\x66\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x06\
+\x05\x41\x5a\xc7\
+\x00\x4f\
+\x00\x4e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0a\
+\x06\x6f\x0d\x87\
+\x00\x6c\
+\x00\x65\x00\x64\x00\x5f\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+"
+
+qt_resource_struct_v1 = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x02\
+\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x0a\xea\
+\x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x06\x20\
+\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x0f\xaf\
+"
+
+qt_resource_struct_v2 = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x02\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x01\x84\xf8\x3a\xc3\xc5\
+\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x0a\xea\
+\x00\x00\x01\x84\xf8\x31\x3f\xc7\
+\x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x06\x20\
+\x00\x00\x01\x84\xf8\x33\x7b\x76\
+\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x0f\xaf\
+\x00\x00\x01\x84\xf8\x3a\x34\x95\
+"
+
+qt_version = [int(v) for v in QtCore.qVersion().split('.')]
+if qt_version < [5, 8, 0]:
+ rcc_version = 1
+ qt_resource_struct = qt_resource_struct_v1
+else:
+ rcc_version = 2
+ qt_resource_struct = qt_resource_struct_v2
+
+def qInitResources():
+ QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+ QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/TODO.txt b/TODO.txt
new file mode 100644
index 0000000..cfdec2f
--- /dev/null
+++ b/TODO.txt
@@ -0,0 +1,24 @@
+https://www.youtube.com/watch?v=CnMfhhx0GBI&list=PL0lO_mIqDDFXeDkOLHmEsL_HAEhw4-xDX&index=3&ab_channel=%D0%93%D0%BE%D1%88%D0%B0%D0%94%D1%83%D0%B4%D0%B0%D1%80%D1%8C
+
+создаем UI
+сохраняем .ui
+преобразуем через cmd в .py в каталоге рабочем
+ pyuic5 -x PyQt_app.ui -o main.py
+нужна библиотека для Py: в консоди Visual Studio вбиваем: python -m pip install requests
+
+
+
+
+для компиляции py-программы в .exe:
+
+# Открыть командную строку windows
+# Установить pyinstaller
+
+pip install pyinstaller
+
+# Затем перейти в папку с Вашим файлом .py в командной строке (при помощи команды cd)
+# Запустить команду pyinstaller не забудьте указать имя вашего скрипта
+
+pyinstaller --onefile main.py
+
+# Всё - у вас в папке появится папка src и там будет .exe файл.
diff --git a/config.json b/config.json
new file mode 100644
index 0000000..6214a7f
--- /dev/null
+++ b/config.json
@@ -0,0 +1,20 @@
+{
+ "uiFileName": "PyQt_app.ui",
+ "uiPath": "ui/",
+ "defaultMDNSname": "esp8266",
+ "defaultPostRoute": "/postvalue",
+ "defaultGetRoute": "/sensval",
+ "pressure": "355",
+ "temperature": [2, 45, 56, 66, 12, 30, 23, 25, 22, 15],
+ "button1State": "True",
+ "button2State": "False",
+ "button3State": "True",
+ "ambient_light": "1",
+ "red_light": "1",
+ "green_light":"1",
+ "blue_light":"0",
+ "lightness": "0",
+ "acceleration_x": "12",
+ "acceleration_y": "23",
+ "acceleration_z": "11"
+}
\ No newline at end of file
diff --git a/main.py b/main.py
new file mode 100644
index 0000000..dad8939
--- /dev/null
+++ b/main.py
@@ -0,0 +1,299 @@
+from PyQt5 import QtCore, QtGui, QtWidgets
+from PyQt5 import uic
+from PyQt5.QtGui import QColor, QPalette
+from PyQt5.QtGui import QPixmap
+from PyQt5.QtCore import QTimer
+from PyQt5.QtWidgets import *
+from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
+
+import requests
+import time
+import json
+import Res_rc
+import copy
+import pyqtgraph as pg
+#import matplotlib.pyplot as plt
+#import sys
+
+colors = {} #переменная для работы с цветом, позже нам понадобится
+last_clicked_label = None
+plotLen = 20
+valArr = [20] * plotLen
+plot = None
+
+def led1 (checked): #отвечает за включение первого светодиода
+ if checked:
+ form.pushButton_2.setText("Выкл")
+ print("I'm worked too much")
+ form.label_24.hide()
+ form.label_20.show()
+ else:
+ form.label_20.hide()
+ form.label_24.show()
+ form.pushButton_2.setText("Вкл")
+ print ("I'm worked too")
+
+def led2 (checked): #отвечает за включение второго светодиода
+ if checked:
+ form.pushButton_3.setText("Выкл")
+ print("I'm worked too much")
+ form.label_27.hide()
+ form.label_26.show()
+ else:
+ form.label_26.hide()
+ form.label_27.show()
+ form.pushButton_3.setText("Вкл")
+ print ("I'm worked too")
+
+def led3 (checked): #отвечает за включение третьего светодиода
+ if checked:
+ form.pushButton_4.setText("Выкл")
+ print("I'm worked too much")
+ form.label_31.hide()
+ form.label_29.show()
+ #state = form.label_24.isVisible()
+
+ else:
+ form.label_29.hide()
+ form.label_31.show()
+ form.pushButton_4.setText("Вкл")
+ print ("I'm worked too")
+
+
+def updateLCD(): #обновление дисплея
+ global temp #переменная для работы с дисплеем
+ form.lcdNumber.display(temp)
+
+def sed (): #проверка работы элемента
+ print ("I'm worked!")
+
+led_data = { #список начальных параметров у светодиода
+ "leds1": {"red": 0, "green": 0, "blue": 0},
+ "leds2": {"red": 0, "green": 0, "blue": 0},
+ "leds3": {"red": 0, "green": 0, "blue": 0},
+ "leds4": {"red": 0, "green": 0, "blue": 0},
+ "leds5": {"red": 0, "green": 0, "blue": 0},
+ "leds6": {"red": 0, "green": 0, "blue": 0},
+ "leds7": {"red": 0, "green": 0, "blue": 0},
+ "leds8": {"red": 0, "green": 0, "blue": 0},
+}
+
+def vkl():
+ for led in form.leds:
+ #осторожно! Одинаковые названия у объектов Led и JSON.
+ led.setStyleSheet(f"background-color: yellow;")
+ led_data[led.objectName()]["red"] = 255
+ led_data[led.objectName()]["green"] = 255
+ led_data[led.objectName()]["blue"] = 0
+
+def vikl():
+ for led in form.leds:
+ #осторожно! Одинаковые названия у объектов Led и JSON.
+ led.setStyleSheet(f"background-color: black;")
+ led_data[led.objectName()]["red"] = 0
+ led_data[led.objectName()]["green"] = 0
+ led_data[led.objectName()]["blue"] = 0
+
+def color():
+ color = QColorDialog.getColor() #получение цвета от диалога
+ if color.isValid(): #проверка наличия цвета и применение его над изображением программы
+ palette = QPalette()
+ palette.setColor(QPalette.Button, color)
+ form.color_b.setPalette(palette)
+ for led in form.leds:
+ led.setStyleSheet(f"background-color: {color.name()};")
+ led_data[led.objectName()]["red"] = color.red()
+ led_data[led.objectName()]["green"] = color.green()
+ led_data[led.objectName()]["blue"] = color.blue()
+
+def led_clicked(event):
+ colors = led.palette().color(QPalette.Background)
+ sender= QApplication.widgetAt(event.globalPos()) #QApplication.widgetAt() для получения текущего виджета, на котором было совершено действие
+ color = QColorDialog.getColor()
+ if color.isValid():
+ #caution! Naming will be the same for a Led and JSON led objects
+ sender.setStyleSheet(f"background-color: {color.name()};")
+ led_data[sender.objectName()]["red"] = color.red()
+ led_data[sender.objectName()]["green"] = color.green()
+ led_data[sender.objectName()]["blue"] = color.blue()
+ else:
+ form.leds.setStyleSheet(" ")
+
+def sendMessage():
+ url = form.lineEdit.text()
+ labels_dict = {}
+ labels_dict["LED1"] = form.label_20.isVisible()
+ labels_dict["LED2"] = form.label_26.isVisible()
+ labels_dict["LED3"] = form.label_29.isVisible()
+
+ json_data = {}
+ json_data.update(led_data)
+ json_data.update(labels_dict)
+ json_str = json.dumps(json_data, separators=(',', ':'))
+
+ data_str = 'Я отправляю текст на: ' + url + '\n'+ json_str
+ form.textEdit.setPlainText(data_str)
+
+ headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} #заголовки запроса
+ response = requests.post(url, json=json_data, headers=headers) #отправка POST запроса
+
+ # обрабатываем ответ и выводим его в поле вывода
+ if response.status_code == 200:
+ form.textEdit.append('О, все прошло успешно!\n') #выводим значение в line_edit
+ else:
+ form.textEdit.append('Ошибка при получении данных')
+
+
+
+def getValueFromMacket():
+ url = form.lineEdit_2.text()
+ response = requests.get(url) #отправка POST запроса
+
+ # обрабатываем ответ и выводим его в поле вывода
+ if response.status_code == 200:
+ data=response.json() #функция преобразования данных в объект питон
+ #Parse the date
+ form.textEdit.append(json.dumps(data)) #выводим значение в line_edit
+ form.textEdit.append(str(data["temperature"]))
+
+ bs = list()
+ bs.append(data["button1State"])
+ bs.append(data["button2State"])
+ bs.append(data["button3State"])
+ update_button(bs)
+
+ update_pressure(data["pressure"])
+
+ form.lcdNumber_7.display(data["ambient_light"])
+ form.lcdNumber_2.display (data["red_light"])
+ form.lcdNumber_3.display (data["green_light"])
+ form.lcdNumber_4.display (data["blue_light"])
+ form.lcdNumber_8.display (data["lightness"])
+
+ form.lcdNumber_5.display(data['acceleration_x'])
+ form.lcdNumber_9.display (data['acceleration_y'])
+ form.lcdNumber_6.display (data['acceleration_z'])
+
+ led1(data['LED1'])
+ led2(data['LED2'])
+ led3(data['LED3'])
+ valArr.pop(0)
+ valArr.append(data["temperature"])
+ print(valArr)
+ UpdatePlot(plot, valArr)
+ else:
+ form.textEdit.append('Ошибка при получении данных')
+
+
+#json.load(file) @ACHT! Method to convert Str to JSON
+
+
+def update_pressure(p):
+ form.lcd_pressure.display(p)
+
+def update_button (bs):
+ for i in range(1, 4):
+ button_state = bs[i-1]
+ if button_state == 'True':
+ getattr(form, f'on_{i}').show()
+ getattr(form, f'off_{i}').hide()
+ else:
+ getattr(form, f'on_{i}').hide()
+ getattr(form, f'off_{i}').show()
+
+
+def UpdatePlot(plot, val):
+ x = list(range(1, len(valArr)+1))
+ bargraph = pg.BarGraphItem(x = x, height = val, width = 0.6, brush ='g')
+ plot.clear()
+ plot.addItem(bargraph)
+
+def Plots(form, valArr):
+ widget = QWidget()
+ plot = pg.plot() #создает объект PlotWidget из библиотеки PyqtGraph
+
+ x = list(range(1, len(valArr)+1))
+ bargraph = pg.BarGraphItem(x = x, height = valArr, width = 0.6, brush ='g')
+ plot.addItem(bargraph)
+
+ # Creating a grid layout
+ layout = QGridLayout()
+ layout.addWidget(plot, 0,0)
+ form.plotwidget.setLayout(layout)
+
+ return plot
+
+
+if __name__ == "__main__":
+ # Opening JSON file
+ f = open('config.json') #открывает файл 'config.json', загружает его содержимое в переменную 'conf' в формате словаря (dictionary) при помощи функции 'json.load()', а затем выводит все ключи словаря 'conf' при помощи цикла 'for'.
+ conf = json.load(open('config.json'))
+ f.close()
+
+ print("Find an arguments:")
+ for i in conf:
+ print(i)
+
+ import sys
+
+ Form, Window = uic.loadUiType(conf['uiPath'] + conf['uiFileName'])
+
+ app = QApplication(sys.argv)# Создаем экземпляр QApplication и передаем параметры командной строки
+ window = Window()
+ form = Form()
+ form.setupUi(window)
+ window.show() # Окна скрыты по умолчанию!
+ window.setWindowTitle('Lr4') #nazvanie
+ form.pushButton.clicked.connect(sendMessage) #привязываем функцию к кнопке Отправить
+ form.lineEdit.setText("http://" + conf['defaultMDNSname'] + conf['defaultPostRoute'])
+ form.lineEdit_2.setText("http://" + conf['defaultMDNSname'] + conf['defaultGetRoute'])
+ form.pushButton_5.clicked.connect(getValueFromMacket) #привязываем функцию к кнопке Отправить GET запрос
+
+
+ form.pushButton_2.setCheckable(True) #вкл режим перекл
+ form.pushButton_2.setChecked(False) #нач значение
+ form.label_20.hide()
+ form.pushButton_2.toggled["bool"].connect(led1)
+
+ form.pushButton_3.setCheckable(True) #вкл режим перекл
+ form.pushButton_3.setChecked(False) #нач значение
+ form.label_26.hide()
+ form.pushButton_3.toggled["bool"].connect(led2)
+
+ form.pushButton_4.setCheckable(True) #вкл режим перекл
+ form.pushButton_4.setChecked(False) #нач значение
+ form.label_29.hide()
+ form.pushButton_4.toggled["bool"].connect(led3)
+
+ form.on_1.hide()
+ form.on_2.hide()
+ form.on_3.hide()
+
+ form.lcdNumber.display(45)
+
+
+ form.leds = [form.leds1, form.leds2, form.leds3, form.leds4, form.leds5, form.leds6, form.leds7, form.leds8]
+
+
+ for led in form.leds:
+ led.mousePressEvent = led_clicked
+
+ timer = QTimer()
+ timer.setInterval(1000)
+
+ #Connect the timer to the update_pressure function
+ #TODO connect to getSensValue from macket
+ #timer.timeout.connect(update_pressure)
+ #timer.timeout.connect (update_button)
+ #timer.timeout.connect (update_light)
+ #timer.timeout.connect (update_acceleration)
+
+ timer.start()
+
+ form.vkl_b.clicked.connect(vkl)
+ form.vikl_b.clicked.connect(vikl)
+ form.color_b.clicked.connect(color)
+
+ plot = Plots(form, valArr)
+
+ sys.exit (app.exec_()) # Запуск цикла событий
diff --git a/res/ON.ai b/res/ON.ai
new file mode 100644
index 0000000..5d00bfa
--- /dev/null
+++ b/res/ON.ai
@@ -0,0 +1,1991 @@
+%PDF-1.5
%
+1 0 obj
<>/OCGs[6 0 R]>>/Pages 3 0 R/Type/Catalog>>
endobj
2 0 obj
<>stream
+
+
+
+
+ application/pdf
+
+
+ ON
+
+
+ Adobe Illustrator CC 23.1 (Windows)
+ 2022-12-09T21:41:21+04:00
+ 2022-12-09T21:41:21+03:00
+ 2022-12-09T21:41:21+03:00
+
+
+
+ 252
+ 256
+ JPEG
+ /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAD8AwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7
FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F
XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXjX5pf
85N+UPJ1zNpWlR/p7XISUmihcLbQuNisswDVYd1QHwJU5CU6a5ZAHg2sf85XfnBfTF7O8tdJjrVY
7W1icAeFbkXByvjLWchQ+n/85S/nPazCSfV4b5Kg+jcWdsq7dv3CQtv88eMo8QvZPy3/AOct/L2s
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
/9k=
+
+
+
+ proof:pdf
+ uuid:65E6390686CF11DBA6E2D887CEACB407
+ xmp.did:f21e7334-f896-6c49-bd16-a1a079af79ac
+ uuid:34003430-70c8-4c7d-90f4-f44cf5b18b24
+
+ uuid:02806ef1-7d48-4901-89f2-df789e3ea4ba
+ xmp.did:55ded6ca-9a6a-d841-9da4-d4dd790691e9
+ uuid:65E6390686CF11DBA6E2D887CEACB407
+ proof:pdf
+
+
+
+
+ saved
+ xmp.iid:f21e7334-f896-6c49-bd16-a1a079af79ac
+ 2022-12-09T21:41:19+03:00
+ Adobe Illustrator CC 23.1 (Windows)
+ /
+
+
+
+ Web
+ Document
+ 1
+ False
+ False
+
+ 256.000000
+ 256.000000
+ Pixels
+
+
+
+
+ MyriadPro-Regular
+ Myriad Pro
+ Regular
+ Open Type
+ Version 2.062;PS 2.000;hotconv 1.0.57;makeotf.lib2.0.21895
+ False
+ MyriadPro-Regular.otf
+
+
+
+
+
+ Cyan
+ Magenta
+ Yellow
+ Black
+
+
+
+
+
+ Группа образцов по умолчанию
+ 0
+
+
+
+ Белый
+ RGB
+ PROCESS
+ 255
+ 255
+ 255
+
+
+ Черный
+ RGB
+ PROCESS
+ 0
+ 0
+ 0
+
+
+ RGB красный
+ RGB
+ PROCESS
+ 255
+ 0
+ 0
+
+
+ RGB желтый
+ RGB
+ PROCESS
+ 255
+ 255
+ 0
+
+
+ RGB зеленый
+ RGB
+ PROCESS
+ 0
+ 255
+ 0
+
+
+ RGB голубой
+ RGB
+ PROCESS
+ 0
+ 255
+ 255
+
+
+ RGB синий
+ RGB
+ PROCESS
+ 0
+ 0
+ 255
+
+
+ RGB пурпурный
+ RGB
+ PROCESS
+ 255
+ 0
+ 255
+
+
+ R=193 G=39 B=45
+ RGB
+ PROCESS
+ 193
+ 39
+ 45
+
+
+ R=237 G=28 B=36
+ RGB
+ PROCESS
+ 237
+ 28
+ 36
+
+
+ R=241 G=90 B=36
+ RGB
+ PROCESS
+ 241
+ 90
+ 36
+
+
+ R=247 G=147 B=30
+ RGB
+ PROCESS
+ 247
+ 147
+ 30
+
+
+ R=251 G=176 B=59
+ RGB
+ PROCESS
+ 251
+ 176
+ 59
+
+
+ R=252 G=238 B=33
+ RGB
+ PROCESS
+ 252
+ 238
+ 33
+
+
+ R=217 G=224 B=33
+ RGB
+ PROCESS
+ 217
+ 224
+ 33
+
+
+ R=140 G=198 B=63
+ RGB
+ PROCESS
+ 140
+ 198
+ 63
+
+
+ R=57 G=181 B=74
+ RGB
+ PROCESS
+ 57
+ 181
+ 74
+
+
+ R=0 G=146 B=69
+ RGB
+ PROCESS
+ 0
+ 146
+ 69
+
+
+ R=0 G=104 B=55
+ RGB
+ PROCESS
+ 0
+ 104
+ 55
+
+
+ R=34 G=181 B=115
+ RGB
+ PROCESS
+ 34
+ 181
+ 115
+
+
+ R=0 G=169 B=157
+ RGB
+ PROCESS
+ 0
+ 169
+ 157
+
+
+ R=41 G=171 B=226
+ RGB
+ PROCESS
+ 41
+ 171
+ 226
+
+
+ R=0 G=113 B=188
+ RGB
+ PROCESS
+ 0
+ 113
+ 188
+
+
+ R=46 G=49 B=146
+ RGB
+ PROCESS
+ 46
+ 49
+ 146
+
+
+ R=27 G=20 B=100
+ RGB
+ PROCESS
+ 27
+ 20
+ 100
+
+
+ R=102 G=45 B=145
+ RGB
+ PROCESS
+ 102
+ 45
+ 145
+
+
+ R=147 G=39 B=143
+ RGB
+ PROCESS
+ 147
+ 39
+ 143
+
+
+ R=158 G=0 B=93
+ RGB
+ PROCESS
+ 158
+ 0
+ 93
+
+
+ R=212 G=20 B=90
+ RGB
+ PROCESS
+ 212
+ 20
+ 90
+
+
+ R=237 G=30 B=121
+ RGB
+ PROCESS
+ 237
+ 30
+ 121
+
+
+ R=199 G=178 B=153
+ RGB
+ PROCESS
+ 199
+ 178
+ 153
+
+
+ R=153 G=134 B=117
+ RGB
+ PROCESS
+ 153
+ 134
+ 117
+
+
+ R=115 G=99 B=87
+ RGB
+ PROCESS
+ 115
+ 99
+ 87
+
+
+ R=83 G=71 B=65
+ RGB
+ PROCESS
+ 83
+ 71
+ 65
+
+
+ R=198 G=156 B=109
+ RGB
+ PROCESS
+ 198
+ 156
+ 109
+
+
+ R=166 G=124 B=82
+ RGB
+ PROCESS
+ 166
+ 124
+ 82
+
+
+ R=140 G=98 B=57
+ RGB
+ PROCESS
+ 140
+ 98
+ 57
+
+
+ R=117 G=76 B=36
+ RGB
+ PROCESS
+ 117
+ 76
+ 36
+
+
+ R=96 G=56 B=19
+ RGB
+ PROCESS
+ 96
+ 56
+ 19
+
+
+ R=66 G=33 B=11
+ RGB
+ PROCESS
+ 66
+ 33
+ 11
+
+
+
+
+
+ Оттенки серого
+ 1
+
+
+
+ R=0 G=0 B=0
+ RGB
+ PROCESS
+ 0
+ 0
+ 0
+
+
+ R=26 G=26 B=26
+ RGB
+ PROCESS
+ 26
+ 26
+ 26
+
+
+ R=51 G=51 B=51
+ RGB
+ PROCESS
+ 51
+ 51
+ 51
+
+
+ R=77 G=77 B=77
+ RGB
+ PROCESS
+ 77
+ 77
+ 77
+
+
+ R=102 G=102 B=102
+ RGB
+ PROCESS
+ 102
+ 102
+ 102
+
+
+ R=128 G=128 B=128
+ RGB
+ PROCESS
+ 128
+ 128
+ 128
+
+
+ R=153 G=153 B=153
+ RGB
+ PROCESS
+ 153
+ 153
+ 153
+
+
+ R=179 G=179 B=179
+ RGB
+ PROCESS
+ 179
+ 179
+ 179
+
+
+ R=204 G=204 B=204
+ RGB
+ PROCESS
+ 204
+ 204
+ 204
+
+
+ R=230 G=230 B=230
+ RGB
+ PROCESS
+ 230
+ 230
+ 230
+
+
+ R=242 G=242 B=242
+ RGB
+ PROCESS
+ 242
+ 242
+ 242
+
+
+
+
+
+ Цветовая группа для Web
+ 1
+
+
+
+ R=63 G=169 B=245
+ RGB
+ PROCESS
+ 63
+ 169
+ 245
+
+
+ R=122 G=201 B=67
+ RGB
+ PROCESS
+ 122
+ 201
+ 67
+
+
+ R=255 G=147 B=30
+ RGB
+ PROCESS
+ 255
+ 147
+ 30
+
+
+ R=255 G=29 B=37
+ RGB
+ PROCESS
+ 255
+ 29
+ 37
+
+
+ R=255 G=123 B=172
+ RGB
+ PROCESS
+ 255
+ 123
+ 172
+
+
+ R=189 G=204 B=212
+ RGB
+ PROCESS
+ 189
+ 204
+ 212
+
+
+
+
+
+
+ Adobe PDF library 15.00
+ 21.0.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+endstream
endobj
3 0 obj
<>
endobj
8 0 obj
<>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/Thumb 13 0 R/TrimBox[0.0 0.0 256.0 256.0]/Type/Page>>
endobj
9 0 obj
<>stream
+H[K1WG}0}_ l"*UNZ/JrN2Ye41;Ϡi8iON#w*]^ x\
c?<<\^)rKSƛ9Nigk#脄<м|!Ư] 4h_
+endstream
endobj
13 0 obj
<>stream
+8;XF2d1O;>#XnWs)>^V1Xcdi;f0dAoo](s*-IK:18>>s%PZk(M.c8--/:=LAR>V97
+-6cR+8s.RL]V_InneEl9<34L)1"=&3%gfL#NrC1omb#:'c]E/1Ilrju!?4kVA"=^^
+\5&&'k>3f)^&!6-lQa),dR,)R4rjQ#3+j@JN.[u`0f8?pE+=d)8/,Kd9YIp^#X8SF
+@OjG3TuaXMQCt;*8O3;e+Qk2.p^@-BdCcC~>
+endstream
endobj
14 0 obj
[/Indexed/DeviceRGB 255 15 0 R]
endobj
15 0 obj
<>stream
+8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
+b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
+E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn
+6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O(
+l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~>
+endstream
endobj
6 0 obj
<9 1)/Type/OCG/Usage 17 0 R>>
endobj
16 0 obj
[/View/Design]
endobj
17 0 obj
<>>>
endobj
5 0 obj
<>
endobj
18 0 obj
<>
endobj
19 0 obj
<>stream
+H|N?hq_\X"W:?J4CCS[b*h56ͅk% FBDpAtq(P"A(.1!䊎^83ľK$$tH0GmNz>fAx{ZngZڮibNp8k`Oob?
cY!2>RZ8^M&q3Bl s{X8,r
:*,/]1}zlK)EMe