@@ -1,3 +1,5 @@
 | 
			
		||||
var pending = false;
 | 
			
		||||
 | 
			
		||||
if ('serviceWorker' in navigator) {
 | 
			
		||||
    window.addEventListener('load', () => {
 | 
			
		||||
        navigator.serviceWorker.register('serviceWorker.js')
 | 
			
		||||
@@ -14,16 +16,16 @@ if ('serviceWorker' in navigator) {
 | 
			
		||||
$('select[name="atSelector"]').change(function(e) {
 | 
			
		||||
    console.log($(this).val());
 | 
			
		||||
    if( $(this).val() == 'time') {
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
        $('input[name="atTime"]').prop( "disabled", false );
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
        $('select[name="atDeviceValueInt"]').prop( "disabled", true );
 | 
			
		||||
        $('input[name="atDeviceValue"]').prop( "disabled", true );
 | 
			
		||||
    } else if( $(this).val() == 'atDeviceValue') {
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
        $('select[name="atDeviceValue"]').prop( "disabled", false );
 | 
			
		||||
        $('input[name="atDeviceValueInt"]').prop( "disabled", false );
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
        $('input[name="atTime"]').prop( "disabled", true );
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
@@ -38,7 +40,7 @@ $("div.square-content").on('touchend', function (e){
 | 
			
		||||
$("div.square-content").on('touchstart', function (eTarget) {
 | 
			
		||||
    navigator.vibrate([500]);
 | 
			
		||||
    var id = '';
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    var windowLoc = $(location).attr('pathname');
 | 
			
		||||
    windowLoc = windowLoc.substring(windowLoc.lastIndexOf("/"));
 | 
			
		||||
    console.log(windowLoc);
 | 
			
		||||
@@ -49,9 +51,9 @@ $("div.square-content").on('touchstart', function (eTarget) {
 | 
			
		||||
    } else if (windowLoc == "/automation") {
 | 
			
		||||
        id = $(this).attr('id').replace('automation-', '');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    var subId = $(this).attr('data-sub-device-id');
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    touch++;
 | 
			
		||||
    if(touch == 2 && touchSubId == subId){
 | 
			
		||||
        console.log("Detail");
 | 
			
		||||
@@ -59,7 +61,7 @@ $("div.square-content").on('touchstart', function (eTarget) {
 | 
			
		||||
            $("#modal-detail-"+subId).removeClass('modal-container-hiden').show();
 | 
			
		||||
            ajaxChart(subId);
 | 
			
		||||
        } else if (windowLoc == "/scene") {
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
        } else if (windowLoc == "/automation") {
 | 
			
		||||
        }
 | 
			
		||||
        touch = 0;
 | 
			
		||||
@@ -67,7 +69,7 @@ $("div.square-content").on('touchstart', function (eTarget) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    touchSubId = subId;
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    pressTimer = window.setTimeout(function (e) {
 | 
			
		||||
        console.log("Setting");
 | 
			
		||||
        $("#modal-setting-"+id).removeClass('modal-container-hiden').show();
 | 
			
		||||
@@ -152,7 +154,14 @@ var windowLoc = $(location).attr('pathname');
 | 
			
		||||
windowLoc = windowLoc.substring(windowLoc.lastIndexOf("/"));
 | 
			
		||||
console.log();
 | 
			
		||||
if (windowLoc == "/") {
 | 
			
		||||
    
 | 
			
		||||
    var selectRoomId = localStorage.getItem("selectedRoomId");
 | 
			
		||||
    
 | 
			
		||||
    if (selectRoomId == null) {
 | 
			
		||||
        selectRoomId = 'all';
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
    console.log('Saved Selected Room ID '+ selectRoomId);
 | 
			
		||||
    $('[name="room"]').val(selectRoomId);
 | 
			
		||||
    $('.device-button').each(function(){
 | 
			
		||||
@@ -164,6 +173,8 @@ if (windowLoc == "/") {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//Room selector
 | 
			
		||||
@@ -187,29 +198,35 @@ windowLoc = windowLoc.substring(windowLoc.lastIndexOf("/"));
 | 
			
		||||
console.log();
 | 
			
		||||
if (windowLoc == "/") {
 | 
			
		||||
    var autoUpdate = setInterval(function(){
 | 
			
		||||
        $.ajax({
 | 
			
		||||
            url: 'ajax',
 | 
			
		||||
            type: 'POST',
 | 
			
		||||
            dataType: 'json',
 | 
			
		||||
            data: {
 | 
			
		||||
                "action": 'getState'
 | 
			
		||||
            },
 | 
			
		||||
            success: function(data){
 | 
			
		||||
                console.log(data);
 | 
			
		||||
                for (const key in data) {
 | 
			
		||||
                    if (data.hasOwnProperty(key)) {
 | 
			
		||||
                        const device = data[key];
 | 
			
		||||
                        $('[data-sub-device-id="'+key+'"]')
 | 
			
		||||
                        .find('.device-button-value')
 | 
			
		||||
                        .text(device['value'])
 | 
			
		||||
                        .attr('title',device['time'])
 | 
			
		||||
        if (pending == false) {
 | 
			
		||||
            pending = true;
 | 
			
		||||
            $.ajax({
 | 
			
		||||
                url: 'ajax',
 | 
			
		||||
                type: 'POST',
 | 
			
		||||
                dataType: 'json',
 | 
			
		||||
                data: {
 | 
			
		||||
                    "action": 'getState'
 | 
			
		||||
                },
 | 
			
		||||
                success: function(data){
 | 
			
		||||
                    console.log(data);
 | 
			
		||||
                    for (const key in data) {
 | 
			
		||||
                        if (data.hasOwnProperty(key)) {
 | 
			
		||||
                            const device = data[key];
 | 
			
		||||
                            $('[data-sub-device-id="'+key+'"]')
 | 
			
		||||
                            .find('.device-button-value')
 | 
			
		||||
                            .text(device['value'])
 | 
			
		||||
                            .attr('title',device['time'])
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                error: function (request, status, error) {
 | 
			
		||||
                    console.log("ERROR ajaxChart():", request, error);
 | 
			
		||||
                },
 | 
			
		||||
                complete: function (){
 | 
			
		||||
                    pending = false;
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            error: function (request, status, error) {
 | 
			
		||||
                console.log("ERROR ajaxChart():", request, error);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    },2000);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -34,14 +34,13 @@
 | 
			
		||||
                    <?php 
 | 
			
		||||
                    if (isset($_POST['LogFile'])) {
 | 
			
		||||
                        $file_lines = file('./app/logs/' . $_POST['LogFile']);
 | 
			
		||||
                        echo '<pre>';
 | 
			
		||||
                        echo '<pre style="overflow: auto;">';
 | 
			
		||||
                        foreach ($file_lines as $line) {
 | 
			
		||||
                            echo $line;
 | 
			
		||||
                        }
 | 
			
		||||
                        echo '</pre>';
 | 
			
		||||
                    }
 | 
			
		||||
                    ?>
 | 
			
		||||
                </pre>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ if ($SUBDEVICE['type'] == 'on/off') {
 | 
			
		||||
	<div class="square">
 | 
			
		||||
		<div class="square-content <?php echo (($SUBDEVICE['comError'] == 1 || $DEVICE['approved'] == 0) ? "is-inactive" : "") ;?>" id="device-<?php echo $DEVICEID ?>" data-sub-device-id="<?php echo $SUBDEVICEID;?>">
 | 
			
		||||
			<div class="content">
 | 
			
		||||
				<div class="row">
 | 
			
		||||
				<div class="row no-gutters">
 | 
			
		||||
					<div class="col">
 | 
			
		||||
						<h5 unselectable="on" class="fa">&#x<?php echo $DEVICE['icon'] ?></h5>
 | 
			
		||||
					</div>
 | 
			
		||||
@@ -19,7 +19,7 @@ if ($SUBDEVICE['type'] == 'on/off') {
 | 
			
		||||
					</div>
 | 
			
		||||
				</div>
 | 
			
		||||
				<div class="row">
 | 
			
		||||
					<div class="col" unselectable="on" >
 | 
			
		||||
					<div class="col  button-text" unselectable="on" >
 | 
			
		||||
						<?php echo $DEVICE['name']; ?>
 | 
			
		||||
					</div>
 | 
			
		||||
				</div>
 | 
			
		||||
 
 | 
			
		||||
@@ -48,6 +48,7 @@ class Ajax extends Template
 | 
			
		||||
				AutomationManager::deactive($automationId);
 | 
			
		||||
			}
 | 
			
		||||
		} else if (isset($_POST['subDevice']) && isset($_POST['action']) && $_POST['action'] == "chart") {
 | 
			
		||||
			die();
 | 
			
		||||
			//TODO lepe rozstrukturovat
 | 
			
		||||
			$subDeviceId = $_POST['subDevice'];
 | 
			
		||||
			$period = $_POST['period'];
 | 
			
		||||
 
 | 
			
		||||
@@ -43,58 +43,69 @@ class Home extends Template
 | 
			
		||||
				foreach ($subDevicesData as $subDeviceKey => $subDeviceData) {
 | 
			
		||||
 | 
			
		||||
					$events = RecordManager::getLastRecord($subDeviceData['subdevice_id'], 5);
 | 
			
		||||
					//TODO: skontrolovat zdali se jedná o poslední (opravdu nejaktuálnější) záznam
 | 
			
		||||
					$lastRecord = $events[0];
 | 
			
		||||
					$parsedValue = round($lastRecord['value']);
 | 
			
		||||
 | 
			
		||||
					/*Value Parsing*/
 | 
			
		||||
					if ($subDeviceData['type'] == "on/off") {
 | 
			
		||||
						$parsedValue = ($parsedValue == 1 ? 'ON' : 'OFF');
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					if ($subDeviceData['type'] == "door") {
 | 
			
		||||
						$replacementTrue = 'Closed';
 | 
			
		||||
						$replacementFalse = 'Opened';
 | 
			
		||||
						foreach ($events as $key => $value) {
 | 
			
		||||
							$events[$key]['value'] = ($value['value'] == 1 ? $replacementTrue : $replacementFalse);
 | 
			
		||||
						}
 | 
			
		||||
						$parsedValue = ($parsedValue == 1 ? $replacementTrue : $replacementFalse);
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					if ($subDeviceData['type'] == "light") {
 | 
			
		||||
						$replacementTrue = 'Light';
 | 
			
		||||
						$replacementFalse = 'Dark';
 | 
			
		||||
						foreach ($events as $key => $value) {
 | 
			
		||||
							if ($parsedValue != 1){
 | 
			
		||||
								//Analog Reading
 | 
			
		||||
								$events[$key]['value'] = ($value['value'] <= 810 ? $replacementTrue : $replacementFalse);
 | 
			
		||||
							} else {
 | 
			
		||||
								//Digital Reading
 | 
			
		||||
								$events[$key]['value'] = ($value['value'] == 0 ? $replacementTrue : $replacementFalse);
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
						if ($parsedValue != 1){
 | 
			
		||||
							//Analog Reading
 | 
			
		||||
							$parsedValue = ($parsedValue <= 810 ? $replacementTrue : $replacementFalse);
 | 
			
		||||
						} else {
 | 
			
		||||
							//Digital Reading
 | 
			
		||||
							$parsedValue = ($parsedValue == 0 ? $replacementTrue : $replacementFalse);
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					$date2 = new DateTime($lastRecord['time']);
 | 
			
		||||
 | 
			
		||||
					$niceTime = $this->ago($date2);
 | 
			
		||||
 | 
			
		||||
					$connectionError = false;
 | 
			
		||||
					$parsedValue = "";
 | 
			
		||||
					$niceTime = "";
 | 
			
		||||
 | 
			
		||||
					$startDate = date_create($lastRecord['time']);
 | 
			
		||||
					$interval = $startDate->diff(new DateTime());
 | 
			
		||||
					$hours   = $interval->format('%h');
 | 
			
		||||
					$minutes = $interval->format('%i');
 | 
			
		||||
					$lastSeen = ($hours * 60 + $minutes);
 | 
			
		||||
 | 
			
		||||
					if ($lastSeen > $deviceData['sleep_time'] && $subDeviceData['type'] != "on/off") {
 | 
			
		||||
					if (sizeof($events) > 1) {
 | 
			
		||||
 | 
			
		||||
						//TODO: skontrolovat zdali se jedná o poslední (opravdu nejaktuálnější) záznam
 | 
			
		||||
						$lastRecord = $events[0];
 | 
			
		||||
 | 
			
		||||
						$parsedValue = round($lastRecord['value']);
 | 
			
		||||
 | 
			
		||||
						/*Value Parsing*/
 | 
			
		||||
						if ($subDeviceData['type'] == "on/off") {
 | 
			
		||||
							$parsedValue = ($parsedValue == 1 ? 'ON' : 'OFF');
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
						if ($subDeviceData['type'] == "door") {
 | 
			
		||||
							$replacementTrue = 'Closed';
 | 
			
		||||
							$replacementFalse = 'Opened';
 | 
			
		||||
							foreach ($events as $key => $value) {
 | 
			
		||||
								$events[$key]['value'] = ($value['value'] == 1 ? $replacementTrue : $replacementFalse);
 | 
			
		||||
							}
 | 
			
		||||
							$parsedValue = ($parsedValue == 1 ? $replacementTrue : $replacementFalse);
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
						if ($subDeviceData['type'] == "light") {
 | 
			
		||||
							$replacementTrue = 'Light';
 | 
			
		||||
							$replacementFalse = 'Dark';
 | 
			
		||||
							foreach ($events as $key => $value) {
 | 
			
		||||
								if ($parsedValue != 1){
 | 
			
		||||
									//Analog Reading
 | 
			
		||||
									$events[$key]['value'] = ($value['value'] <= 810 ? $replacementTrue : $replacementFalse);
 | 
			
		||||
								} else {
 | 
			
		||||
									//Digital Reading
 | 
			
		||||
									$events[$key]['value'] = ($value['value'] == 0 ? $replacementTrue : $replacementFalse);
 | 
			
		||||
								}
 | 
			
		||||
							}
 | 
			
		||||
							if ($parsedValue != 1){
 | 
			
		||||
								//Analog Reading
 | 
			
		||||
								$parsedValue = ($parsedValue <= 810 ? $replacementTrue : $replacementFalse);
 | 
			
		||||
							} else {
 | 
			
		||||
								//Digital Reading
 | 
			
		||||
								$parsedValue = ($parsedValue == 0 ? $replacementTrue : $replacementFalse);
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
						$date2 = new DateTime($lastRecord['time']);
 | 
			
		||||
 | 
			
		||||
						$niceTime = $this->ago($date2);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
						$startDate = date_create($lastRecord['time']);
 | 
			
		||||
						$interval = $startDate->diff(new DateTime());
 | 
			
		||||
						$hours   = $interval->format('%h');
 | 
			
		||||
						$minutes = $interval->format('%i');
 | 
			
		||||
						$lastSeen = ($hours * 60 + $minutes);
 | 
			
		||||
 | 
			
		||||
						if ($lastSeen > $deviceData['sleep_time'] && $subDeviceData['type'] != "on/off") {
 | 
			
		||||
							$connectionError = true;
 | 
			
		||||
						}
 | 
			
		||||
					} else {
 | 
			
		||||
						$connectionError = true;
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
@@ -104,9 +115,9 @@ class Home extends Template
 | 
			
		||||
						'unit' => $subDeviceData['unit'],
 | 
			
		||||
						'comError' => $connectionError,
 | 
			
		||||
						'lastRecort' =>  [
 | 
			
		||||
							'value' => $parsedValue,
 | 
			
		||||
							'time' => $lastRecord['time'],
 | 
			
		||||
							'niceTime' => $niceTime,
 | 
			
		||||
							'value' => (empty($parsedValue) ? 0 : $parsedValue),
 | 
			
		||||
							'time' => (empty($lastRecord['time']) ? "00:00" : $lastRecord['time']),
 | 
			
		||||
							'niceTime' => (empty($niceTime) ? "00:00" : $niceTime),
 | 
			
		||||
						],
 | 
			
		||||
					];
 | 
			
		||||
				}
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ class Log extends Template
 | 
			
		||||
		$cdir = scandir('./app/logs/');
 | 
			
		||||
		foreach ($cdir as $key => $value)
 | 
			
		||||
		{
 | 
			
		||||
			if (!in_array($value,array(".","..")))
 | 
			
		||||
			if (!in_array($value,array(".","..", ".gitkeep")))
 | 
			
		||||
			{
 | 
			
		||||
				$result[$value] = $value;
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
@@ -10,11 +10,11 @@
 | 
			
		||||
  "theme_color": "#182239",
 | 
			
		||||
  "icons": [
 | 
			
		||||
    {
 | 
			
		||||
      "src": "/vasek/home/templates/images/icon-192x192.png",
 | 
			
		||||
      "src": "/vasek/home/app/templates/images/icon-192x192.png",
 | 
			
		||||
      "sizes": "192x192"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "src": "/vasek/home/templates/images/icon-512x512.png",
 | 
			
		||||
      "src": "/vasek/home/app/templates/images/icon-512x512.png",
 | 
			
		||||
      "sizes": "512x512"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user