Forum Tiny Control Solution

Pełna wersja: LCD Switcher
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
(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

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($linestrpos($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($fpimplode("",$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='.$urlfalse$context); }
catch (
Exception $e) { $url $e->getMessage(); }
restore_error_handler();

    
//echo $url;  
    
?>
i plik configu

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...
);

?>
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

Kod:
"1* * * * ",
działanie na filmie poniżej ale lepiej przetestować samemu Smile inpd4 do plusa i mamy zmianę ekranu z informacją
licencja freeuse wszelkie pomysły dalszego rozwoju kodu mile widziane...

A mógłbyś to łopatologicznie ze screenami opisać ??
(09-05-2021, 11:07 AM)marcinb napisał(a): [ -> ]A mógłbyś to łopatologicznie ze screenami opisać ??
łopatologicznie... wraz z każdym odpytaniem piku php LK otrzyma nowe ustawienia OLED które definiujesz sobie w CONFIGU [attachment=754]

i teraz w zależności jak to ustawisz w LK to masz ręczne zmiany informacji na ekranie OLED lub automatycznie albo nawet to i to Smile


zasada działania na infografice [attachment=751] Działa też z wyświetlaczem wirtualnym
Jeśli w LK ustawisz adresy serwerowa które będą kierować do ww pliku [attachment=752]

to Pierwszy zmienia ustawienia OLED co 60 sekund


to Czwarty zmienia na żądanie przez zdefiniowane zdarzenie [attachment=753]

Z uwagi że przesyłane są wrażliwe dane /umożliwiające dostęp do LK/ udostepniam gotowe pliki do samodzielnego wrzucenia na serwer najlepiej własny w sieci LAN np na raspberry pi tak jak to jest u mnie, lub dowolny w sieci www. Wymagania serwera minimalne php > 4 i nic więcej Smile działa nawet na openBDS w routerze z serwerem php PHP-FPM



Przy takim ustawieniu jak na screanach LK co minute wyświetla kolejny ekran na OLED zdefiniowany w CONFIGU ponadto jeśli na inpd4 podam 5v to zmieni ekran na zadanie - nie trzeba czekać minuty wciskasz przycisk i masz kolejne info na OLED



może kiedyś doczekamy się takiego rozwiązania bezpośrednio w LK że przy pomocy jakiegoś wejścia będzie można /opcja cyklicznie- automatycznie/ zmieniać ekrany OLED lub nawet po zakończeniu wyłączać ekran /opcja wyłączanie OLED po czasie x min/ bo po jaką cholerę ma on świecić nonstop w piwnicy przy kotle - ku uciesze pająków Smile






z tego co się orientuję OLED ten ma regulowana jasność i kontrast https://www.elektroda.pl/rtvforum/topic3...d75a77a040
Malinowo,
Wszystko działa IDEALNIE. Mam też nadzieję, że może zostanie to zaimplementowane w LK.

Reasumując
Trzeba pamiętać o wielkości liter CONFIG.PHP oraz o prawach do pliku wykonywalnego przez LK3.

Dobra robota.
Nazwy plików można edytować dowolnie w zależności od serwera pamiętać o powyższych
Myślę, że niedługo dodamy opcję, zmiany ekranu np 3 do wyboru.
Pomysły na akcję zmieniającą ekran?
- zdarzenie
- scheduler
- coś jeszcze?
Plus opcja wygaszenia ekranu, po ustawionym czasie od ostatniego przełączenia.
zdarzenie załatwi każde z wyjść/wejść z tym ze opcja wykonawcza wyświetl ekran x lub zmień na kolejny lub wyłącz ekran
scheduler idealny na okresowe on/off


4 ekrany pozwoli wyświetlić wszelkie dane z czujników grupując je na ekranach pod względem typu /switcher mojego autorstwa już na 15 sztukach - więc widzę co jak i ile ludzie ustawiają/
1. DS/temp/pres/hig
2. IN
3. OUT
4. energy/modbus/etc

5. pomysły - kilku klientów zasugerowało mi możliwość odpytania dowolnego adresu www i wyświetlenia komunikatu który owa strona zwróci /odczyt na OLED zewnętrznych danych np RSS/XML/
pisze takie cudo z zastosowaniem obcinacza do max 120 znaków najdłuższego znalezionego ciągu pobranej treści - z tego co mi wiadomo czyta już kilka rożnych klimatyzatorów i jakiegoś SOFARA fotowoltaiki których nie można podpiąć po modbusie - kwestia ciągnięcia kablii.
(09-08-2021, 02:38 PM)stAch napisał(a): [ -> ]5. pomysły - kilku klientów zasugerowało mi możliwość odpytania dowolnego adresu www i wyświetlenia komunikatu który owa strona zwróci /odczyt na OLED zewnętrznych danych np RSS/XML/
pisze takie cudo z zastosowaniem obcinacza do max 120 znaków najdłuższego znalezionego ciągu pobranej treści - z tego co mi wiadomo czyta już kilka rożnych klimatyzatorów i jakiegoś SOFARA fotowoltaiki których nie można podpiąć po modbusie - kwestia ciągnięcia kablii.

To może z wykorzystaniem obecnego klienta http coś zrobimy.
takie cuda to ja bym pchał na serwer atts i wysyłał do LK przy pomocy mqtt
1. nie potrzebnie dobijamy sterownik który musi poradzić sobie z komunikacją i formatowaniem treści.
2. nie ma sensu rozpisywać kodu do kilkunastu userow - z uwagi na zerowa standaryzacje to nie da się zrobić uniwersalnym czytnikiem
3. ogólnie to może lepiej by atts do każdego z kont mqtt dawała 50mb serwera na który można by samemu pisać kod php. serwer ten będzie miał dostęp do naszego LK przez mqtt komunikacja dwustronna
4. klient działa w odwrotnym kierunku /wymagana jest strona pośrednicząca która zwraca info do OLED/ i niech tak pozostanie bo będzie bałagan

Mi osobiście brakuje możliwości pisania wszystkich zdarzeń w textarea na zasadzie aktualne wczytuje jako kod i dowolnie go sobie edytuje.I jest on tak interpretowany jak chcę.
swoja drogą kawałek takiego kodu obecnego event który czyta LK na priv mile widziany.