2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-01-31 18:59:33 +00:00
fhem-mirror/fhem/contrib/WBS/99_CGI_RAWMSG.pm
parix 65784c33d2 V1.0.1 Bugfixes 'defptr'
git-svn-id: https://svn.fhem.de/fhem/trunk@640 2b470e98-0d58-463d-a4d8-8e2adae1ed80
2010-05-24 17:42:23 +00:00

124 lines
3.9 KiB
Perl

################################################################################
# Route RAW-Sensor-Data via FHEMWEB/CGI to fhem.pl: Function -> disptach($$$)
# 99_CGI_RAWMSG
#
# Version: 1.0.1
# Date: 24.05.2010
# Author: Axel Rieger
#
################################################################################
# Examples for RAW-Sensor-Data
# WBS = WeB-Sensors
# WBS:SENSOR-CODE:SENSOR-TYPE:VALUE:TIMESTAMP
# HMS -> H909801530400F4
# CUL_WS -> K21500163
################################################################################
package main;
use strict;
use warnings;
use Data::Dumper;
use vars qw(%data);
use vars qw($__ME);
################################################################################
sub CGI_RAWMSG_Initialize($)
{
# FHEM Part
my ($hash) = @_;
$hash->{Clients} = ":CUL_WS:HMS:WBS:";
my %mc = (
"1:CUL_WS" => "^K.....",
"2:HMS" => "^810e04....(1|5|9).a001",
"3:WBS" => "^WBS:",
);
$hash->{MatchList} = \%mc;
# CGI Part
my $cgi_key = "rawmsg";
my $cgi_name = "CGI_RAWMSG";
# PRIV-CGI
my $fhem_url = "/" . $cgi_key ;
$data{FWEXT}{$fhem_url}{FUNC} = "CGI_RAWMSG_Dispatch";
$data{FWEXT}{$fhem_url}{LINK} = $cgi_key;
$data{FWEXT}{$fhem_url}{NAME} = $cgi_name;
# Create IO-Device for fhem-dispatcher
$data{$cgi_key}{NAME} = $cgi_name;
$data{$cgi_key}{MatchList} = \%mc;
if(!defined($defs{$cgi_name})){
fhem "define $cgi_name dummy";
$defs{$cgi_name}{STATE} = "AKTIV 99_CGI_RAWMSG";
$defs{$cgi_name}{TYPE} = "CGI_RAWMSG";
fhem "attr $cgi_name comment DUMMY_DEVICE_FOR_99_CGI_RAWMSG";
}
}
################################################################################
sub CGI_RAWMSG_Dispatch($$)
{
my ($htmlarg) = @_;
my ($ret_param,$ret_txt,@tmp,$rawmsg,$cgikey);
Log 5, "CGI_RAWMSG|Dispatch|START: $htmlarg";
$ret_param = "text/plain; charset=ISO-8859-1";
$ret_txt = "ERROR;NODATA";
# print "CGI_RAWMSG|Dispatch: " . Dumper(@_) . "\n";
# Aufurf: http://[FHEMWEB]/fhem/rawmsg?TEST12345
# htmlarg = /rawmsg?TEST12345
if($htmlarg =~ /\?/) {
@tmp = split(/\?/,$htmlarg);
$cgikey = shift(@tmp);
$cgikey =~ s/\///;
$rawmsg = shift(@tmp);
# HELP
if($rawmsg eq "help") {
no strict "refs";
$ret_txt = &CGI_RAWMSG_help;
use strict "refs";
return ($ret_param, $ret_txt);
}
# Check rawmsg
foreach my $m (sort keys %{$data{$cgikey}{MatchList}}) {
Log 5, "CGI_RAWMSG|MatchList-RAWMSG: $rawmsg";
Log 5, "CGI_RAWMSG|MatchList-Key: $m";
Log 5, "CGI_RAWMSG|MatchList-Val: " . $data{$cgikey}{MatchList}{$m};
my $match = $data{$cgikey}{MatchList}{$m};
if($rawmsg =~ m/$match/) {
Log 5, "CGI_RAWMSG|MatchList-Key FOUND: $m";
# $ret_txt = "HTMLARG = $htmlarg\n";
# $ret_txt .= "CGI-KEY = $cgikey\n";
# $ret_txt .= "RAWMSG = $rawmsg\n";
# Dummy-Device
my $name = $data{$cgikey}{NAME};
my $hash = $defs{$name};
$hash->{"${name}_MSGCNT"}++;
$hash->{"${name}_TIME"} = TimeNow();
$hash->{RAWMSG} = $rawmsg;
my %addvals = (RAWMSG => $rawmsg);
my $ret_disp = &Dispatch($hash, $rawmsg, \%addvals);
if(defined($ret_disp)) {$ret_txt = "OK;" . join(";" ,@$ret_disp) . "\n";}
else {$ret_txt = "ERROR;NODEVICEFOUND";}
return ($ret_param, $ret_txt);
}
}
$ret_txt = "ERROR;NODATAMATCH";
}
return ($ret_param, $ret_txt);
}
################################################################################
sub CGI_RAWMSG_help
{
my $txt = "Route RAW-Sensor-Data via FHEMWEB/CGI to FHEM\n";
$txt .= "FHEM.PL Function -> disptach($$$)\n";
$txt .= "Examples for RAW-Sensor-Data \n";
$txt .= "WBS = WeB-Sensors\n";
$txt .= "WBS:SENSOR-CODE:SENSOR-TYPE:VALUE:TIMESTAMP\n";
$txt .= "HMS -> H909801530400F4\n";
$txt .= "CUL_WS -> K21500163 \n";
retrun $txt;
}
################################################################################
sub CGI_RAWMSG_new_iodev
{
}
################################################################################
1;
################################################################################