[Gelöst] Kann readingsGroup keine Readings von dummy oder DOIF darstellen?

Begonnen von hopgeq, 04 November 2017, 01:16:00

Vorheriges Thema - Nächstes Thema

hopgeq

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?



viegener

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)

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

hopgeq

#2

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:.*

viegener

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)
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

hopgeq

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");; }


viegener

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?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

hopgeq

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.

viegener

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
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

hopgeq

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)       );; \
}