FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: walter56 am 11 Juni 2014, 11:59:46

Titel: Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: walter56 am 11 Juni 2014, 11:59:46
Hallo zusammen :)
Ich stehe gerade wieder mal etwas auf dem Schlauch! :-\
Ich verwende das Temeratur Modul HM-WDS40-TH-I dies liefert mir die Temeratur und die relative Feuchtigkeit in dem Format T: 30.9 H: 44
Die Temeraturanzeige habe ich in einer Zeile im Format 30.9°C hinbekommen :). Nur bei der Feuchtigkeit, die ich auch in einer eigenen Zeile haben möchte, habe ich Probleme! Die Anzeige ändert sich nicht dh es findet kein refrech statt ???.

efine wg_Temp CUL_HM 239xxx
attr wg_Temp .devInfo 030100
attr wg_Temp .stc 70
attr wg_Temp IODev COC
attr wg_Temp actCycle 000:15
attr wg_Temp actStatus unknown
attr wg_Temp alias Temperatur Wintergarten
attr wg_Temp autoReadReg 5
attr wg_Temp device_timeout 10
attr wg_Temp expert 2_full
attr wg_Temp firmware 1.3
attr wg_Temp group Wintergarten
attr wg_Temp icon temp_temperature
attr wg_Temp model HM-WDS40-TH-I
attr wg_Temp peerIDs
attr wg_Temp room Wintergarten
attr wg_Temp serialNr KEQ085xxxx
attr wg_Temp stateFormat temperature °C
attr wg_Temp subType THSensor

define wg_Feucht dummy
attr wg_Feucht alias Luftfeuchtigkeit Wintergarten
attr wg_Feucht fm_type state
attr wg_Feucht group Wintergarten
attr wg_Feucht icon temperature_humidity
attr wg_Feucht room Wintergarten
attr wg_Feucht stateFormat {sprintf("%.1f",ReadingsVal("wg_Temp","humidity",0))." %";;}


Scheinbar hängt es an der letzen Zeile? ::)
attr wg_Feucht stateFormat {sprintf("%.1f",ReadingsVal("wg_Temp","humidity",0))." %";;}

Der Wert wird nicht übernommen bzw ändert sich nicht! :-[

Kann mir jemand sagen was ich falsch mache oder wie ich vorgehen kann? :-[


Vielen Dank & Gruß Walter
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: betateilchen am 11 Juni 2014, 12:09:11
stateformat wird nur ausgeführt, wenn sich state des gleichen (!) device ändert. Das ist bei Deinem Feuchtigkeitsdummy niemals der Fall, deshalb wird stateformat nicht aufgerufen.

Eigentlich hast Du doch in den readings Deines Sensors die beiden Messwerte temperature und humidity auch einzeln, da brauchst Du doch nur jeweils die Einheit dahinterschreiben?
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: Elektrolurch am 11 Juni 2014, 12:45:52
oder Du verwendest eine readingsGroup für die Darstellung. Da kannst Du ein- oder mehrzeilig, und über das attr valueFormat Deine Darstellung beliebig gestalten, auch mit Farbe.

Gruß

Elektrolurch
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: betateilchen am 11 Juni 2014, 12:49:29
Dafür braucht man readingsGroup *würg* mit Sicherheit nicht, da es einfach zwei readings ein und desselben Devices sind.

Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: justme1968 am 11 Juni 2014, 13:23:59
stateFormat wird immer dann ausgewertet wenn sich ein beliebiges reading desjenigen device ändert für das stateFormat definiert ist. nicht nur state. aber eben nicht device übergreifend.

wenn die anforderung ist in der raum ansicht beide readings untereinander jeweils auf einer eigenen zeile darzustellen geht das entweder über dummys und notify (nicht stateFormat!, oder readingsProxy, aber das läuft hier auf das gleiche raus) oder eben readingsGroup. und über keinen anderen weg. auch wenn beide readings zum gleichen device gehören.

dummys und werte hin und her kopieren ist in der regel keine gute lösung. schau dir readingsGroup an. die meisten schaffen das ganz ohne vomex.

gruss
  andre

ps: ein weblink mit rss bildchen beider werte zählt nicht.
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: Bennemannc am 11 Juni 2014, 13:33:13
Hallo,

also ich nutze die Readings vom device selber und mache nur ein stateFormat "Temperatur: temperature °C <br> Feuchtigkeit: humidity %".
Das <br> macht einen Zeilenumbruch - dass das bei stateFormat geht hat mich selbst ein wenig überrascht, aber das geht super.
Alternative ist ein cloneDummy und dann da jeweils mit stateFormat das entsprechende Reading formatieren.

Gruß Christoph
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: walter56 am 11 Juni 2014, 14:00:12
Hallo zusammen :)

Hallo betateilchen:
Erst mal Danke für die schnelle Antwort :D, auch wenn ich nicht alles verstanden habe! ???
Zitatstateformat wird nur ausgeführt, wenn sich state des gleichen (!) device ändert. Das ist bei Deinem Feuchtigkeitsdummy niemals der Fall, deshalb wird stateformat nicht aufgerufen
Ist OK leuchtet nach etwas nachdenen ein! ;)  Aber die den zweiten Satz bekomme ich nicht ganz auf die Reihe.  :-[ Wo und wie soll ich was dahinterschreiben? :-\

Zu readingsGroup: Ich werde mir das mal ausführlich anschauen, im Wiki ist das erstmal zuviel Info da brauche ich etwas Zeit. (Scheint eine mächtige Funktion zu sein!) ::)

