Hallo,
wer kann mir dieses Verhalten in einem doif unter Fhem erklären.
Ich vergleiche die Lamellenstellung meines Raffstores (HmIP-BBL-2 - HMCCUDEV) mit einen festen Sollwert in einem doif im Perlmodus, obwohl beide Zahlen anscheinend identisch sind, wird der Vergleich als ungleich erkannt.
Gibt es eine Möglichkeit die Zahlen irgendwo im Rohwert darzustellen, denn irgendwie müssen sich diese ja unterscheiden, sonst wäre ja der Vergleich in Perl korrekt.
Anbei ein list vom Rollodevice, mit dem entsprechenden Reading (pct), so wie dieses aktuell datgestellt wird:
Internals:
DEF 0036E0C9AEC667 sd=3.LEVEL cd=4.LEVEL
FUUID 6697c185-f33f-7df9-238c-47e20402ac5c8222
IODev CCU2
NAME OG_RA01_BueroReinhard_3
NR 580
STATE 50
TYPE HMCCUDEV
ccuaddr 0036E0C9AEC667
ccudevstate active
ccuif HmIP-RF
ccuname OG_RA01_BueroReinhard
ccurolectrl BLIND_VIRTUAL_RECEIVER
ccurolestate BLIND_TRANSMITTER
ccusubtype BBL
ccutype HmIP-BBL-2
eventCount 96
firmware 1.10.16
readonly no
READINGS:
2025-03-19 10:21:17 0.ACTUAL_TEMPERATURE 25.0
2025-03-19 10:21:17 0.ACTUAL_TEMPERATURE_STATUS NORMAL
2025-03-19 10:35:07 0.CONFIG_PENDING false
2025-03-19 10:35:07 0.DUTY_CYCLE false
2025-03-19 10:21:17 0.ERROR_CODE 0
2025-03-19 10:21:17 0.ERROR_OVERHEAT false
2025-03-19 10:21:17 0.ERROR_OVERLOAD false
2025-03-19 10:35:07 0.RSSI_DEVICE -74
2025-03-19 10:34:44 0.RSSI_PEER -87
2025-03-19 10:35:07 0.UNREACH alive
2025-03-19 10:35:08 3.ACTIVITY_STATE STABLE
2025-03-19 10:35:08 3.LEVEL 50
2025-03-19 10:35:08 3.LEVEL_2 29
2025-03-19 10:35:08 3.LEVEL_2_STATUS NORMAL
2025-03-19 10:35:08 3.LEVEL_STATUS NORMAL
2025-03-19 10:35:08 3.PROCESS STABLE
2025-03-19 10:35:08 3.SECTION
2025-03-19 10:35:08 3.SECTION_STATUS UNKNOWN
2025-03-01 17:46:04 3.SELF_CALIBRATION_RESULT true
2025-03-19 10:35:08 4.ACTIVITY_STATE STABLE
2025-03-19 10:35:08 4.LEVEL 50
2025-03-19 10:35:08 4.LEVEL_2 29
2025-03-19 10:35:08 4.LEVEL_2_STATUS NORMAL
2025-03-19 10:35:08 4.LEVEL_STATUS NORMAL
2025-03-19 10:35:08 4.PROCESS STABLE
2025-03-19 10:35:08 4.SECTION 4
2025-03-19 10:35:08 4.SECTION_STATUS NORMAL
2025-03-18 12:04:04 IODev CCU2
2025-03-19 10:35:07 activity alive
2025-03-19 10:35:08 control 50
2025-03-19 10:35:08 devstate ok
2025-03-19 10:35:08 hmstate 50
2025-03-19 10:35:08 level 50
2025-03-19 10:21:17 measured-temp 25.0
2025-03-19 10:35:08 pct 50
2025-03-19 10:35:08 pctSlats 29
2025-03-19 10:35:07 rssidevice -74
2025-03-19 10:34:44 rssipeer -87
2025-03-19 10:35:08 state 50
hmccu:
channels 8
defCDP 4.LEVEL
defSDP 3.LEVEL
detect 0
devspec 0036E0C9AEC667
forcedev 0
nodefaults 1
role 0:MAINTENANCE,1:KEY_TRANSCEIVER,2:KEY_TRANSCEIVER,3:BLIND_TRANSMITTER,4:BLIND_VIRTUAL_RECEIVER,5:BLIND_VIRTUAL_RECEIVER,6:BLIND_VIRTUAL_RECEIVER,7:BLIND_WEEK_PROFILE
setDefaults 0
cmdlist:
get
set pct oldLevel:noArg down stop:noArg up close:noArg allLevels openSlats:noArg closeSlats:noArg open:noArg toggle:noArg pctSlats
control:
chn 4
dpt LEVEL
dp:
0.ACTUAL_TEMPERATURE:
VALUES:
NVAL 25.0
ONVAL 26.0
OSVAL 26.0
OVAL 26.0
SVAL 25.0
VAL 25.0
0.ACTUAL_TEMPERATURE_STATUS:
VALUES:
NVAL 0
SVAL NORMAL
VAL 0
0.CONFIG_PENDING:
VALUES:
NVAL 0
SVAL false
VAL 0
0.DUTY_CYCLE:
VALUES:
NVAL 0
SVAL false
VAL 0
0.ERROR_CODE:
VALUES:
NVAL 0
SVAL 0
VAL 0
0.ERROR_OVERHEAT:
VALUES:
NVAL 0
SVAL false
VAL 0
0.ERROR_OVERLOAD:
VALUES:
NVAL 0
SVAL false
VAL 0
0.RSSI_DEVICE:
VALUES:
NVAL -74
ONVAL -81
OSVAL -81
OVAL -81
SVAL -74
VAL -74
0.RSSI_PEER:
VALUES:
NVAL -87
ONVAL -78
OSVAL -78
OVAL -78
SVAL -87
VAL -87
0.UNREACH:
VALUES:
NVAL 0
SVAL alive
VAL 0
3.ACTIVITY_STATE:
VALUES:
NVAL 3
ONVAL 2
OSVAL DOWN
OVAL 2
SVAL STABLE
VAL 3
3.LEVEL:
VALUES:
NVAL 50
ONVAL 98.5
OSVAL 98.5
OVAL 0.985
SVAL 50
VAL 0.5
3.LEVEL_2:
VALUES:
NVAL 29
ONVAL 54
OSVAL 54
OVAL 0.54
SVAL 29
VAL 0.29
3.LEVEL_2_STATUS:
VALUES:
NVAL 0
SVAL NORMAL
VAL 0
3.LEVEL_STATUS:
VALUES:
NVAL 0
SVAL NORMAL
VAL 0
3.PROCESS:
VALUES:
NVAL 0
ONVAL 1
OSVAL NOT_STABLE
OVAL 1
SVAL STABLE
VAL 0
3.SECTION:
VALUES:
NVAL
SVAL
VAL
3.SECTION_STATUS:
VALUES:
NVAL 1
SVAL UNKNOWN
VAL 1
4.ACTIVITY_STATE:
VALUES:
NVAL 3
ONVAL 2
OSVAL DOWN
OVAL 2
SVAL STABLE
VAL 3
4.LEVEL:
VALUES:
NVAL 50
ONVAL 100
OSVAL open
OVAL 1.0
SVAL 50
VAL 0.5
4.LEVEL_2:
VALUES:
NVAL 29
ONVAL 100
OSVAL 100
OVAL 1.0
SVAL 29
VAL 0.29
4.LEVEL_2_STATUS:
VALUES:
NVAL 0
SVAL NORMAL
VAL 0
4.LEVEL_STATUS:
VALUES:
NVAL 0
SVAL NORMAL
VAL 0
4.PROCESS:
VALUES:
NVAL 0
ONVAL 1
OSVAL NOT_STABLE
OVAL 1
SVAL STABLE
VAL 0
4.SECTION:
VALUES:
NVAL 4
ONVAL 3
OSVAL 3
OVAL 3
SVAL 4
VAL 4
4.SECTION_STATUS:
VALUES:
NVAL 0
SVAL NORMAL
VAL 0
5.ACTIVITY_STATE:
VALUES:
NVAL 3
SVAL STABLE
VAL 3
5.LEVEL:
VALUES:
NVAL 0
SVAL closed
VAL 0.0
5.LEVEL_2:
VALUES:
NVAL 0
SVAL 0
VAL 0.0
5.LEVEL_2_STATUS:
VALUES:
NVAL 0
SVAL NORMAL
VAL 0
5.LEVEL_STATUS:
VALUES:
NVAL 0
SVAL NORMAL
VAL 0
5.PROCESS:
VALUES:
NVAL 0
SVAL STABLE
VAL 0
5.SECTION:
VALUES:
NVAL 0
SVAL 0
VAL 0
5.SECTION_STATUS:
VALUES:
NVAL 0
SVAL NORMAL
VAL 0
6.ACTIVITY_STATE:
VALUES:
NVAL 3
SVAL STABLE
VAL 3
6.LEVEL:
VALUES:
NVAL 0
SVAL closed
VAL 0.0
6.LEVEL_2:
VALUES:
NVAL 0
SVAL 0
VAL 0.0
6.LEVEL_2_STATUS:
VALUES:
NVAL 0
SVAL NORMAL
VAL 0
6.LEVEL_STATUS:
VALUES:
NVAL 0
SVAL NORMAL
VAL 0
6.PROCESS:
VALUES:
NVAL 0
SVAL STABLE
VAL 0
6.SECTION:
VALUES:
NVAL 0
SVAL 0
VAL 0
6.SECTION_STATUS:
VALUES:
NVAL 0
SVAL NORMAL
VAL 0
7.WEEK_PROGRAM_CHANNEL_LOCKS:
VALUES:
NVAL 0
SVAL 0
VAL 0
roleChannels:
BLIND_TRANSMITTER 3
BLIND_VIRTUAL_RECEIVER 4,5,6
BLIND_WEEK_PROFILE 7
KEY_TRANSCEIVER 1,2
MAINTENANCE 0
roleCmds:
get:
set:
allLevels:
channel 4
ps VALUES
role BLIND_VIRTUAL_RECEIVER
rpc 0
subcount 2
syntax V:LEVEL_2:?slatLevel V:LEVEL:?blindLevel
usage allLevels slatLevel blindLevel
subcmd:
000:
args
dpt LEVEL_2
fnc
max 1.01
min 0.0
parname slatLevel
partype 2
ps VALUES
scn 000
type FLOAT
unit 100%
001:
args
dpt LEVEL
fnc
max 1.01
min 0.0
parname blindLevel
partype 2
ps VALUES
scn 001
type FLOAT
unit 100%
close:
channel 4
ps VALUES
role BLIND_VIRTUAL_RECEIVER
rpc 0
subcount 1
syntax V:LEVEL:0
usage close
subcmd:
000:
args 0
dpt LEVEL
fnc
max 1.01
min 0.0
parname LEVEL
partype 3
ps VALUES
scn 000
type FLOAT
unit 100%
closeSlats:
channel 4
ps VALUES
role BLIND_VIRTUAL_RECEIVER
rpc 0
subcount 2
syntax V:LEVEL_2:0 V:LEVEL:1.005
usage closeSlats
subcmd:
000:
args 0
dpt LEVEL_2
fnc
max 1.01
min 0.0
parname LEVEL_2
partype 3
ps VALUES
scn 000
type FLOAT
unit 100%
001:
args 1.005
dpt LEVEL
fnc
max 1.01
min 0.0
parname LEVEL
partype 3
ps VALUES
scn 001
type FLOAT
unit 100%
down:
channel 4
ps VALUES
role BLIND_VIRTUAL_RECEIVER
rpc 0
subcount 1
syntax V:LEVEL:?delta=-20
usage down [delta]
subcmd:
000:
args -20
dpt LEVEL
fnc
max 1.01
min 0.0
parname delta
partype 2
ps VALUES
scn 000
type FLOAT
unit 100%
oldLevel:
channel 4
ps VALUES
role BLIND_VIRTUAL_RECEIVER
rpc 0
subcount 1
syntax V:LEVEL:1.005
usage oldLevel
subcmd:
000:
args 1.005
dpt LEVEL
fnc
max 1.01
min 0.0
parname LEVEL
partype 3
ps VALUES
scn 000
type FLOAT
unit 100%
open:
channel 4
ps VALUES
role BLIND_VIRTUAL_RECEIVER
rpc 0
subcount 1
syntax V:LEVEL:100
usage open
subcmd:
000:
args 100
dpt LEVEL
fnc
max 1.01
min 0.0
parname LEVEL
partype 3
ps VALUES
scn 000
type FLOAT
unit 100%
openSlats:
channel 4
ps VALUES
role BLIND_VIRTUAL_RECEIVER
rpc 0
subcount 2
syntax V:LEVEL_2:100 V:LEVEL:1.005
usage openSlats
subcmd:
000:
args 100
dpt LEVEL_2
fnc
max 1.01
min 0.0
parname LEVEL_2
partype 3
ps VALUES
scn 000
type FLOAT
unit 100%
001:
args 1.005
dpt LEVEL
fnc
max 1.01
min 0.0
parname LEVEL
partype 3
ps VALUES
scn 001
type FLOAT
unit 100%
pct:
channel 4
ps VALUES
role BLIND_VIRTUAL_RECEIVER
rpc 0
subcount 1
syntax V:LEVEL:?level
usage pct level
subcmd:
000:
args
dpt LEVEL
fnc
max 1.01
min 0.0
parname level
partype 2
ps VALUES
scn 000
type FLOAT
unit 100%
pctSlats:
channel 4
ps VALUES
role BLIND_VIRTUAL_RECEIVER
rpc 0
subcount 2
syntax V:LEVEL_2:?level V:LEVEL:1.005
usage pctSlats level
subcmd:
000:
args
dpt LEVEL_2
fnc
max 1.01
min 0.0
parname level
partype 2
ps VALUES
scn 000
type FLOAT
unit 100%
001:
args 1.005
dpt LEVEL
fnc
max 1.01
min 0.0
parname LEVEL
partype 3
ps VALUES
scn 001
type FLOAT
unit 100%
stop:
channel 4
ps VALUES
role BLIND_VIRTUAL_RECEIVER
rpc 0
subcount 1
syntax V:STOP:1
usage stop
subcmd:
000:
args 1
dpt STOP
fnc
max 1
min 0
parname STOP
partype 3
ps VALUES
scn 000
type ACTION
unit
toggle:
channel 4
ps VALUES
role BLIND_VIRTUAL_RECEIVER
rpc 0
subcount 1
syntax V:LEVEL:0,100
usage toggle
subcmd:
000:
args 0,100
dpt LEVEL
fnc
max 1.01
min 0.0
parname LEVEL
partype 3
ps VALUES
scn 000
type FLOAT
unit 100%
up:
channel 4
ps VALUES
role BLIND_VIRTUAL_RECEIVER
rpc 0
subcount 1
syntax V:LEVEL:?delta=+20
usage up [delta]
subcmd:
000:
args +20
dpt LEVEL
fnc
max 1.01
min 0.0
parname delta
partype 2
ps VALUES
scn 000
type FLOAT
unit 100%
state:
chn 3
dpt LEVEL
Attributes:
DbLogExclude .*
Devicename OG Sportzimmer - Raffstore Aktor
alias OG_RA01_Sportzimmer
ccuflags showDeviceReadings
ccureadingfilter 0,1,2,3,4..*
cmdIcon open:fts_shutter_up stop:fts_shutter_manual close:fts_shutter_down
comment Set Befehle:
set OG_RA01_BueroReinhard_3 allLevels slatLevel blindLevel - Beispiel set OG_RA01_BueroReinhard_3 allLevels 100 100 ## Raffstore fährt komplett nach oben
event-on-change-reading .*
group Beschattung,HmIP-Device
icon fts_shutter_50
room OG_Sportzimmer
substexcl pct
userattr Devicename
webCmd pct:open:close:stop
widgetOverride pct:slider,0,10,100
Im Anhang noch ein list vom Test doif, in welchen der Vergleich als ungleich erkannt wird, obwohl anscheinend beide Zahlen gleich sind, die Ergebnisse des Vergleichs sind in den Readings Ergebnis_x enthalten:
Internals:
CFGFN
DEF {
my $Iw_Lamellen = [OG_RA01_BueroReinhard_3:pctSlats];
my $Sw_Lamellen = 29;
##
#################################################################################
######################### Vergleich Raffstore Lamellen ##########################
#################################################################################
##
if ($Iw_Lamellen != $Sw_Lamellen and [OG_RA01_BueroReinhard_3:4.PROCESS] eq "STABLE") {
set_Reading("Ergebnis_1","Istwert Lamellen: $Iw_Lamellen ungleich Sollwert Lamellen: $Sw_Lamellen",0);
if ($Iw_Lamellen < $Sw_Lamellen) {
set_Reading("Ergebnis_2","Istwert Lamellen: $Iw_Lamellen kleiner Sollwert Lamellen: $Sw_Lamellen",0);
if ($Iw_Lamellen < 28.99999999999) {
set_Reading("Ergebnis_3","Istwert Lamellen: $Iw_Lamellen kleiner Sollwert Lamellen: 28.99999999999",0);
}
if ($Iw_Lamellen > 28.99999999999) {
set_Reading("Ergebnis_3","Istwert Lamellen: $Iw_Lamellen größer Sollwert Lamellen: 28.99999999999",0);
}
} else {
set_Reading("Ergebnis_2","Istwert Lamellen: $Iw_Lamellen größer Sollwert Lamellen: $Sw_Lamellen",0)
}
} else {
set_Reading("Ergebnis_1","Istwert Lamellen: $Iw_Lamellen gleich Sollwert Lamellen: $Sw_Lamellen",0)
}
}
FUUID 67da8588-f33f-7df9-3ee7-e07e01bedb58c34a
MODEL Perl
NAME di_Test
NOTIFYDEV OG_RA01_BueroReinhard_3,global
NR 632
NTFY_ORDER 50-di_Test
STATE initialized
TYPE DOIF
VERSION 29460 2024-12-29 20:25:48
eventCount 19
Helper:
DBLOG:
mode:
DBLogging:
TIME 1742374280.39628
VALUE enabled
OLDREADINGS:
READINGS:
2025-03-19 10:47:43 Ergebnis_1 Istwert Lamellen: 29 ungleich Sollwert Lamellen: 29
2025-03-19 10:47:43 Ergebnis_2 Istwert Lamellen: 29 kleiner Sollwert Lamellen: 29
2025-03-19 10:47:43 Ergebnis_3 Istwert Lamellen: 29 größer Sollwert Lamellen: 28.99999999999
2025-03-19 10:47:43 block_01 executed
2025-03-19 10:47:10 mode enabled
2025-03-19 10:47:10 state initialized
Regex:
accu:
bar:
barAvg:
collect:
cond:
OG_RA01_BueroReinhard_3:
0:
4.PROCESS ^OG_RA01_BueroReinhard_3$:^4.PROCESS:
pctSlats ^OG_RA01_BueroReinhard_3$:^pctSlats:
condition:
0
my $Iw_Lamellen = ::ReadingValDoIf($hash,'OG_RA01_BueroReinhard_3','pctSlats');
my $Sw_Lamellen = 29;
if ($Iw_Lamellen != $Sw_Lamellen and ::ReadingValDoIf($hash,'OG_RA01_BueroReinhard_3','4.PROCESS') eq "STABLE") {
set_Reading("Ergebnis_1","Istwert Lamellen: $Iw_Lamellen ungleich Sollwert Lamellen: $Sw_Lamellen",0);
if ($Iw_Lamellen < $Sw_Lamellen) {
set_Reading("Ergebnis_2","Istwert Lamellen: $Iw_Lamellen kleiner Sollwert Lamellen: $Sw_Lamellen",0);
if ($Iw_Lamellen < 28.99999999999) {
set_Reading("Ergebnis_3","Istwert Lamellen: $Iw_Lamellen kleiner Sollwert Lamellen: 28.99999999999",0);
}
if ($Iw_Lamellen > 28.99999999999) {
set_Reading("Ergebnis_3","Istwert Lamellen: $Iw_Lamellen größer Sollwert Lamellen: 28.99999999999",0);
}
} else {
set_Reading("Ergebnis_2","Istwert Lamellen: $Iw_Lamellen größer Sollwert Lamellen: $Sw_Lamellen",0)
}
} else {
set_Reading("Ergebnis_1","Istwert Lamellen: $Iw_Lamellen gleich Sollwert Lamellen: $Sw_Lamellen",0)
}
helper:
NOTIFYDEV OG_RA01_BueroReinhard_3,global
globalinit 1
last_timer 0
sleeptimer -1
hmccu:
perlblock:
0 block_01
readings:
all OG_RA01_BueroReinhard_3:pctSlats OG_RA01_BueroReinhard_3:4.PROCESS
uiState:
uiTable:
Attributes:
DbLogExclude .*
DbLogInclude Meldung_Behang,Meldung_Lamellen
Ich gebe aktuell als Vergleichswert nicht eine einzelne Zahl, sondern einen Bereich vor, damit ich überhaupt ein Ergebnis bekomme. Das funktioniert grundsätzlich, ich möchte es aber gerne verstehen, deshalb der Beitrag.
Ich hoffe irgend jemand von euch kann mir dieses Verhalten erklären.
Gruß Reinhard
Zitat von: Rewe2000 am 19 März 2025, 11:23:31Gibt es eine Möglichkeit die Zahlen irgendwo im Rohwert darzustellen
Bau doch mal Debug-Ausgaben direkt in Deinen perl code ein (ich hoffe, das geht an der Stelle überhaupt)
my $Iw_Lamellen = [OG_RA01_BueroReinhard_3:pctSlats];
my $Sw_Lamellen = 29;
Debug "Ist:$Iw_Lamellen Soll:$Sw_Lamellen";
Hast Du mal versucht, alphanumerisch zu vergleichen anstatt numerisch?
Hallo betateilchen,
danke für die schnelle Antwort.
Ein alphanumerischer Vergleich wird korrekt verarbeitet, wenn ich die Zahlen mit der Perl Funktion qq() umwandle.
Siehe anhängendes Test-doif (Ergebnisse unter Readings):
Internals:
CFGFN
DEF {
my $Iw_Lamellen = [OG_RA01_BueroReinhard_3:pctSlats];
my $Sw_Lamellen = 29; ## [di_Beschattung_Sportzimmer_Terrassentuere:M_pctSlats];
my $Iw_Lamellen_String = qq($Iw_Lamellen);
my $Sw_Lamellen_String = qq($Sw_Lamellen);
##
#################################################################################
######################### Vergleich Raffstore Lamellen ##########################
#################################################################################
##
if ($Iw_Lamellen_String ne $Sw_Lamellen_String and [OG_RA01_BueroReinhard_3:4.PROCESS] eq "STABLE") {
set_Reading("Ergebnis_Vergleich_String","Istwert Lamellen: $Iw_Lamellen_String ungleich Sollwert Lamellen: $Sw_Lamellen_String",0)
} else {
set_Reading("Ergebnis_Vergleich_String","Istwert Lamellen: $Iw_Lamellen_String gleich Sollwert Lamellen: $Sw_Lamellen_String",0)
}
if ($Iw_Lamellen != $Sw_Lamellen and [OG_RA01_BueroReinhard_3:4.PROCESS] eq "STABLE") {
set_Reading("Ergebnis_Vergleich_Numerisch","Istwert Lamellen: $Iw_Lamellen ungleich Sollwert Lamellen: $Sw_Lamellen",0);
} else {
set_Reading("Ergebnis_Vergleich_Numerisch","Istwert Lamellen: $Iw_Lamellen gleich Sollwert Lamellen: $Sw_Lamellen",0)
}
}
FUUID 67da8588-f33f-7df9-3ee7-e07e01bedb58c34a
MODEL Perl
NAME di_Test
NOTIFYDEV global,OG_RA01_BueroReinhard_3
NR 632
NTFY_ORDER 50-di_Test
STATE initialized
TYPE DOIF
VERSION 29460 2024-12-29 20:25:48
eventCount 47
Helper:
DBLOG:
mode:
DBLogging:
TIME 1742374280.39628
VALUE enabled
OLDREADINGS:
READINGS:
2025-03-19 14:09:11 Ergebnis_Vergleich_Numerisch Istwert Lamellen: 29 ungleich Sollwert Lamellen: 29
2025-03-19 14:09:11 Ergebnis_Vergleich_String Istwert Lamellen: 29 gleich Sollwert Lamellen: 29
2025-03-19 14:09:11 block_01 executed
2025-03-19 14:09:08 mode enabled
2025-03-19 14:09:08 state initialized
Regex:
accu:
bar:
barAvg:
collect:
cond:
OG_RA01_BueroReinhard_3:
0:
4.PROCESS ^OG_RA01_BueroReinhard_3$:^4.PROCESS:
pctSlats ^OG_RA01_BueroReinhard_3$:^pctSlats:
condition:
0
my $Iw_Lamellen = ::ReadingValDoIf($hash,'OG_RA01_BueroReinhard_3','pctSlats');
my $Sw_Lamellen = 29; my $Iw_Lamellen_String = qq($Iw_Lamellen);
my $Sw_Lamellen_String = qq($Sw_Lamellen);
if ($Iw_Lamellen_String ne $Sw_Lamellen_String and ::ReadingValDoIf($hash,'OG_RA01_BueroReinhard_3','4.PROCESS') eq "STABLE") {
set_Reading("Ergebnis_Vergleich_String","Istwert Lamellen: $Iw_Lamellen_String ungleich Sollwert Lamellen: $Sw_Lamellen_String",0)
} else {
set_Reading("Ergebnis_Vergleich_String","Istwert Lamellen: $Iw_Lamellen_String gleich Sollwert Lamellen: $Sw_Lamellen_String",0)
}
if ($Iw_Lamellen != $Sw_Lamellen and ::ReadingValDoIf($hash,'OG_RA01_BueroReinhard_3','4.PROCESS') eq "STABLE") {
set_Reading("Ergebnis_Vergleich_Numerisch","Istwert Lamellen: $Iw_Lamellen ungleich Sollwert Lamellen: $Sw_Lamellen",0);
} else {
set_Reading("Ergebnis_Vergleich_Numerisch","Istwert Lamellen: $Iw_Lamellen gleich Sollwert Lamellen: $Sw_Lamellen",0)
}
helper:
NOTIFYDEV global,OG_RA01_BueroReinhard_3
globalinit 1
last_timer 0
sleeptimer -1
hmccu:
perlblock:
0 block_01
readings:
all OG_RA01_BueroReinhard_3:pctSlats OG_RA01_BueroReinhard_3:4.PROCESS
uiState:
uiTable:
Attributes:
DbLogExclude .*
Mit deinem Debug Vorschlag bin ich leider nicht weiter gekommen, direkt im doif wird die Debug Zeile nicht akzeptiert, ich habe auch zum Debug selbst keinerlei brauchbaren Infos gefunden, wenn du mir hier noch ein wenig weiterhelfen könntest.
Sollten denn die Debug Angaben in 99_myUtils.pm funktionieren, wenn ja, so könnte ich diese testweise über eine Funktion dahin verlegen.
Oder stehe ich da total neben der Spur.
Kurios ist auch folgendes, den fehlerhaften Vergleich habe ich bisher nur bei der Lamellenstellung von 29 (%) beobachtet, nie bei anderen Werten, deshalb würde mich der Rohwert interessieren, so wie er aus dem Rollodevice kommt. Zuerst dachte ich an einen "unsichtbaren" Nachkommawert, aber auch dies konnte ich noch nie über einen if-Vergleich darstellen.
Gruß Reinhard