Dowolne urządzenie piszące do nettemp przez RS232


Topic author
tasior1802
Posty: 14
Rejestracja: wt sty 07, 2020 7:52 pm

Dowolne urządzenie piszące do nettemp przez RS232

#1

Post autor: tasior1802 » ndz sty 12, 2020 7:27 pm

Witam, zakładam taki temat, bo możliwe że komuś poz mną to się przyda. Potrzebuję zrobić tak , żeby urządzenie na atmega32 było w stanie wysłać za pomocą rs232 dane do nettempa. Dla mnie najlepiej żeby można było wysyłać różne odczyty z różną częstotliwością w zależności od stanu w jakim urządzenie pracuje.
Pytanie brzmi JAK to wysłać , żeby nettemp je poprawnie odebrał.
Myślę nad sposobem takim, że skrypt będzie odczytywał cyklicznie bufor z rs232 i jak coś tam będzie to wykona coś takiego:

$cmd=' curl --connect-timeout 3 -G "127.0.0.1/receiver.php" -d "value=20&key=xxkeyxx&device=wireless&type=elec&ip=192.168.5.122" ';
$temp=shell_exec($cmd);
i tutaj to co pogrubione było by wysłane z megi przez rs232, tylko mam wrażenie że to trochę jazda "na około"

Jest może na to jakiś bardziej normalny sposób ?
Awatar użytkownika

pasiekazj
Twórca oprogramowania
Posty: 190
Rejestracja: pn lip 01, 2019 12:08 pm
Otrzymał  piwo: 14 razy
Kontakt:

Re: Dowolne urządzenie piszące do nettemp przez RS232

#2

Post autor: pasiekazj » pn sty 13, 2020 8:42 am

Najlepiej byłoby gdyby dało się to puścić po sieci via MQTT. Twój sposób też powinien działać.
Rpi 4 + SSD 240 GB + nettemp.
http://mmblog.pl

Topic author
tasior1802
Posty: 14
Rejestracja: wt sty 07, 2020 7:52 pm

Re: Dowolne urządzenie piszące do nettemp przez RS232

#3

Post autor: tasior1802 » ndz lut 02, 2020 10:13 pm

Za radą kolegi powoli rozgryzam MQTT. Zrobiłem "mostek" RS232-MQTT z jakichś przykładów na arduino i nawet coś to działa, pytanie mam tylko czy nettemp da radę odebrać więcej danych z jednego topicu ? , np. czy da się mu podsunąć dane w formacie JSON przez MQTT ? ..
Awatar użytkownika

pasiekazj
Twórca oprogramowania
Posty: 190
Rejestracja: pn lip 01, 2019 12:08 pm
Otrzymał  piwo: 14 razy
Kontakt:

Re: Dowolne urządzenie piszące do nettemp przez RS232

#4

Post autor: pasiekazj » pn lut 03, 2020 9:11 am

tasior1802 pisze:
ndz lut 02, 2020 10:13 pm
Za radą kolegi powoli rozgryzam MQTT. Zrobiłem "mostek" RS232-MQTT z jakichś przykładów na arduino i nawet coś to działa, pytanie mam tylko czy nettemp da radę odebrać więcej danych z jednego topicu ? , np. czy da się mu podsunąć dane w formacie JSON przez MQTT ? ..
Na obecną chwilę tylko pojedyncze wartości w formacie

MQTT_IP_ADRESS/MQTT_DEVICE_NAME/MQTT_VALNAME/MQTT_TSKNAME/VALUE

MQTT_VALNAME - temp, humid, press, itd...
MQTT_TSKNAME - jest opcjonalne
Rpi 4 + SSD 240 GB + nettemp.
http://mmblog.pl

Topic author
tasior1802
Posty: 14
Rejestracja: wt sty 07, 2020 7:52 pm

Re: Dowolne urządzenie piszące do nettemp przez RS232

#5

Post autor: tasior1802 » wt lut 04, 2020 8:38 pm

ok, dorobiłem do tego mostka jeszcze bardzo prosty puki co parser JSON i zasadniczo mam czego chciałem. Potrzebował bym tylko pomocy, w jaki sposób przez MQTT z nettempa wysłać stan jakiegoś wirtualnego GPIO (lub przwdziwego ale moj NT stoi na PC..)
W zasadzie potrzebuję załączyć po sieci przez MQTT ogrzewane i z pieca posłać status i inne parametry, że działa...
Awatar użytkownika

pasiekazj
Twórca oprogramowania
Posty: 190
Rejestracja: pn lip 01, 2019 12:08 pm
Otrzymał  piwo: 14 razy
Kontakt:

Re: Dowolne urządzenie piszące do nettemp przez RS232

#6

Post autor: pasiekazj » śr lut 05, 2020 8:36 am

