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

Moin eldrik,
danke für Deine Rückmeldung.
Zitat
Das absetzen von Befehlen von der Hauptinstanz an die Slaveinstanzen wäre natürlich Klasse, scheint aber derzeit out of scope zu sein
wie ich schon geschrieben habe, mein Perl ist nicht besonders, auch wenn selfhtml wirklich gut hilft.
Deshalb ist meine Agenda:
- ersteinmal selber ausführlich mit dem Modul spielen, sehen was geht, was wäre wünschenswert.
- vorsichtig die ersten Änderungen ausprobieren, dabei auf "useabelity achten, und Faulheit unterstützen (sowenig wie möglich ins define)
- FHEM2FHEM Anbindung herstellen, wenn Rudi mitspielt. (seperates attr in FHEM2FHEM welche devices direkt an cloneDummy gehen, damit diese nicht doppelt als reading auftauchen, ggf in Verbindung mit autocreate.
- Rückkanalfähigkeit erstellen.
das alles wird aber dauern, es sei denn es liefert wer einen fertigen patch.

ZitatFunktioniert longpoll eigentlich für den State, welcher via stateformat generiert wird? Bei mir funktioniert es derzeit leider nicht.
habe ich noch nicht probiert, bin noch beim Portieren meine 1-Wire installation auf die FB7390

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: justme1968 am 23 März 2014, 14:51:40
state hat leider eine sonderstellung unter den readings und es ist technisch nicht möglich es über notifys und events eindeutig zu erkennen und zu parsen.

Jetzt sind wir schon drei, die versuchen, groby diese Tatsache klarzumachen :P
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Groby

schön das man hier der Meinung ist mir etwas erklären zu müssen...

Es ändert aber nichts an der Tatsache das es so nicht funktioniert. Die WetterStation verwendet kein "stateFormat" und liefert nur diesen SammelEvent alle 2 - 3 Minuten:

2014-03-23 22:44:50.061 CUL_HM WetterStation T: 3.5 H: 85 W: 4.8 R: 164.315 IR: 0 WD: 35 WDR: 45 S: 7 B: 9
2014-03-23 22:47:20.079 CUL_HM WetterStation T: 3.1 H: 85 W: 0 R: 164.315 IR: 0 WD: 0 WDR: 67.5 S: 7 B: 9
2014-03-23 22:49:36.125 CUL_HM WetterStation T: 2.8 H: 85 W: 0 R: 164.315 IR: 0 WD: 35 WDR: 67.5 S: 7 B: 9

Dieser wird mit cloneDummy in ein "T" reading kopiert:

"T"                 "3.5 H: 85 W: 4.8 R: 164.315 IR: 0 WD: 35 WDR: 45 S: 7 B: 9"


D.h. es gibt keinen "temperature" Event und auch keine weiteren. Das geclonte "T" reading kann man aber nicht mit "stateFomat T: T" wieder hinbiegen - Jedenfalls nicht ohne irgendwelche Kunstgriffe...

Wie Andre in seinem vorherigen Beitrag bereits erwähnt hat - gibt es keine Möglichkeit state Events eindeutig zu erkennen. Deshalb ist cloneDummy für diese Art von Events z. Zt. unbrauchbar. Dies betrifft alle Devices die per Default mit Multireadings im state arbeiten:

HKThermostat    T: xx desired: xx valve: xx
Wetterstation     siehe oben
Thermometer     T: xx H: xx


Um diese Events also sinnvoll zu verarbeiten muss das Modulpro cloneDevice wisssen, welche readings wie identifiziert bzw. gesplittet werden sollen (evtl. per attribut):

attr cloneDevice Wetterstation,T,H,W...
attr cloneDevice HKThermostat,T,desired,valve


Ein einzelnes "T"-reading hilft hier nicht...

Deswegen verwende ich weiterhin auf fhem2 einen notify der mir "state" Events in multiple readings splittet - ob das sinnvoll nicht oder nicht ist mir als Anwender ziemlich egal - denn es funktioniert...


betateilchen

Du brauchst nicht zum 728. Mal beschreiben, dass der ankommende Eintrag unbrauchbar gesplittet wird. WIR haben das immerhin längst verstanden.

Um welchen Typ Homematic-Wetterstation geht es eigentlich?

KS550|KS888|HM-WDS100-C6-O sind laut Coding in der 10_CUL_HM.pm sehr wohl in der Lage, auch einzelne Readings mit Wetterdaten zu liefern, die sich dann problemlos in ein userReading oder per stateFormat verarbeiten lassen. Kann es sein, dass Du die Erzeugung der einzelnen Readings mit event-on-change deaktiviert hast?



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

Groby

Komisch. Irgendwie klingelt mir immer noch die Frage nach Event-Logs und defines im Ohr...

HM-WDS100-C6-O

betateilchen

#50
Zitat von: Groby am 24 März 2014, 05:35:16
HM-WDS100-C6-O

Die kann defintiv Einzelreadings liefern.

Edit: wie es der Zufall will, hat hier sogar grade jemand ein Beispiel gepostet  8) http://forum.fhem.de/index.php/topic,21762.msg152250.html#msg152250
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Groby

