[gelöst] Perl: Value ohne Einheit von KNX dpt

Begonnen von NehCoy, 12 August 2019, 18:27:58

Vorheriges Thema - Nächstes Thema

NehCoy

Hallo!

Wenn ich mit my $temp = Value("knx.Wetter.Temperatur") abfrage, hat die Variable "$temp" auch die Einheit mit dabei.
Damit kein ich keinen Vergleich (Größer, kleiner als) durchführen.
Irgendwo im Forum habe ich dann gelesen, dass man mit my $temp = split(/ /, Value("knx.Wetter.Temperatur") )[0] den Wert aufteilen und den ersten Werte (die Zahl) der Variable zuweisen kann (Leerzeichen als Trennzeichen).
Wenn ich das so mache bekomme ich von Fhem beim Speichern folgende Fehlermeldung:
Zitatsyntax error at (eval 117442) line 2, near ")["
Wie kann ich denn nur den Zahlenwert von einem KNX-Gerät abfragen?

Danke und Grüße
NehCoy

Byte09

Zitat von: NehCoy am 12 August 2019, 18:27:58
Hallo!

Wenn ich mit my $temp = Value("knx.Wetter.Temperatur") abfrage, hat die Variable "$temp" auch die Einheit mit dabei.
Damit kein ich keinen Vergleich (Größer, kleiner als) durchführen.
Irgendwo im Forum habe ich dann gelesen, dass man mit my $temp = split(/ /, Value("knx.Wetter.Temperatur") )[0] den Wert aufteilen und den ersten Werte (die Zahl) der Variable zuweisen kann (Leerzeichen als Trennzeichen).
Wenn ich das so mache bekomme ich von Fhem beim Speichern folgende Fehlermeldung: Wie kann ich denn nur den Zahlenwert von einem KNX-Gerät abfragen?

Danke und Grüße
NehCoy

kenne mich mit knx devices leider gar nicht aus, daher erstmal die frage : handelt es sich bei ("knx.Wetter.Temperatur") um ein normales reading ?

falls ja wäre ReadingsNum mein mittel der ersten Wahl .

https://wiki.fhem.de/wiki/DevelopmentModuleAPI#ReadingsNum

gruss Byte09

betateilchen

Falls ReadingsNum() nicht wie gewünscht funktioniert, kannst Du folgendes probieren:

my $temp = Value("knx.Wetter.Temperatur")+0;

Die perl Warnung im Log kannst Du in diesem Fall getrost ignorieren.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

NehCoy

Guten Abend!

Danke für eure Antworten!
Zitat von: Byte09 am 12 August 2019, 18:41:44
handelt es sich bei ("knx.Wetter.Temperatur") um ein normales reading ?
What? "knx.Wetter.Temperatur" ist der Gerätename.
list knx.Wetter.Temperatur:
Internals:
   DEF        4/3/6:dpt9.001
   DEVNAME    knx.Wetter.Temperatur
   FIRSTGADNAME g1
   FUUID      5c75af8a-f33f-a1f4-4883-7f9494d5235fc80e
   GETSTRING  g1:noArg
   IODev      KNX
   KNX_MSGCNT 154
   KNX_RAWMSG C0111fw04306074e
   KNX_TIME   2019-08-12 20:30:39
   LASTInputDev KNX
   MSGCNT     154
   NAME       knx.Wetter.Temperatur
   NR         25
   NTFY_ORDER 50-knx.Wetter.Temperatur
   SETSTRING  g1:slider,-670760,13415,670760
   STATE      18.70 °C
   TYPE       KNX
   GADDETAILS:
     g1:
       CODE       04306
       GROUP      4/3/6
       MODEL      dpt9.001
       NO         1
       OPTION     
       RDNAMEGET  getG1
       RDNAMEPUT  putG1
       RDNAMESET  setG1
       SETLIST    :slider,-670760,13415,670760
   GADTABLE:
     04306      g1
   Helper:
     DBLOG:
       state:
         myDatabase:
           TIME       1565634639.24668
           VALUE      18.70
   READINGS:
     2019-08-12 20:30:39   getG1           18.70 °C
     2019-08-12 20:30:39   last-sender     1/1/31
     2019-08-12 20:30:39   state           18.70 °C
Attributes:
   IODev      KNX
   alias      Außentemperatur
   group      Temperatur
   listenonly 1
   room       Wetter
   webCmd     :


NehCoy

#4
Mit my $temp = ReadingsNum("knx.Wetter.Temperatur","STATE",0); oder my $temp = ReadingsNum("knx.Wetter.Temperatur","value",0); steht im FHEM-Log:
Zitat2019.08.12 20:35:39 3 : ntfy Temp.=0

NehCoy

Ah! Case-sensitive!
my $temp = ReadingsNum("knx.Wetter.Temperatur","state",0) ;
Damit passt es:
Zitat2019.08.12 20:45:39 3 : ntfy Temp.=19.70

Ziel erreicht!

Danke!

netpirat

Hallo,

ich habe das selbe Problem mit dem °C im reading. Kann man dieses direkt bei der KNX Abfrag im device schon rausnehmen? Oder wo habt Ihr hier Eure Variable eingefügt?

Gruß

erwin

Zitatich habe das selbe Problem mit dem °C im reading. Kann man dieses direkt bei der KNX Abfrag im device schon rausnehmen?
.. kann man!
Wenn man statt dpt9.001 nur dpt9 im define angibt! - siehe cmd-ref.
l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

netpirat

Hallo Erwin,

vielen Dank. Ich hab gestern ja alles probiert aber auf soetwas simples bin ich gar nicht gekommen. Vielen vielen Dank. Das hat mich gestern die halbe Nacht gekostet :-)