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

chris1284

Zitat von: rudolfkoenig am 15 Mai 2014, 09:49:42
Du solltest mir mehr Glauben schenken, ich hab das Zeug programmiert.
Aktualisiert ja, verteilt nein

des wegen frag ich ja, nur du weist ob es nur "aktualisert" oder auch wirklich ein event auslöst welches cloneDummy abarbeiten kann.
der zeitstempel heist für mich erstmal -> reading aktualisiert-> event auf das man reagieren kann.

Zitat von: rudolfkoenig am 15 Mai 2014, 09:49:42
Weil das private Hilfsvariablen fuer die Durschnitssberechnung (avg_*) sind... Dann haben sie Pech, wie gesagt, es sind _private_ Variablen.

danke für die nähere erleuterung, dann ist das so.

offtopic: schade das man gewisse readings nicht "verstecken" kann... würde auch bei sysmon zb die übersicht individueller gestaltbar machen. sicher auch was für andere module --> verbesserungsidee? -> ähnlich wie bei der raumauswahl ein fenster mit anzuzeigenden readings erfinden

rudolfkoenig

Zitatschade das man gewisse readings nicht "verstecken" kann.

Der Entwickler kann sie, indem sie mit "." am Anfang benennt, genauso wie Attribute oder "interne" Werte.
Die cum_* Readings sind aelter als dieser Feature, und ich habe bisher noch nicht dran gedacht, sie zu aendern.

hexenmeister

#137
Zitatwürde auch bei sysmon zb die übersicht individueller gestaltbar machen.

Bin schon dabei für sysmon eine solche Möglichkeit zu implementieren. Eine globale Feature wäre natürlich noch besser.

Edit:
Wenn es Dir nur um die Darstellung geht, kannst Du jetzt schon mit einem WebLink und einer Methode im Sysmon (s. Commandref) die Readings für die Anzeige frei bestimmen.


Joachim

#138
Moin chris1284,

danke erst einmal fürs testen.

jetzt zu Deinen Anmerkungen:
Zitataus dem original state des devices wird immer noch ein neues "unbrauchbares" reading T (siehe screenshot) welches das original garnicht hat
Da ich keine Glaskugel habe, werden hier weitere Informationen benötigt:
- definition vom clone (ist das optionale reading T im define gesetzt?)
- läuft der clone auf dem gleichen FHEM (der original "state" geht bei FHEM2FHEM nicht!)

folgende Einträge sind als def und attr möglich:

define <name> cloneDummy <quellDevice> [reading]
attr <name> cloneIgnore <reading1,reading2,...,readingX>
attr <name> addStateEvent 1 # 0 ist Vorgabe

wobei
[reading] das Reading ist, welches in den "STATE" geschrieben wird, wenn es gesetzt ist
und addStateEvent 1 den "state" des originaldevices übernimmt (nicht bei FHEM2FHEM)
zur Rangfollge:
Zitat
Die Rangfolge für "STATE" ist:
- wenn keine Vorgabe gemacht wurde, dann die Meldung von cloneDummy (initialized, active)
- wenn addStateEvent gesetzt ist, dann der "state" vom geklonten Device (dann kein "state" mehr vom cloneDummy)
- wenn das optionale reading im define gesetzt ist, dann der Wert davon (überstimmt die beiden vorherigen Zeilen)
- wenn stateFormat als attr gesetzt ist, toppt das alles

ansonsten ist es z.Z. noch so, dass ich nur das abgreifen kann, was durch FHEM bzw. FHEM2FHEM an Daten zu verfügung gestellt wird. (so wie Rudi schon geschrieben hat.)
Irgendwann in weiter Ferne soll cloneDummy wirklich ein Device komplett clonen können, aber dahin ist es für mich mangels Perl Kenntnissen noch ein weiter Weg, es sei denn Perl und FHEM Wissende helfen hier tatkräftig.
Der aktuelle Anhang soll wie in Antwort 130 geschrieben, folgendes können:
Zitat- es sollen alle Readings des geklonten Devices übernommen werden
- es ist zusätzlich möglich, den Original "state" des geklonten Devices zu übernehmen (geht bei FHEM2FHEM noch nicht)
und das sollte getestet werden.

