FHEM Forum

FHEM => fhem-users => Thema gestartet von: Tobias am 30 Dezember 2009, 10:07:51

Titel: [FHZ] How-to use a digital picture frame to display data gathered from fhem.
Beitrag von: Tobias am 30 Dezember 2009, 10:07:51
Originally posted by: <email address deleted>

How-to
use a digital picture frame to display data gathered from fhem.

Nutzung eines digitalen Bilderrahmens zur Darstellung von Temperatur
Messwerten, die über fhem gesammelt werden.

Voraussetzungen:
Digitaler Bilderrahmen mit wlan, der RSS Feeds aus dem eigenen
Netzwerk erlaubt.
z.B. Kodak W1020
Hausinternes lan Netzwerk mit wlan Möglichkeit.
z.B. Avm Fritz Box 7071
fhem Server zur Erfassung der Temperatur Daten von funkgesteuerten
Sensoren.
z.B.
Sheevaplug developement kit,
CUL CC1101-USB-Lite 868MHz;
Temperatur/Feuchte Sensoren, S555TH

Software auf dem fhem Server:
Ubuntu mit apache2 als web Server, php5, und natürlich fhem.


Was ist zu tun:
1.   Definition der Sensoren in der fhem.cfg
z.B.
# Temperatur Sensoren
define sens1 CUL_WS 1 -0.1
attr sens1 room Wohnen
define sens2 CUL_WS 2 -0.2 -0.5
attr sens2 room Boden
define sens3 CUL_WS 3  0.0 -0.5
attr sens3 room Schlafen
define sens4 CUL_WS 4 -0.3 -5.0
attr sens4 room Bad
define sens5 CUL_WS 5  0.0 -0.5
attr sens5 room Buero
define sens6 CUL_WS 6 -0.5 -0.3
attr sens6 room Kueche
define sens7 CUL_WS 7 -0.6  0.4
attr sens7 room Diele
define sens8 CUL_WS 8 -0.4  1.0
attr sens8 room Terasse

2.   Definition des Bilderrahmens  als dummy
z.B.
# Definition des digital Frames zur Hinterlegung des Status
define frame dummy
attr frame art frame
attr frame loglevel 6

3.   Definiton einer Fernbedienung FS20  für die Bedienung des
Bilderrahmens
z.B.
# Doppelte Kanalzahl zum Schalten des Bilderrahmen
define rc.1 FS20 ......... 00
attr rc.1 art dummy
define rc.2 FS20 ............ 01
attr rc.2 art dummy
define rc.3 FS20 .............. 02
attr rc.3 art dummy
define rc.4 FS20 .............. 03
attr rc.4 art dummy
define rc.5 FS20 .............04
attr rc.5 art dummy
define rc.6 FS20 ..............05
attr rc.6 art dummy
define rc.7 FS20 ..................06
attr rc.7 art dummy
define rc.8 FS20 ................. 07
attr rc.8 art dummy

4.   Definition von Hilfsfeldern
z.B.
# Definition von Hilfsfeldern zum Schalten des Bilderrahmens
define f1 notify rc.1 { wetter ( "1" )  }
define f2 notify rc.2 { wetter ( "2" )  }
define f3 notify rc.3 { wetter ( "3" )  }
define f4 notify rc.4 { wetter ( "4" )  }
define f5 notify rc.5 { wetter ( "5" )  }
define f6 notify rc.6 { wetter ( "6" )  }
define f7 notify rc.7 { wetter ( "7" )  }
define f9 notify rc.8 { wetter ( "8" )  }

5.   Anlegen einer Datei 99_Myown unter fhem.../FHEM mit folgendem Inhalt:

package main;
use strict;
use warnings;
use POSIX;
use Time::Local ;
sub
wetter($)
{
   my  ($t) = @_;

my $string = $value{frame};
my @frame_value=explode(",",$string);
if ( $t == "1" ){ $frame_value[4]=$t;}
if ( $t == "2" ){ $frame_value[4]=$t;}
if ( $t == "3" ){ $frame_value[6]=$t-2;}
if ( $t == "4" ){ $frame_value[6]=$t-2;}
if ( $t == "5" ){ $frame_value[6]=$t-2;}
if ( $t == "6" ){ $frame_value[6]=$t-2;}
if ( $t == "7" ){ $frame_value[6]=$t-2;}
if ( $t == "8" ){ $frame_value[6]=$t-2;}
$string=join(",",@frame_value);
fhem ( "set frame ".$string );
return "" ;
}
1;

