Hauptmenü

Zahl in Text umformen

Begonnen von Canon.Fritz, 05 April 2018, 20:40:49

Vorheriges Thema - Nächstes Thema

Canon.Fritz

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.
FHEM auf Raspberry3, Betriebssystem Raspberry Pi OS, diverse Wemos D1 mini Boards, Sonoff S20, Shellys

Otto123

#1
Eventuell so:
userReadings Zustand {AttrVal("Name vom WeekdayTimer","disable",0) eq "1" ? "deaktiviert" : "aktiviert"}
Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Canon.Fritz

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

FHEM auf Raspberry3, Betriebssystem Raspberry Pi OS, diverse Wemos D1 mini Boards, Sonoff S20, Shellys

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Canon.Fritz

Brachte keine Änderung als ich es weggenommen habe.
FHEM auf Raspberry3, Betriebssystem Raspberry Pi OS, diverse Wemos D1 mini Boards, Sonoff S20, Shellys

Canon.Fritz

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  ;)
FHEM auf Raspberry3, Betriebssystem Raspberry Pi OS, diverse Wemos D1 mini Boards, Sonoff S20, Shellys

MSP

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

Otto123

#7
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

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

betateilchen

#9
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
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

#10
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

Beta-User

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
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

TomLee

Warum hier plötzlich eckige Klammern, das mein ich bisher noch nicht gesehen/gelesen zu haben, kannst das erklären oder verlinken zum nachlesen ?

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

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