Hallo Bennemannc: Dies läuchtet mir ein. Passt aber nicht ganz zu meiner restlichen Formatierung! Ich habe es eben mal ausprobiert! Sonst wäre dies die beste Lösung! ;)
Gruß Walter
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: Bennemannc am 11 Juni 2014, 14:41:13
Hallo Walter,

bleibt ja noch die zweite angegebene Möglichkeit mit cloneDummy. Das cloned das Device mit allen Readings. Beim Original dann "stateFormat Temperatur: temperature °C" und beim clone "stateFormat Feuchtigkeit: humidity %". Für den Clone kann ich auch ein eigenes Icon wählen - eben alles machen, was auch am original möglich ist.
Ich arbeite mit clonedummy für andere Gruppierungen im Dashboard.

Gruß Christoph
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: justme1968 am 11 Juni 2014, 14:42:55
das kopieren von readings ist unnötiger overhead und sollte vermieden werden wenn immer es geht.

gruss
  andre
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: chq am 12 Juli 2018, 07:30:06
Zitat von: betateilchen am 11 Juni 2014, 12:49:29
Dafür braucht man readingsGroup *würg* mit Sicherheit nicht, da es einfach zwei readings ein und desselben Devices sind.

Bedeutet das im Umkehrschluss, dass man einen Zeilensprung innerhalb von stateFormat definieren kann?

Gruß Chris
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: fiedel am 12 Juli 2018, 12:55:46
Zitat von: chq am 12 Juli 2018, 07:30:06
Bedeutet das im Umkehrschluss, dass man einen Zeilensprung innerhalb von stateFormat definieren kann?

Gruß Chris

Laut diesem Post (https://forum.fhem.de/index.php/topic,24473.msg175912.html#msg175912) sollte das so sein.
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: chq am 13 Juli 2018, 07:47:30
Ok, das funktioniert.

Was ich noch immer leider nicht hinbekommen habe ist, bei der Temperaturanzeige den Punkt durch ein Komma zu ersetzen.

Aktuelles stateFormat:

{sprintf("%.1f"."°",ReadingsVal("Zahnbuerste","AM2301_Temperature",0))}

Gruß Chris
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: Vize am 13 Juli 2018, 08:20:11
Moin,

kuckst du z.B. ab hier (https://forum.fhem.de/index.php/topic,51471.msg449064.html#msg449064)...

Gruß,
Andreas
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: chq am 13 Juli 2018, 13:02:53
Danke.

Werd's mal hiermit probieren und berichten:

{sprintf("%.1f"."°",ReadingsVal("Zahnbuerste","AM2301_Temperature",0)); $val =~ s/\./,/; return $val;}

Gruß Chris
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: chq am 13 Juli 2018, 20:04:16
Das war wohl nix.  :-\

Global symbol "$val" requires explicit package name (did you forget to declare "my $val"?) at (eval 31427) line 1.

Hm.
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: Vize am 13 Juli 2018, 20:21:14
Zitat von: chq am 13 Juli 2018, 20:04:16
(did you forget to declare "my $val"?) at (eval 31427) line 1.

Das sollte der passende Hinweis in der Fehlermeldung für dich sein.  ;)

VG
Andreas
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: chq am 13 Juli 2018, 21:17:33
Gut.

Ich bin kein Programmierer, wir befinden uns im Anfängerforum und englisch verstehe ich.

Irgendwas wurde nicht deklariert. Ne Variable, oder was weiss ich.

Kann ein wenig Arduinoesisch. Das war's dann aber auch.

Wenn es so kompliziert ist, einen Punkt durch ein Komma zu ersetzen, muss ich meine Wahl der Hausautomation evtl. doch noch einmal überdenken; aber bisher war ich eigentlich in Summe ganz angetan.

Trotzdem danke für den Hinweis.

Gruß Chris
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: Morgennebel am 13 Juli 2018, 23:25:11
Ändere doch einfach Deine Erwartungshaltung und freunde Dich mit dem "." als Trenner an.

Wenn es daran scheitert, wird FHEM nichts für Dich...

Ciao, -MN
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: Vize am 14 Juli 2018, 16:40:23
Zitat von: chq am 13 Juli 2018, 21:17:33
Ich bin kein Programmierer, wir befinden uns im Anfängerforum und englisch verstehe ich.

Das alles trifft auf mich auch zu...na gut, Englisch verstehe ich schon ganz gut...

Aber mit ein bischen Einsatz, Stöbern im Forum usw. kriegt man schonmal vieles hin.
Wenn man FHEM nutzen will, muss man schon ein wenig Hirnschmalz einsetzen und auch viel Hand anlegen. Ein paar Perl-Grundlagen schaden sicherlich auch nicht. Ist eben nicht Klicki-Bunti-out-of-the-Box...  ;)

