Formatierung der Temeratur und Feuchtigkeitsanzeige

Begonnen von walter56, 11 Juni 2014, 11:59:46

Vorheriges Thema - Nächstes Thema

Vize

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

chq

#16
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
So einfach wie möglich, so kompliziert wie nötig

Morgennebel

Ä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
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

Vize

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

chq

#19
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
So einfach wie möglich, so kompliziert wie nötig

Wzut

#20
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")}
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

chq

#21
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.  ::)
So einfach wie möglich, so kompliziert wie nötig