userReadings mit und. Geht das überhaupt?

Begonnen von edition, 17 Juli 2025, 16:14:52

Vorheriges Thema - Nächstes Thema

edition

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

betateilchen

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

JudgeDredd

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
      }
    }
Router: Eigenbau (pfSense)
FHEM: Proxmox (DELL R720) | Debian 12 (VM)

betateilchen

Aber logische UND Verknüpfungen stellt man meines Wissens mit && dar und nicht mit ,,and"
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

jkriegl

Rpi 3/4, buster, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

edition

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

passibe

#6
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).)