Hilfe beim erstellen eines Modules

Begonnen von jostmario, 29 Januar 2015, 12:57:44

Vorheriges Thema - Nächstes Thema

jostmario

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


Raspberry Pi  ---  HM-LAN ---  8X HM_HM_CC_RT_DN --- OWL+USB Strommesser    UVR1611

betateilchen

Zitat von: ThreadtitelHilfe beim erstellen eines Modules

Das fragst Du allen ernstes im Bereich "Anfängerfragen"?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

JoWiemann

Ich würde mal ins fhemwiki schauen. Da ist das Erstellen eines Moduls ziemlich gut beschrieben.


Gesendet von iPhone mit Tapatalk
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

jostmario

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
Raspberry Pi  ---  HM-LAN ---  8X HM_HM_CC_RT_DN --- OWL+USB Strommesser    UVR1611