FHEM Forum

FHEM => Frontends => readingsGroup / readingsHistory => Thema gestartet von: hopgeq am 04 November 2017, 01:16:00

Titel: [Gelöst] Kann readingsGroup keine Readings von dummy oder DOIF darstellen?
Beitrag von: hopgeq am 04 November 2017, 01:16:00
Ich verzweifel an den readingsGroups.
Ich habe eine readingsGroup, die einige Readings anzeigt.

define rg_test readingsGroup ESP_Waeschekeller:temperature,humidity,dewpoint

Funktioniert für ein physisches Device.

Aber wenn ESP_Waeschekeller kein physisches Device ist, sondern ein Dummy oder ein DOIF mit Readings, dann funktioniert die readingsGroup plötzlich nicht mehr.

Folgende readingsGroup

define rg_test2 readingsGroup ESP_.*:.*\

zeigt alle Readings des Dummys allerdings korrekt an (untereinander). temperature, humidity, dewpoint sind alle dabei. Auch INTERNALs lassen sich darstellen.
Daraus schließe ich, readingsGroups und dummys schließen sich nicht prinzipiell aus, irgendwie arbeiten sie zusammen. Aber warum geben physische Devices andere Ergebnisse als dummy oder DOIFs?
Was mache ich falsch? Mache ich überhaupt etwas falsch?


Titel: Antw:Kann readingsGroup keine Readings von dummy oder DOIF darstellen?
Beitrag von: viegener am 04 November 2017, 01:19:45
Nein dummy / DOIF und readingsGroup schliessen sich nicht aus, auch das sind erstmal ganz normale devices und die verhalten sich entsprechend gleich.

Was allerdings bei Dir nicht geht ist nicht rauszufinden, wenn Du nur den Code postest der funktioniert ;)