6.   Anlegen eines Verzeichnisses für den Zugriff durch apache2.
z.B.
mkdir /var/www/pgm7

7.   Erstellen von Hintergrundbildern in Verzeichnissen die mit der
Extension .pic
z.B.
mkdir /var/www/pgm7/blumen.pic

8.   Ablegen von Hintergrundbildern ( .jpg ) im Format 800x480 Pixel für
den Bilderrahmen Kodak W1020.

9.   Erstellen einer Datei index.php im Verzeichnis /var/www/pgm7 mit
dem folgenden Script.

# parameter----------------------------------
   $image="pgm7/image.jpg";               # Path to the generated
image
   $picdir="pgm7";                        # Name of the directory
   $imagefile="/work/www/".$image;        # Absolute Path to the
generated image
   $pictfile="http://192.168.178.25/".$image;
                                          # Path to the generated
image for apache
   $fhz_pl="/work/fhem/fhem.pl";          # Path to fhem
   $fhz_port="7072";                      # Port Number of fhem
   $picpath="/work/www/".$picdir;         # Path to the pictures used
as background
   $frame="frame";                        # Name of the Picture Frame
in fhem
   $voice="on" ;                          # check fritz box for Voice
notice
   $voicebox="ftp://192.168.178.1/USB-FlashDisk-01/FRITZ/voicebox/
rec" ;
                                          # URL of the voicebox
   $telicon="/work/www/pgm7/telefon.jpg"; # Path to a telefon icon
                                          # Size 100x100 Pixel
                                          # some fonts
   $fontarial="/usr/share/fonts/truetype/msttcorefonts/Arial.ttf";
   $fontarialb="/usr/share/fonts/truetype/msttcorefonts/
Arial_Bold.ttf";
   $fontgeorgiab="/usr/share/fonts/truetype/msttcorefonts/
georgiab.ttf";

   $maxon="on" ;                          # define min/max outside
temperatures are available
#   echo $imagefile,"  ", $pictfile, "\n";

# ++++++++++++++++++++++++++++++++++++++
#  Return an Array with all Elements ( files or folders )
#  in path whi end with sub
#  for example ( /work/www/pgm7 .pic
#  will return all return all directory Names in /work/www/pgm7
#  with the extesion .pic
function ls ( $path,$sub ) {
$all=array();
$verz = opendir ( $path );
$i=1;
while ( $file = readdir ( $verz ) )
{
  if ( $file != '.' && $file != '..')
  {
  $pfad_info = pathinfo ( $file );
#  echo $pfad_info['dirname'],"\n";
#  echo $pfad_info['basename'],"\n";
#  echo $pfad_info['extension'],"\n";
  if ($pfad_info['extension'] == $sub ) {
  $all[$i]=$file ;
  $i=$i+1;
  }
  }
}
closedir ( $verz );
$all[0]=$i-1;
# print_r($all);
return $all ;
}


# ++++++++++++++++++++++++++++++++++++++
# We check if the fritz box 7072 will contain
# Voice messages.
# we return an array that contains:
#   rec[0] --> Number of messages
#   rec[1] --> Number of Messages for Line 1
#   rec[2] --> Number of Messages for Line 2
#   ....
#   May be extendet if necessary
function voice ( $path ) {
$rec=array();
$rec[0]=0;
$rec[1]=0;
$rec[2]=0;
if ( false !== ($verz = @opendir ( $path ))) {
while (false !== ($file = readdir($verz))) {
  if ( $file != '.' && $file != '..')
   {
   $pfad_info = pathinfo ( $file );
#  print_r($pfad_info);
   if ($pfad_info['filename'] == "rec.0" ) {
     $rec[0]=$rec[0]+1;
     $rec[1]=$rec[1]+1;
   }
   if ($pfad_info['filename'] == "rec.1" ) {
     $rec[0]=$rec[0]+1;
     $rec[2]=$rec[2]+1;
   }
  }
 }
}
 return $rec;
}

# ++++++++++++++++++++++++++++++++++++++
# get the latest status of the picture Frame from fhem
function get_state () {
  global $stack;
  global $frame;
  for($i=0; $i < count($stack[0][children]); $i++) {
    if (substr($stack[0][children][$i][name],0,5)=='dummy') {
     $type=$stack[0][children][$i][name];
       for($j=0; $j < count($stack[0][children][$i][children]); $j++)
{
         $name=$stack[0][children][$i][children][$j][attrs][name];
         if ( $name == $frame ) {
         $state=$stack[0][children][$i][children][$j][attrs]
[state];} }
     }
   }
# echo $state;
 $qq=explode(",",$state);
# print_r($qq);
 return $qq;
}

