Error seit dem Update

Begonnen von baerm, 04 September 2021, 21:26:36

Vorheriges Thema - Nächstes Thema

baerm

Hallo Erwin,
nach dem Umstieg auf die neue Version habe ich folgende Einträge im Log:
2021.09.04 20:55:44 1: define KNX_0104055 KNX 1/4/55:dpt7.001 listenonly: KNX_define: KNX_0104055 -wrong GA format in group-number 2: specify as 0-31/0-15/0-255 or as hex or invalid IO-Device specified
2021.09.04 20:57:03 1: ERROR: >KNX_0104055< returned by the KNX ParseFn is invalid, notify the module maintainer
2021.09.04 20:57:23 1: PERL WARNING: Hexadecimal number > 0xffffffff non-portable at /opt/fhem/FHEM/10_KNX.pm line 1696.

Gruppenadresse 1/4/55 gibt es bei mir im Projekt aber nicht.
Irgend eine Idee?

erwin

Hi,
1) mach bitte mal ein list KNX_0104055 - kommt da was raus ? - falls ja, lösche die def - von allein kann die definition nicht passiert sein, zumal :dpt7.001 vorkommt, das geht nur durch manuelle config oder? - hast du die config mit einem editor bearbeitet?
2) mich stört PERL WARNING: Hexadecimal number > 0xffffffff non-portable at /opt/fhem/FHEM/10_KNX.pm line 1696.
... das könnte von einer dpt10-definition (Datum) kommen, hast du sowas definiert?
... das "non-portable" ... Welches Betriebssystem / Plattform  hast du ?
das sind vmtl. 2 getrennte Probleme...(ca. 2 Minuten Unterschied...)
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,...

baerm

Hi Erwin,
danke für die Hinweise. Die haben mir schon weitergeholten.
bei list KNX_0104055 kommt:
No device named KNX_0104055 found
Ich habe ja auch in der ETS nachgesehen und keine Definition bzgl KNX_0104055 gefunden. Nachdem Umstieg auf die neue KNX Modul Version ist mir auch aufgefallen, dass mir ein KNX Device fehlt, aber dies nicht wirklich mit dem neuen Modul in Zusammenhang gebracht. Ich hatte schon öfters das Problem, dass bei KNX Devices Parameter nicht mehr vorhanden waren und ich konnte nicht nachvollziehen warum das so war.

Jetzt ist mir aber eingefallen, dass ich die Wärmepumpe über ein separat porgrammiertes Modul anspreche, also nicht über die ETS SW. Das ist leider schon wieder so lange her, dass ich nicht mehr daran gedacht hatte. Dort habe ich den Bereich der Gruppenadressen verwendet und 1/4/55 so definiert:
    <Property id=" general">
     <Enabled>False</Enabled>
     <DatapointName>Betriebsmodus lesen (222)</DatapointName>
     <DatapointTypeName>DPT_Value_2_Ucount</DatapointTypeName>
     <DatapointTypeCode>07.001</DatapointTypeCode>
     <DatapointDirection>OUT</DatapointDirection>
     <PCO_VariableIndex>222</PCO_VariableIndex>
     <PCO_Register/>
     <PCO_FunctionCode/>
     <PCO_VariableType>REG</PCO_VariableType>
     <PCO_DataType/>
     <PCO_Conversion_Rule>No Conv</PCO_Conversion_Rule>
     <PCO_Conversion_Scale/>
     <Knx_DataPoint_Line_Address>1</Knx_DataPoint_Line_Address>
     <Knx_Datapoint_GroupAddress>4</Knx_Datapoint_GroupAddress>
     <Knx_Datapoint_Z_FieldAddress>55</Knx_Datapoint_Z_FieldAddress>
    </Property>


