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
Zeig mal bitte ein list von ESPEasy_esp8266_espeasy03_A2
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
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
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.
ReadingsNum bringt nichts, gibt sowas auch für attribute?
Leerzeichen? Wie? Da ist keins, jedenfalls nicht in den Attributen.
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.
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