# ++++++++++++++++++++++++++++++++++++++
# set a new status for the frame in fhem
function set_state($qq) {
global $fhz_pl;
global $fhz_port;
global $frame;
$zz=$qq[0].",".$qq[1].",".$qq[2].",".$qq[3].",".$qq[4].",".$qq[5].",".
$qq[6].",".$qq[7].",".$qq[8];
# echo "zz= ",$zz,"\n";
$xmllist="$fhz_pl $fhz_port \"set $frame $zz\" ";
exec($xmllist,$output);
# echo $output,"\n";
# echo $xmllist,"\n";
return "";
}

# ++++++++++++++++++++++++++++++++++++++
#  get the xml file from fhem and parse the xml-file
#  start_element_handler ( resource parser, string name, array
attribs )
function startElement($parser, $name, $attribs)
{ global $stack; $tag=array("name"=>$name,"attrs"=>$attribs);
array_push($stack,$tag); }
# ++++++++++++++++++++++++++++++++++++++
#  end_element_handler ( resource parser, string name )
function endElement($parser, $name)
{ global $stack; $stack[count($stack)-2]['children'][] = $stack[count
($stack)-1]; array_pop($stack); }
# ++++++++++++++++++++++++++++++++++++++
function new_xml_parser($live)
{  global $parser_live;
   $xml_parser = xml_parser_create();
   xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
   xml_set_element_handler($xml_parser, "startElement", "endElement");
   if (!is_array($parser_live)) { settype($parser_live, "array"); }
   $parser_live[$xml_parser] = $live;
   return array($xml_parser, $live); }

