FHEM Forum

FHEM => Sonstiges => Thema gestartet von: ext23 am 15 Juni 2019, 10:06:39

Titel: kleines perl Problem mit if
Beitrag von: ext23 am 15 Juni 2019, 10:06:39
Moin,

ich stehe gerade etwas auf dem Schlauch. Die If Anweisung wird jedes mal true obwohl es mathematisch false sein müsste.
ReadingsVal("ESPEasy_esp8266_espeasy03_A2","Analog","0") liefert 2.04 und
AttrVal("ESPEasy_esp8266_espeasy03_A2","Schwellwert_feucht","0") liefert 2.0

Das cast macht perl doch automatisch oder? Also selbst wenn das strings sind sollte er die doch da als float oder sowas erkennen oder?

# Bucht 3
if (ReadingsVal("ESPEasy_esp8266_espeasy03_A2","Analog","0") < AttrVal("ESPEasy_esp8266_espeasy03_A2","Schwellwert_feucht","0"))
{
# Ventil schließen
fhem( "set HM_IO_04 datapoint 3.STATE zu" );
}
elsif (ReadingsVal("ESPEasy_esp8266_espeasy03_A2","Analog","0") > AttrVal("ESPEasy_esp8266_espeasy03_A2","Schwellwert_trocken","0"))
{
# Ventil öffnen
fhem( "set HM_IO_04 datapoint 3.STATE auf" );
}


/Daniel
Titel: Antw:kleines perl Problem mit if
Beitrag von: CoolTux am 15 Juni 2019, 10:11:06
Zeig mal bitte ein list von ESPEasy_esp8266_espeasy03_A2
Titel: Antw:kleines perl Problem mit if
Beitrag von: MadMax-FHEM am 15 Juni 2019, 10:14:23
Wenn du sicher gehen willst, nimm ReadingsNum...

Und poste doch mal ein list von dem ESPEasy_esp8266_espeasy03_A2...

EDIT: ;)

Ansonsten bleibt das wohl Ratestunde...

Wo/wie kommt das if zum Einsatz?

Notify, DOIF, myUtils, ...

Du kannst die Werte auch erst mal jeweils in Variablen "schreiben" und dann auch loggen lassen, dann kannst du prüfen wie wo was verglichen wird...

Gruß, Joachim

Gruß, Joachim
Titel: Antw:kleines perl Problem mit if
Beitrag von: ext23 am 15 Juni 2019, 10:18:19
Das ist in einem AT drin, also ein Timer. Irgend was muss ich doch da übersehen verdammt.

Internals:
   DEF        192.168.0.76 80 espBridge esp8266_espeasy03_A2
   ESP_BUILD  20102
   ESP_BUILD_GIT mega-20180503
   ESP_BUILD_NOTES  - Mega
   ESP_NODE_TYPE_ID ESP Easy Mega
   ESP_SLEEP  0
   ESP_UNIT   3
   ESP_VERSION 2
   FUUID      5c4aea31-f33f-2323-e74d-eee3d8898bfbd6a2
   HOST       192.168.0.76
   IDENT      esp8266_espeasy03_A2
   INTERVAL   300
   IODev      espBridge
   LASTInputDev espBridge
   MAX_CMD_DURATION 1
   MSGCNT     2103
   NAME       ESPEasy_esp8266_espeasy03_A2
   NOTIFYDEV  global
   NR         2396
   NTFY_ORDER 50-ESPEasy_esp8266_espeasy03_A2
   PORT       80
   STATE      Ana: 2.05
   SUBTYPE    device
   TYPE       ESPEasy
   VERSION    2.18
   espBridge_MSGCNT 2103
   espBridge_TIME 2019-06-15 10:15:27
   Helper:
     DBLOG:
       Analog:
         logdb:
           TIME       1560586527.86111
           VALUE      2.05
   READINGS:
     2019-06-15 10:15:27   Analog          2.05
     2019-06-15 10:11:13   presence        present
     2019-06-15 10:15:27   state           Ana: 2.05
   helper:
     fpc        1560460384.45634
     pm:
       Encode     1
       JSON       1
     received:
       Analog     1560586527.85721
   sec:
     admpwd     
Attributes:
   DbLogInclude Analog
   IODev      espBridge
   Interval   300
   Schwellwert_feucht 2.0
   Schwellwert_trocken 2.1
   alias      Bucht03
   group      ESPEasy Device
   presenceCheck 1
   readingSwitchText 1
   room       Balkon
   setState   3
   userattr   Schwellwert_trocken Schwellwert_feucht
Titel: Antw:kleines perl Problem mit if
Beitrag von: CoolTux am 15 Juni 2019, 10:30:48
Du kannst es mit ReadingsNum probieren, und zusätzlich Logausgaben einbauen die Ausgaben machen generell und nach extra Bedingungsabfragen.

Schwellwert_trocken 2.1
Da ist ein Leerzeichen zwischen . und 1 wird also schon mal als String erkannt nicht als Zahl.
Titel: Antw:kleines perl Problem mit if
Beitrag von: ext23 am 15 Juni 2019, 10:35:29
ReadingsNum bringt nichts, gibt sowas auch für attribute?

Leerzeichen? Wie? Da ist keins, jedenfalls nicht in den Attributen.
Titel: Antw:kleines perl Problem mit if
Beitrag von: CoolTux am 15 Juni 2019, 10:42:07
Zitat von: ext23 am 15 Juni 2019, 10:35:29
ReadingsNum bringt nichts, gibt sowas auch für attribute?

Leerzeichen? Wie? Da ist keins, jedenfalls nicht in den Attributen.

Mir nicht bekannt das es sowas für Attribute gibt. Wenn Du sagst im Wert für das Attribut
Schwellwert_trocken ist kein Leerzeichen dann muss ich Dir das glauben.

Dann mach das ganze doch erstmal in der Kommandozeile von FHEMWEB und lass dir irgendwas zurück geben wenn die Bedingung passt.

{ if (ReadingsNum('ESPEasy_esp8266_espeasy03_A2','Analog',0) < AttrVal('ESPEasy_esp8266_espeasy03_A2','Schwellwert_feucht',0)) { return 'jepp' } else { Return 'nope' } }

Aber als erstes solltest du einmal von Hand schauen was Deine Funktionen genau Auslesen. Also ReadingsNum und AttrVal. Das einfach mal in FHEMWEB auslesen.
Titel: Antw:kleines perl Problem mit if
Beitrag von: ext23 am 15 Juni 2019, 10:45:06
Hatte ich alles schon gemacht und das hat soweit gepasst. Aber OK, erstmal vielen Dank. Ich schau nochmal das Timer script durch, irgendwo muss ich da gepennt haben an einer stelle. Ich werd mal ein paar Log ausgaben einbauen, das ist eine gute Idee, danke.

/Daniel