FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Canon.Fritz am 05 April 2018, 20:40:49

Titel: Zahl in Text umformen
Beitrag von: Canon.Fritz am 05 April 2018, 20:40:49
Hallo,

ich habe vor, aus dem Modul WeekdayTimer, das reading "disabled" = 0 oder 1, in einen Text umzuwandeln.

Das ganz sollte später so aussehen :

disabled: 1 -->  deaktiviert
disabled: 0 -->  aktiviert

Das möchte ich dann in einem neuen reading namens "Zustand" angezeigt bekommen.

Hat jemand eine Ahnung wie der Code aussehen könnte ?

Über einen Lösungsvorschlag wäre ich sehr dankbar.
Titel: Antw:Zahl in Text umformen
Beitrag von: Otto123 am 05 April 2018, 20:53:26
Eventuell so:
userReadings Zustand {AttrVal("Name vom WeekdayTimer","disable",0) eq "1" ? "deaktiviert" : "aktiviert"}
Gruß Otto
Titel: Antw:Zahl in Text umformen
Beitrag von: Canon.Fritz am 05 April 2018, 21:05:00
Fhem wirft mir diese Fehlermeldung raus:

Zustand :     Error evaluating Schale userReading Zustand: Can't find string terminator '"' anywhere before EOF at (eval 107308) line 1.

Meine userReadings sehen zur Zeit so aus:
Zustand {AttrVal("Schale","disable",0) eq "1" ? "deaktiviert" : "aktiviert"},
Datum { (split ' ',ReadingsVal("Schale","nextUpdate",0))[0]},
Zeit { (split ' ',ReadingsVal("Schale","nextUpdate",0))[1]},

Titel: Antw:Zahl in Text umformen
Beitrag von: Otto123 am 05 April 2018, 21:07:07
Das Komma am Ende?
Titel: Antw:Zahl in Text umformen
Beitrag von: Canon.Fritz am 05 April 2018, 21:08:23
Brachte keine Änderung als ich es weggenommen habe.
Titel: Antw:Zahl in Text umformen
Beitrag von: Canon.Fritz am 05 April 2018, 21:12:29
Zitat von: Canon.Fritz am 05 April 2018, 21:05:00
Fhem wirft mir diese Fehlermeldung raus:

Zustand :     Error evaluating Schale userReading Zustand: Can't find string terminator '"' anywhere before EOF at (eval 107308) line 1.

Meine userReadings sehen zur Zeit so aus:
Zustand {AttrVal("Schale","disable",0) eq "1" ? "deaktiviert" : "aktiviert"},
Datum { (split ' ',ReadingsVal("Schale","nextUpdate",0))[0]},
Zeit { (split ' ',ReadingsVal("Schale","nextUpdate",0))[1]},



Es funktioniert doch mit dem Komma. Ich musste noch einmal von disable auf enable stellen.
Jetzt haut alles hin.  :)

Vielen Dank Otto  ;)
Titel: Antw:Zahl in Text umformen
Beitrag von: MSP am 20 November 2020, 09:21:28
Hallo,

habe ein ähnliches Problem wie Canon.Fritz. Von meiner Wärmepumpe kommen aber mehr als zwei Werte für den Zustand "Brauchwasserstufe"
0 für "Aus"
1 für "Solarbetrieb"
2 für "Verdichterbetrieb"
3 für "Nachheizstufe"
Ich möchte statt der Ziffern den jeweiligen Text in den UserReadings haben.

Bisher funktioniert nur:
Brauchwasserstufe {AttrVal("Mythz","Brauchwasserstufe_sControl",0) eq "0" ? "keine" : "solar_Verdichter_Nachheizen"}

Ich habe leider bisher keinen geeigneten Syntax gefunden, um die von Otto beschriebene Möglichkeit zu erweitern.

Kann mir jemand weiterhelfen?

Danke vorab.

Gruß
Markus
Titel: Antw:Zahl in Text umformen
Beitrag von: Otto123 am 20 November 2020, 09:33:03
Hallo Markus,