@ Rudi,
habe ich Dich richtig verstanden, dass nicht alles, was im original Device als reading gelistet ist, auch wirklich als event herausgegeben wird?
Das würde ich als unglücklich empfinden, da es m.M.n der Systematik widerspricht.
Hilfsvariablen gehören nach Internals.

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

Zitathabe ich Dich richtig verstanden, dass nicht alles, was im original Device als reading gelistet ist, auch wirklich als event herausgegeben wird?

Richtig, Parameter 4 bei readings*Update

ZitatHilfsvariablen gehören nach Internals.
Diese werden nicht gespeichert.

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

chris1284

Zitat von: Joachim am 15 Mai 2014, 11:52:36
Moin chris1284,
- definition vom clone (ist das optionale reading T im define gesetzt?)
- läuft der clone auf dem gleichen FHEM (der original "state" geht bei FHEM2FHEM nicht!)

hi,

zu 1. nein. hier die definition define KS300Clone cloneDummy KS3000
zu 2.  clone läuft auf einer anderen instanz als das original device, verbunden mit fhem2fhem im log-modus

clone dummy nimmt das reading state des originals
Zitat
namereading                  wert                                      timestamp
state                       T:8.1 H: 81 W: 0.8 R: 0.0              2014-123456

schneidet das wort "state" raus, nimmt schienbar an das T: die bezeichnung für das reading ist und nimmt den rest dahinter als value

raus kommt im clone ein neue reading mit namen "T" und value "8.1 H: 81 W: 0.8 R: 0.0"  (sehr gut in den screenshots zu erkennen, nun mal farblich markiert). ich dnek hier wird state vom original nur falsch zerlegt

Joachim

#142
define KS300Clone cloneDummy KS3000 T

und nein,
Zitat
clone dummy nimmt das reading state des originals
Zitat

    namereading                  wert                                      timestamp
    state                       T:8.1 H: 81 W: 0.8 R: 0.0              2014-123456


schneidet das wort "state" raus, nimmt schienbar an das T: die bezeichnung für das reading ist und nimmt den rest dahinter als value
es wird von FHEM nur ungeschickt übergeben, die Information "STATE" wird garnicht mitgeliefert.

cloneDummy kann nur die Readings abgreifen, die Du auch im Eventmonitor, auf dem das Original Device läutf sehen kannst.

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

chris1284

#143
Zitat von: Joachim am 15 Mai 2014, 12:26:14
define KS300Clone cloneDummy KS3000 T

funktioniert soweit das er nun den state sauber übernimmt und und in _state anzeigt , daumen hoch
das reading T wir dennoch angelegt... habe ich aber mit "cloneIgnore T" unterdrücken können, funktioniert und sieht wieder sauber aus.


gibt es einen bestimmten grund warum du "_state" anlegst und nicht einfach state überschreibst wenn so definiert?
ich würde einfach state mit dem im define vorgegebenen wert überschreiben. _state extra anzulegen...

habe dein modul dahingehend bei mir geändert :

zeile 43 auskommentiert   #$attr{$hn}{stateFormat} = "_state" if(defined($a[3]));
zeile 59 auskommentiert   #readingsSingleUpdate($hash,"state", "active",1);
zeile 74 auskommentiert   #readingsBulkUpdate($hash,"_state", $reading); und
ZitatreadingsBulkUpdate($hash,"state", $reading);
hinzugefügt
danach ein

  elsif($hs eq "")
  {
readingsBulkUpdate($hash,"state", "active");
  }


