Mehrere Devices in einer Readingsgroup

Begonnen von guna83, 12 September 2015, 20:29:29

Vorheriges Thema - Nächstes Thema

guna83

Hallo zusammen,

ich möchte in einer readingsgroup den Status von zwei Devices in einer Zeile darstellen. Versucht habe ich es mit:
define RG_Rauchmelder.KG readingsGroup < >,<Alarm>,<Rauchalarm> Rauchmelder.Status.Alarm.KG.*:state,Rauchmelder.Status.Rauchalarm.KG.*:state
Leider wird immer nur der erste Wert angezeigt, die Position an der der zweite Werte erscheinen soll bleibt leer.

Wie bekomme ich den zweiten Wert auch angezeigt? Ist mein ganzer Ansatz falsch?

Danke!
1x Intel(R) Atom(TM) with FHEM@2.4GHz, CUNX/KS300, CUNO/Max, KNXD, FTUI 2.2
1x RasPi 2 mit 7" Touch-Display für FTUI

stromer-12

Naja, fast richtig. Versuche es einmal so:

define RG_Rauchmelder.KG readingsGroup <>,<Alarm>,<Rauchalarm> Rauchmelder.Status.Alarm.KG.*:state,state@Rauchmelder.Status.Rauchalarm.KG.*
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

guna83

Funktioniert leider auch nicht  :(
Testweise hab ich mal define RG_Rauchmelder.KG readingsGroup <>,<Alarm>,<Rauchalarm> Rauchmelder.Status.Alarm.KG.*:state,state@Rauchmelder.Status.Rauchalarm.Flur versucht, das funktioniert ohne Probleme. Irgendwie "mag" die ReadingsGroup wohl das * am Ende nicht. Andere Versuche mit state@Rauchmelder\.Status\.Rauchalarm\.[a-zA-Z0-9]* mit oder ohne {} haben mich leider auch nicht zum Ziel geführt. Kann ich irgendwie automatisch genau das hinten dran hängen, in was das erste Sternchen aufgelöst wurde?
1x Intel(R) Atom(TM) with FHEM@2.4GHz, CUNX/KS300, CUNO/Max, KNXD, FTUI 2.2
1x RasPi 2 mit 7" Touch-Display für FTUI

igami

Schreib dir eine Sub die den Device Namen ersetzt (s.u.) und in der readingsGroup machst du dann ein

define RG_Rauchmelder.KG readingsGroup <>,<Alarm>,<Rauchalarm> Rauchmelder.Status.Alarm.KG.*:state,state@{Alarm2Rauchalarm($DEVICE)}


sub Alarm2Rauchalam($){
  my $device = shift;

  $device =~ s/Alarm/Rauchalarm/g;

  return $device
}


Ist ungetestet, aber von der Idee her sollte es funktionieren, wenn es zu jedem Alarm Device ein "gleichnamiges" Rauchalarm Device gibt.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

justme1968

@stromer-12: device namen hinter dem @ kann man nicht als regex angeben. der name muss zu genau einem konkreten device passen.

@igami: ja. genau so geht das. so wird in jeder device zeile das zu $DEVICE passende abgeleitete device gesucht und verwendet.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

guna83

1x Intel(R) Atom(TM) with FHEM@2.4GHz, CUNX/KS300, CUNO/Max, KNXD, FTUI 2.2
1x RasPi 2 mit 7" Touch-Display für FTUI

master7811

Hi,

ich habe glaube ich gleiches Problem. Anzeigen möchte ich folgendes (ich bau mal eine Beispielzeile - es handelt sich um eine Heizungssteuerung):

Ist-Temperatur / Soll-Temperatur / HeizungAnOderAus

Meine "Geräte" heißen z.B.

Flur_T_Aktuell
Flur_T_Ziel
Flur_T_Heizung

So richtig toll wäre es noch, wenn ich die Heizung auch da gleich noch an oder aus schalten könnte ... aber das bekomm ich dann schon hin. Leider verstehe ich euren geposteten Code noch nicht so ganz. Aber bestimmt könnt ihr mir weiterhelfen ;-)



