09-03-2021, 03:44 PM
(Ten post był ostatnio modyfikowany: 09-22-2021, 03:06 PM przez stAch.
Powód edycji: korekty i film
)
(firmware >1.43 Hw >3.5 posiada już zinterpretowane to rozwiązanie a poniższe pliki nie będą działać prawidłowo)
Wspominałem już ze LCD po czasie pracy na tych samych informacjach wypala pixele,
właśnie zamówiłem nowy bo dotychczasowy jest w stanie jak widać na filmie i w związku z tym by nie dojechać nowego napisałem prosty kod który umożliwia nam zmianę wyświetlanej informacji przy użyciu jednego z wejść np INPD4
w zdarzeniach dodajemy event jeśli INPD4 = 1 ==> http4 a jako ciąg http4 wstawiamy url do naszego pliku który zamieszczamy na dowolnym serwerze => zmiana ręczna ekranu
lub url do naszego pliku wywołujemy cyklicznie czyli ustawiamy jako adres serwera1 => zmiana cykliczna ekranu
i plik configu
Ilość paneli zasadniczo dowolna kolejne dodajemy np kopiując jako nowa linię INFO i odpowiednio edytując, Pamiętając ze panel musi zawierać 4 linie rozdzielone * a każda z linijek txtu LCD musi zawierać minimum jeden znak lub spacje!
Możesz zobaczyć jak to wygląda aktualnie na twoim ekranie OLED 192.168.1.100/xml/oled.xml i wkleić do kodu
np: pusty ekran to
działanie na filmie poniżej ale lepiej przetestować samemu inpd4 do plusa i mamy zmianę ekranu z informacją
licencja freeuse wszelkie pomysły dalszego rozwoju kodu mile widziane...
Wspominałem już ze LCD po czasie pracy na tych samych informacjach wypala pixele,
właśnie zamówiłem nowy bo dotychczasowy jest w stanie jak widać na filmie i w związku z tym by nie dojechać nowego napisałem prosty kod który umożliwia nam zmianę wyświetlanej informacji przy użyciu jednego z wejść np INPD4
w zdarzeniach dodajemy event jeśli INPD4 = 1 ==> http4 a jako ciąg http4 wstawiamy url do naszego pliku który zamieszczamy na dowolnym serwerze => zmiana ręczna ekranu
lub url do naszego pliku wywołujemy cyklicznie czyli ustawiamy jako adres serwera1 => zmiana cykliczna ekranu
Kod PHP:
<?php
include_once('CONFIG.PHP');
//$ip = '192.168.1.100'; //odkomentowac dla stalego ip
$context = stream_context_create(array(
'http' => array(
'header' => "Authorization: Basic " . base64_encode("$username:$password")
)
));
function set_val($param, $value){
$fileData = file('CONFIG.PHP');
$newArray = array(); $jest = 0;
foreach($fileData as $line) {
if (strpos($line, $param.' = ')) { //jesli linia ma parametr to zmiana + opis
if (strpos($line, '/')){$opis = substr($line, strpos($line, '/'), strlen($line));} else {$opis = "\n";}
$line = '$'.$param.' = \''.$value.'\'; '.$opis; $jest = 1;
}
if (strpos($line, '*end*') && $jest == 0){$line = '$'.$param.' = \''.$value.'\';'."\n".'/*end*/'."\n";}
$newArray[] = $line;
}
$fp = fopen('CONFIG.PHP', 'w');
fwrite($fp, implode("",$newArray));
fclose($fp);
}
function test($data,$pn){ //sprawdzanie poprawności składni i kodowanie url
if(substr_count($data, '*') != 4){$data = "1* * config data* error line ".$pn."* ";}
return str_replace(array('%',' '), array('!','%20'), $data);
}
$ips = getenv("REMOTE_ADDR") ;
if ($ips != $ip){set_val('ip', $ips);} //zapis ip jeśli zmieniono
if ($pn < (count($panel)-1)){set_val("pn",$pn+1); } else {set_val("pn","0"); } //zapis nr tablicy
$url = test($panel[$pn],$pn);
//***************************** send info *********************************//
set_error_handler( function ($s, $m, $f, $l) { throw new ErrorException($m, $s, $s, $f, $l); });
try { file_get_contents('http://'.$ip.':'.$port.'/stm.cgi?oled='.$url, false, $context); }
catch (Exception $e) { $url = $e->getMessage(); }
restore_error_handler();
//echo $url;
?>
Kod PHP:
<?php
$username = 'admin'; //user LK
$password = 'admin'; //pass LK
$ip = '10.10.2.100'; //ip LK
$port = '80'; //port LK
$pn = '0';
//********nie przesuwać poniższych lini jako pozycji *************//
$panel = array(
"1* * %06900 * * ", ///panel 1 Każda z tych linii jest kodem ustawień ekranu OLED
"1* OGRZEWANIE*Zasobnik %01910*Wymiennik %01610*Kociol %01810", ///panel 2 Każde z wywołań pliku powoduje wysłanie do LK ustawień
"1* SOLAR*Solar %01710*Wymiennik %01610*Pompa %043 %02210", ///panel 3 kolejno jednej linii i wyświetlenie jej na ekranie OLED
"1* POGODA*Temp: %01410'C*Cisn: %05912*Wilg: %01510 %", ///panel 4 aż do następnej zmiany - wyświetlenie ostatniej
"1* INFO*----*--*--", ///panel 5 powoduje znów wyświetlenie pierwszej itd...
);
?>
Możesz zobaczyć jak to wygląda aktualnie na twoim ekranie OLED 192.168.1.100/xml/oled.xml i wkleić do kodu
np: pusty ekran to
Kod:
"1* * * * ",
licencja freeuse wszelkie pomysły dalszego rozwoju kodu mile widziane...
e-chata.hyzne.com | LK1 - sterowniki akwarystyki | LK2 - sterowniki ihome | LK3 - niezliczone ilości wersji/nakładek na farmach PV i nie tylko | LK4 - testy bezprzewodowe