Schön das Du es nachschauen musstest - frag mich doch einfach  :P
Das weiss ich selber, wie sollte ich sonst Regenmengen usw. berechnen???

Der Lösungsvorschlag hat bei mir leider einen Schönheitfehler, denn wenn ich alle Einzelreadings meiner Battery Devices aktiviere, kommen die beiden FB7390 aus dem Tritt und quittieren es mit regelmässigen HML disconnects - natürlich nicht alleine wegen Events...

Jetzt kommt sicher wieder: "Dann nimm doch einen rpi oder bbb." Will ich aber nicht!!!

Somit ist das Modul für mich keine Hilfe und ich bleibe bei meiner fhem2fhem/notify Lösung, wo ich mit den vorhandenen Events klarkomme...

Allerdings ist es ein komischer Lösungsansatz am Source mehr Evebts zu generieren, um eine Lösung zu bekommen. Es sollten doch alle Events ausgewertet und geklont werden.

Wenn state für eine WetterStation dann nicht funktionert, dann gehört es auch nicht in ein "T" reading...

Ich bin raus - trotzdem Danke für die Hilfe...


Joachim

Moin Groby,

Reisende soll man nicht aufhalten!

Du solltest mal gründlich Deine Anspruchshaltung überprüfen
Wie ich mehrfach betont habe, bin auch ich Perl Anfänger, und habe um etwas Zeit gebeten.
FHEM ist openSource, und jeder hier macht das freiwillig, da ist Deine Art dann schon sehr aufdringlich, schliesslich sind wir hier in einem Forum, und wenn dann kurz nach erstellung eines Modules der Autor gleich mit PM's vollgemüllt wird, finde zumindest Ich das aufdringlich.
Wenn man Dir Helfen will, und dann eine konkrete Bitte geäßert wird
ZitatMoin Groby,
Seit heute mogen sollte das Modul im regulären Update sein.
Dabei ist die standart Einstellung, dass der state von initialized nach active wechselt.
Ein stateFormat funktioniert bei mir einwandfrei, wenn Du dabei Probleme hast, dann brauche ich mehr Informationen.
- aussagekräftigen Auszug aus dem Eventmonitor
- komplette definition des Moduls mit den gesetzten attr

Gruß Joachim
und diese 3x ignoriert wird, schlimmer noch, die Antwort auch noch dumme Kommentare enthält:
Zitatalles was Du an Informationen brauchst, findest Du bereits in der letzten Antwort:
stimmt mich das ein etwas säuerlich.
Wenn man versucht, Dir zu Erklären, was Du offensichtlich noch nicht verstanden hast, gibt es auch wieder Dumme Kommentare:
Zitates mag sein, dass es programmiertechnisch einen Unterschied von state & STATE gibt.

Im WEB frontend liefern aber set und setstate das gleiche Ergebnis für mich. set mit Event & setstate ohne...
Zitatschön das man hier der Meinung ist mir etwas erklären zu müssen...

Viel Spass mit Deinen Notify's

Gruß von einem ziemlich angesäuerten Modulentwickler
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

@Joachim: Lass Dich nicht ärgern. Das Problem mit dem falsch gesplitteten Reading kriegen wir auch noch in den Griff, ich bin da schon am Testen ;)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Joachim

#54
moin @betateilchen,

