'Inteligenty' dom ze sterownikiem PLC

 Language:
Szukanie zaawansowane  

Aktualności:

Powrót do strony głównej: www.edom-plc.pl

Autor Wątek: Raspberry Pi - skrypty  (Przeczytany 3065 razy)

Champ

  • Newbie
  • *
  • Wiadomości: 2
    • Zobacz profil
Raspberry Pi - skrypty
« dnia: Kwiecień 19, 2015, 02:18:02 pm »

Witam,

chciałbym dodać do sterownika WAGO wizualizacje.
Przeczytałem następujące wątki :

http://www.edom-plc.pl/index.php/pl/wiecej-o-plc/funkcje/186-jeszcze-jeden-sposob-komunikacji-z-plc

http://www.edom-plc.pl/index.php/pl/wiecej-o-plc/sterowanie/191-panel-administracyjny-wszystko-w-jednym

Zastanawiam się jak można napisać skrypt pod linuxa (raspberryPi), który odczytuje i wpisuje dane.

Czy autor mógłby podzielić się z nami tymi skryptami?

Myślę, że umieszczenie na serwerze w sterowniku dostępu np. do bramy garażowej nie jest zbyt bezpieczne, dlatego chciałbym to zrobić na zewnętrznym komputerze (RaspbberyPi) i odpowiednio to zaszyfrować.

Z góry bardzo dziękuję za odpowiedź i za całą pracę jaką Pan wykonuje pomagając nam w tworzeniu własnej automatyki domowej.

Pozdrawiam
Zapisane

admin

  • Administrator
  • Sr. Member
  • *****
  • Wiadomości: 294
    • Zobacz profil
Odp: Raspberry Pi - skrypty
« Odpowiedź #1 dnia: Kwiecień 19, 2015, 02:52:57 pm »

Cześć,

mój skrypt do odczytywania wygląda, jak poniżej.  Przyjmuje adresy, które ma odczytać w postaci:

ADRs:2|80|0|0,2|81|0|0,2|82|0|0,2|83|0|0,2|84|0|0,2|85|0|0,2|86|0|0,2|86|0|0,2|92|0|0,2|93|0|0,2|94|0|0,2|156|0|0,2|143|0|0,2|108|0|0,2|109|0|0,2|110|0|0,2|138|0|0,2|112|0|0

czyli adresy opisane tu:

http://www.edom-plc.pl/index.php/pl/wiecej-o-plc/funkcje/186-jeszcze-jeden-sposob-komunikacji-z-plc

oddzielone przecinkami.

odpowiedź, czyli wartości odpytywanych adresów zwracane są jako JSON, czyli np. [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0].  Taką tablicę obrabiam już na poziomie przeglądarki. 

<?php
   if(isset($_POST['ADRs'])) {
      $addresses = explode(",", $_POST['ADRs']);
      $req = "|0|".strval(count($addresses));
      foreach($addresses as $key => $address) {
         $req.= "|".strval($key)."|".$address;
      }
      $req.= "|";
      $url = 'http://XXX.XXX.XXX.XXX/PLC/webvisu.htm';
      $options = array(
         'http' => array(
            'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
            'method'  => 'POST',
            'content' => $req,
         ),
      );
      $context  = stream_context_create($options);
      $result = trim(file_get_contents($url, false, $context), "|");
      $reply = array_map('intval',explode("|", $result));
      echo json_encode($reply);   
   }
?>

Pozdrawiam,
Zapisane

Champ

  • Newbie
  • *
  • Wiadomości: 2
    • Zobacz profil
Odp: Raspberry Pi - skrypty
« Odpowiedź #2 dnia: Kwiecień 19, 2015, 09:38:47 pm »

Bardzo dziękuję, jeszcze jedno pytanie, bo nie wiem czy dobrze zrozumiałem.

Plik webvisu.html znajduje się na sterowniku, a pliki php są na serwerze raspberryPi?

Wtedy następuje wymiana danych i dzięki temu na raspberryPi można postawić stronę internetową, która zczytuje wszystkie informacje ?

Mógłby Pan jeszcze opisać jak wygląda zapisywanie zmiennych z przeglądarki?
« Ostatnia zmiana: Kwiecień 19, 2015, 09:41:20 pm wysłana przez Champ »
Zapisane

admin

  • Administrator
  • Sr. Member
  • *****
  • Wiadomości: 294
    • Zobacz profil
Odp: Raspberry Pi - skrypty
« Odpowiedź #3 dnia: Kwiecień 19, 2015, 09:46:30 pm »

Witam,

Oba pliki są na RPi.  Tak jest szybciej odczytać i zapisać.  De facto to mogą być 2 pliki php: 1. do generowania strony, 2. do wymiany danych. 

Gdyby html był na PLC, nie byłoby sensu robić pośrednika  w postaci RPI i skryptuy PHP, bo strona uruchomiona z PLC może się odpytywać bezpośrednio w PLC o stany adresów.

Jednakże jako że taka strona odpalona z PLC działa powoli, dzieją się cuda z kodowaniem i, co najważniejsze, nie da się ograniczyć do niej dostępu (co jest krytyczne przy wystawianiu takiej storny na dostęp z internetu), lepiej jest umieścić ją na innym serwerze, wymusić jakieś logowanie, ciasteczka, https itd i pozwolić jej, przez skrypt php, odczytywać dane z PLC.

Zo do zapisu - skrypt bardzo podobny... idea jest ta sama, co przy odczycie, protokół opisany w jednym z moich artykułów wskazanych wcześniej.  Odczytywanie zmiennej ADR i VAL, tworzenie wiadomości typu |1|......, wysyłanie i tyle.

Pozdrawiam,
Zapisane