FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: edition am 17 Juli 2025, 16:14:52

Titel: userReadings mit und. Geht das überhaupt?
Beitrag von: edition am 17 Juli 2025, 16:14:52
Guten Tag

Ich beiße mir gerade die Zähne an einem userReading aus, welches die Windrichtung meines Netatmo Windmessers (wird in Grad angegeben) in Text umwandeln soll. Also größer 0 und kleiner 22.5 soll NNO ergeben und so weiter. Beim testen bin ich erst mal von größer 0 und kleiner 360 ausgegangen, damit in jedem Fall ein Reading erzeugt wird.

userReadings windangle_txt  {if(ReadingsVal("netatmo_M06_00_00_01_ac_e8", "windangle","") >0) and (ReadingsVal("netatmo_M06_00_00_01_ac_e8", "windangle","") <360) {return "N"} else {return -1}
Dabei erhalte ich die Fehlermeldung:

Error evaluating netatmo_M06_00_00_01_ac_e8 userReading windangle_txt: syntax error at (eval 4887280) line 1, near ") and"
Gehen hier etwa keine und Bedingungen?

Gruß
edition
Titel: Aw: userReadings mit und. Geht das überhaupt?
Beitrag von: betateilchen am 17 Juli 2025, 16:28:55
Irgendwo im Forum gab es eine Funktion, die aus einer Gradzahl direkt die Windrichtung zurückgibt. Du musst das Rad nicht neu erfinden.

Natürlich kann man auch in einem userReading mit logischen Verknüpfungen arbeiten, man sollte es halt richtig machen. Auf dem Handy kann ich mir Deinen code gerade nicht vernünftig ansehen.
Titel: Aw: userReadings mit und. Geht das überhaupt?
Beitrag von: JudgeDredd am 17 Juli 2025, 16:29:17
Hi edition,
Warum kein List ?
Warum kein Trigger beim Userreading ?
Warum immer als Textwurst und nichtmal ordentlich formatiert ?

Die Klammersetzung ist falsch und ausserdem unvollständig.

userReadings windangle_txt 
    {
      if( ReadingsVal( 'netatmo_M06_00_00_01_ac_e8', 'windangle', '' ) > 0 && ReadingsVal( 'netatmo_M06_00_00_01_ac_e8', 'windangle', '' ) < 360 ) {
          return 'N'
      } else {
          return -1
      }
    }
Titel: Aw: userReadings mit und. Geht das überhaupt?
Beitrag von: betateilchen am 17 Juli 2025, 16:30:34
Aber logische UND Verknüpfungen stellt man meines Wissens mit && dar und nicht mit ,,and"
Titel: Aw: userReadings mit und. Geht das überhaupt?
Beitrag von: jkriegl am 17 Juli 2025, 16:32:46
Hier gibt es etwas Fertiges
https://forum.fhem.de/index.php?topic=54716.0 (https://forum.fhem.de/index.php?topic=54716.0)
Titel: Aw: userReadings mit und. Geht das überhaupt?
Beitrag von: edition am 17 Juli 2025, 19:43:41
Mit der richtigen Klammersetzung funktioniert es natürlich. Auch als Textwurst ohne ordentliche Formatierung und mit and statt &&!

Die Fehlermeldung ist allerdings auch mehr irreführend als hilfreich. Fehler bei der Auswertung von Netatmo userReading: Syntaxfehler in Zeile 1 neben ") und" soll auf eine zu viel gesetzte Klammer verweisen? Hätte ich in der Schule doch besser aufpassen sollen!

Der Hinweiß von betateilchen und jkriegl, dass es was fertiges gibt, hört sich auch nicht schlecht an. Das werde ich mir ansehen, bevor ich meine Idee vollende. Das wird nämlich ziemlich umfangreich, wenn es fertig ist.

Vielen Dank für die Unterstützung.
edition
Titel: Aw: userReadings mit und. Geht das überhaupt?
Beitrag von: passibe am 17 Juli 2025, 22:57:06
Zitat von: edition am 17 Juli 2025, 19:43:41in Zeile 1 neben ") und" soll auf eine zu viel gesetzte Klammer verweisen
Ja, weil du den Bedingungsteil vom if mit der Klammer nach >0 viel zu früh beendet hast und deshalb das "and" im luftleeren Raum steht. Perl weiß dann nicht, was es mit "and" an der Stelle anfangen soll und schmeißt den Error (erwartet wäre ein { für den Beginn des "code-bei-if"-Teils, siehe sogleich).

Das war nämlich:
{if (BEDINGUNG) and (BEDINGUNG) {code-bei-if} else {code-bei-else}Richtig wäre:
{if (BEDINGUNG and BEDINGUNG) {code-bei-if} else {code-bei-else}}
(Es waren damit sogar zwei Klammern zu viel, nämlich auch die vor dem zweiten ReadingsVal, und es hat auch eine geschweifte Klammer ganz am Ende gefehlt (die, die die allererste geschweifte Klammer vor dem if schließt).)