98_cloneDummy.pm [war: Erweiterungsvorschlag für 98_dummy.pm]

Begonnen von Joachim, 21 März 2014, 08:07:34

Vorheriges Thema - Nächstes Thema

Joachim

Komando zurück, Wenn die richtige codierung genommen wird, geht es.

Von daher:
"feddich" :)

Im ersten Post wie immer die aktuelle Variante.

@Rudi,
wie jetzt weiter?
@betateilchen,
vielen Dank nochmal.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

rudolfkoenig

Zitat@Rudi, wie jetzt weiter?

Sacken lassen, d.h. von ein paar Benutzer testen lassen. Danach auf Sourceforge dich anmelden, mir username schicken, ich trage dich ein, und du checkst das Modul nach .../fhem/FHEM ein.

P.S. Damit es etwas weniger Rechenzeit verwendet, bitte in DefFn folgende Zeile hinzufuegen:
$hash->{NOTIFYDEV} = $a[2];
Damit wird NotifyFn nur dann aufgerufen, falls der Ausloeser $a[2] ist.

betateilchen

Zitat von: rudolfkoenig am 21 März 2014, 15:22:11
P.S. Damit es etwas weniger Rechenzeit verwendet, bitte in DefFn folgende Zeile hinzufuegen:
$hash->{NOTIFYDEV} = $a[2];
Damit wird NotifyFn nur dann aufgerufen, falls der Ausloeser $a[2] ist.

Kannte ich so auch noch nicht. Das vereinfacht das gesamte Coding nochmal.


##############################################
# $Id:  $
package main;

use strict;
use warnings;

sub cloneDummy_Initialize($) {
my ($hash) = @_;

$hash->{DefFn}     = "cloneDummy_Define";
$hash->{NotifyFn}  = "cloneDummy_Notify";
$hash->{AttrList}  = $readingFnAttributes;
}

sub cloneDummy_Define($$) {
my ($hash, $def) = @_;
my @a = split("[ \t][ \t]*", $def);
return "Wrong syntax: use define <name> cloneDummy <sourceDevice>" if(int(@a) != 3);
return "Error: cloneDevice and sourceDevice must not have the same name!" if($a[0] eq $a[2]);

$hash->{NOTIFYDEV} = $a[2];
readingsSingleUpdate($hash,'state','defined',1);
Log3($hash,4,"cloneDummy: $a[0] defined for source $a[2]");
return undef;
}

sub cloneDummy_Notify($$) {
my ($hash, $dev) = @_;
my $name    = $hash->{NAME};

my $reading = $dev->{CHANGED}[0];
$reading = "" if(!defined($reading));
Log3($name, 4, "cloneDummy: $name D: $dn R: $reading");

my ($rname,$rval) = split(/ /,$reading,2);
$rname = substr($rname,0,length($rname)-1);

readingsBeginUpdate($hash);
readingsBulkUpdate($hash, $rname, $rval);
readingsBulkUpdate($hash,'state','active');
readingsEndUpdate($hash, 1);

return;
}

1;
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Joachim

Mensch betateilchen, wie soll ich denn da was lernen? :(

hab das ganze jetzt mal entsprechend angepasst, den Fehler, den Du mir zum finden eingebaut hast beseitigt, und wieder oben angehängt.
Eigentlich ist das mittlerweile Dein Modul ;D
willst Du es einchecken und betreuen? ::)

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Groby

Hallo Joachim,

Dein neues Modul funktioniert echt super.

Ich verzweifele gerade daran, einen "notify" zu erstellen, der alle events in ein "F2dummy" überführt. So eine Art autocreate.

Als default nach dem Erstellen von F2dummy denke ich, dass das updaten von "state" am meisten Sinn macht, da man nicht weiss ob es sich um ein Multireading handelt (mehere ":", spaces, "=" usw.) oder nicht.

Von dort sollte es dem User möglich sein per attr zu definieren welche readings geklont werden sollen:

Attr F2Dummy cloneReading T, brightness

usw...

Wenn Du etwas davon umsetzen könntest - super!

Falls Du Hilfe beim Testen und der Doku brauchst, helfe ich gern...

MfGroby

Joachim