zum Test in der Kommandozeile
{my $ret;; my $bws=AttrVal("Mythz","Brauchwasserstufe_sControl",0);; if ($bws eq "0"){$ret="Aus"}if ($bws eq "1"){$ret="Solarbetrieb"}if ($bws eq "2") {$ret="Verdichterbetrieb"}if ($bws eq "3"){$ret="Nachheizstufe"} return $ret}

Für die DEF
Brauchwasserstufe {my $ret; my $bws=AttrVal("Mythz","Brauchwasserstufe_sControl",0); if ($bws eq "0"){$ret="Aus"}if ($bws eq "1"){$ret="Solarbetrieb"}if ($bws eq "2") {$ret="Verdichterbetrieb"}if ($bws eq "3"){$ret="Nachheizstufe"} return $ret}

Eigentlich muss da noch ein Trigger hin, in der Art Brauchwasserstufe:Brauchwasserstufe_sControl.* aber erzeugt denn des setzen des Attributes einen Event?

Edit: Die Methode "zu Fuß" - die folgenden Vorschläge sind viel besser! :D

Gruß Otto
Titel: Antw:Zahl in Text umformen
Beitrag von: TomLee am 20 November 2020, 09:48:13
Ungetestet und keine Zeit zum erkären (könnt ich eh nicht).

So in der Art ist es mMn. übersichtlicher umgesetzt.

Brauchwasserstufe {my $bws=AttrVal("Mythz","Brauchwasserstufe_sControl",0);
my %bws2cmnd = (
'0' => 'Aus',
'1' => 'Solarbetrieb',
'3' => 'Verdichterbetrieb',
'4' => 'Nachheizstufe',
);
my $bwscmd = $bws2cmnd{$bws};
        return $bws;}


Danke Jörg, das ich das mittlerweile verstehe.

Gruß

Thomas
Titel: Antw:Zahl in Text umformen
Beitrag von: betateilchen am 20 November 2020, 10:01:47
das ginge weniger aufwändig auch mit einem array.


  Brauchwasserstufe {
  my $bws=ReadingsVal("Mythz","Brauchwasserstufe_sControl",0);
  my @bws2cmnd = ( 'Aus','Solarbetrieb','Verdichterbetrieb','Nachheizstufe');
  return $bws2cmnd[$bws];
  }





Edit - array korrigiert, weil der Wert für 2 doch vorhanden ist :)

Edit 2: eckige Klammer für array-Element korrigiert

Edit 3: AttrVal() durch ReadingsVal() ersetzt
Titel: Antw:Zahl in Text umformen
Beitrag von: TomLee am 20 November 2020, 11:57:06
Zitatdas ginge weniger aufwändig auch mit einem array.

vorab hol schon mal die Keule raus.

Es dämmert schon leicht, komm bestimmt noch im Laufe des Tages drauf, frag trotzdem jetzt schon.

Was mach ich falsch ?

defmod du_t1 dummy
attr du_t1 devStateIcon .*:nix
attr du_t1 genericDeviceType light
attr du_t1 readingList brightness
attr du_t1 room Test
attr du_t1 setList on off 1 2 3 4
attr du_t1 userReadings Brauchwasserstufe:1|2|3|4 {my $bws=ReadingsVal($name,"state",0);;my @bws2cmnd = ( 'Aus','Solarbetrieb','Verdichterbetrieb','Nachheizstufe');;return $bws2cmnd($bws);;}

setstate du_t1 3
setstate du_t1 2020-11-20 11:50:03 Brauchwasserstufe Error evaluating du_t1 userReading Brauchwasserstufe: Global symbol "$bws2cmnd" requires explicit package name (did you forget to declare "my $bws2cmnd"?) at (eval 123416) line 1.\

setstate du_t1 2020-02-17 18:46:15 brightness 0
setstate du_t1 2020-11-20 11:50:03 state 3
setstate du_t1 2020-04-28 10:10:41 wert1 08:00
Titel: Antw:Zahl in Text umformen
Beitrag von: Beta-User am 20 November 2020, 12:08:31
Na ja, da hier NUR (fortlaufende) Zahlen im Spiel sind, kann man das einfach als Index im Array nutzen und muss nicht den "umständlichen" Weg über Hash-lookup gehen (der universeller ist, weil er auch mit gemischten Ausgangswerten oder Lücken umgehen kann).