Bitte verwende dann aber auch code tags (#-Button)

Titel: Antw:Kann readingsGroup keine Readings von dummy oder DOIF darstellen?
Beitrag von: hopgeq am 04 November 2017, 10:02:46

define rg_test3 readingsGroup ESPEasy_Waesche_DHT_innen:temperature,humidity,dewpoint

funktioniert. Das Ergebnis ist eine Zeile. ESPEasy_Waesche_DHT_innen ist das physikalische Device.


define rg_test3 readingsGroup Esp_Waesche:temperature,humidity,dewpoint

funktioniert nicht. Das Ergebnis ist leer. Esp_Waesche ist der Dummy und wird wie folgt befüllt:

define n_copy_to_esp_waesche notify ESPEasy_Waesche.*:(RSSI|Relais_A|Relais_B|humidity|temperature|dewpoint).* { fhem("setreading Esp_Waesche $EVENT");; }


Die Readings sind existent. Man kann sie wie folgt sichtbar machen:

define rg_test4 readingsGroup Esp_Waesche:.*
Titel: Antw:Kann readingsGroup keine Readings von dummy oder DOIF darstellen?
Beitrag von: viegener am 04 November 2017, 11:34:13
Ich vermute mal die Readings am Dummy heissen nicht so, wie in der Readingsgroup definiert (sonst würde ja .* nicht funktionieren).
Also poste doch einfach mal hier ein list vom dummy (list rg_test3)
Titel: Antw:Kann readingsGroup keine Readings von dummy oder DOIF darstellen?
Beitrag von: hopgeq am 04 November 2017, 22:55:26
du hast recht! Die Readings heißen nicht richtig. Ich danke dir. Erst mit dem list habe ich das gesehen. Und zwar ergibt der list des dummy Esp_Waesche (Auszug)

READINGS:
     2017-11-04 22:37:35   RSSI:           -70
     2017-11-04 22:37:14   Relais_A:       off
     2017-11-04 22:37:21   Relais_B:       off
     2017-11-04 22:29:09   dewpoint:       13.3
     2017-11-04 22:29:09   humidity:       49
     2017-11-04 22:36:35   presence:       absent
     2017-11-04 00:46:58   state           high
     2017-11-04 22:29:09   temperature:    24.7

Der Doppelpunkt hinter dem Namen des Readings dient nicht der schöneren Darstellung im list, sondern ist fälschlicherweise Teil des Readingnamens geworden.

Das Problem ist also offenbar ein Fehler in meinem notify. Ich habe den Code irgendwo im Forum gefunden. Er sammelt Daten aus verschiedenen Devices und kopiert sie in ein größeres Dummy-Device. Leider verändert er dabei die Namen der Readings und hängt ihnen einen Doppelpunkt an.


define n_copy_to_esp_waesche notify ESPEasy_Waesche.*:(RSSI|Relais_A|Relais_B|humidity|temperature|dewpoint).* { fhem("setreading Esp_Waesche $EVENT");; }

Titel: Antw:Kann readingsGroup keine Readings von dummy oder DOIF darstellen?
Beitrag von: viegener am 05 November 2017, 01:07:18
Ja das wundert mich nicht, denn der Doppelpunkt steckt ja im event drin.

Grundsätzlich erscheint mir das aber doch alles völlig sinnlos, wenn ein event kommt (weil sich ein reading am original device änbdert), kopierst Du das in einen Dummy, damit hast Du das Reading verdoppelt und dabei auch noch so, dass Du es nicht weiterverwenden kannst :o

Was soll die Kopiererei?
Titel: Antw:Kann readingsGroup keine Readings von dummy oder DOIF darstellen?
Beitrag von: hopgeq am 05 November 2017, 02:00:18
Ich habe ein Device, das mit EspBridge angebunden ist. Es handelt sich um einen ESP8266 mit Temperatur- und Feuchtesensor sowie zwei Relais zum Schalten eines Ventilators. Außerdem übermittelt der ESP noch seien RSSI-Wert.

Um die Relais getrennt schalten zu können, muss ich EspBridge so konfigurieren, dass mein ESP als vier Einzeldevices in fhem auftaucht. Zumindest wird das so im Forum diskutiert und ich habe auch keine alternative Lösung gefunden.

Jetzt will ich überwachen, ob der ESP im Keller noch lebt und Funkkontakt hat. Dazu wollte ich das RSSI-Reading und dessen Timestamp überwachen bzw. als readingsGroup darstellen.
Das ging aber nicht, siehe anderer Thread.

Mein Workaround war, die vier Einzeldevices wieder zusammenzukopieren einem einzigen Device. Dann habe ich das Problem nicht mehr, den RSSI-Wert und den RSSI-Timestamp unterscheiden zu müssen, denn ich kann einfach irgend einen anderen Timestamp nehmen.

Außerdem brauche ich sowieso ein DOIF für die Steuerungslogik der Lüftung. Das enthält dann halt gleich die Readings, die es braucht.
Titel: Antw:Kann readingsGroup keine Readings von dummy oder DOIF darstellen?
Beitrag von: viegener am 05 November 2017, 11:08:00
Wenn Du das mit den Doppelpunkten korrigieren wirst, musst Du vermutlich das notify etwas ändern:

define n_copy_to_esp_waesche notify ESPEasy_Waesche.*:(RSSI|Relais_A|Relais_B|humidity|temperature|dewpoint).* { my $read=$EVTPART0;; $read =~ s/:$//;;  $EVTPART1 = "" if ( ! defined($EVTPART1) );; $EVTPART2 = "" if ( ! defined($EVTPART2) );; fhem("setreading Esp_Waesche $read $EVTPART1 $EVTPART2");; }

ohne das jetzt ausprobiert zu haben
Titel: Antw:Kann readingsGroup keine Readings von dummy oder DOIF darstellen?
Beitrag von: hopgeq am 09 November 2017, 22:20:33
Ich hab es jetzt so gelöst:
In 99_myUtils.pg

sub copyreading_command($$){
my $ziel = $_[0];
my $eventstring = $_[1];

$eventstring =~ tr/://d;  # Doppelpunkt streichen
'setreading '.$ziel.' '.$eventstring;

}


Und das notify geht dann so:


define n_copy_to_esp_waesche notify ESPEasy_Waesche.*:(RSSI|Relais_A|Relais_B|humidity|temperature).* {\
fhem(  copyreading_command("a_ESP_Waesche", $EVENT)       );; \
}