Hallo,
ich möchte gerne in eine readingsGroup auch Werte aus anderen Devices anzeigen und verzweifle daran gerade.
Folgendes hätte ich schon:
defmod rg_ASC_Shading_tst readingsGroup <Gerät>,<Modus>,<InOutAzimuth> Rollo.*:!?ASC_Shading_Mode,{ReadingsVal("myTwilight","azimuth","??")}
attr rg_ASC_Shading_tst room Rollos
Leider bleibt die Spalte InOutAzimuth immer leer, egal was ich dort probiere.
Und wie könnte ich dann in der Spalte Texte verknüpfen?
Danke für jede Hilfe.
lg, Gerhard
defmod rg_ASC_Shading_tst readingsGroup <Gerät>,<Modus>,<InOutAzimuth> Rollo.*:!?ASC_Shading_Mode,azimuth@myTwilight
Steht in der CommandRef:
ZitatRegex kann die Form <regex>@{perl} haben, um Readings von einem anderen Gerät zu verwenden.
Hallo,
Danke.
Ja, den Hinweis in der Commandref kenne ich.
Aber was bedeutet das?
Für meine rudimentären Kenntnisse ist die Aussage leider zu komplex.
Wie muss ich die Abfrage formulieren?
Bin für jeden Hinweis dankbar.
Danke, lg, Gerhard
Steht doch hier:
Zitat
defmod rg_ASC_Shading_tst readingsGroup <Gerät>,<Modus>,<InOutAzimuth> Rollo.*:!?ASC_Shading_Mode,azimuth@myTwilight
"Detailansicht":
Zitatazimuth@myTwilight
Gruß, Joachim
'Tschuldigung. Das habe ich übersehen. Mea culpa.
Vielen Dank für den zweimaligen Hinweis.
lg, Gerhard
Das funktioniert schon mal. Vielen Dank nochmals.
Eine weitere Frage bitte noch:
Wie kann man nun Texte verbinden und zusammensetzen (also z.B. anderen Readings verbinden)?
Danke, Lg, Gerhard
Einfach einen Punkt dazwischen:
GesamtString = String . String
Hä? Ich weiß nicht was du meinst...
-> Antwort so ausführlich wie die Frage... ;)
Gruß, Joachim
Hallo Joachim,
irgendwie bin ich heute nicht so gut drauf. Bitte entschuldige.
Klar war das eine komische Frage.
Ich möchte gerne in einer Spalte den Werte eines Attributs des Gerätes und das Reading eines anderen angezeigt.
Also in der Form:
Gerät Modus InOutAzimuth
Rollo.SZ always 220:290 (225)
Wobei das "220:290" aus meinem ASC-Device kommt und das (225) aus dem Twilight-Device.
Dafür habe ich folgendes definiert, aber es geht nicht:
<Gerät>,<Modus>,<InOutAzimuth> Rollo.*:!?ASC_Shading_Mode,!?ASC_Shading_InOutAzimuth . "(" . azimuth@myTwilight . ")"
Da stehe ich irgendwie auf der Leitung ...
Danke, lg, Gerhard
Und wie sieht es jetzt aus!?
Bzw. wie sieht das aus was hier schon gepostet wurde!?
Also welchen Unterschied willst du erreichen!?
Ich habe ja weder deine readingsGroup noch deine Devices etc.
Kann also nicht/nur bedingt "nachbauen"...
Soll heißen: so genau verstehe ich immer noch nicht was GENAU du willst... ;)
Gruß, Joachim
Also wenn ich das eingebe:
defmod rg_ASC_Shading_tst readingsGroup <Gerät>,<Modus>,<InOutAzimuth> Rollo.*:!?ASC_Shading_Mode,!?ASC_Shading_InOutAzimuth . "(" . azimuth@myTwilight . ")"
dann bleibt die letzte Spalte leer.
Das macht die readingsGroup anscheinend immer, wenn etwas falsch ist.
Also mein Problem ist, dass ich in einer Spalte einen zusammengesetzten Text aus einem Attribut des ersten Gerätes (hier "ASC_Shading_InOutAzimuth" aus dem Device Rollo.SZ) und dem Reading des zweiten Gerätes (hier azimuth aus dem Device "myTwilight") haben möchte.
Also das Attribut Rollo.SZ:ASC_Shading_InOutAzimuth liefert "220:290" aus meinem Rollo-Device und das reading myTwilight:azimuth liefert "225" aus dem Twilight-Device.
Dann sollte folgender Text in der Spalte stehen: "220:290 (225)"
Zum Nachstellen: einfach ein gemischter Text aus 2 verschiedenen Devices.
Ich hoffe, ich konnte das diesmal besser erklären ;-)
Danke, lg, Gerhard
Ja, jetzt ist es so einigermaßen klar was du willst...
Ich wüsste aber nicht wie es aus verschiedenen Readings oder gemischt Reading und Attribut selbst aus dem gleich Device in EINE Spalte gehen soll...
Normalerweise ist immer ein Wert (Reading, Attribut, Internal, ... / selbes oder anderes Device) eine Spalte...
Und du meinst wirklich Spalte!?
Gut vermutlich weil in eine Zeile wurde ja schon gepostet (wenn ich richtig liege)...
Ich weiß nicht, ob man da auch einfach Perl reinhängen kann, dann könnte man das darin ja leicht zusammenbauen (ReadingsVal(Devicename,ReadingNameEersatzwert) / AttrVal(DeviceName,AttrName,Ersatzwert) / und dann halt mit "Punkt" zusammenbasteln)...
...aber hier bin ich mit meinem Latein bzgl. readingsGroup am Ende, leider...
EDIT: ich würde einen neuen Thread aufmachen (oder diesen umbenennen) -> neue Leser, neues Glück...
Gruß, Joachim
Ok, Danke für Deine Hilfe.
Vielleicht geht das am besten auch nur über eine Funktion in 99_myUtils.
Aber bis ich das schaffe, habe ich mir mit einer zweiten Spalte für die zweiten Werte geholfen.
Ist nicht so schön übersichtlich, aber viel besser als nix ;-)
lg, Gerhard
Zitat von: gestein am 17 April 2020, 22:38:41
Ok, Danke für Deine Hilfe.
Vielleicht geht das am besten auch nur über eine Funktion in 99_myUtils.
Aber bis ich das schaffe, habe ich mir mit einer zweiten Spalte für die zweiten Werte geholfen.
Ist nicht so schön übersichtlich, aber viel besser als nix ;-)
lg, Gerhard
Wie geschrieben: ich weiß nicht, ob an der Stelle für die "Bearbeitung"/"Bereistellung" von WERTEN überhaupt Perl geht...
...wenn das nicht gehen sollte, dann hilft auch eine Sub in myUtils nix (weil ist ja Perl)...
Was geht sind "Befehle" bei Click und Icons zurück...
...hmmm, evtl. geht das doch...
Also Icons kann man ja per Sub setzen...
...vielleicht gehen dann auch Werte...
Hier mal ein Beispiel wo ich wie geschrieben ein Icon zurückgebe und man das Icon auch drücken kann und dann wird eben der Heizungsmodus verändert:
<{my_SetHeatingModeIcon($DEVICE)}@controlMode>
und die zugehörige Sub:
sub my_SetHeatingModeIcon($)
{
my ($Device) = @_;
my $Icon = "%sani_heating_automatic\@black%set $Device controlMode manual";
my $Reading = ReadingsVal($Device, "controlMode", "undef");
if($Reading eq "manual" || $Reading eq "set_manual")
{$Icon = "%sani_heating_manual\@black%set $Device controlMode auto"}
elsif($Reading eq "party" || $Reading eq "set_party")
{$Icon = "%sani_heating_calendar\@black%set $Device controlMode auto"}
elsif($Reading eq "auto" || $Reading eq "set_auto")
{$Icon = "%sani_heating_automatic\@black%set $Device controlMode manual"}
else
{$Icon = "message_attention\@red"}
# Log3(undef, 1, "my_SetHeatingModeIcon Device: $Device Reading: $Reading return: $Icon");
return $Icon;
}
Ob man da auch einfach Werte zurückgeben kann: keine Ahnung...
...aber je mehr ich drüber nachdenke: warum nicht ;)
Ich bin nicht sicher, ob das ohne das @controlMode (oder was ähnliches) auch geht...
...ist schon lange her, dass ich das gemacht habe (war eine meiner ersten "Übungen" und seither nicht mehr angeschaut / bis eben ;) )...
Aber evtl. ist es das Reading welches dazu führt, dass dieser Teil der readingsGroup "neu berechnet" wird...
Und noch eines (starke Vermutung): wenn sich die Werte des "anderen" Devices ändern, führt das (vermutlich) nicht zu einer Anzeigenänderung in der readingsGroup...
(ich vermute [stark], dass nur Änderungen des eigentlichen/führenden Devices dazu führen, dass die readingsGroup aktualisiert wird)
Gruß, Joachim
Also ich hab's mal schnell ausprobiert ;)
Es geht prinzipiell, ob das was du willst auch geht: musst du ausprobieren...
Hier mal meine Test-RG (raw definition:
defmod rgTest2 readingsGroup <>,<Zustand>,<Zustand calc> NAME=dmFenster.*:contact,<{SubTest2($DEVICE)}@contact>
attr rgTest2 mapping $ALIAS
attr rgTest2 notime 1
attr rgTest2 room Fenster
Hier eines der "Fenster" (raw definition):
defmod dmFensterEssZi dummy
attr dmFensterEssZi alias Esszimmer
attr dmFensterEssZi readingList contact
attr dmFensterEssZi room Fenster
attr dmFensterEssZi setList open closed
attr dmFensterEssZi userReadings contact {ReadingsVal($NAME,"state","n.a.")}
die anderen "Fenster" sind ähnlich... ;)
Und dann nat. noch die Sub:
sub SubTest2($)
{
my ($Device) = @_;
my $Ret = ReadingsVal($Device, "state", "n.a.") . " " . AttrVal($Device, "alias", "n.a.");
return $Ret;
}
Also alles nur "quick&dirty"...
Gruß, Joachim