und genau dieses ist nun nicht mehr vorhanden. Jetzt habe ich mir im Backup die genaue Definition heraussuchen müssen, damit ich Dir die FHEM Device Definition liefern kann - bitte die pipes ingorieren - die kommen aus dem qlite export:
define|KNX_0104055|KNX|1/4/55:dpt7.001 listenonly
attr|KNX_0104055|IODev|KNX
attr|KNX_0104055|alias|Betriebsmodus lesen
attr|KNX_0104055|devStateIcon|Auto:time_automatic:Urlaub Urlaub:vent_ventilation_level_2:Party Party:scene_party:Sommer Sommer:vent_ventilation_level_0:Stufe1 Kühlen:frost:Kühlen
attr|KNX_0104055|event-on-change-reading|.*
attr|KNX_0104055|eventMap|0:Sommer 1:Auto 2:Urlaub 3:Party 4:2.Wärmeerzeuger 5:Kühlen
attr|KNX_0104055|group|Heizung
attr|KNX_0104055|icon|edit_settings
attr|KNX_0104055|room|Favoriten,KNX,WPM
attr|KNX_0104055|webCmd|Auto:Urlaub:Party:2.Wärmeerzeuger:Sommer:Kühlen

Dieses Device ist das einzige mit listenonly - gibts diese nicht mehr mit der neuen KNX Version?

Bzgl der zweiten Fehlermeldung scheint es tatsächlich ein separates Problem zu sein. Die Fehlermeldung habe ich in alten Logfiles auch entdeckt.

Ich verwende FHEM auf Linux: raspberry pi4 5.10.11-v7l+ #1399 SMP Thu Jan 28 12:09:48 GMT 2021 armv7l GNU/Linux
lg,
Matthias

erwin

ZitatDieses Device ist das einzige mit listenonly - gibts diese nicht mehr mit der neuen KNX Version?
... gibts schon, aber schon sehr sehr sehr lange (3+Jahre) gilt folgender syntax:
define KNX_0104055 KNX 1/4/55:dpt7.001:listenonly
... kleiner feiner Unterschied.....(see cmd-ref)
mit deiner syntax wird listenonly als IO-Device interpretiert - damit geht die ganze definition schief! - Darum: No device ... found.
Sinnvollerweise solltest du devices mit einem "sprechenden" Namen versehen, statt der von autocreate vergebenen KNX_xxyyzzz (z.B: WP_Betriebsmodus)! Dann findet man auch nach 2 Jahren wieder, was das ist...

zur 2ten Fehlermeldung: da sendet ein device offensichtlich Werte größer 0xffffffff ( 4 294 967 295 dezimal). Das ist im KNX nicht vorgesehen und da gibts beim konvertieren eine Warning... gerechnet wird dennoch richtig, allerdings ohne Garantie für andere Plattformen oder Perl-Versionen.... Ich hab mittlerweile einiges versucht, das zu umschiffen- aber (noch) nichts gefunden ohne Nebenwirkungen....
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,...

baerm

Hi Erwin,
vielen Dank für den Hinweis auf die richtige Syntax. Ich verwende diese Syntax seit 1.5 Jahren ohne Probleme (hat auch funktionell einwandfrei geklappt), aber das werde ich jetzt einfach korrigieren.
Die Frage die sich eher stellt ist, warum das Device gelöscht wurde. Ist hier etwas in dem Modul eingebaut, dass in bestimmten Fällen Devices löscht?

Bzgl Devicenamen, KNX_xxyyzzz habe ich beibehalten und einfach einen Alias vergeben. War für mich so ausreichend. Hätte mir auch nicht schneller geholfen auf dieses Problem zu kommen, dass hier dieses Device fehlt.
lg,
Matthias

erwin

