Hauptmenü

Reading umbenennen

Begonnen von stefan-dd, 23 Mai 2020, 23:11:39

Vorheriges Thema - Nächstes Thema

stefan-dd

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

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

stefan-dd

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?

MadMax-FHEM

#3
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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

LuckyDay

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

stefan-dd

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];}

marvin78


Wzut

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 ?
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

TomLee

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

stefan-dd

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?

MadMax-FHEM

#10
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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

stefan-dd

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

  }
}

MadMax-FHEM

#12
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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)