# ++++++++++++++++++++++++++++++++++++++
function my_parse () {
# go parsing
global $output;
if (!(list($xml_parser, $live) = new_xml_parser($live))) { die("could
not parse XML input"); }

foreach($output as $data) {
   if (!xml_parse($xml_parser, $data)) { die(sprintf("XML error: %s at
line %d\n",
        xml_error_string(xml_get_error_code($xml_parser)),
        xml_get_current_line_number($xml_parser))); } }

xml_parser_free($xml_parser);
}


# ++++++++++++++++++++++++++++++++++++++
# Pass only the image. if there voice notes, they will be displayed
function pass_image($state) {
    global $stack;
    global $imagefile;
    global $fontarial;
    global $fontarialb;
    global $fontgeorgiab;
    $bild=$state[0]."/".$state[1];

    $im = imagecreatefromjpeg ( $bild );
    $black = ImageColorAllocate($im, 0, 0, 0);
    $bg1p = ImageColorAllocate($im, 110,148,183);
    $bg2p = ImageColorAllocate($im, 175,198,219);
    $white = ImageColorAllocate($im, 255, 255, 255);
    $gray= ImageColorAllocate($im, 133, 133, 133);
    $red = ImageColorAllocate($im, 255, 0, 125);
    $green1 = ImageColorAllocate($im, 0, 255, 0);
    $green = ImageColorAllocate($im, 133, 255,133);
    $yellow= ImageColorAllocate($im, 255, 255, 0);
    $blue= ImageColorAllocate($im, 0, 64, 255);
    $darkblue=ImageColorAllocate($im, 0, 32, 255);
    $orange= ImageColorAllocate($im, 255, 230, 25);
    if ( $voice == "on" ) {
    $yz=array();
    $yz=voice($voicebox);
    if ( $yz[0] > 0 ) {
       imagefilledrectangle($im,760,0,800,480,$black);
       $telefon=$telicon;
       $imtel = imagecreatefromjpeg ( $telefon );

       if ( $yz[1] > 0 ) {
          imagecopyresized  ( $im,$imtel,765,100,0,0,30,30,100,100);
          $fontttfb=$fontarialb;
          $txtcolor=$white;
          $fontsize=16 ;
          $text=$yz[1];
          ImageTTFText ($im, $fontsize, 0, 775, 145, $txtcolor,
$fontttfb, $text);
       }
       if ( $yz[2] > 0 ) {
          imagecopyresized  ( $im,$imtel,765,170,0,0,30,30,100,100);

          $fontttfb=$fontarialb;
          $txtcolor=$white;
          $fontsize=16 ;
          $text=$yz[2];
          ImageTTFText ($im, $fontsize, 0, 775, 215, $txtcolor,
$fontttfb, $text);
       }
    }
    }
    $newfile = $imagefile;
    imagejpeg ( $im, $newfile, 100 );
}

# ++++++++++++++++++++++++++++++++++++++
function make_image($state) {
  global $stack;
  global $imagefile;
  global $fontarial;
  global $fontarialb;
  global $fontgeorgiab;

  $bild=$state[0]."/".$state[1];
  $now=date("i");
  $datum=date("d.m.y H:i");
  $zeit =date("H:i");
  $ycord=50;
  $fontsize=10;
  $imgmaxx=800;
  $imgmaxy=480;
  $im = imagecreatefromjpeg ( $bild );
  $black = ImageColorAllocate($im, 0, 0, 0);
  $bg1p = ImageColorAllocate($im, 110,148,183);
  $bg2p = ImageColorAllocate($im, 175,198,219);
  $white = ImageColorAllocate($im, 255, 255, 255);
  $gray= ImageColorAllocate($im, 133, 133, 133);
  $red = ImageColorAllocate($im, 255, 0, 125);
  $green1 = ImageColorAllocate($im, 0, 255, 0);
  $green = ImageColorAllocate($im, 133, 255,133);
  $yellow= ImageColorAllocate($im, 255, 255, 0);
  $blue= ImageColorAllocate($im, 0, 64, 255);
  $darkblue=ImageColorAllocate($im, 0, 32, 255);
  $orange= ImageColorAllocate($im, 255, 230, 25);
  if ( $maxon == "on" ) {
# get temp Max and Temp Min from fhem xml file
  for($i=0; $i < count($stack[0][children]); $i++) {
    if (substr($stack[0][children][$i][name],0,5)=='dummy') {
       $maxt=0;
       $mint=0;
       for($j=0; $j < count($stack[0][children][$i][children]); $j++)
{
         $sensor=$stack[0][children][$i][children][$j][attrs][name];
         $state=$stack[0][children][$i][children][$j][attrs][state];
         if ($sensor == "Temp_Max" ) { $maxt=$state; }
         if ($sensor == "Temp_Min" ) { $mint=$state; }
       }
    }
  }
 }
   $ycord=$imgmaxy;
# get temperatures from fhem xml file
  for($i=0; $i < count($stack[0][children]); $i++) {
    if (substr($stack[0][children][$i][name],0,6)=='CUL_WS') {
     $type=$stack[0][children][$i][name];
       for($j=0; $j < count($stack[0][children][$i][children]); $j++)
{
         $sensor=$stack[0][children][$i][children][$j][attrs][name];
         $state=$stack[0][children][$i][children][$j][attrs][state];
         $t=substr($state,3,4);
         $h=substr($state,12,4);
         for($k=0; $k < count($stack[0][children][$i][children][$j]
[children]); $k++) {
           if (($stack[0][children][$i][children][$j][children][$k]
[attrs][key])=='room') {
              $room    =$stack[0][children][$i][children][$j][children]
[$k][attrs][value];}
           if (($stack[0][children][$i][children][$j][children][$k]
[attrs][key])=='sensor') {
              $ok      =$stack[0][children][$i][children][$j][children]
[$k][attrs][value];}
         $measured=$stack[0][children][$i][children][$j][children][$k]
[attrs][measured]; }
         $fontttfb=$fontarialb;
         $fontsize=16 ;
         $xcord = 520 ;
         $txtcolor=$green;
         $xcord1 = 660 ;

           if ( $room == "Terasse" ) {
            $txtcolor=$red;
            if( $t < 0 )  $txtcolor=$blue ;
            $text="Garten:";
            $fontsize=16 ;
            $xcord = 130 ;
            $ycord = $imgmaxy-120;
            $xy=imagettfbbox ( $fontsize,0,$fontttfb,$text);
            $xc=$xcord-abs($xy[2]-$xy[0])/2;
            ImageTTFText ($im, $fontsize, 0, $xc, $ycord, $txtcolor,
$fontttfb, $text);
#           $text="$t° $h% ";
            $text="$t°";
            $fontsize=28 ;
            $yc = $imgmaxy-85 ;
            $xy=imagettfbbox ( $fontsize,0,$fontttfb,$text);
            $xc=$xcord-abs($xy[2]-$xy[0])/2;
            ImageTTFText ($im, $fontsize, 0, $xc, $yc, $txtcolor,
$fontttfb, $text);
            if ( $maxon == "on" ) {
              $text="Min: ".$mint."° Max: ".$maxt."°";
              $fontsize=16;
              $yc = $imgmaxy-60 ;
              $xy=imagettfbbox ( $fontsize,0,$fontttfb,$text);
              $xc=$xcord-abs($xy[2]-$xy[0])/2;
              ImageTTFText ($im, $fontsize, 0, $xc, $yc, $txtcolor,
$fontttfb, $text);
              }
            }
           else {
            $text=$room.":";
            $ycord = $ycord-20 ;
            ImageTTFText ($im, $fontsize, 0, $xcord, $ycord,
$txtcolor, $fontttfb, $text);
#            $text="$t° $h%";
            $text="$t°";
            ImageTTFText ($im, $fontsize, 0, $xcord1, $ycord,
$txtcolor, $fontttfb, $text);
            }
           }
         $fontttfb=$fontarialb;
         $txtcolor=$black;
         $fontsize=12 ;
         $text="Created at $datum on Peter's homeserver (Sheevaplug)";
         $xcord=10;
         $ycord = $imgmaxy-7 ;
         ImageTTFText ($im, $fontsize, 0, $xcord, $ycord, $txtcolor,
$fontttfb, $text);

         if ( $voice == "on" ) {
         $yz=array();
         $yz=voice($voicebox);
         if ( $yz[0] > 0 ) {
           imagefilledrectangle($im,760,0,800,480,$black);
           $telefon=$telicon;
           $imtel = imagecreatefromjpeg ( $telefon );

           if ( $yz[1] > 0 ) {
              imagecopyresized  ( $im,$imtel,
765,100,0,0,30,30,100,100);
              $fontttfb=$fontarialb;
              $txtcolor=$white;
              $fontsize=16 ;
              $text=$yz[1];
              ImageTTFText ($im, $fontsize, 0, 775, 145, $txtcolor,
$fontttfb, $text);
           }
           if ( $yz[2] > 0 ) {
              imagecopyresized  ( $im,$imtel,
765,170,0,0,30,30,100,100);
              $fontttfb=$fontarialb;
              $txtcolor=$white;
              $fontsize=16 ;
              $text=$yz[2];
             ImageTTFText ($im, $fontsize, 0, 775, 215, $txtcolor,
$fontttfb, $text);
           }
         }
         }
         $newfile = $imagefile;
         imagejpeg ( $im, $newfile, 100 );
#      imagejpeg ( $im, '', 100);
     }
   }
}

function makexml () {
global $pictfile;
global $frame_status;
$now=date("U");
$datum=date("d.m.y H:i");
header("Content-type: application/xml; \n");
echo "" ;
echo ">";
echo "";
echo "Peters Pictures";
echo "";
echo "1\n";

echo "";
echo "B1_$now";
echo "width='800' />";
echo "B1_$now";
echo "
\n";
echo "

";
return "";
}

# main ---------------------------------
   unset($output);
   $stack = array();
   $output = array();
   $xmllist="$fhz_pl $fhz_port xmllist";
   exec($xmllist,$output);
   my_parse();

#  $frame_status[0]: Directory of the picture source
#  $frame_status[1]: Source of current background picture
#  $frame_status[2]: display counter for picture
#  $frame_status[3]: *  Max Display counter
#  $frame_status[4]: *  Typ of Display
#                       0: only pass through
#                       1: Picture with temperatures and Humidity
#
#  $frame_status[5]: Number of the picture in the directory. This
number points
#                    to the picture in $frame_status[1]
#  $frame_status[6]: *  Directory Number. This number points
#                       to the Directory in $frame_status[0]
#  $frame_status[7]: Number of pictures in directory ( file name with -
jpg )
#  $frame_status[8]: Number of directories with pictures ( directoriy
name with .pic )
#
#                    * set outside of this procedure

