Witaj, Gość
Musisz się zarejestrować przed napisaniem posta.

Użytkownik
  

Hasło
  





Szukaj na forum

(Zaawansowane szukanie)

Statystyki
» Użytkownicy: 3,615
» Najnowszy użytkownik: NRI MBBS
» Wątków na forum: 1,266
» Postów na forum: 9,024

Pełne statystyki

Użytkownicy online
Aktualnie jest 231 użytkowników online.
» 0 Użytkownik(ów) | 227 Gość(i)
Applebot, Baidu, Bing, Google

Ostatnie wątki
Aktualizacja do 1.38
Forum: LanKontroler V4
Ostatni post: syky95
02-06-2026, 11:30 AM
» Odpowiedzi: 4
» Wyświetleń: 422
Ilość czujników
Forum: LanKontroler V3.5
Ostatni post: stAch
02-02-2026, 04:17 PM
» Odpowiedzi: 1
» Wyświetleń: 159
LK3.5-NOWY SOFT - KOLEJNE...
Forum: LanKontroler V3.5
Ostatni post: stAch
02-02-2026, 03:40 PM
» Odpowiedzi: 630
» Wyświetleń: 701,547
Slither Into Retro Bliss:...
Forum: LanKontroler V4
Ostatni post: souragpi
01-30-2026, 10:49 AM
» Odpowiedzi: 0
» Wyświetleń: 89
MQTT and CPU on 100%
Forum: Problemy z oprogramowaniem i sprzętem
Ostatni post: cz147069
01-29-2026, 12:13 PM
» Odpowiedzi: 0
» Wyświetleń: 95
INA740 for LK3.8>
Forum: LanKontroler V3.5
Ostatni post: borgmcz
01-09-2026, 05:52 PM
» Odpowiedzi: 0
» Wyświetleń: 154
LK3.9 SMTP password only ...
Forum: LanKontroler V3.5
Ostatni post: cz147069
01-07-2026, 10:04 AM
» Odpowiedzi: 0
» Wyświetleń: 705
Sofar ME3000SP Modbus
Forum: MODBUS Urzadzenia Custom
Ostatni post: 5641bronze
12-29-2025, 11:58 AM
» Odpowiedzi: 5
» Wyświetleń: 9,302
MODBUS ADRESSES
Forum: MODBUS Urzadzenia Custom
Ostatni post: AlvinCorbitt
12-11-2025, 05:42 AM
» Odpowiedzi: 3
» Wyświetleń: 1,717
Czujnik Pt1000
Forum: LanKontroler V3
Ostatni post: weerty
12-11-2025, 12:53 AM
» Odpowiedzi: 4
» Wyświetleń: 6,531

 
  Backup automat php
Napisane przez: stAch - 07-28-2025, 01:00 PM - Forum: LanKontroler - wersje oprogramowania - Brak odpowiedzi

jeden klik i zapisane nawet 100 backupów z LK3 w różnych lokalizacjach - nic prostszego.

Kod PHP:
<?php
error_reporting
(E_ALL);
parse_str($_SERVER['QUERY_STRING']);

if (isset(
$_GET['cron'])) {
    $_POST['backups'] = 1;
    $_SERVER['REQUEST_METHOD'] = 'POST';
}

