Hallo,
ich möchte Readings umbenennen. Diese nummerischen Readings sollen in einen Text umbenannt werden.
zB. 113 in Heizbetrieb
EventMap möchte ich aus Gründen der Unübersichtlichkeit und Dopplungen nicht verwenden.
Diese Umbenennung möchte ich möglichst in die myUtils auslagern.
Wie kann man dies einfach realisieren.?
Danke
Wo kommen denn die Readings her?
Also um was für ein Device/Typ handelt es sich?
Umbenennen von Readings geht nicht (einfach so).
Die werden durch das entsprechende Device SO gesetzt/benannt...
Was geht: beim Device was ändern (lassen) z.B. bei MQTT bzgl. topic etc.
Oder das Attribut userreadings nutzen.
Dann bleiben zwar die "originalen" Readings (kommen ja weiterhin durch das Device) aber du kannst so quasi eine "Kopie" mit gewünschtem Namen "anlegen"...
https://wiki.fhem.de/wiki/UserReadings
Gruß, Joachim
Hallo, danke,
Ich habe mich vielleicht nicht richtig ausgedrückt...
Den Reading-Namen selbst möchte ich nicht umbenennen, sondern nur den Wert des Readings.
on/off in/an aus ist kein Problem, es geht um größere Zuordnungen.
Wie kann man dies machen?
Leider gleiche Antwort...
Da du ja eventmap nicht "magst"...
Ansonsten wüsste ich keine anderen/weiteren Möglichkeiten...
EDIT: außer vielleicht noch readingsProxy, dann allerdings eine "veränderte/angepasste Kopie" im readingsProxy-Device, dann also ein weiteres Device...
EDIT: oder readingsChange https://wiki.fhem.de/wiki/ReadingsChange
Gruß, Joachim
Zitat von: stefan-dd am 23 Mai 2020, 23:48:18
Hallo, danke,
Ich habe mich vielleicht nicht richtig ausgedrückt...
Den Reading-Namen selbst möchte ich nicht umbenennen, sondern nur den Wert des Readings.
on/off in/an aus ist kein Problem, es geht um größere Zuordnungen.
Wie kann man dies machen?
wenn du mal konkret ein List des device nennen würdest, müsste man nicht so raten.
manche Module haben Möglichkeiten manche nicht
Internals:
DEF 192.168.1.36:81
DeviceName
FUUID 5ec66d68-f33f-804b-fada-3902af75f148cb3f
IP 192.168.1.36:81
NAME WP
NR 1462
NTFY_ORDER 50-WP
STATE connected
TYPE BSB
READINGS:
2020-05-24 13:19:49 0000-Datum/Zeit 24.05.2020 13:30:04
2020-05-24 13:19:49 0700-Betriebsart 3
2020-05-24 13:19:49 0710-Komfortsollwert 19.0
2020-05-24 13:19:49 0712-Reduziertsollwert 18.0
2020-05-24 13:19:49 8000-StatusHeizkreis1 114
2020-05-24 13:19:49 8003-StatusTrinkwasser 100
2020-05-24 13:19:49 8410-RuecklauftemperaturWP 24.8
2020-05-24 13:19:49 8412-VorlauftemperaturWP 24.7
2020-05-24 13:19:49 8427-QuelleEintrittstemperatur 13.2
2020-05-24 13:19:49 8700-Aussentemperatur 13.4
2020-05-24 13:19:49 8730-HeizkreispumpeQ2 255
2020-05-24 13:19:49 8731-HeizkreismischerAufY1 0
2020-05-24 13:19:49 8732-HeizkreismischerZuY2 0
2020-05-24 13:19:49 8830-Trinkwassertemperatur1 35.7
2020-05-24 13:19:49 8980-Pufferspeichertemperatur1 33.2
2020-05-24 13:19:49 8982-Pufferspeichertemperatur2 29.2
2020-05-24 12:33:54 lastError 192.168.1.36: Keine Route zum Zielrechner (113)
2020-05-24 12:41:07 state connected
helper:
categories:
0:
max 6
min 0
name Uhrzeit und Datum
1:
max 70
min 20
name Bedieneinheit
10:
max 682
min 666
name Ferien Heizkreis P
11:
max 900
min 700
name Heizkreis 1
12:
max 969
min 901
name Kühlkreis 1
13:
max 1200
min 1000
name Heizkreis 2
14:
max 1500
min 1300
name Heizkreis 3/P
15:
max 1680
min 1600
name Trinkwasser
16:
max 2051
min 2008
name Hx-Pumpe
17:
max 2080
min 2055
name Schwimmbad
18:
max 2150
min 2110
name Vorregler/Zubringerpumpe
19:
max 2663
min 2200
name Kessel
2:
max 140
min 120
name Funk
20:
max 2753
min 2700
name Sitherm Pro
21:
max 3029
min 2776
name Wärmepumpe
22:
max 3267
min 3090
name Energiezähler
23:
max 3590
min 3510
name Kaskade
24:
max 3755
min 3690
name Zusatzerzeuger
25:
max 3887
min 3810
name Solar
26:
max 4204
min 4102
name Feststoffkessel
27:
max 4813
min 4708
name Pufferspeicher
28:
max 5151
min 5010
name Trinkwasserspeicher
29:
max 5544
min 5400
name Trinkwasser Durchl'erhitzer
3:
max 516
min 500
name Zeitprogramm Heizkreis 1
30:
max 6498
min 5700
name Konfiguration
31:
max 6699
min 6600
name LPB-System
32:
max 6996
min 6705
name Fehler
33:
max 7254
min 7001
name Wartung/Sonderbetrieb
34:
max 7500
min 7300
name Konfiguration Erweiterungsmodule
35:
max 7999
min 7700
name Ein-/Ausgangstest
36:
max 8099
min 8000
name Status
37:
max 8199
min 8100
name Diagnose Kaskade
38:
max 8586
min 8300
name Diagnose Erzeuger
39:
max 9075
min 8700
name Diagnose Verbraucher
4:
max 536
min 520
name Zeitprogramm Heizkreis 2
40:
max 9652
min 9500
name Feuerungsautomat
41:
max 14999
min 10000
name Benutzerdefiniert
42:
max 15067
min 15000
name PPS-Bus
5:
max 556
min 540
name Zeitprogramm 3/HKP
6:
max 576
min 560
name Zeitprogramm 4
7:
max 616
min 600
name Zeitprogramm 5
8:
max 648
min 632
name Ferien Heizkreis 1
9:
max 665
min 649
name Ferien Heizkreis 2
fifo:
Attributes:
flashCommand avrdude -p atmega2560 -c wiring -P [PORT] -D -Uflash:w:[HEXFILE] 2>[LOGFILE]
polls 0000,700,710,712,8000,8003,8427,8700,8730,8731,8732,8830,8980,8982,8410,8412
room Heizung
userReadings 8000-StatusHeizkreis {
my @a=("114"=>"Text1","113"=>"Text2","112"=>"Text2","111"=>"laden","99"=>"entladen","55"=>"Text5","65"=>"Text6","75"=>"???");
my $v=int(ReadingsNum("WP", "8000-StatusHeizkreis1", 7)); return $a[$v];}
userReading
TIPP : Moduautor anschreiben ob er nicht vllt. doch freundlichere Readings Namen benutzen könnte, ggf, mittels Attribut wählbar long/short , hässlich/schön ?
Nutze das Modul nicht, hsb mir aber mal die .pm geladen und in der kurzen Doku das gefunden:
Zitat<b>Attr</b>
<ul>
<li>readingsFormat<br>
1 -> parameter number and name (default)</li>
2 -> parameter number only
3 -> name only
</ul>
Eventuell hilft das ja schon ;)
Gruß
Thomas
Danke, das hilft nicht weiter, dort geht es um die Namen der Readings selbst.
Ich habe da mit userredings und auslagern in die myUtily versucht. Es will aber nicht klappen.
attr WP userReadings StatusHeizkreis{statusHK($NAME,"8000-StatusHeizkreis","")}
wpUtils_Initialize($$)
{
my ($hash) = @_;
}
##########################################################
sub statusHK($) {
my ($event) = @_;
if ($event eq "114")
{
fhem ("setreading WP StatusHeizkreis test1");
}
else
{
fhem ("setreading WP StatusHeizkreis test2");
}
}
Wo habe ich einen Fehler?
Du frägst einen Parameter in der Sub ab und nennst den event...
...übergibst aber mehr, u.a. den Devicenamen (sofern $NAME in userreadings existiert) und der ist WP...
Und da das der 1. Parameter ist wird der eben zu event...
EDIT: da du einen Prototypen hast, der Parameter-mässig nicht passt müsste es auch Fehlermeldungen geben...
Und setreading auf sich selbst geht nicht!!
(also soweit ich weiß)
Damit es keine "endless loop" gibt...
Und du musst noch mal lesen wie userreadings funktioniert usw.
In der sub würde reichen zurückzugeben was eben im "neuen" userreadings als Wert stehen soll...
Gruß, Joachim
Danke, dies hat mich nur ein kleines Stück weitergebracht.
Das Userreading sollte so passen?
userReadings StatusHeizkreis{statusHK("8000-StatusHeizkreis")}
Wenn der übergebene Wert 114 wird test1 geschrieben, ansonsten test2?
Wie kann man die Werte direkt zurück geben? Ich habe kein Beispiel dazu gefunden.
sub statusHK($) {
my ($event) = @_;
if ($event eq "114")
{
fhem ("setreading WP StatusHeizkreis test1");
}
else
{
fhem ("setreading WP StatusHeizkreis test2");
}
}
Du übergibst den String "8000-StatusHeizkreis" und wie soll das in der Sub jemals zu 114 werden!!?
Und wie geschrieben setreading "auf sich selbst" wird nicht gehen...
Zurückgeben eines Wertes:
return Wert
Wie wäre es sich mal mit Perl zu beschäftigen!?
EDIT: du brauchst bei userreadings kein setreading. Sondern was immer "hinter" dem Readingnamen "berechnet" und "zurück gegeben" wird, wird genau diesem Reading als Wert zugeordnet... Siehe commandref userreadings oder Wiki https://wiki.fhem.de/wiki/UserReadings Dort sind doch auch Beispiele. Auch wie Werte zurück gegeben werden...
EDIT: außerdem muss zwischen dem "neuen" ReadingNamen 'StatusHeizkreis' und dem Aufruf der Sub {statusHK("8000-StatusHeizkreis")} ein Leerzeichen. Steht aber alles bei userreadings...
Gruß, Joachim
Wobei ich ja immer noch glaube, dass eher ReadingsChange das ist was du willst!?
Du willst doch die Readingnamen lassen und "nur" den Inhalt, also den Wert des Readings anpassen!?
Genau das macht ReadingsChange...
Allerdings ist die Beschreibung etwas knapp...
...aber wenn man sich damit: RegEx und Perl beschäftigt (und das musst/solltest du eh), dann geht das schon...
Gruß, Joachim
Evtl. würde das hier funktionieren:
attr WP userReadings StatusHeizkreis:8000-StatusHeizkreis1.* {statusHK()}
sub statusHK()
{
if(ReadingsVal("WP","8000-StatusHeizkreis1","n.a.") eq "114")
{
return "Test1";
}
else
{
return "Test2";
}
}
Oder auch direkt im userReadings:
attr WP userReadings StatusHeizkreis:8000-StatusHeizkreis1.* {ReadingsVal("WP","8000-StatusHeizkreis1","n.a.") eq "114" ? return "Test1" : return "Test2"}
Gruß, Joachim