$frame_status=array();
$frame_status=get_state ($state);
# print_r($frame_status);

$verzeichnisse=ls($picpath,"pic");
if ( $frame_status[6] <= $verzeichnisse[0] ) {
  $frame_status[0]=$picpath."/".$verzeichnisse[$frame_status[6]] ; }
else {
   $frame_status[0]=$picpath."/".$verzeichnisse[1]; }

$bilder=ls($frame_status[0],"jpg");
if ( $frame_status[5] > $bilder[0]) {
   $frame_status[5] = 1 ; }
$frame_status[1]=$bilder[$frame_status[5]];
$frame_status[7]=$bilder[0];
$frame_status[3]=4;
$frame_status[8]=$verzeichnisse[0];
if (  $frame_status[2] < $frame_status[3] ) {
   $frame_status[2]= $frame_status[2]+1 ; }
else { $frame_status[2] = 1 ;
   if ($frame_status[5] < $frame_status[7]) {
      $frame_status[5] = $frame_status[5] + 1 ;
      $frame_status[1]=$bilder[$frame_status[5]];}
   else {
      $frame_status[5] = 1 ;
      $frame_status[1]=$bilder[$frame_status[5]]; } }
# print_r($frame_status);
set_state($frame_status);

if ( $frame_status[4] == "1" ) {
make_image($frame_status); }
# print_r($frame_status);
if ( $frame_status[4] == "2" ) {
pass_image($frame_status);  }
makexml() ;

