| Statystyki |
» Użytkownicy: 3,585
» Najnowszy użytkownik: cz147069
» Wątków na forum: 1,261
» Postów na forum: 9,012
Pełne statystyki
|
| Użytkownicy online |
Aktualnie jest 298 użytkowników online. » 0 Użytkownik(ów) | 295 Gość(i) Applebot, Bing, Google
|
| Ostatnie wątki |
LK3.9 SMTP password only ...
Forum: LanKontroler V3.5
Ostatni post: cz147069
Wczoraj, 10:04 AM
» Odpowiedzi: 0
» Wyświetleń: 19
|
Sofar ME3000SP Modbus
Forum: MODBUS Urzadzenia Custom
Ostatni post: 5641bronze
12-29-2025, 11:58 AM
» Odpowiedzi: 5
» Wyświetleń: 7,760
|
MODBUS ADRESSES
Forum: MODBUS Urzadzenia Custom
Ostatni post: AlvinCorbitt
12-11-2025, 05:42 AM
» Odpowiedzi: 3
» Wyświetleń: 932
|
Czujnik Pt1000
Forum: LanKontroler V3
Ostatni post: weerty
12-11-2025, 12:53 AM
» Odpowiedzi: 4
» Wyświetleń: 6,143
|
Scheduler
Forum: LanKontroler V3
Ostatni post: weerty
12-11-2025, 12:51 AM
» Odpowiedzi: 6
» Wyświetleń: 7,345
|
FC-22 gas sensor
Forum: LanKontroler V3
Ostatni post: weerty
12-11-2025, 12:49 AM
» Odpowiedzi: 6
» Wyświetleń: 8,520
|
Jak szybko tłumaczyć poje...
Forum: LanKontroler V3
Ostatni post: weerty
12-11-2025, 12:47 AM
» Odpowiedzi: 2
» Wyświetleń: 226
|
LK3 Moc Energia błędne ws...
Forum: LanKontroler V3
Ostatni post: Dioneya
12-11-2025, 12:45 AM
» Odpowiedzi: 6
» Wyświetleń: 9,334
|
Czujnik CO2 MH-Z16 -czy t...
Forum: LanKontroler V3
Ostatni post: Dioneya
12-11-2025, 12:43 AM
» Odpowiedzi: 5
» Wyświetleń: 8,331
|
Wgrywanie firmware do LK ...
Forum: LanKontroler - wersje oprogramowania
Ostatni post: Layla Keller
12-06-2025, 11:54 AM
» Odpowiedzi: 5
» Wyświetleń: 6,152
|
|
|
| LK3.9 SMTP password only 31 characters |
|
Napisane przez: cz147069 - Wczoraj, 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.
|
|
|
| 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
|
|
|
|