Hallo Zusammen,
ich habe das script von "meigrafd" erweitert, damit es die Empfangenen Daten von TinyTX Sendern mit folgenden Sensoren DS18x20, DHT11/22 und BMP085/180, an das SHC Übermittelt.
Getestet habe ich das mit meinen DS18x20 Sensoren, da ich noch keine anderen in Benutzung habe. Es kann sein, das bei dem DHT11/22 und BMP085/180 die übermittelten Werte noch angepasst werden müssen. Es sind auch bestimmt noch fehler vorhanden, aber es funktioniert schon mal.
Bei den DS18x20 gibt es eine FakeID Sensor ID, die sich aus einer FakeID und der TinyTX Node ID zusammensetzt. Bei den anderen Sensoren wird nur die TinyTX Node ID als Sensor ID übermittelt.
Hier mal das Script
Display All
Gruß
Harpi
ich habe das script von "meigrafd" erweitert, damit es die Empfangenen Daten von TinyTX Sendern mit folgenden Sensoren DS18x20, DHT11/22 und BMP085/180, an das SHC Übermittelt.
Getestet habe ich das mit meinen DS18x20 Sensoren, da ich noch keine anderen in Benutzung habe. Es kann sein, das bei dem DHT11/22 und BMP085/180 die übermittelten Werte noch angepasst werden müssen. Es sind auch bestimmt noch fehler vorhanden, aber es funktioniert schon mal.
Bei den DS18x20 gibt es eine FakeID Sensor ID, die sich aus einer FakeID und der TinyTX Node ID zusammensetzt. Bei den anderen Sensoren wird nur die TinyTX Node ID als Sensor ID übermittelt.
Hier mal das Script
Perl Source Code
- #!/usr/bin/perl -w
- #
- # sensor.pl
- # Based on meigrafd
- # Modified by Michael Harperscheidt for Work with "agent4788" SHC_Framework
- #
- # DS18x20, DHT11/22 and BMP085/180 without Altitude, Altitude is set fix to 0
- # Testet only with DS18x20, it is possible that the values at the DHT11/22 and BMP085/180
- # have to be adjusted (divide or something else)
- #
- # Reads data from serial port and posts to PHP and to SHC
- #
- # Run: sudo apt-get install libdevice-serialport-perl
- # if you get "Can't locate device/SerialPort.pm in @INC (@INC includes ..."
- #
- # use lib '/usr/lib/perl5/Device'
- # sudo apt-get install libwww-mechanize-perl
- #To install Proc:Daemon
- #perl -MCPAN -e 'install Proc::Daemon' OR sudo apt-get install libproc-daemon-perl
- #### CONFIG - START
- # Config for meigrafd PHP Sample
- # Secret Key for PHP
- my $KEY = '23338d373027ce83b1f81b9e9563b629';
- # set url to add.php for PHP
- my $url1 = "http://192.168.100.254/sensoren/add.php?key=". $KEY ."&node=";
- # Config for SHC_Framework
- # set Sensor Point ID
- my $spid = '2';
- # set Fake DS18x20 Serial
- my $ds18 = '28-aaaa0000';
- # set url to SHC_Framework
- my $url2 = "http://192.168.100.254/shc/index.php?app=shc&a&ajax=pushsensorvalues&spid=";
- # Config Global
- # set UART baudrate
- my $baudrate = 9600;
- # set Port
- my $PORT = "/dev/ttyUSB0";
- #### CONFIG - END
- # Declare the subroutines
- sub trim($);
- BEGIN {
- push @INC,"/usr/lib/perl5/";
- }
- use strict;
- use Device::SerialPort qw( :PARAM :STAT 0.07 );
- use WWW::Mechanize;
- use Time::localtime;
- use Scalar::Util 'looks_like_number';
- use Proc::Daemon;
- print "Serial to PHP gateway for RaspberryPi with RFM12B\r\n";
- my $ob = Device::SerialPort->new($PORT);
- $ob->baudrate($baudrate);
- $ob->parity("none");
- $ob->databits(8);
- $ob->stopbits(1);
- #$ob->handshake("xoff");
- $ob->write_settings;
- open(SERIAL, "+>$PORT");
- my $continue = 1;
- $SIG{TERM} = sub { $continue = 0 };
- while ($continue) {
- my $line = trim(<SERIAL>);
- print $line; print "\r\n";
- my @values = split(' ', $line);
- if(looks_like_number($values[0]) && $values[0] >=1) {
- post2php($values[0],$values[1]);
- post2shc($values[0],$values[1]);
- sleep(2);
- }
- }
- sub post2php {
- # Send Values to the meigrafd PHP Sample
- my $ua = WWW::Mechanize->new();
- my $URL = $url1 . $_[0] ."&" . $_[1];
- print $URL; print "\r\n";
- my $response = $ua->get($URL);
- if ($response->is_success) {
- my $c = $ua->content;
- print ("$c");
- } else {
- print "Failed to open url!";
- }
- }
- sub post2shc {
- # Send Values to the SHC_Framework
- my $ua = WWW::Mechanize->new();
- my $sid = $ds18 . $_[0];
- my $URL;
- my @humpre;
- my @werte = split('&', $_[1]);
- my $anzahl = @werte ;
- my @volt = split('=', $werte[0]);
- my @temp = split('=', $werte[1]);
- print $anzahl; print "\r\n";
- if ( $anzahl eq "3" ) {
- @humpre = split('=', $werte[2]);
- }
- else {
- @humpre = ("a", "1111");
- }
- my $temp = $temp[1] / 100; # Correct temperature value
- if ( $humpre[0] eq "h" ) {
- $URL = $url2 . $spid . "&sid=". $_[0] . "&type=2&v1=". $temp ."&v2=". $humpre[1];
- }
- elsif ( $humpre[0] eq "p" ) {
- $URL = $url2 . $spid . "&sid=". $_[0] . "&type=3&v1=". $temp ."&v2=". $humpre[1] . "&v3=0";
- }
- else {
- $URL = $url2 . $spid . "&sid=". $sid . "&type=1&v1=". $temp;
- }
- print $URL; print "\r\n";
- my $response = $ua->get($URL);
- if ($response->is_success) {
- my $c = $ua->content;
- if ( $c eq "1" ) {
- print "Data saved successfully to SHC_Framework\n";
- }
- elsif ( $c eq "2" ) {
- print "missing parameter for SHC_Framework\n";
- }
- elsif ( $c eq "3" ) {
- print "Save Failed to SHC_Framework\n";
- }
- elsif ( $c eq "4" ) {
- print "Invalid Sensor Type for SHC_Framework\n";
- }
- else {
- print "Reply unknown\n";
- }
- } else {
- print "Failed to open url!";
- }
- }
- # Perl trim function to remove whitespace from the start and end of the string
- sub trim($) {
- my $string = shift;
- $string =~ s/^\s+//;
- $string =~ s/\s+$//;
- return $string;
- }
- #
Gruß
Harpi
The post was edited 1 time, last by harpi ().