ich auch, und deshalb brauche mal Hilfe von meinem "Modulpaten", bin halt Perlanfänger und habe eine Denkblockade.
Um das Problem mit dem state zu lösen habe folgendes versucht:

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> <optional STATE>" if((int(@a) < 3)) ;
return "Wrong syntax: use define <name> cloneDummy <sourceDevice> <optional STATE>" if((int(@a) > 4)) ;
  return "Wrong syntax: <name> must different to <sourceDevice>" if($a[0] eq $a[2]) ;

$hash->{NOTIFYDEV} = $a[2];
$hash->{NOTIFYSTATE} = $a[3] if(defined($a[3]));                 #<----- zusätzlich eingefügt
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 $dn      = $dev->{NAME};
my $hn      = $hash->{NAME};
my $hs      = $hash->{NOTIFYSTATE};
my $reading = $dev->{CHANGED}[0];
$reading = "" if(!defined($reading));
Log3($hash,4, "cloneDummy: $hn D: $dn R: $reading");

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

my $state = "active";                                  #<----- zusätzlich eingefügt

if (($hs ne "") && ($rname eq $hs) ){                    #<----- zusätzlich eingefügt
Log3($hash,3, "hash: $hn state: $hs rname: $rname ");    #<----- zusätzlich eingefügt
        $state = $reading;                                       #<----- zusätzlich eingefügt
  }

readingsBeginUpdate($hash);
readingsBulkUpdate($hash, $rname, $rval);
readingsBulkUpdate($hash,'state', $state);               #<----- geändert
readingsEndUpdate($hash, 1);

return;
}

1;


dann 3 cloneDummys definiert:

define clon_sysmon cloneDummy sysmon ram
attr clon_sysmon room Sysmon

define clon1_sysmon cloneDummy sysmon loadavg
attr clon1_sysmon room Sysmon

define Bad cloneDummy TS_Bad
attr Bad room Sysmon
attr Bad stateFormat {sprintf("%.1f",ReadingsVal("Bad","Temperatur",0))." °C"}

Auszug Logfile:

2014.03.24 12:12:25.701 3: hash: clon1_sysmon state: loadavg rname: loadavg
2014.03.24 12:12:25.754 3: hash: clon_sysmon state: ram rname: ram

Beim ersten und letzten cloneDummy ist alles so, wie es sein soll, nur bei clon1_sysmon geht es nicht, und ich weiß nicht warum, kannst Du mir einen Tipp geben.

Danke 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

#55
Mir ist nicht ganz klar, was Du damit bewirken willst?
Ich würde keinen neuen Parameter einführen, sondern die Sache viel pragmatischer lösen ;)

Lass uns das mal per email diskutieren.

Und nochmal - ganz wichtig - das Reading state gehört dem cloneDummy Device und niemandem anders!
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Groby

Joachim,

wenn Dir eine PM mit der Anfrage ob Du Hilfe beim Testen brauchst aufdringlich erscheint und Dein Postfach zumüllt - dann hast Du eine komische Sicht der Dinge die ich zum Glück nicht teilen muss...

Wenn Du aufmerksam gelesen hättest, hättest Du sicherlich bemerkt, dass ich nicht erwarte habe das Du das sofort und nur für mich "fixt". Ich habe lediglich versucht klarzumachen was ich damit versuche umzusetzen. Aber das ist Dir sicher nur durchgerutscht...

So ist ein Softwaretest nunmal. Da tauchen Fehler auf - die einen kann man fixen, die anderen eben nicht. Die einen will der Developer lösen - die anderen nicht. Aber zum Thema Softwaretest / Development brauche ich sicher keine Belehrungen...

Mehr werde ich zu diesem Thema nicht beitragen...

MfGroby

hexenmeister

Habe mit CloneDummy die Werte einer entfernten SYSMON-Instanz auf den Haupt-FHEM geholt. Funktioniert sehr gut! Danke für das nützliche Modul ;)

Grüße,

Alexander

Joachim

Moin @ Alexander,

Wenn Du dabei ein stateFormat definiert hast, wie hast Du es definiert?

Danke 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

manchmal ist es echt frustierend, gegen Windmühlen zu kämpfen und sich scheinbar mit der Wand zu unterhalten...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!