From 11b8de50b98010896f6a87157abcbe6a3bc90bdf Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Fri, 3 Jul 2009 08:43:32 +0000 Subject: [PATCH] Multi-Line Editing Axel's 99_priv_cgi.pm changes git-svn-id: https://svn.fhem.de/fhem/trunk@405 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/contrib/99_priv_cgi.pm | 367 +++++++++++++++++++++++++++- fhem/webfrontend/pgm2/01_FHEMWEB.pm | 14 +- 3 files changed, 377 insertions(+), 5 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index 91efd9ea9..f9a74a72d 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -510,3 +510,4 @@ - feature: CUL supports HMS (culfw >= 1.22 needed) - feature: CUL shutdown procedure added - feature: 14_CUL_WS: better error checking + - bugfix: webpgm2 multi line editing is working again diff --git a/fhem/contrib/99_priv_cgi.pm b/fhem/contrib/99_priv_cgi.pm index ed3e69f71..c16e0c25a 100644 --- a/fhem/contrib/99_priv_cgi.pm +++ b/fhem/contrib/99_priv_cgi.pm @@ -1,3 +1,58 @@ +# Beispiel für FHEM PRIV-CGI Schnittstelle +# +# Danke an Rudi für die Schnittstelle.... +# +# "Eigentlich wollte ich nur sehen, wie meine FHT's eingestellt sind, +# "und eine Übersicht aller vergbener FS20-Code's. ;-)" +# +# Das Modul verändert nichts an FHEM +# das Orginal-Mudol ist im CVS unter Contrib 99_priv_cgi.pm zu finden +# +# Beschreibung +# Es werden lediglich vorhanden Information aus FHEM in eigenen Ansichten/Listen dargestellt. +# +# Ansicht/List +# ALL +# Überblick über alle Devices +# +# FHT +# Übersicht aller FHT's +# Die eingestellten Schaltzeitpunkte an denen der FHT zwischen Tag- und Nacht-Temperatur wechslet; bzw. umgekehrt. +# +# FS20 +# Übersicht alle FS20-Devices +# +# TH +# Temperatur & Humidity +# Alle Devices (die ich habe) die eine Temperatur oder Luftfeuchte messen (FHT,KS300,HMS,S300TH...) +# +# DUMMY (als Beispiel für eigene Functionen) +# Überischt aller DUMMY-Devices +# +# +# Installation +# +# Modul ins FHEM-Modul Verzeichnis kopieren +# entweder FHEM neu starten +# oder "reload 99_priv_cgi.pm" +# + +# Aufruf: +# Bsp.: FHEMWEB => http://localhost:8083/fhem +# PROC-CGI => http://localhost:8083/fhem/privcgi +# +# +# Eigene Erweiterungen implementieren: +# A. Ergänzung LIST-Funktion +# - Eigene Funktion schreiben z.B. sub priv_cgi_my_function($) +# - Eigenen Key festlegen z.B. myKey +# - Function sub priv_cgi_Initialize($) ergänzen $data{$cgi_key}{TASK_LIST}{TYPE}{myKey} = "priv_cgi_my_function"; +# - reload 99_priv_cgi.pm +# +# B. Eigene Funktion +# - z.B. MyFunc +# - eigenen Key im HASH $data{$cgi_key}{TASK} erzeugen +# - $data{$cgi_key}{TASK}{MyFunc} = "Function_Aufruf" ############################################## package main; @@ -5,18 +60,326 @@ package main; use strict; use warnings; +use vars qw(%data); sub priv_cgi_Initialize($) { - $data{FWEXT}{"/privcgi"} = "priv_cgi_callback"; + my $cgi_key = "privcgi"; + my $fhem_url = "/" . $cgi_key ; +# $data{FWEXT}{$fhem_url} = "priv_cgi_callback"; + $data{FWEXT}{$fhem_url}{FUNC} = "priv_cgi_callback"; + $data{FWEXT}{$fhem_url}{LINK} = "privcgi"; + $data{FWEXT}{$fhem_url}{NAME} = "MyFHEM"; + $data{$cgi_key}{QUERY} = {}; + # Default: in Case of /privcgi + # Task=List&Type=FHT + $data{$cgi_key}{default}{QUERY} = "Task=List&Type=ALL"; + # Dispatcher Functions + # Task = List -> Call Function + $data{$cgi_key}{TASK}{List} = "priv_cgi_list"; + # List -> Type -> Call Function + $data{$cgi_key}{TASK_LIST}{TYPE} = {};; + $data{$cgi_key}{TASK_LIST}{TYPE}{ALL} = "priv_cgi_print_all"; + $data{$cgi_key}{TASK_LIST}{TYPE}{FHT} = "priv_cgi_print_fht"; + $data{$cgi_key}{TASK_LIST}{TYPE}{FS20} = "priv_cgi_print_fs20"; + $data{$cgi_key}{TASK_LIST}{TYPE}{TH} = "priv_cgi_print_th"; +# $data{$cgi_key}{TASK_LIST}{TYPE}{DUMMY} = "priv_cgi_print_dummy"; + + } sub priv_cgi_callback($$) { my ($htmlarg) = @_; + my ($ret_html, $func,$qtask); + my $cgikey = &priv_cgi_get_start($htmlarg); + Log 0, "CGI-KEY: $cgikey"; + # Dispatch TASK... choose Function + $qtask = $data{$cgikey}{QUERY}{Task}; + $func = $data{$cgikey}{TASK}{$qtask}; + Log 0, "Func: $func"; + no strict "refs"; + # Call Function + $ret_html .= &$func($cgikey); + use strict "refs"; Log 1, "Got $htmlarg"; - return ("text/html; charset=ISO-8859-1", "Hello World"); + return ("text/html; charset=ISO-8859-1", $ret_html); } +sub +priv_cgi_get_start($) +{ + my $in = shift; + my (@tmp,$n,$v,$cgikey,$param); + # Aufruf mit oder ohne Argumente + # /privcgi oder /privcgi?ToDo=List&What=FHT + if($in =~ /\?/) + { + # Aufruf mit Argumenten: /privcgi?ToDo=List&What=FHT + @tmp = split(/\?/, $in); + $cgikey = shift(@tmp); + $cgikey =~ s/\///; + $param = shift(@tmp); + } + else + { + $cgikey = $in; + # Aufruf OHNE Argumenten: /privcgi + $cgikey =~ s/\///; + # Default Werte + $param = $data{$cgikey}{default}{QUERY}; + } +# Param nach $data{$cgikey}{QUERY} schreiben +Log 0, "PRIV-CGI: START -> param: " . $param; + @tmp = split(/&/, $param); + foreach my $pair(@tmp) + { + ($n,$v) = split(/=/, $pair); + Log 0, "PRIV-CGI: START -> param: $n - $v"; + $data{$cgikey}{QUERY}{$n} = $v; + } + return $cgikey; + } + + +sub +priv_cgi_html_head($) +{ +# HTML-Content for HEAD + my $cgikey = shift; + my $html = "\n"; + $html .= "\n"; + $html .= "\n"; + $html .= "