justme1968

define <rg> readingsGroup Flur_T_Aktuell:state,state@Flur_T_Ziel,state@Flur_T_Heizung

aber bitte schau dir mal die beiträge vor und nach diesem hier an: http://forum.fhem.de/index.php/topic,14608.msg349632.html#msg349632. wenn deine devices dummys sind gilt auch für dich: du machst es dir unnötig schwer wenn du für jeden wert einen eigenen dummy und vor allem das gleiche reading (state) mit unterschiedlicher bedeutung verwendest.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

master7811

Toll, Danke - das funktioniert. Es sind halt alles verschiedene Sensoren

T_Aktuell ist LaCrosse, T_Ziel ist THRESHOLD und _Heizung ist ein Pilight-Switch ;-)

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

master7811

Ok, habe es probiert und es funktioniert - allerdings will ich ja nicht nur den Flur haben, sondern darunter die Zeile für die Küche und das Wohnzimmer etc.  Wenn ich die Zeile kopiere, bekomme ich eine neue Readingsgroup... es soll aber doch alles in die Gleiche :-\

justme1968

#11
die schreibst du natürlich in die gleiche radingsGroup: define <rg> readingsGroup Flur_T_Aktuell:state, desired_value@Flur_T_Ziel,state@Flur_T_Heizung Wohnzimmer_T_Aktuell:state, desired_value@Wohnzimmer_T_Ziel,state@Wohnzimmer_T_Heizung ...

und wenn du im wiki schaust findest du auch ein beispiel wie du die devices automatisch zusammen suchen kannst. etwa so (ungetestet):define <rg> readingsGroup .*_T_Aktuell:temperature,desired_value@{$DEVICE=~s/Aktuell/Ziel/},state@{$DEVICE=~s/Aktuell/Heizung/}

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

master7811

Hey, Danke! Was die Zeile machen soll hab ich sogar verstanden ;-) Ich bastel mal - geht zwar noch nicht, aber wird schon. Warum wurde weiter oben eine eigene Funktion erstellt und hier geht es Inline? Wenn ich die Zeile von dir richtig verstehe, müsste ich ohne die Funktion auskommen, obwohl es das gleiche ist was hier gemacht wird... oder?

justme1968

weil eine eigene routine übersichtlicher ist wenn es länger wird und nicht immer ein einfaches suchen und ersetzen reicht. das suchen und ersetzen isst aber ungetestet. es kann z.b. sein das da noch ein return fehlt. oder, oder, ... und dann ist es schon wieder so lang das sich die routine lohnt. eine separate routine lässt sich auch einfacher debuggen da du sie auch von hand aufrufen kannst um zu sehen was genau passiert.

gruss
  andre

ps: oben war noch ein leerzeichen zu viel.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

master7811

Hi, das Leerzeichen hatte ich auch schon identifiziert. Leider geht es nicht und ich steh auf dem Schlauch. Die Funktion
=~ s/Suche/Ersetze/
macht doch folgendes: Suche mittels Regex nach dem Teil "Suche" und ersetze ihn durch Ersetze und gib das zurück in die Variable vor dem = - oder?

Der Übersichtlichkeit halber habe ich die folgenden beiden Funktionen in meine 99_myUtils.pm aufgenommen.

sub T_Aktuell_to_T_Ziel($){
  my $device = shift;

  $device =~ s/_T_Aktuell/_T_Ziel/g;

  return $device
}

sub T_Aktuell_to_Heizung($){
  my $device = shift;

  $device =~ s/_T_Aktuell/_Heizung/g;

  return $device
}


Meine fhem.conf sieht so aus:

define RG_Test readingsGroup .*_T_Aktuell:temperature,desired_value@{T_Aktuel_to_T_Ziel($DEVICE)},state@{T_Aktuel_to_Heizung($DEVICE)}

Leider zeigt er aber in der RG nur alle relevanten temperature Werte an. Desired_value und state werden nicht angezeigt. Hat jemand noch hinweise, worauf ich achten sollte?