jetzt haben meine clonedummys auch den state 1:1 wie das original und kein _state mehr. devices für die kein state im define vorgegeben sind bleiben weiterhin "active" / "defined"

evtl nimmst du die änderung ja auf. der ASH2200Clone ist ein beispiel mit meinen änderungen wenn kein state-reading definiert ist, der ks300 eines mit T als state definiert.
und das angepasste modul auch mal angehängt, zum testen muss das clonedevice ggf neu definiert werden / attr stateformat gelöscht. damit sieht es dem original-device zum verwechseln ähnlich ;-)

Joachim

Moin chris1284,
wenn Du diesen Tread noch nicht von Anfang an gelesen hast, dann lese ihn bitte mal von Anfang an, danach sollte Deine Frage
Zitat
gibt es einen bestimmten grund warum du "_state" anlegst und nicht einfach state überschreibst wenn so definiert?
Beantwortet sein.
Was Du in dem Modul für Dich änderst, ist mir egal.

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

chris1284

#145
Zitat von: Joachim am 15 Mai 2014, 19:31:18
Moin chris1284,
wenn Du diesen Tread noch nicht von Anfang an gelesen hast, dann lese ihn bitte mal von Anfang an, danach sollte Deine Frage Beantwortet sein.
Gruß Joachim

habe ich mir angesehen (ich denke du meinst Antwort #71 vom betateilchen). und finde das meine eingriffe damit nicht auf kriegsfuss stehen.

EDIT: evtl durch mich falsch aufgefasst

Joachim

Moin chris1284,
Ich wollte  Dich auch nicht angreifen, nur ich war diese Diskussion um "state" "STATE" sowas von satt, dass ich da nicht wirklich Lust hatte, das Thema nocheinmal anzugehen, es war schon schwierig genug, diesen Kompromiss zu finden, und als nichtProgrammierer war das das Beste, was herauszuholen war.
Natürlich war und ist es mein endgültiges Ziel, echte Klone von entfernten Devices zu schaffen, inclusive dem gleichen Namen, und mit allen Möglichkeiten, die das Originals hergibt. Das übersteigt allerdings z.Z. meine Möglichkeiten bezüglich Wissen und Zeit. Dein Ansatz mit RFHEM hilft mir da schoneinmal gewaltig.
Wenn Du interesse hast, kann man sich da sicherlich zusammentun.
RFHEM als Backendmodul und cloneDummy als Frontend.

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

Joachim

#147
Moin @ all
die Testversion wurde 10 mal heruntergeladen, 2 mal gab es Feedback, ich gehe davon aus, dass es so läuft, wie es soll,
von daher ist ab 8:00 geänderte Version im Update.

Änderungen:

Neues Attribut addStateEvent hinzugefügt, vorgabe ist 0, wenn auf 1 gesetzt, dann wird der STATE des geklonten Devices als STATE übernommen. Achtung, das geht noch nicht wenn cloneDummy ein Device über FHEM2FHEM klont.

Es werden alle Readings des originalDevices, die auch im EventMonitor zu sehen sind geklont.

Die Rangfolge für "STATE" ist:
- wenn keine Vorgabe gemacht wurde, dann die Meldung von cloneDummy (initialized, active)
- wenn addStateEvent gesetzt ist, dann der "state" vom geklonten Device (dann kein "state" mehr vom cloneDummy)
- wenn das optionale reading im define gesetzt ist, dann der Wert davon (überstimmt die beiden vorherigen Zeilen)
- wenn stateFormat als attr gesetzt ist, toppt das alles

viel Spass damit.

@ andre,

Zum Thema zusammenführen von cloneDummy und readingsProxi.
Ich werde mich jetzt mal mit readingsProxi befassen, und dann mal einen Vorschlag in diesem Thread machen.
Mein gedanklicher Fahrplan für cloneDummy ist:
cloneDummy Stück für Stück in die Richtung weiterzuentwickeln, dass es einen kompletten Klon eines Devices erstellen kann, inclusive Rückkanalfähigkeit bei FHEM2FHEM Verbindung. Dabei sollen wahlweise einzelne oder alle Informationen des original Devices in den Klon übernommen werden können.

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

Puschel74

#148
Hallo Joachim,

ich habe hier
http://forum.fhem.de/index.php/topic,24579.0.html
erstmal im Anfängerbereich meine Frage gestellt und groby hat mir einen Workaround geliefert.

Nun zu meinem eigentlichen "Problem".
Ich benutze cloneDummy noch nicht lange daher bitte um Nachsicht wenn ich was falsch konfiguriert habe.
Ich habe auf einem RasPi FHEM mit FHEM2FHEM an meine Hauptinstallation gekoppelt und mit cloneDummy 2 Geräte auf die entfernte Installation geklont.
Das hat auch einwandfrei geklappt und ich kann die Readings wunderbar auswerten.
Nur liefert mir $now in einem notify auf eines der geklonten Geräte nur Müll und ich habe absolut keine Ahnung woran das liegt.

So sind die beiden Geräte eingebunden:
define WetterstationEingang_extern cloneDummy Wetterstation_Eingang
attr WetterstationEingang_extern addStateEvent 1
define EG_Terrasse_extern cloneDummy EG_Terrasse
attr EG_Terrasse_extern addStateEvent 1

Wetterstation_Eingang ist eine KS300
EG_Terrasse ist ein HM-WDS10-TH-O

Mit diesem Code (eines lokal erzeugten Dummy):
Dummy1:(Ein|Aus) {
my $now=sprintf("%02d:%02d",$hour,$min);
  Log(3,"$now");
}

erhalte ich im Logfile
Zitat2014.06.15 11:37:08 3: 11:37

Mit diesem Code (der auf die beiden entfernten und per cloneDummy eingebundenen Geräte reagiert resp. auf deren Reading temperature):
(EG_Terrasse_extern|WetterstationEingang_extern):temperature.* {
  my $now=sprintf("%02d:%02d",$hour,$min);
  my $temp_terrasse = ReadingsVal("EG_Terrasse_extern","temperature",38);
  my $wind=ReadingsVal("WetterstationEingang_extern","wind",52);
  my $temp_wetterstation=ReadingsVal("WetterstationEingang_extern","temperature",78);
  Log(3,"$now");
  Log(3,"$temp_terrasse");
  Log(3,"$wind");
  Log(3,"$temp_wetterstation");
}

erhalte ich diese Ausgabe:
Zitat2014.06.15 11:39:09 3: temperature: 19.302d:temperature: 19.302d
2014.06.15 11:39:09 3: 21.3
2014.06.15 11:39:09 3: 0.0
2014.06.15 11:39:09 3: 19.3
Als Wert wird hier anscheinend $EVENT "fehl-"interpretiert.

cloneDummy hat diese Version:
Zitat# $Id: 98_cloneDummy.pm 5919 2014-05-21 05:03:48Z joachim09876 $

Ein update check liefert mir keine neuere Version für cloneDummy.

Wenn du noch was benötigst (und davon gehe ich mal aus) dann nur her damit.
Ich werde versuchen dir die gewünschten Daten zu liefern.

Wenn mein "Problem" aber nichts mit cloneDummy zu tun hat dann kannst du meinen Beitrag hier bitte gerne löschen.

Grüße

Edith: Der einzige Unterschied zwischen beiden Code-teilen ist einmal ein lokal existierender Dummy und einmal die 2 Geräte per cloneDummy.
Ein anderer Unterschied fällt mir im Moment nicht auf/ein.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Joachim

Moin Puschel,
der cloneDummy verarbeitet nur das, was man auch im Eventmonitor sieht.
schicke bitte mal den passenden Auszug aus dem Eventmonitor.
Ich sehe mir das morgen an, heute schaffe ich das nicht mehr.

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