FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: jostmario am 29 Januar 2015, 12:57:44

Titel: Hilfe beim erstellen eines Modules
Beitrag von: jostmario am 29 Januar 2015, 12:57:44
Hallo

Habe mit Hilfe einiger personen meine Flammtronik  ( http://www.flammtronik.de/ ) in Fhem eingebunden.
habe dies erst mal mit dem ECMD Modul realisiert so das ich dann im Wohnzimmer per RSS die Daten meines Holzvergasers sehen kann.
dazu steht in der Flammtronik.classdef folgendes:
Zitatreading Spontan match "^(.*\r\n\021)+.*$"
reading Spontan postproc {my $d=$_;CheckFrame("%NAME",$d);}

und in der 99_myUtils.pm dieses hier:
Zitatpackage main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
my $NewMailtime = time;
}

sub ReportItems($$)
{
   my %ItemNotes = (
      "T" => "Laufzeit",
      "K" => "Kesseltemp",
      "A" => "Abgas",
      "B" => "Brennkammer",
      "PL" => "Primaerluefter",
      "O" => "O2",
      "S" => "Sekundaerluefter",
      "R" => "Ruecknahme",
      "V" => "Verlust",
      "Rt" => "Rt",
      "Ra" => "Ra",
      "P" => "Pumpe",
      "Z" => "status",
      "Sp" => "Speicher",
      "w" => "CAN_T1",
      "x" => "CAN_T2",
      "y" => "CAN_T3",
      "z" => "CAN_T4",
      "a" => "Temp_a",
      "b" => "Temp_b",
      "c" => "Temp_c",
      "d" => "Temp_d",
      "e" => "Temp_e",
      "f" => "Temp_f",
      "g" => "Temp_g",
      "h" => "Temp_h");

   my $name = shift;
   my %items = %{shift();};
   my $hash = $defs{$name};
   my @KeysInLine = keys(%items);

   for (my $i=0; $i < @KeysInLine; $i++)
   {
      my $Key = $KeysInLine[$i];
      my $Notation = $ItemNotes{$Key};
      my $Value = $items{$Key};
      readingsSingleUpdate($hash, $Notation, $Value,1);
   }
# Correct some of the values by special calculation
}

sub CorrectTemp_a($)
{
   my $Temp_a = shift;
   $Temp_a -= 2;
   return $Temp_a;
}

sub CorrectRt($)
{
   my $Rt = shift;
   $Rt -= 2;
   return $Rt;
}

sub CorrectTemp_d($)
{
   my $Temp_d = shift;
   $Temp_d -= 3;
   return $Temp_d;
}

sub CorrectCAN_T4($)
{
   my $CAN_T4 = shift;
   $CAN_T4 += 3;
   return $CAN_T4;
}


sub CalcItems($)
{
   my $itemRef = shift;

   foreach my $key(keys %$itemRef)
   {
      if ($key eq "a") { $itemRef->{$key}=CorrectTemp_a($itemRef->{$key}); }
      elsif ($key eq "Rt") { $itemRef->{$key}=CorrectRt($itemRef->{$key}); }
                elsif ($key eq "d") { $itemRef->{$key}=CorrectTemp_d($itemRef->{$key}); }
                elsif ($key eq "z") { $itemRef->{$key}=CorrectCAN_T4($itemRef->{$key}); }
   }
}

sub CheckLine($$)
{
   my $name = shift;
   my $line = shift;
   my $hash = $defs{$name};

   # make sure it's a single line
   if ($line=~/(\n|\r|\021)/)
   {
      die "CheckLine can only manage single lines!!";
   }

   # Pumpe and Primaerluefter have both "P" as key, so change Primaerluefter to PL
   $line =~ s/P(\d{3})/PL$1/;

   # divide into hash-table of [key,value] and take undetected rest into extra var for check
   my %items = $line=~/([A-Za-z]+)([\d.]+)\W*/g;
   my $rest=$'; #';

   CalcItems(\%items);
   ReportItems($name,\%items);

   if ($rest ne '') { Log3 $hash,5,"Unknown rest of line: $rest" };
   Log3 $hash,5,"CheckLine finished.";
}

sub CheckFrame($$)
{
   my $name = shift;
   my $frame = shift;
   my $hash = $defs{$name};

   # divide into single lines and take undetected rest in extra var
   my @lines = $frame=~/(.*)\r\n\021/g;
   my $rest=$'; #';

   foreach(@lines) { my $line=$_; CheckLine($name,$line); };

   if ($rest ne '') { Log3 $hash,5,"Unknown rest of frame: $rest" };
   Log3 $hash,5,"CheckFrame finished.";
}


1;

Da jetzt schon einige User aus dem Holzvergaser-Forum. es so nach meiner Anleitung nachgebaut haben würde ich gerne versuchen dazu ein Modul in Fhem zu verfügung zu stellen.
Hätte jemand Zeit mir dabei zu Helfen hab bis jetzt noch nie etwas in diese richtung gemacht wäre über jede Hilfe evtl per Teamviewer dankbar.
http://www.holzvergaser-forum.de/index.php/forum/flammtronik/51002-flammtronik-an-raspberry-diskussions-thread?limitstart=0

Gruß Josty


Titel: Antw:Hilfe beim erstellen eines Modules
Beitrag von: betateilchen am 29 Januar 2015, 13:11:49
Zitat von: ThreadtitelHilfe beim erstellen eines Modules

Das fragst Du allen ernstes im Bereich "Anfängerfragen"?
Titel: Antw:Hilfe beim erstellen eines Modules
Beitrag von: JoWiemann am 29 Januar 2015, 13:25:53
Ich würde mal ins fhemwiki schauen. Da ist das Erstellen eines Moduls ziemlich gut beschrieben.


Gesendet von iPhone mit Tapatalk
Titel: Antw:Hilfe beim erstellen eines Modules
Beitrag von: jostmario am 29 Januar 2015, 15:17:52
Hallo

naja dacht Anfänger fragt  Experte antwortet

Ja dachte halt es wäre für ein Experte ca 60 min arbeit das ECMD modul mit mir zusammen umzuarbeiten und man hätte ein neues Modul Flammtronik.
mit meinen Kenntnissen sind es für  mich sind bestimmt 3 Wochen arbeit   und Ärger mit meiner Frau und meinen 4 Kindern  lol.

denke es läuft ja schonmal man muss eben nur alles in eine Moduldatei Packen oder so ?

oder sehe ich das falsch ??

Danke
Gruß Josty