IKEA Motion Sensor - PERL WARNING: Argument "motion" isn't numeric in numeric gt

Begonnen von Beam2FHEM, 21 August 2019, 08:57:38

Vorheriges Thema - Nächstes Thema

Beam2FHEM

Hallo Zusammen,

ich verfolge das Forum schon seit Langem und habe nun folgendes Problem, dass ich mir nicht wirklich erklären kann.

Ich betreibe einen IKEA Motion Sensor (Tradfri mit Zigbee und RaspBee).
Dieser funktioniert einwandfrei und liefert die

Readings  - battery, dark, reachable und state.

Nun probiere ich mit einem DOIF den state abzufragen der "motion" oder "nomotion" sein kann.

define Sz.Motion.doif DOIF ([Sz.Motion:state] eq "motion" and [7:00-21:00]) (set Sz.Kleiderschrank.FB on-for-timer 1792)

Das funktioniert auch! - Zwischen 7:00-21:00 und wenn "motion" erkannt wird, geht das Licht für ca eine halbe Stunde an, aber mein Log wird zeitgleich mit Warnings zugemüllt:

PERL WARNING: Argument "motion" isn't numeric in numeric gt (>) at (eval 176999) line 1.
PERL WARNING: Argument "nomotion" isn't numeric in numeric gt (>) at (eval 177002) line 1.


Wo ist da das Problem? Der state sollte doch ein STRING sein und ich vergleiche doch auch mittels "eq" für Strings.

Kann mich bitte jemand erleuchten.

Danke


===============================================
FHEM 6.2
RPI 4, bullseye, nanoCUL, ConBeeII, signalduino, milight, sonos

binford6000

Moin,
das DOIF ist sauber. Daran liegts wohl nicht. Hast du noch userReadings angelegt oder sowas?

VG Sebastian

Beam2FHEM

Nein, ich habe keine userReadings für Sz.Motion angelegt.


Ich habe lediglich eine readingsGroup rg_motion, wo alle Bewegungsmelder mit state, battery und reachable als Übersicht aufgelistet werden und ein wenig valueFormat und valueIcon. Aber das dürfte doch nichts an den states "motion" und "nomotion" ändern?!?


define rg_motion readingsGroup (.*Motion):state,battery,reachable
attr rg_motion alias Bewegungsmelder
attr mapping %ALIAS
attr rg_battery valueFormat {return "0" if( $VALUE eq "low" );; return "100" if( $VALUE > 75 );; return "75" if( $VALUE > 50 );;return "50" if( $VALUE > 25  );;return "25" if( $VALUE > 20 );; return "20" if( $VALUE > 2 )}
attr rg_battery valueIcon {'state.motion' => 'motion_detector@red', 'state.nomotion' => 'motion_detector@green', 'battery.100' => 'measure_battery_100@green', 'battery.75' => 'measure_battery_75@green','battery.50' => 'measure_battery_50@yellow', 'battery.25' => 'measure_battery_25.red', 'battery.20' => 'measure_battery_0@red', 'reachable.0' => '10px-kreis-rot','reachable.1' => '10px-kreis-gruen'}


und noch eine Battery readingsGroup...


define rg_battery readingsGroup .*:[Bb]attery
attr rg_battery alias Batteriestatus
attr mapping %ALIAS
attr rg_battery valueFormat {return "0" if( $VALUE eq "low" );; return "100" if( $VALUE > 75 );; return "75" if( $VALUE > 50 );;return "50" if( $VALUE > 25  );;return "25" if( $VALUE > 20 );; return "20" if( $VALUE > 0 )}
attr rg_battery valueIcon {'battery.100' => 'measure_battery_100@green', 'battery.75' => 'measure_battery_75@green','battery.50' => 'measure_battery_50@yellow', 'battery.25' => 'measure_battery_25.orange', 'battery.20' => 'measure_battery_0@red'}


Kann das evt. von der rg_battery kommen? Da ich gerade sehe das die Warning auch kommt, wenn eigentlich gar nicht geschaltet wird  :o

Beam
===============================================
FHEM 6.2
RPI 4, bullseye, nanoCUL, ConBeeII, signalduino, milight, sonos

binford6000

ZitatKann das evt. von der rg_battery kommen?
Ohne das ValueFormat kommen auch keine Perl Warnings...

Beam2FHEM

Also stimmt! Die Warning verschwindet, wenn das valueFormat weg ist.

Aber leider ist dann auch mein schön formatiertes Batteriesymbol weg... Kann man das valueFormat nur auf bestimmte Readings anwenden also nur auf "battery"?

Kriegs nur gerade nicht hin :P ...

Edit:

Habe die Lösung hoffentlicht selbst gefunden:

Das erste if prüft, ob das Reading == "state" ist und gibt den Wert unverändert zurück, oder?


attr valueFormat {return $VALUE if (( $READING eq "state") );;return "0" if( $VALUE eq "low" );; return "100" if( $VALUE > 75 );; return "75" if( $VALUE > 50 );;return "50" if( $VALUE > 25  );;return "25" if( $VALUE > 20 );; return "20" if( $VALUE > 0 )}


Bisher jedenfalls keine Warnings mehr....

Danke, Beam
===============================================
FHEM 6.2
RPI 4, bullseye, nanoCUL, ConBeeII, signalduino, milight, sonos

binford6000


Beam2FHEM

Von dort hatte ich ja meins auch  ;)

Ich habe den vorherigen Beitrag editiert - hoffentlich mit Lösung!

Vielleicht kann ja jemand bestätigen, dass man das so machen kann.

Beam
===============================================
FHEM 6.2
RPI 4, bullseye, nanoCUL, ConBeeII, signalduino, milight, sonos

binford6000

Zitat von: Beam2FHEM am 21 August 2019, 10:58:45
Vielleicht kann ja jemand bestätigen, dass man das so machen kann.

Auch bei mir keine Warnings mehr. Gut gemacht  ;)
VG Sebastian