Hi Matthias,
Zitat... warum das Device gelöscht wurde. Ist hier etwas in dem Modul eingebaut, ...
.. gelöscht ist der falsche Ausdruck, richtig wäre: Bei einem FHEM Start werden ALLE devices neu definiert, jene bei denen die Syntax nicht stimmt werden nicht definiert und ein Log Eintrag geschrieben.
wenn du dann ein save oder update machst, werden alle DEFINIERTEN devices in der fhem.cfg file gesichert.
damit ist das device mit der falschen syntax endgültig weg! - so funkt. die FHEM Logik. - das modul selbst löscht keine definitionen.
Auf die verschärfte syntax hab ich im 1.Beitrag hingewiesen... die war notwendig, weil es sonst im Betrieb Probleme gibt.
in deinem Beispiel:  listenonly wurde als IO-deviceNamen verwendet, den gabs ganz sicher nicht in deinem system - und damit  kann deine definition nicht funktionieren (zumindest nichts senden). Nachdem du aber nur empfangen wolltest, hat das zufällig funktioniert!
Wie schon geschrieben: die IO-device angabe im define ist in 99,9% der Anwendungen unnötig und kontraproduktiv- Details dazu in der cmd-ref
In der nächsten version hab ich einen zus. Log Eintrag gebaut für solche Fälle...
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,...

baerm

Hallo Erwin,
danke für die Erklärung. Damit ist es für mich nachvollziehbar, was genau passiert ist.
Ich habe noch eine Frage. Ich habe seit dem Umstieg auf die neue Version habe ich folgende Meldung bei jeder Temp Änderung:

2021.09.11 22:01:30 3: KNX_checkAndClean: value= Aussen 16.3°C 16.3°C was casted to Aussen 16.3°C

Vielleicht habe ich nicht die eleganteste Implementierung, aber ich setze mittels DOIF und dem set Befehl einen Text auf meinen MDT Displays. Was machen ich hier falsch? KNX_0104010:WERT enhält ja den gewüschten Wert 16.3 ohne Einheit.

set KNX_0005035 Aussen [KNX_0104010:WERT]°C

und hier das List des  KNX_0104010:

Internals:
   DEF        1/4/10:dpt9.001
   DEVNAME    KNX_0104010
   FIRSTGADNAME g1
   FUUID      5dd44886-f33f-e2c0-6fae-144a1f8fd6c7663e
   FVERSION   10_KNX.pm:0.248910/2021-08-29
   FVERSIONE  04.67 18-08-2021
   GETSTRING 
   IODev      KNX
   KNX_MSGCNT 2924
   KNX_RAWMSG C01164w0140a065e
   KNX_TIME   2021-09-11 22:05:23
   LASTInputDev KNX
   MSGCNT     2924
   NAME       KNX_0104010
   NOTIFYDEV  global,KNX_0104010
   NR         602
   NTFY_ORDER 50-KNX_0104010
   SETSTRING 
   STATE      16.30 &deg;C
   TYPE       KNX
   GADDETAILS:
     g1:
       CODE       0140a
       GROUP      1/4/10
       MODEL      dpt9.001
       NO         1
       OPTION     listenonly
       RDNAMEGET  getG1
       RDNAMEPUT  putG1
       RDNAMESET  setG1
       SETLIST    :slider,-274,6710,670760
   GADTABLE:
     0140a      g1
   READINGS:
     2021-09-11 21:51:39   IODev           KNX
     2021-09-11 22:05:23   WERT            16.3
     2021-09-11 22:05:23   getG1           16.30 &deg;C
     2021-09-11 22:05:23   last-sender     1.1.100
     2021-09-11 22:05:23   state           16.30 &deg;C
Attributes:
   IODev      KNX
   alias      Aussentemperatur
   event-on-change-reading .*
   group      Heizung
   icon       temp_temperature
   room       Favoriten,KNX,WPM
   userReadings WERT {sprintf("%.1f",ReadingsNum($name,"state",0))}


lg,
Matthias

erwin

Ich kann das nicht reproduzieren,
ich gehe aber nicht davon aus, das es mit dem KNX-display zu tun hat.
ich nehme an, dieses ist mit dpt16 definert. (das KNX_0005035).
1)mach mal folgenden cmd auf der cmd-line:
set KNX_0005035 Aussen 123,45°C
und check das Log auf die Meldung... evtl. auch ein list von diesem device
2)kommt bei der Log Meldung wirklich:
..value= Aussen 16.3°C 16.3°C was...