So sollte es klappen:
defmod du_t1 dummy
attr du_t1 setList on:noArg off:noArg 1:noArg 2:noArg 3:noArg 4:noArg
attr du_t1 userReadings Brauchwasserstufe:[1-4] {my $bws=ReadingsVal($name,"state",0);;my @bws2cmnd = ( 'Aus','Solarbetrieb','Verdichterbetrieb','Nachheizstufe');;return $bws2cmnd[$bws];;}

setstate du_t1 1
setstate du_t1 2020-11-20 12:05:28 Brauchwasserstufe Solarbetrieb
setstate du_t1 2020-11-20 12:05:28 state 1
Titel: Antw:Zahl in Text umformen
Beitrag von: TomLee am 20 November 2020, 12:36:55
Warum hier plötzlich eckige Klammern, das mein ich bisher noch nicht gesehen/gelesen zu haben, kannst das erklären oder verlinken zum nachlesen ?
Titel: Antw:Zahl in Text umformen
Beitrag von: betateilchen am 20 November 2020, 12:38:41
Zitat von: TomLee am 20 November 2020, 12:36:55
Warum hier plötzlich eckige Klammern, das mein ich bisher noch nicht gesehen/gelesen zu haben, kannst das erklären oder verlinken zum nachlesen ?

Eckige Klammern kennzeichnen ELemente eines array, ich habe das oben (copy&paste Fehler) vergessen, anzupassen. Ist aber jetzt erledigt.
Titel: Antw:Zahl in Text umformen
Beitrag von: TomLee am 20 November 2020, 12:44:13
Zitatdas mein ich bisher noch nicht gesehen/gelesen zu haben

doch hab ich, aber ein Hirn wie ein Spatz  :P

http://www.mathe2.uni-bayreuth.de/perl/GK/arrays.htm#Zugriffsoperator (http://www.mathe2.uni-bayreuth.de/perl/GK/arrays.htm#Zugriffsoperator)
Titel: Antw:Zahl in Text umformen
Beitrag von: MSP am 20 November 2020, 13:04:35
👍 Vielen Dank für die schnellen Antworten, werde ich am WE ausprobieren

Gruß
Markus
Titel: Antw:Zahl in Text umformen
Beitrag von: MSP am 23 November 2020, 08:11:13
Hallo zusammen,

ich habe den ersten Vorschlag von Otto in der Kommandozeile ausprobiert:

{my $ret;; my $bws=AttrVal("Mythz","Brauchwasserstufe_sControl",0);; if ($bws eq "0"){$ret="Aus"}if ($bws eq "1"){$ret="Solarbetrieb"}if ($bws eq "2") {$ret="Verdichterbetrieb"}if ($bws eq "3"){$ret="Nachheizstufe"} return $ret}

--> es kommt immer nur "Aus" zurück, auch wenn der Wert von Brauchwasserstufe_sControl auf "1" steht

Auch wenn ich die userreadings wie vorgeschlagen erweitere:

Brauchwasserstufe {
  my $bws=AttrVal("Mythz","Brauchwasserstufe_sControl",0);
  my @bws2cmnd = ( 'Aus','Solarbetrieb','Verdichterbetrieb','Nachheizstufe');
  return $bws2cmnd[$bws];

--> der Wert bleibt auf "Aus", auch wenn der Wert von Brauchwasserstufe_sControl auf "1" steht

Ein event wird von Brauchwasserstufe_sControl erzeugt.

Noch eine Idee, was nicht passt ?

Danke&Gruß
Markus
Titel: Antw:Zahl in Text umformen
Beitrag von: Beta-User am 23 November 2020, 08:36:47
Du kennst den Unterschied zwischen AttrVal() und ReadingsVal()?

Und bitte bei allen userReadings daran danken, einen trigger zu setzen.

Code-Tags sind auch immer für die Lesbarkeit hilfreich.

Komplett zusammengefasst:

Brauchwasserstufe:Brauchwasserstufe_sControl.* {
  my $bws=ReadingsVal("Mythz","Brauchwasserstufe_sControl",0);
  my @bws2cmnd = ( 'Aus','Solarbetrieb','Verdichterbetrieb','Nachheizstufe');
  return $bws2cmnd[$bws]; }
Titel: Antw:Zahl in Text umformen
Beitrag von: betateilchen am 23 November 2020, 09:11:13
Zitat von: Beta-User am 23 November 2020, 08:36:47
Du kennst den Unterschied zwischen AttrVal() und ReadingsVal()?

Der Fehler ist vermutlich durch copy&paste entstanden, sowohl in meinem Code-Schnipsel oben (da stand auch AttrVal()) als auch jetzt beim Ausprobieren.

Trotzdem sollte der Anwender den Unterschied natürlich kennen :)
Titel: Antw:Zahl in Text umformen
Beitrag von: Otto123 am 23 November 2020, 09:23:05
Ich hatte mit über das AttrVal auch gewundert - aber so ist das wenn man einen Thread kapert und von dem etwas abschreibt was gar keinen Bezug hat  :o
Zitat von: MSP am 20 November 2020, 09:21:28
Bisher funktioniert nur:
Brauchwasserstufe {AttrVal("Mythz","Brauchwasserstufe_sControl",0) eq "0" ? "keine" : "solar_Verdichter_Nachheizen"}
Der Code funktioniert im Fehlerfall ja immer, der Folgende dann nicht mehr:
Brauchwasserstufe {AttrVal("Mythz","Brauchwasserstufe_sControl",2) eq "0" ? "keine" : "solar_Verdichter_Nachheizen"}
Titel: Antw:Zahl in Text umformen
Beitrag von: MSP am 23 November 2020, 16:33:47
Hallo zusammen,

vielen Dank nochmals, die Anzeige ändert sich jetzt, wenn sich der Wert, z.B. von "0" auf "1" ändert

Folgenden Code habe ich den userreadings hinzugefügt

Brauchwasserstufe {\
  my $bws=ReadingsVal("Mythz","Brauchwasserstufe_sControl",0);;\
  my @bws2cmnd = ( 'Aus','Solarbetrieb','Verdichterbetrieb','Nachheizstufe');;\
  return $bws2cmnd[$bws];;\
  }


Das AttrVal() kam durch copy&paste rein.
Im Mythz Modul separiere ich bereits zahlreiche Betriebswerte durch userreadings mit ReadingsVal().

Den Code kann ich jetzt auch gut für die verschiedenen Heizkreisstufen verwenden 👍

Danke&Gruß
Markus
Titel: Antw:Zahl in Text umformen
Beitrag von: Beta-User am 23 November 2020, 16:44:09
Was spricht denn dagegen, einen trigger zu setzen?
Das macht - je nachdem, wie die Readings am Device selbst aktualisiert werden - auch bei den anderen userReadings Sinn, schau einfach mal in den Event-Monitor, dann wird ggf. klarer, warum.
Titel: Antw:Zahl in Text umformen
Beitrag von: betateilchen am 23 November 2020, 17:22:37
Zitat von: Beta-User am 23 November 2020, 16:44:09
Was spricht denn dagegen, einen trigger zu setzen?

Mangelndes Wissen und wenig Verständnis dessen, was man da eigentlich tut, wenn man vorgekaute Lösungen einfach per copy&paste übernimmt.
Titel: Antw:Zahl in Text umformen
Beitrag von: Beta-User am 23 November 2020, 17:28:09
Zitat von: betateilchen am 23 November 2020, 17:22:37
Mangelndes Wissen und wenig Verständnis dessen, was man da eigentlich tut, wenn man vorgekaute Lösungen einfach per copy&paste übernimmt.
Stimmt wohl...

Dachte, ich hätte es c&p-fertig geliefert, aber eben gesehen, dass noch eine schließende Klammer gefehlt hatte (ist nachgezogen) :o .

Na ja, wie dem auch sei, ich schreibs halt hin, bis die Finger bluten, immer in der Hoffnung, dass es jemand liest :'( ...