| Statystyki |
» Użytkownicy: 3,654
» Najnowszy użytkownik: Kamrillo
» Wątków na forum: 1,272
» Postów na forum: 9,031
Pełne statystyki
|
| Użytkownicy online |
Aktualnie jest 134 użytkowników online. » 0 Użytkownik(ów) | 129 Gość(i) Applebot, Baidu, Bing, Google, Yandex
|
| Ostatnie wątki |
LK3 - http api - schedule...
Forum: LanKontroler V3.5
Ostatni post: davidk
03-07-2026, 10:27 PM
» Odpowiedzi: 1
» Wyświetleń: 109
|
A Journey of Survival in ...
Forum: LanKontroler - wersje oprogramowania
Ostatni post: Maryolanco
03-03-2026, 09:35 AM
» Odpowiedzi: 0
» Wyświetleń: 84
|
Get Ready to Roll! Dive i...
Forum: LanKontroler - wersje oprogramowania
Ostatni post: Aidan Reed
03-03-2026, 06:49 AM
» Odpowiedzi: 0
» Wyświetleń: 54
|
Download Free Sample Casi...
Forum: Programy i Serwery
Ostatni post: XiaoMei
02-26-2026, 07:28 PM
» Odpowiedzi: 0
» Wyświetleń: 124
|
Germany Phone Number Data...
Forum: LanKontroler V3.5
Ostatni post: XiaoMei
02-26-2026, 07:24 PM
» Odpowiedzi: 0
» Wyświetleń: 147
|
LK 3.8 LTE - brak ustawie...
Forum: LanKontroler V3.5
Ostatni post: adamd
02-09-2026, 03:20 PM
» Odpowiedzi: 0
» Wyświetleń: 209
|
Aktualizacja do 1.38
Forum: LanKontroler V4
Ostatni post: syky95
02-06-2026, 11:30 AM
» Odpowiedzi: 4
» Wyświetleń: 842
|
Ilość czujników
Forum: LanKontroler V3.5
Ostatni post: stAch
02-02-2026, 04:17 PM
» Odpowiedzi: 1
» Wyświetleń: 356
|
LK3.5-NOWY SOFT - KOLEJNE...
Forum: LanKontroler V3.5
Ostatni post: stAch
02-02-2026, 03:40 PM
» Odpowiedzi: 630
» Wyświetleń: 726,459
|
Slither Into Retro Bliss:...
Forum: LanKontroler V4
Ostatni post: souragpi
01-30-2026, 10:49 AM
» Odpowiedzi: 0
» Wyświetleń: 179
|
|
|
| Aktualizacja do 1.38 |
|
Napisane przez: maly_tomi - 01-09-2026, 01:59 PM - Forum: LanKontroler V4
- Odpowiedzi (4)
|
 |
Dzień dobry
Zaktualizowałem swojego LK4 z 1.24 do 1.38 i po aktualizacji zamiast panelu wyświetla się informacja "Failed to read existing file".
Twardy reset urządzenia nic nie daje. Czy spotkał się już ktoś z czymś takim? Da się jeszcze uratować tego LK4?
|
|
|
| LK3.9 SMTP password only 31 characters |
|
Napisane przez: cz147069 - 01-07-2026, 10:04 AM - Forum: LanKontroler V3.5
- Brak odpowiedzi
|
 |
Hello,
is possible change lenght password for SMTP? I use key which have 32 characters, but when I save configuration, everything over 31 is deleted.
Cześć,
czy można zmienić długość hasła dla SMTP? Używam klucza, który ma 32 znaki, ale po zapisaniu konfiguracji wszystko powyżej 31 znaków zostaje usunięte.
|
|
|
| Jak szybko tłumaczyć pojedyncze słowa? |
|
Napisane przez: weerty - 12-10-2025, 02:31 PM - Forum: LanKontroler V3
- Odpowiedzi (2)
|
 |
Ciągle natrafiam na pojedyncze słowa w języku angielskim w korespondencji i za każdym razem korzystanie z dużego tłumacza staje się uciążliwe. Poszukuję czegoś maksymalnie prostego i szybkiego, co byłoby pod ręką, bez zbędnych czynności. Przypadkowo natrafiłem na tluma.pl jako translator online, może ktoś również korzysta z podobnej opcji?
|
|
|
| Konwersja Modbus TCP na RTU, izolacja RS485, zakres VCC |
|
Napisane przez: marekm - 11-15-2025, 08:01 PM - Forum: LanKontroler V4
- Odpowiedzi (1)
|
 |
Czy byłaby możliwość dodania (chyba że już jest - w dokumentacji na pierwszy rzut oka nie widzę) do LK4 możliwości konwersji Modbus TCP na RTU? Dla dowolnych urządzeń, po prostu serwer TCP odbiera zapytanie i przekazuje je jako ramkę RTU na RS485, po czym przekazuje odpowiedź z powrotem (lub zwraca kod błędu jeśli brak odpowiedzi). Podobną funkcję ma np. MikroTik KNOT. LK4 sam też odpowiada na zapytania Modbus TCP, więc trzeba by mu dodać konfigurowalny Unit ID (jego własny na który ma odpowiadać zamiast przekazywać dalej jako RTU).
Przy okazji pytania, czy RS485 jest izolowany i do jakiego max napięcia? Oraz czy 58V to absolute max VCC - bo pasowałoby mi zasilać LK4 i jednocześnie mierzyć napięcie z magazynu energii (16S LFP), 16*3,65 = 58,4V to dopuszczalne maksimum, rzadko kiedy tyle będzie i powyżej 58V nie muszę mieć dokładnego pomiaru ale czy tak powiedzmy do 60V przez ograniczony czas wytrzyma i nie uleci "magiczny dym"? Szeregowo o zasilaniem oczywiście będzie bezpiecznik, czy wskazane byłoby dodać szeregowo diodę Zenera by zgubić kilka V (wtedy przydałoby się móc przesunąć pomiar VCC o tyle samo w górę, by poprawnie liczyć moc i energię)?
|
|
|
| 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.
|
|
|
|