tasior1802 pisze:
wt lut 04, 2020 8:38 pm
ok, dorobiłem do tego mostka jeszcze bardzo prosty puki co parser JSON i zasadniczo mam czego chciałem. Potrzebował bym tylko pomocy, w jaki sposób przez MQTT z nettempa wysłać stan jakiegoś wirtualnego GPIO (lub przwdziwego ale moj NT stoi na PC..)
W zasadzie potrzebuję załączyć po sieci przez MQTT ogrzewane i z pieca posłać status i inne parametry, że działa...

Kod: Zaznacz cały

mosquitto_pub -h 192.168.0.1 -t "192.168.0.2/gpio/18/temp" -m 22.5
I to możesz wywołać ze skryptu bash za pomocą shell_exec lub użyć tego co jest w NT - plik publish.php

Kod: Zaznacz cały

<?php

$ROOT=(dirname(dirname(dirname(__FILE__))));
require("phpMQTT.php");

$server = "localhost";     // change if necessary
$port = 1883;                     // change if necessary
$username = "";                   // set your username
$password = "";                   // set your password
$client_id = "phpMQTT-publisher"; // make sure this is unique for connecting to sever - you could use uniqid()

$mqtt = new phpMQTT($server, $port, $client_id);

if ($mqtt->connect(true, NULL, $username, $password)) {
	$mqtt->publish("/192.168.50.55/Kominek/gpio/12/cmd", "GPIO,12,1" , 1);
	$mqtt->close();
} else {
    echo "Time out!\n";
}
?>
Rpi 4 + SSD 240 GB + nettemp.
http://mmblog.pl

Topic author
tasior1802
Posty: 14
Rejestracja: wt sty 07, 2020 7:52 pm

Re: Dowolne urządzenie piszące do nettemp przez RS232

#7

Post autor: tasior1802 » śr lut 05, 2020 9:19 am

ok, dzięki. posiedzę nad tym

Topic author
tasior1802
Posty: 14
Rejestracja: wt sty 07, 2020 7:52 pm

Re: Dowolne urządzenie piszące do nettemp przez RS232

#8

Post autor: tasior1802 » śr lut 05, 2020 8:13 pm

W zasadzie na tym tropie już byłem, nie wiem tylko jak to zrobić, żeby po naciśnięciu przycisku od tego powstałego GPIO poszła wiadomość MQTT że zmienił się stan. Później jeszcze kwestia potwierdzenia od urządzenia że ten stan się zmienił, ale to kolejny kroczek.. Teraz mam tak, że jak kliknę w GPIO to zmienia na chwile stan na ON i zaraz Wraca na OFF..
Awatar użytkownika

pasiekazj
Twórca oprogramowania
Posty: 190
Rejestracja: pn lip 01, 2019 12:08 pm
Otrzymał  piwo: 14 razy
Kontakt:

Re: Dowolne urządzenie piszące do nettemp przez RS232

#9

Post autor: pasiekazj » czw lut 06, 2020 9:24 am

jak masz zrobione to gpio ?
Rpi 4 + SSD 240 GB + nettemp.
http://mmblog.pl

Topic author
tasior1802
Posty: 14
Rejestracja: wt sty 07, 2020 7:52 pm

Re: Dowolne urządzenie piszące do nettemp przez RS232

#10

Post autor: tasior1802 » czw lut 06, 2020 11:59 am

wysłałem po MQTT wiadomość którą NT zobaczył jako new device i z tamtego poziomu dodałem GPIO do urządzeń
Awatar użytkownika

pasiekazj
Twórca oprogramowania
Posty: 190
Rejestracja: pn lip 01, 2019 12:08 pm
Otrzymał  piwo: 14 razy
Kontakt:

Re: Dowolne urządzenie piszące do nettemp przez RS232

#11

Post autor: pasiekazj » czw lut 06, 2020 12:22 pm

Jak to wysłałeś? Konkrety.
Rpi 4 + SSD 240 GB + nettemp.
http://mmblog.pl

Topic author
tasior1802
Posty: 14
Rejestracja: wt sty 07, 2020 7:52 pm

Re: Dowolne urządzenie piszące do nettemp przez RS232

#12

Post autor: tasior1802 » czw lut 06, 2020 7:30 pm

na tą chwilę zasymulowałem to, co będzie mi wysyłał piec, czyli za pomocą MQTT Explorer wysłałem:
topic: /192.168.5.11/Kominek/gpio/120/cmd oraz
data: GPIO,120,0

to spowodowało że nettemp zobaczył new dewice w taki sposób:
name - 1493
ROM - ip_mqtt_Kominek_gpio_120_cmd
Type - GPIO
Device - ip_mqtt
IP - 192.168.5.11
GPIO - 120

zasadniczo piecem mogę wysyłać dowolny topic i data , ale zależy mi żeby NT mógł zmieniać stan tego wirtualnego GPIO i wysyłać jego stan przez MQTT
Awatar użytkownika

pasiekazj
Twórca oprogramowania
Posty: 190
Rejestracja: pn lip 01, 2019 12:08 pm
Otrzymał  piwo: 14 razy
Kontakt:

Re: Dowolne urządzenie piszące do nettemp przez RS232

#13

Post autor: pasiekazj » pt lut 07, 2020 2:06 pm