Kriegt man alles per fertigen code vorgesetzt, lernt man auch nix dabei.

Eine mögliche Lösung findest du im post #10 aus meinem link. Dort wird der "Umweg" über ein userReading gezeigt.
In post #14 stehen auch hilfreiche Hinweise.

Ich weiß aber grad nicht, ob man das 1:1 per stateFormat so umsetzen kann.

Dranbleiben!

Viel Erfolg,
Andreas
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: chq am 20 Juli 2018, 17:58:14
Hallo,

ich habe die Thematik sich ein wenig setzen lassen und bin nochmals an die Sache ran.

Nach Verarbeitung sämtlicher Informationen kam ich zu folgendem Schluss:

1. Ich gehe davon aus, dass wenn ich einen Punkt innerhalb eines Readings in ein Komma ändern möchte, ich den Umweg über user Readings gehen muss.
2. Bzgl. der Reihenfolge der einzelnen Schritt gehe ich von Folgendem aus:

2.1 Einlesen via Device und Erzeugung eines Readings
2.2 "Umformen" des Readings in ein "eigenes Reading" (userReading)
2.3 Einbau des userReadings via stateFormat

Punkt 2.1 ist gelöst.
Punkt 2.2 stell ich mir wie folgt vor:

attr Zahnbuerste userReadings userReadingsTemperatur { my $val = (ReadingsVal("Zahnbuerste","AM2301_Temperature",0)); $val =~ s/\./,/; return $val;}

Was das "my" machen soll verstehe ich nicht und kann es auch zu Einführungen in Perl nicht finden, vermute jedoch, dass es da hingehört.

Punkt 2.3. bekomme ich aufgrund folgender Probleme nicht gelöst:

1. Fehlende Syntax von stateFormat in der Commandref
2. Auch im FHEM Wiki kann ich hierzu leider keine passende Erklärung finden.
3. Warum der Umweg über userReadings gemacht werden muss verstehe ich nicht und set magic verwirrt zusätzlich.

Gruß Chris
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: Wzut am 20 Juli 2018, 20:50:23
Zitat von: chq am 20 Juli 2018, 17:58:14
Punkt 2.3. bekomme ich aufgrund folgender Probleme nicht gelöst:
So kurz vor dem Ziel und dann aufgeben ?
Deine Codezeile sollte dir doch schon jetzt ein neues Reading mit dem Namen userReadingsTemperatur und einem Wert mit Komma liefern ?
dann fehlt dir doch nur noch das nach state zu übernehmen :
attr Zahnbuerste stateFormat userReadingsTemperatur
kannst dann noch beliebigen Text anhängen zum verschönern :
attr Zahnbuerste stateFormat userReadingsTemperatur °C
und damit es nicht langweilig wird , es geht sogar ganz ohne zusätzliches userReading :
attr Zahnbuerste stateFormat {my $val = (ReadingsVal("Zahnbuerste","AM2301_Temperature",0)); $val =~ s/\./,/; return $val;}
und wenn du noch mehr Geräte umbiegen willst und etwas Tipparbeit sparen willst wirf den Device Namen raus und ersetze ihn duch $name
attr Zahnbuerste stateFormat {my $val = (ReadingsVal($name,"AM2301_Temperature",0)); $val =~ s/\./,/; return $val;}
und wenn es dann noch mehr Geräte werden : eigene sub in der 99_myUtils.pm , dann wird es noch kürzer :
attr Zahnbuerste stateFormat {KommaTemp($name,"AM2301_Temperature")}
Titel: Antw:Formatierung der Temeratur und Feuchtigkeitsanzeige
Beitrag von: chq am 20 Juli 2018, 21:13:07
Zitat von: Wzut am 20 Juli 2018, 20:50:23Deine Codezeile sollte dir doch schon jetzt ein neues Reading mit dem Namen userReadingsTemperatur und einem Wert mit Komma liefern ?

Nein, leider nicht. Konnte es leider jetzt erst ausprobieren.

Gruß Chris

Edit: Kommando zurück! Es geht doch. Es musste (natürlich) erst das entsprechende Reading reinkommen, damit übersetzt werden kann. So. Nun zieh ich mir noch Deine Infos rein. Das wird ein riesen Spass, dass alles zusammenzufassen, so dass ich das dann auch noch blick, wenn ich mal richtig alt und tattrig bin.  ::)