Alternativ kannst du auf die Einheit in den readings verzichten wenn du 1/4/10:dpt9 definierst, und damit auch kein Userreading mehr brauchst...
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,...

baerm

Hi Erwin,
ja KNX_0005035 ist mit dpt16 definiert.
Internals:
   DEF        0/5/35:dpt16
   DEVNAME    KNX_0005035
   FIRSTGADNAME g1
   FUUID      5db0acca-f33f-e2c0-ce26-675643cedb4bc3f0
   FVERSION   10_KNX.pm:0.248910/2021-08-29
   FVERSIONE  04.67 18-08-2021
   GETSTRING  g1:noArg
   IODev      KNX
   NAME       KNX_0005035
   NOTIFYDEV  global,KNX_0005035
   NR         548
   NTFY_ORDER 50-KNX_0005035
   SETSTRING  g1:multiple,>CLR<
   STATE      Aussen 123,45�
   TYPE       KNX
   GADDETAILS:
     g1:
       CODE       00523
       GROUP      0/5/35
       MODEL      dpt16
       NO         1
       OPTION     
       RDNAMEGET  getG1
       RDNAMEPUT  putG1
       RDNAMESET  setG1
       SETLIST    :multiple,>CLR<
   GADTABLE:
     00523      g1
   READINGS:
     2021-09-09 11:11:16   IODev           KNX
     2021-09-12 22:12:26   last-sender     fhem
     2021-09-12 22:12:26   setG1           Aussen 123,45�
     2021-09-12 22:12:26   state           Aussen 123,45�
Attributes:
   IODev      KNX
   alias      Statustext 1
   icon       rc_INFO
   room       KG->Maschinenraum,KNX


bei set KNX_0005035 Aussen 123,45°C
kommt auch
2021.09.12 22:12:26 3: KNX_checkAndClean: value= Aussen 123,45°C 123,45°C was casted to Aussen 123,45�

Ich habe jetzt probehalber auf dpt9 umgestellt und dann nicht das Userreading verwendet und es kommt auch wieder die Meldung:
set KNX_0005035 Aussen [KNX_0104010]°C

Meldung:
2021.09.12 22:26:40 3: KNX_checkAndClean: value= Aussen 16.00°C 16.00°C was casted to Aussen 16.00°
Das Userreading verwende ich übrigens auch um nur eine Kommastelle anzuzeigen.

Vielleicht helfen Dir diese Infos, oder sollte ich den loglevel mal hochsetzen und ein Output schicken?
lg,
Matthias


erwin

Hi,

Problem gefunden!
mit der "old syntax" tritt das Problem auf:
set KNX_0005035 Alarm 123.45°C
mit der "neuen syntax" nicht:
set KNX_0005035 g1 Alarm 123.45°C

Wobei: die Log-Meldung an sich bedeutet noch keinen Fehler, kann immer wieder bei allen möglichen dpts auftauchen, wenn z.B. ein Maximum/Minimum einer Zahl überschritten wird... (z.B. set dpt5tst g1 256)
Nochwas: 16,43 ist in Perl nicht numerisch, 16.45 schon - nur falls du mit dem Wert noch rechnen willst....
Ich werds in der nächsten version fixen...
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,...

baerm

Hallo Erwin,
vielen Dank. Das mit der "neuen" Syntax habe ich irgendwie noch so mitbekommen. Habe letztens auch die Commandref durchgeschaut und ist mir nicht aufgefallen. Vlt liegt es auch an den Examples. Eventuell sollten die Examples auch geändert werden:

set lamp2 on
set lamp2 off
set lamp2 on-for-timer 10
set lamp2 on-until 13:15:00
set lamp2 steuern on-until 13:15:00
set myThermoDev 23.44
set my MessageDev Hallo Welt


Danke auch für den Hinweis bzgl Dezimalpunkt. Ich verwende eigentlich immer . und nicht ,

