Użytkownicy online |
Aktualnie jest 126 użytkowników online. » 0 Użytkownik(ów) | 124 Gość(i) Bing, Google
|
Ostatnie wątki |
Információforrások sherep...
Forum: LanKontroler V3
Ostatni post: PearceMekaisto
09-14-2025, 01:13 PM
» Odpowiedzi: 0
» Wyświetleń: 22
|
BMS Li-ion battery via Mo...
Forum: MODBUS Urzadzenia Custom
Ostatni post: 205theost
09-13-2025, 05:28 AM
» Odpowiedzi: 6
» Wyświetleń: 3,127
|
Czujniki wibracji, ciśnie...
Forum: LanKontroler V4
Ostatni post: begagenda
09-10-2025, 11:10 AM
» Odpowiedzi: 1
» Wyświetleń: 630
|
mqtt brak banych po aktua...
Forum: LanKontroler V4
Ostatni post: begagenda
09-10-2025, 11:08 AM
» Odpowiedzi: 2
» Wyświetleń: 673
|
R4DCB08 Kolektor temperat...
Forum: MODBUS Urzadzenia Custom
Ostatni post: KevinFarmer
08-28-2025, 04:36 AM
» Odpowiedzi: 5
» Wyświetleń: 2,654
|
Boiler controlling via PW...
Forum: LanKontroler V4
Ostatni post: notek
08-26-2025, 01:51 PM
» Odpowiedzi: 4
» Wyświetleń: 1,511
|
Czujnik jakości powietrza
Forum: LanKontroler - wersje oprogramowania
Ostatni post: batata
08-19-2025, 06:29 AM
» Odpowiedzi: 4
» Wyświetleń: 4,878
|
Licznik energii RELPOL RL...
Forum: MODBUS Urzadzenia Custom
Ostatni post: KevinFarmer
08-18-2025, 11:19 AM
» Odpowiedzi: 3
» Wyświetleń: 1,054
|
Czytnik QR
Forum: LanKontroler V4
Ostatni post: Seraphina
08-15-2025, 06:17 AM
» Odpowiedzi: 2
» Wyświetleń: 1,306
|
LK3.5-NOWY SOFT - KOLEJNE...
Forum: LanKontroler V3.5
Ostatni post: dusanstr
08-09-2025, 05:24 PM
» Odpowiedzi: 627
» Wyświetleń: 586,705
|
|
|
Információforrások sherepe a modern döntéshozatalban |
Napisane przez: PearceMekaisto - 09-14-2025, 01:13 PM - Forum: LanKontroler V3
- Brak odpowiedzi
|
 |
Mindennapi élet során rengeteg helyzet adódik, amikor választanunk kell két vagy több lehetőség közül, legyen szó digitális szolgáltatásokról, kulturális élményekről vagy technológiai megoldásokról. Egyre többször fordulunk online tartalmakhoz, hogy előzetes ismereteket szerezzünk, és értékeléseken keresztül lássuk, melyik alternatíva kínálja a legmegfelelőbb élményt. A felhasználók által létrehozott visszajelzések sokszor nagyobb bizalmat keltenek, mint a hivatalos reklámok. Itt válik hangsúlyossá a kérdés: mennyire megbízhatóak azok a források, amelyek véleményekre és összehasonlításokra építenek?A mindennapi élet során rengeteg helyzet adódik, amikor választanunk kell két vagy több lehetőség közül, legyen szó digitális szolgáltatásokról, kulturális élményekről vagy technológiai megoldásokról. Egyre többször fordulunk online tartalmakhoz, hogy előzetes ismereteket szerezzünk, és értékeléseken keresztül lássuk, melyik alternatíva kínálja a legmegfelelőbb élményt. A felhasználók által létrehozott visszajelzések sokszor nagyobb bizalmat keltenek, mint a hivatalos reklámok. Itt válik hangsúlyossá a kérdés: mennyire megbízhatóak azok a források, amelyek véleményekre és összehasonlításokra építenek?
Az információszés folyamata változatos formákat ölt, és néha olyan területekhez is kapcsolódik, amelyek első ránézésre távol esnek a mindennapi döntésektől. Például a technológiai eszközök működését bemutató írások is segíthetnek abban, hogy jobban értsük a környezetünket. Gondoljunk csak arra, amikor valaki elolvassa a "Як працюють ігрові автомати? Вступ" című bevezetőt, amely ugyan szórakoztató eszközökről szól, de közben betekintést ad abba is, miként épül fel egy complex rendszer, hogyan kapcsolódik össze szoftver és hardver, és milyen matematikai elvek határozzák meg a működését. Ez a fajta tudás segíthet abban, hogy más területeken is kritikusan gondolkodjunk, és ne csak elfogadjuk, hanem meg is értsük az ajánlott lehetőségeket.
Érdemes tehát olyan platformokra támaszkodni, amelyek átfogó képet adnak a különféle választási opciókról. Az interneten található értékelő oldalak célja pontosan az, hogy összegyűjtsék a felhasználói tapasztalatokat, majd azokat rendszerezve, érthető modon mutassák be. Így a látogatók képet alkothatnak arról, hogy egy adott szolgáltatásnak milyen erősségei és hiányosságai vannak. A folyamat emlékeztethet egy átlátható piactérre, ahol mindenki véleményt cserélhet, és ahol a közösségi tapasztalatok egyre inkább felülírják a hagyományos marketingüzeneteket.
Amikor például egy új online szolgáltatást keresünk, gyakran belebotlunk a közösség által írt beszámolókba. Az olyan kifejezések, mint energy kaszinó vélemények, nem pusztán játékos felhanggal bírnak, hanem arra is rámutatnak, hogy a közösségi értékelések mennyire fontos sherepet játszanak a választásban. A név önmagában emlékeztet minket arra, hogy a közösségben megosztott tapasztalat gyakran kulcsfontosságú, amikor döntést kell hoznunk egy számunkra ismeretlen területen.
A kritikai hozzáállás viszont elengedhetetlen. Nem minden értékelés objectív, hiszen egyes írások mögött érdekek is húzódhatnak. Ezért érdemes több forrást párhuzamosan megvizsgálni, összevetni a különböző nézőpontokat, és csak ezek után levonni a következtetéseket. Az összehasonlító felületek éppen ebben segítenek trukturáltan jelenítik meg az információt, hogy az olvasó gyorsan felismerje a mintázatokat.
A felhasználók egyre tudatosabban fordulnak ezekhez az oldalakhoz, mivel a rohanó világban nincs idő minden lehetőséget személyesen kiprobálni. A döntés támogatására szolgáló platformok így nem csupán kényelmet biztosítanak, hanem egyfajta közösségi tudást is közvetítenek. Az itt szeett tapasztalatok sokszor túlmutatnak egy-egy konkrét terméken vagy szolgáltatáson: általános szemléletformáló erővel bírnak, hiszen megtanítanak arra, hogyan elemezzünk, hogyan válasszunk, és hogyan értékeljük kritikusan a lehetőségeket.
Végső soron az értékelő oldalak nem csupán listák vagy számszerű pontszámok halmazai, hanem közösségi terekké váltak, amelyekben a kollektív tudás és tapasztalat találkozik. Ebben rejlik igazi értékük: olyan eszközöket adnak a kezünkbe, amelyek segítségével tudatosabb, megalapozottabb döntéseket hozhatunk, legyen szó bármilyen hétköznapi vagy speciális választási helyzetről.
|
|
|
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 (2)
|
 |
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.
|
|
|
|