?>

10.   Anpassen des Scripts an lokales Netzwerk, siehe Beginn des
Scripts.

11.   Eintrag des RSS Feeds im Bilderrahmen als Foto-RSS


12.   Restart des ganzen Systems; Bilderrahmen, und Server.
Nach restart von fhem
mit telnet .... Eingabe von:
setstate frame /work/www/pgm7/blumen.pic,52.jpg,3,4,2,52,7,53,5
dabei ist:
/work/www/pgm7/blumen.pic
   Verzeichnis der Hintergrundbilder
52.jpg   Aktuelles Hintergrundbild
3   Zähler für die Nutzung des Hintergrundbildes
4   Maximale Anzahl zur Nutzung des Hintergrundbildes; hier wird
festgelegt, wie lange das Hintergrundbild verwendet werden soll. mit
der Eingabe von 4 wird das Bild erst nach 4 maligem Refresh des RSS
Feeds gewechselt.
1   Typ der Darstellung, mit (1) oder ohne (2) Temperaturen
Dies kann über die Fernbedienung ( siehe Punkt 3 ) geändert
werden.
52    Momentan verwendetes Hintergrundbild im Verzeichnis
7   momentan verwendetes Verzeichnis für Hintergrundbilder;
Dies kann über die Fernbedienung ( Siehe Punkt 3 ) geändert
werden. Taste 3 = 1. Verzeichnis, Taste 4 = 2. Verzeichnis ...
53   maximale Anzahl Hintergrundbilder im Verzeichnis
5   maximale Anzahl Verzeichnisse mit Hintergrundbildern



13.   Mit Hilfe der Fernbedienung die unter Punkt 3. definiert wurde
kann man nun den Bilderrahmen einstellen.
Einstellung:
Taste 1   Zeige Bilder mit eingeblendeten Temperaturen
Taste 2   Zeige Bilder ohne Temperaturen
Taste 3 – Taste 8    Schaltet auf ein anderes Verzeichnis mit
Hintergrund
Bildern um



--

You received this message because you are subscribed to the Google Groups "FHEM users" group.
To post to this group, send email to fhem-users@googlegroups.com.
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en.
Titel: [FHZ] Re: How-to use a digital picture frame to display data gathered from fhem.
Beitrag von: Guest am 30 Dezember 2009, 17:32:14
Originally posted by: <email address deleted>

Hallo Peter,

super!

Den digitalen Bilderrahmen habe ich gerade mal als Prototypen für das
Berlios-Wiki verwendet. Erschrecke bitte nicht, die Formatierung ist
noch lange nicht abgeschlossen. Evtl. wollen sich andere mal an die
Formatierung wagen. Mit den drei Zeilen, die Berlios da im Edit-Mode
anzeigt, komme ich bislang nicht zurecht.

http://openfacts2.berlios.de/wikien/index.php/BerliosProject:FHEM  ==>
HowTo

So mein erster Eindruck ist, dass das Berlios-Teil weit vom Standard-
Media-Wiki entfernt ist, bislang komme ich damit nicht zurecht. Evtl.
bin ich allerdings über diese nach meiner Meinung suboptimale Lösung
voreingenommen und das wird noch.
Die Möglichkeit die Dateien mit z.B. vi zu bearbeiten entfällt hier
natürlich komplett.

Martin :-)

--

You received this message because you are subscribed to the Google Groups "FHEM users" group.
To post to this group, send email to fhem-users@googlegroups.com.
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en.