Ich habe noch eine andere Frage, da ich bei den Beispielen on-for-timer sehe. Dies verwende ich teilweise wenn ich etwas von FHEM aus steuere. Ich würde gerne Lichter automatisch abdrehen, wenn diese durch Taster eingeschaltet wurden.
Ich verwende derzeit:
defmod ntfy_KNX_0301042 notify KNX_0301042:on sleep 1800, set KNX_0301042 off
Das Problem ist, wenn ich das Licht aufdrehe aber nach ca 20 Min wieder abdrehe. Dann ca nach 5 Min nochmal aufdrehe, dreht es sich plötzlich ab, da inzwischen die 1800 Sekunden (30min) vorbei sind. Ob ich den Timer irgendwie zurücksetzen kann (oder AT Befehl löschen) weiss ich nicht. Wird auch dann sehr mühsam wenn ich das für zig Devices umsetzen will, wie es eigentlich geplant ist.
Gibt es die Möglichkeit dies über das KNX Modul zu lösen (Featurerequest), dass man zb einen neuen parameter wie zb. Max-on-for-timer setzt und dann nach der Max Dauer das Device auf off geht? Eventuell ist das nur eine Erweiterung des on-for-timer codes.
lg,
Matthias

erwin

Hi Matthias,

die "alte syntax" hat schon noch ihre Berechtigung, vor allem für dpt1 (on/off ...) - Kompatibilität zu anderen Modulen.
für dpt16 wäre die richtige alte syntax "set <name> STRING mein Text" - das ist aber ganz bewußt nicht (mehr) dokumentiert....
ich werde die Beispiele anpassen - danke für den Hinweis.

ad on-for-timer:
wenn ein on-for timer gestartet ist, wird er bei jedem set  (auf diese GA) gelöscht! Also auch bei einem set <name> on od. off!
Auch ein weiteres on-for-timer löscht den alten timer und definert einen neuen....
das Module verwendet dazu eine AT definition (undercover)...
Damit sollte es so funktionieren wie gewünscht.
Das Problem mit deinem notify ist, dass das sleep nicht wissen kann, was du inzwischen mit dieser GA gemacht hast und seinen Job macht.
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,...

baerm

Hi Erwin,
danke für die Erklärung. Ich weiss, dass mein Problem das notify ist und warum das Verhalten so ist. Nur wie kann ich das lösen?
Ein set mit on-for-timer ist ja nicht das Thema. Ich schalte das Licht mittels Taster ein und hätte aber gerne das selbe Verhalten, wie wenn jedes Mal on-for-timer mitkommt. Bei Lichtern mit Bewegungsmeldern macht das der Bewegungsmelder, nur bei allen anderen würde ich gerne auch ähnliches Verhalten haben.
lg,
Matthias

erwin

Hi Matthias,
Zitatund hätte aber gerne das selbe Verhalten, wie wenn jedes Mal on-for-timer mitkommt.
Sehr tief in der Trickkiste,  mittels notify auf den/alle Schalter:
defmod LichtTimer notify Schalter.*:getG1:.on {
  my $delay = 10;
  my $duration = sprintf("%02d:%02d:%02d", $delay/3600, ($delay%3600)/60, $delay%60);
  CommandDefMod(undef,"-temporary " . $NAME . "_switchoff at +$duration set $NAME g1 off");
}

Die Verzögerung stellst du mittels $delay ein.
Erklärung: jedesmal wenn ein getG1 auf on geht... - wird ein timer gestartet, der nach Ablauf von $delay (sekunden) das Licht aus macht. Ich gehe davon aus dass der Schalter den gleichen Device-Namen (+ GA-Addresse) hat wie das Licht!
Evtl. kannst du mehrere Schalter mittels regex (angedeutet durch Schalter.*) mit einem notify erledigen!
z.b.: statt Schalter.*:getG1: -> (Wohnzimmer|Esszimmer|Bad)Licht:getG1:.......
Aber ich kenne deine Namenskonvention nicht!
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,...

Amenophis86

Macht da nicht ein warchdog mehr Sinn? Der triggert sich doch neu, wenn der entsprechende Befehl wieder kommt, oder?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...