| 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($backupDir, 0777, true); } $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($url, false, $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...
|
|
|
| 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
|
|
|
| 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.
|
|
|
| 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
|
|
|
| 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ć.
|
|
|
| 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.
|
|
|
| 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
|
|
|
| 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!
|
|
|
|