Groby,
ZitatIch verzweifele gerade daran, einen "notify" zu erstellen, der alle events in ein "F2dummy" überführt. So eine Art autocreate.
Formuliere Deine Fragestellung bitte nocheinmal anders, da ich Dir im Moment nicht folgen kann.

ZitatAls default nach dem Erstellen von F2dummy denke ich, dass das updaten von "state" am meisten Sinn macht, da man nicht weiss ob es sich um ein Multireading handelt (mehere ":", spaces, "=" usw.) oder nicht.
da kämpfe ich noch mit mir,da
- betateilchen durchaus zu recht darauf hingewiesen hat, dass bei mehreren readings jedesmal der state neu
  geschrieben wird, und es dadurch zu der doppelten Anzahl an Events kommt.
- auf der anderen Seite bedeutet es aber auch, dass man zwingend ein stateFormat setzen muss, auch wenn es
  nur ein reading gibt. Also zwei Zeilen in der fhem.cfg und damit mehr Aufwand beim Erstellen des cloneDummys.
Je nach Einsatzzweck des cloneDummys macht beides Sinn.
ZitatVon dort sollte es dem User möglich sein per attr zu definieren welche readings geklont werden sollen:
da bin ich genau der gegenteiligen Meinung, da das auch wieder bedeutet, beim erstellen noch eine attr Zeile zu schreiben, vorstellen könnte ich mir analog zu DbLog ein
attr clone_OWX_26_09FF26010000 exclude temperature

Beim Testen werde ich an Dich denken.
Aber ich will Schritt 2 nicht vor dem ersten Schritt machen, oder anders gesagt, das was jetzt in der Pipe ist, soll ersteinmal vernünftig laufen, und über das normale Update zur Verfügung stehen.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

betateilchen

Welchen Fehler hatte ich eingebaut? Zumindest bewusst habe ich das nicht gemacht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: Joachim am 21 März 2014, 17:05:11
willst Du es einchecken und betreuen? ::)

Es ist und bleibt Deine Idee und Dein Modul :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Joachim

Aber Du musst zugeben, es war ein Versuch wert. ;)

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

betateilchen

Ich kann gerne das Einchecken für Dich übernehmen. Aber ich würde trotzdem Dich als Maintainer für das Modul eintragen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Joachim

Na, dass ist doch ein Kompromiss.
Dann kann ich in ruhe einen Sourceforge Account beantragen und mich daran gewöhnen, dass ich Maintainer werde.

Danke für die Hilfe und Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

betateilchen

#26
Ich habs mal für Dich eingecheckt, sollte morgen per Update verteilt werden.

Falls Du irgendwann Änderungen machst - lass bitte die 1. Zeile mit dem $Id drin, die hatte ich nicht zum Spass in das Coding gebaut.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Joachim

Danke. :'(
ZitatFalls Du irgendwann Änderungen machst - lass bitte die 1. Zeile mit dem $Id drin, die hatte ich nicht zum Spass in das Coding gebaut.
Werde mich bemühen.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

betateilchen

Zitat von: Joachim am 21 März 2014, 21:03:51
Danke. :'(

Was gibts da zu Weinen? Hab ich das jetzt etwa falsch gemacht? Wolltest Du das noch nicht eingecheckt haben?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Joachim

Ne, aber jetzt habe ich ein Modul an der Hacke. ;)
Übrigens, Deine Frage habe ich jetzt erst gesehen
ZitatWelchen Fehler hatte ich eingebaut? Zumindest bewusst habe ich das nicht gemacht.

sub cloneDummy_Notify($$) {
   my ($hash, $dev) = @_;
   my $name    = $hash->{NAME};

   my $reading = $dev->{CHANGED}[0];
   $reading = "" if(!defined($reading));
   Log3($name, 4, "cloneDummy: $name D: $dn R: $reading");

   my ($rname,$rval) = split(/ /,$reading,2);
   $rname = substr($rname,0,length($rname)-1);

den wollte er so nicht, musste ihn so variieren:

sub cloneDummy_Notify($$) {
   my ($hash, $dev) = @_;
   my $dn      = $dev->{NAME};
   my $hn      = $hash->{NAME};
   my $reading = $dev->{CHANGED}[0];
   $reading = "" if(!defined($reading));
   Log3($hash,4, "cloneDummy: $hn D: $dn R: $reading");

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232