topic jak pamietam musi być taki:

Kod: Zaznacz cały

/192.168.5.11/Kominek/gpio/tutaj nr gpio/jakaś nazwa
Dane: 1 lub 0 - on/off

Numer gpio daj poniżej 100 bo od setki w górę NT będzie myślał ze to z ekspandera gpio mcp....
zależy mi żeby NT mógł zmieniać stan tego wirtualnego GPIO i wysyłać jego stan przez MQTT
i tu na razie jest problem bo NT nie potrafi z interfejsu wysłać po mqtt ale możesz to zrobić skryptem jak pisałem wyżej.
Rpi 4 + SSD 240 GB + nettemp.
http://mmblog.pl

Topic author
tasior1802
Posty: 14
Rejestracja: wt sty 07, 2020 7:52 pm

Re: Dowolne urządzenie piszące do nettemp przez RS232

#14

Post autor: tasior1802 » pt lut 07, 2020 7:49 pm

wcześniej miałem GPIO12 zamiast 120 ale oczywiście po MQTT ten status nie wysyła sie.
Zastanawiam się , czy przerobienie fragmentu pliku /nettemp/status/controls.php , by nie załatwiło moich potrzeb. (stąd to moje wcześniejsze gpio120 ..)


if ($gpio >= '100') {
exec("/usr/local/bin/gpio -x mcp23017:$gpio:0x20 mode $gpio out");
na :
if ($gpio >= '100') {
exec("mosquitto_pub -h 192.168.0.1 -t "192.168.0.2/gpio/12/temp" -m 1");

jeszcze nie wiem do końca jak sformatować dobrze tekst dla mosquitto_pub

Topic author
tasior1802
Posty: 14
Rejestracja: wt sty 07, 2020 7:52 pm

Re: Dowolne urządzenie piszące do nettemp przez RS232

#15

Post autor: tasior1802 » ndz lut 09, 2020 2:30 pm

Męczę temat bo chciałbym zrobić to teraz w taki sposób, że podmienię sposób wystawiania stanu GPIO na wysłanie po MQTT, ale nie wiem za bardzo w którym miejscu się to odbywa. Ktoś biegły pomoże ?

znalazłem w pliku /var/www/nettemp/modules/gpio/temp.php taki fragment:

Kod: Zaznacz cały

function action_off($op,$sensor_name,$gpio,$rev,$ip,$rom) {
        global $db;
        global $ROOT;

        if(empty($ip)){
                $out="/usr/local/bin/gpio -g mode $gpio output";
                $read="/usr/local/bin/gpio -g read $gpio";
                $on="/usr/local/bin/gpio -g write $gpio 1";
                $off="/usr/local/bin/gpio -g write $gpio 0";
                exec($out);
                exec($read, $check);
                if ($rev == 'on') {
                        if ($check['0'] == '0'){
                                exec($on);
                                $content = date('Y M d H:i:s')." GPIO ".$gpio." CHECK" .$check['0'].", SET OFF\n";
                                logs($gpio,$ip,$content);
                        }
                        else {
                                $content = date('Y M d H:i:s')." GPIO ".$gpio." CHECK" .$check['0'].", ALREADY OFF\n";
                                logs($gpio,$ip,$content);
                        }
                }
                else {
                        if ($check['0'] == '1'){
                                exec($off);
                                $content = date('Y M d H:i:s')." GPIO ".$gpio." CHECK  " .$check['0'].", SET OFF\n";
                                logs($gpio,$ip,$content);
                        }
                        else {
                                $content = date('Y M d H:i:s')." GPIO ".$gpio." CHECK " .$check['0'].", ALREADY OFF\n";
                                logs($gpio,$ip,$content);
                        }
                }
        }
 
 else {
                $ch = curl_init();
                $optArray = array(
                        CURLOPT_URL => "$ip/control?cmd=GPIO,$gpio,0",
                        CURLOPT_RETURNTRANSFER => true,
                        CURLOPT_CONNECTTIMEOUT => 1,
                        CURLOPT_TIMEOUT => 3
                );
                curl_setopt_array($ch, $optArray);
                exec("mosquitto_pub -h 127.0.0.1 -t '/192.168.5.20/relay/gpio/12' -m 1");  >>>>>> tutaj dodałem MQTT <<<<<<<[/b]
                $res = curl_exec($ch);
                if(curl_errno($ch))
ale wygląda jakby to się nie wykonywało podczas zmiany GPIO on/off
Awatar użytkownika

pasiekazj
Twórca oprogramowania
Posty: 190
Rejestracja: pn lip 01, 2019 12:08 pm
Otrzymał  piwo: 14 razy
Kontakt:

Re: Dowolne urządzenie piszące do nettemp przez RS232

#16

Post autor: pasiekazj » pn lut 10, 2020 9:39 am

To zależy czy to gpio ma być tylko on/off czy coś innego. Jeśli on/off to masz to w pliku controls.php
Rpi 4 + SSD 240 GB + nettemp.
http://mmblog.pl
ODPOWIEDZ