$folder "backups";
$pattern '/_(\d{4}-\d{2}-\d{2})_setting\.bin$/';
// Usuwanie plików (na podstawie daty z POST)
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['date'])) {
    $dateToDelete $_POST['date'];
    foreach (scandir($folder) as $file) {
        if (preg_match($pattern$file$matches) && $matches[1] === $dateToDelete) {
            unlink($folder DIRECTORY_SEPARATOR $file);
        }
    }
    echo json_encode(['success' => true]);
    exit;
}
// Backup i lista
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['backups'])) {
    $messages "";
    // ? Dane logowania globalne
    $globalUser 'admin';
    $globalPass 'xxxxxxx';
    // ? Lista hostów
    $sources = [
        ['ip' => '192.168.1.20''port' => 97,  'name' => 'SOL'],
        ['ip' => '192.168.1.20''port' => 98,  'name' => 'CWU''user' => 'admin''pass' => 'xxxxxx'],
        ['ip' => '192.168.1.20''port' => 99,  'name' => 'GSM'],
        ['ip' => '192.168.1.20''port' => 100'name' => 'PCO'],
    ];
    $remotePath "/lk3_settings.bin";
    $backupDir __DIR__ '/backups';
    if (!is_dir($backupDir)) {
        mkdir($backupDir0777true);
    }
    $date date("_Y-m-d");
    foreach ($sources as $source) {
        $ip   $source['ip'];
        $port $source['port'];
        $name $source['name'];
        $user $source['user'] ?? $globalUser;
        $pass $source['pass'] ?? $globalPass;
        $url "http://$ip:$port$remotePath";
        $auth base64_encode("$user:$pass");
        $opts = [
            "http" => [
                "method" => "GET",
                "header" => "Authorization: Basic $auth\r\n"
            ]
        ];
        $context stream_context_create($opts);
        $content = @file_get_contents($urlfalse$context);
        if ($content === false) {
            $messages .= "<div>? Błąd pobierania: $url</div>";
            continue;
        }
        $filename "{$name}{$date}_setting.bin";
        $filepath $backupDir '/' $filename;
        if (file_put_contents($filepath$content) !== false) {
            $messages .= "<div>✔ Zapisano: $filename</div>";
        } else {
            $messages .= "<div>? Błąd zapisu: $filename</div>";
        }
    }
    // ? Lista backupów
    ob_start();
    $groups = [];
    foreach (scandir($folder) as $file) {
        if (preg_match($pattern$file$matches)) {
            $date $matches[1];
            $groups[$date][] = $file;
        }
    }
    if (empty($groups)) {
        echo "<p>Brak plików.</p>";
    } else {
        foreach ($groups as $date => $files) {
            echo "<div class='group' data-date='" htmlspecialchars($date) . "'>";
            echo "<button class='delete-btn' onclick='deleteGroup(\"$date\")'>Usuń grupę</button>";
            echo "<h3>" htmlspecialchars($date) . "</h3>";
            foreach ($files as $file) {
                $fileEnc rawurlencode($file);
                echo "<div class='file'>";
                echo htmlspecialchars($file);
                echo " <a class='download' href='backups/$fileEnc' download>Pobierz</a>";
                echo "</div>";
            }
            echo "</div>";
        }
    }
    $html ob_get_clean();
    echo json_encode([
        'success' => true,
        'html' => $html,
        'messages' => $messages
    
]);
    exit;
}
// Pierwsze wczytanie listy
$groups = [];
foreach (
scandir($folder) as $file) {
    if (preg_match($pattern$file$matches)) {
        $date $matches[1];
        $groups[$date][] = $file;
    }
}
?>
<!DOCTYPE html>
<html lang="pl">
<head>
    <meta charset="UTF-8">
    <title>LK3 Backups</title>
    <style>
        body { font-family: Arial; padding: 20px; }
        .group { border: 1px solid #ccc; padding: 10px; margin-bottom: 20px; border-radius: 5px; }
        .group h3 { margin: 0 0 10px 0; }
        .file { margin-left: 20px; }
        .delete-btn {
            background: #d00;
            color: white;
            border: none;
            padding: 5px 10px;
            float: right;
            cursor: pointer;
        }
        .download {
            background: #4CAF50;
            color: white;
            padding: 3px 8px;
            margin-left: 10px;
            text-decoration: none;
            border-radius: 3px;
        }
        .download:hover {
            background: #45a049;
        }
        .info {
            margin-top: 20px;
            padding: 10px;
            background: #f9f9f9;
            border: 1px dashed #aaa;
            white-space: pre-wrap;
        }
        button.refresh {
            background: #007bff;
            color: white;
            border: none;
            padding: 6px 12px;
            cursor: pointer;
        }
    </style>
</head>
<body>
<h1>Kopie zapasowe LK3 wg. daty</h1>
<div id="backup-list">
<?php if (empty($groups)): ?>
    <p>Brak plików.</p>
<?php else: ?>
    <?php foreach ($groups as $date => $files): ?>
        <div class="group" data-date="<?= htmlspecialchars($date?>">
            <button class="delete-btn" onclick="deleteGroup('<?= $date ?>')">Usuń grupę</button>
            <h3><?= htmlspecialchars($date?></h3>
            <?php foreach ($files as $file): ?>
                <div class="file">
                    <?= htmlspecialchars($file?>
                    <a class="download" href="backups/<?= rawurlencode($file?>" download>Pobierz</a>
                </div>
            <?php endforeach; ?>
        </div>
    <?php endforeach; ?>
<?php 
endif; ?>
</div>
<div class="info">
    <button class="refresh" onclick="getBackups()">? Aktualizuj (pobierz backupy)</button>
</div>
<script>
function deleteGroup(date) {
    if (!confirm(`Czy na pewno chcesz usunąć wszystkie pliki z datą ${date}?`)) return;
    fetch('', {
        method: 'POST',
        headers: {'Content-Type': 'application/x-www-form-urlencoded'},
        body: 'date=' + encodeURIComponent(date)
    })
    .then(res => res.json())
    .then(data => {
        if (data.success) {
            document.querySelector(`.group[data-date="${date}"]`).remove();
        } else {
            alert('Błąd przy usuwaniu.');
        }
    });
}
function getBackups() {
    document.querySelector('.info').innerHTML = '⏳ Trwa pobieranie...';
    fetch('', {
        method: 'POST',
        headers: {'Content-Type': 'application/x-www-form-urlencoded'},
        body: 'backups=1'
    })
    .then(res => res.json())
    .then(data => {
        if (data.success) {
            if (data.html) {
                document.querySelector('#backup-list').innerHTML = data.html;
            }
            if (data.messages) {
                document.querySelector('.info').innerHTML = data.messages;
            } else {
                document.querySelector('.info').innerHTML = '✅ Gotowe.';
            }
        } else {
            document.querySelector('.info').innerHTML = '❌ Błąd przy pobieraniu.';
        }
    })
    .catch(err => {
        console.error('Fetch error:', err);
        document.querySelector('.info').innerHTML = '❌ Wystąpił błąd sieci.';
    });
}
</script>
</body>
</html> 
zapisać na serwerze ...edytować ip i porty do pobrania plików backups oraz globalne hasło i usera czyli fragment kodu poniżej.
Kod:
    // ? Dane logowania globalne
    $globalUser = 'admin';    //globalny user
    $globalPass = 'pass';     //globalne haslo

    // ? Lista hostów
    $sources = [
        ['ip' => '192.168.1.100', 'port' => 80,  'name' => 'SOL'],
        ['ip' => '132.138.3.220', 'port' => 98,  'name' => 'CWU', 'user' => 'user', 'pass' => '1234'],
        ['ip' => '132.138.3.220', 'port' => 99,  'name' => 'GSM'],
        ['ip' => '132.138.3.220', 'port' => 100, 'name' => 'PCO'],
    ];
jeśli wszystkie maja takie samo to nie musicie go podawać dla każdego z osobna wystarczy je podać jako globalne 
skrypt pobiera zarówno z lokal ip:80 jak i po external ip:port można dodać go do crona by sam cyklicznie robił kopie na serwerze.
Kod:
0 2 * * * curl -s "http://twojadomena.pl/backup.php?cron=1" > /dev/null 2>&1


pytania lub problemy chętnie p/odpowiem...

Wydrukuj tę wiadomość

  mqtt brak banych po aktualizacji 1.24
Napisane przez: sl500 - 06-11-2025, 10:30 AM - Forum: LanKontroler V4 - Odpowiedzi (4)

Po aktualizacji do wersji 1.24 połączenie z mqtt zgasło. Nie pomogła próba dodania nowego urządzenia na serwerze i ponowna konfiguracja po stronie lk. Po stronie lk cały czas jest: MQTT DISCONNECTED.

Wróciłem do wersji 1.18a

Wydrukuj tę wiadomość

Bug LK4 błędy w pomiarze energii
Napisane przez: lodomir - 06-01-2025, 10:24 PM - Forum: LanKontroler V4 - Odpowiedzi (3)

Zauważyłem niepoprawne działanie pomiarów energii w LK4 wersja oprogramowania 1.24 (w poprzedniej 1,18a było podobnie).
Błąd polega na tym, że urządzenie zwiększa wskazania liczników nieadekwatnie do przypisanych im wyzwalaczy.

Na przykład jeśli P/E1 jest sterowane przez INPD4 (impulsator gazomierza), P/E5 przez INPD1 a P/E6 przez INPD2, to przy kolejnych impulsach na wejściu INPD1 lub INPD2 zwiększają się adekwatnie wartości P/E5 i P/E6, ale również wartość P/E1. Wygląda na to tak, jakby algorytm mylił wyzwalacze.


   

Wydrukuj tę wiadomość

  Lk 3.8
Napisane przez: syky95 - 04-28-2025, 06:59 PM - Forum: LanKontroler V3.5 - Brak odpowiedzi

Hello, is there any way to factory reset the LK 3.8? After holding the reset button, nothing happens and the relay doesn't click like it used to. Thank you for any advice.

Wydrukuj tę wiadomość

  Wirtualny OLED
Napisane przez: krzychor - 04-26-2025, 08:21 AM - Forum: LanKontroler V3.5 - Brak odpowiedzi

witam,
w funkcjonalności Wirtualny OLED nie działa "obcinacz" dla Power, Energy, Diff co powoduje że wartości sa wyświetlane z dużą ilością cyfr po przecinku
czy da się to jakoś ustawić?
sądzę że to błąd softu, czy twórcy mogli by to poprawić?
pozdrawiam

Wydrukuj tę wiadomość

  tMPC-04 - Licznik impulsów
Napisane przez: rpce - 04-25-2025, 03:13 PM - Forum: LanKontroler V3.5 - Brak odpowiedzi

Czemu w liczniku nie zrobiono jak w tiny ESP podtrzymywania akumulatorkiem. Byłoby super a tak trzeba zawsze coś dłubać.

Wydrukuj tę wiadomość

  MODBUS - niepoprawna obsługa
Napisane przez: xerxes7 - 04-07-2025, 11:43 PM - Forum: LanKontroler V4 - Odpowiedzi (1)

Witam,
Sekcje "Custom" w obsłudze MODBUS zawiera bład.
Próbując czytać R4DCB08 znalazłem problem polegający na nieprawidłowym odczycie temperatury z DS18B20.
Konfiguracja:
{"name":"8xDS_0x0C","bitrate":0,"parityBit":0,"stopBit":1,"delayBetweenReads":1,"readings":[{"index":1,"active":true,"name":"DS1","unit":"C","divisor":10,"address":0,"functionCode":3,"variableType":0,"endian":0},{"index":2,"active":true,"name":"DS2","unit":"C","divisor":10,"address":1,"functionCode":3,"variableType":0,"endian":0},{"index":3,"active":true,"name":"DS3","unit":"C","divisor":10,"address":2,"functionCode":3,"variableType":0,"endian":0},{"index":4,"active":true,"name":"DS4","unit":"C","divisor":10,"address":3,"functionCode":3,"variableType":0,"endian":0},{"index":5,"active":true,"name":"DS5","unit":"C","divisor":10,"address":4,"functionCode":3,"variableType":0,"endian":0},{"index":6,"active":true,"name":"DS6","unit":"C","divisor":10,"address":5,"functionCode":3,"variableType":0,"endian":0},{"index":7,"active":true,"name":"DS7","unit":"C","divisor":10,"address":6,"functionCode":3,"variableType":0,"endian":0},{"index":8,"active":true,"name":"DS8","unit":"C","divisor":10,"address":7,"functionCode":3,"variableType":0,"endian":0}]}

Pomimo dzielnika przez 10 LK4 czyta tylko całkowitą część z pomiaru:
   

Szczęśliwie nie ma już problemów z ujemnymi wartościami, które były problem w LK3.8 i powodem rezygnacji z użytkowania urządzenia.
Dlatego bardzo proszę o poprawę tego błędu albo zaprzestanie mówienia o możliwości konfigurowania "custom modules", bo wygląda to na naciąganie ludzi na wydatki.

Pozdrawiam, licząc na szybką korektę błędu.
J.J.

Wydrukuj tę wiadomość

  LK sterowanie sauną
Napisane przez: marcinb - 02-28-2025, 09:03 AM - Forum: LanKontroler V3.5 - Odpowiedzi (1)

Witajcie,
W najbliższym czasie stanę przed dylematem sterowania sauną.
Czy kupować gotowy produkt czy zaprząc do tego LK3.

Jak Wy to widzicie ??

Wydrukuj tę wiadomość

  DS12B20 1wire interference?
Napisane przez: midnight_man - 02-22-2025, 04:04 PM - Forum: LanKontroler V3.5 - Brak odpowiedzi

Anybody faced interference when using DS12B20?

I am using LK3.8 with RJ11 splitter and 4 DS18B20 sensors...but sometimes, randomly, some sensor or sensors dont show value!.....for 1 second, there is "-" ...and no value.

Anybody?

thanks

Wydrukuj tę wiadomość

  PWM and ON/OFF
Napisane przez: midnight_man - 02-22-2025, 04:02 PM - Forum: LanKontroler V3.5 - Brak odpowiedzi

Hi guys!

can anybody explain me how PWM works in ON/OFF mode?

which duty cycle is  ON ?
Which duty cycle is OFF?

thanks!

Wydrukuj tę wiadomość