Schnittstellenänderung

Begonnen von Andi291, 12 Dezember 2017, 15:58:41

Vorheriges Thema - Nächstes Thema

JoeALLb

#60
Hier ein Screenshot

Edit: aber eigentlich bist du ja auf das selbe Ergebnis gestoßen wie ich, wenn ich deinen Text dazu korrekt interpretieren.
Da Klick ich jedenfalls drauf, wenn ich eine neue Erklärung zu den Attributen des aktuellen Devices benötige, darum fände ichH es schön und richtiger, wenn hier die Hilfe des KNX kommt.

Mehr morgen!
Danke!
SG Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

#61
Hallo Andi, danke!

Anbei ein erstes Feedback:
Zeile 1079
if (defined ($value) and !($value eq ""))
dürfte nicht ganz passen, denn dadurch wird putCmd ja nicht ausgeführt?!? Wofür ist diese Prüfung hier gedacht?
Wenn ich diese Abändere ode rganz entferne, funktioniert es jedenfalls.


Edit: Zum test habe ich dieses Device verwendet und einfach mal die GAD 0/0/253
aus der ETS abgefragt. Ohne meine Änderung habe ich als Ergebnis den STATE-Wert zurückbekommen, mit
dem Entfernen des IFS bekam ich den $gad name, also test zurück.

defmod timedev KNX 0/0/251:dpt10:time\
0/0/250:dpt11:date\
0/0/253:dpt16:test
attr timedev IODev KNX
attr timedev answerReading 1
attr timedev eventMap /value now:now/
attr timedev group Global
attr timedev putCmd {\
  if ($gad =~ /date/) {\
   $value=  "14.03.2018";;\
    ReadingsVal($name,"date-put","14.03.2018");;\
  }\
   elsif ($gad =~ /time/){\
     $value = ReadingsVal($name,"time-put","01:02:03")\
  }\
   elsif ($gad =~ /test/){\
     $value=  $gad;;\
  }\
}\

attr timedev readonly 0
attr timedev room KNX
attr timedev stateCmd {ReadingsVal($name,"date-put","")}
attr timedev verbose 5
attr timedev webCmd now
attr timedev widgetOverride putCmd:textField-long

setstate timedev 18.03.2018
setstate timedev 2018-03-20 09:47:57 STATE 00:02:00
setstate timedev 2018-03-20 09:47:57 date-get 20.03.2018
setstate timedev 2018-03-21 09:49:07 date-put 14.03.2018
setstate timedev 2018-03-20 09:47:57 last-sender 1/1/253
setstate timedev 2018-03-21 00:02:00 state 18.03.2018
setstate timedev 2018-03-21 09:45:00 test-put test
setstate timedev 2018-03-21 09:49:13 time-put 01:02:03
setstate timedev 2018-03-21 00:02:00 time-set 00:02:00



Edit2:
Was ich besonders praktisch finde ist, dass auch bei putCmd dies funktioniert,
was vermutlich in die Doku einzug nehmen sollte:

if ($gad =~ /date/) {
   $value=  "now";
}


@Andi: Verständnisfrage zu GETSTRING: Was steckt hinter den "test:noArg date:noArg time:noArg"? Kann/soll ich das zu etwas nutzen?

sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Andi291

Moin!

1. Deinen Screenshot zur Devicespezifischen Hilfe kann ich nicht nachvollziehen - habs bei drei Systemen probiert. Bei allen wird die KNX-Doku angezogen...Kannst Du hier nochmal nachschauen, ob Du einen potentiellen Fehler findest?

2. Deine Anmerkung zur Value-Abfrage...PutCmd soll nur ausgeführt werden, wenn das Argument gegeben ist ($value = ReadingsVal...). Dummerweise gibt Readingsval bei nicht definiertem Wert einen Leerstring und kein undef zurück - deshalb die Abfrage auf "". Bei mir funktionierte gestern die Unterscheidung auch sauber - hast Du ein Log zu Deinem u.g. Beispiel?

3. Gestring ... In der Vergangenheit wurden die Abfragen vom Webfrontend immer in get/set bearbeitet und die Antwortstrings gebildet. Das habe ich ins define ausgelagert und gespeichert - letztlich steht da die Vorgabe zur Darstellung der Checkboxen in der Detailseite:
return "Unknown argument, choose one of " . $hash->{GETSTRING} if(defined($a[1]) and ($a[1] =~ m/\?/));
--> Dürfte Dir völlig wurscht sein...

Grüße...

JoeALLb

Hallo Andi,

1. Ich habe 2 Systeme, die alle dieses Phänomen zeigen.
2. aber manchmal ist ein Reading leer, also "". Selbst dann hätte ich gerne, dass putCmd ausgeführt wird...
3. Ist es mir eigentlich auch, jedoch steht dort bei "Vorlauftemperatur:slider,-670760,13415,670760", der als dpt9 genutzt wird, was den Slider relativ unbrauchbar macht....

sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Andi291

Hm - da musst mir nochmal helfen...

Zitat1. Ich habe 2 Systeme, die alle dieses Phänomen zeigen.
Kannst Du es bitte versuchen, einzugrenzen - siehe Anhang. Ich kann's nicht nachvollziehen...
Zitat2. aber manchmal ist ein Reading leer, also "". Selbst dann hätte ich gerne, dass putCmd ausgeführt wird...
Verstanden - ich such einen Workaround.
Zitat3. Ist es mir eigentlich auch, jedoch steht dort bei "Vorlauftemperatur:slider,-670760,13415,670760", der als dpt9 genutzt wird, was den Slider relativ unbrauchbar macht....
Ebenfalls verstanden - alternativ kann ich den Slider ganz weglassen - finde ich aber auch nicht schick. Eingrenzen macht wenig Sinn...Der Slider nach "Außen" wird jedenfalls skalierbar sein.

JoeALLb

#65
Hallo Andi,

Zitat von: Andi291 am 21 März 2018, 20:23:11
Kannst Du es bitte versuchen, einzugrenzen - siehe Anhang. Ich kann's nicht nachvollziehen...

Der Anhang fehlt leider. Hab bei mir in 2 weiteren Systemen nachgesehen, ein altes (>5 Jahre) und ein frisch installiertes:
Bei beiden bekomme ich die TUL-hilfe.

Zitat von: Andi291 am 21 März 2018, 20:23:11
Verstanden - ich such einen Workaround.
Wofür wird die Zeile überhaupt benötigt? putCmd kann doch immer ausgeführt werden, egal ob value gesetzt ist oder nicht?!?
Die Prüfung prüft ja lediglich, ob hier ein entsprechendes -put Reading vorhanden ist, aber selbst ohne Reading sollte putCmd ausgeführt werden, nicht?

Zitat von: Andi291 am 21 März 2018, 20:23:11
Ebenfalls verstanden - alternativ kann ich den Slider ganz weglassen - finde ich aber auch nicht schick. Eingrenzen macht wenig Sinn...Der Slider nach "Außen" wird jedenfalls
skalierbar sein.
Widgetoverride gibt doch dazu Möglichkeiten... für mich sind das also "defaulfWidgets"-Werte, die sich das System über den verwendeten DPT als "Sinnvoll" ausdenkt.
Per Widgetoverride kann ich dann die Werte verkleinern, Sprünge einbauen (dass ich die Temperatur in 0.5er Schritte verändern kann), die Farbskala ändern, etc...

Der Rest sieht schon sehr ordentlich aus, ich denke ich kann das Modul schon produktiv einsetzen! Herzlichen Dank!!


Nachtrag:
2018.03.22 xx:xx:xx 1 : PERL WARNING: Use of uninitialized value $option in pattern match (m//) at ./FHEM/10_KNX.pm line 602.
2018.03.22 xx:xx:xx 1 : PERL WARNING: Use of uninitialized value $option in pattern match (m//) at ./FHEM/10_KNX.pm line 603.



sG
Joe



FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

Nachtrag #2:
Diese Fehlermeldung verstehe ich nicht. Man sieht im Hintergrund, dass desired-temp als g4 angelegt ist, warum bekomme ich dann diese Fehlermeldung mit "1"?

sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

Nachtrag 3;

ich habe mittels


attr <> userattr Sensor
attr <> Sensor <nameSensor>

den externen Temperatursensor  eines Devices  als Attribut zu einem Device "dazugespeichert".

in stateCmd kann dies aufgerufen werden
{ReadingsNum(AttrVal($name,"Sensor",undef),"temperature",2,1)}

in putCmd jedoch nicht. Wird immer die alternative Zahl, also in diesem Fall die 2 ausgegeben.
Hast Du dazu eine idee?

Anbei der Code aus putCmd, der so eben die 2 ausgibt.


{
  if ($gad =~ /Vorlauftemperatur/) {
   $value= ReadingsNum(AttrVal($name,"Sensor",undef),"temperature",2,1);
  }
}


Wenn ich dort den Sensornamen "hardcodiere", geht es.

{
  if ($gad =~ /Vorlauftemperatur/) {
   $value= ReadingsNum("<nameSensor>","temperature",2,1);
  }
}


wie oben geschrieben, im stateCmd funktionieren beide varianten!

sG Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Andi291

Moin!

ZitatDer Anhang fehlt leider. Hab bei mir in 2 weiteren Systemen nachgesehen, ein altes (>5 Jahre) und ein frisch installiertes:
Bei beiden bekomme ich die TUL-hilfe.
Aber jetzt: Kannst Du es bitte versuchen, einzugrenzen - siehe Anhang. Ich kann's nicht nachvollziehen...

ZitatWofür wird die Zeile überhaupt benötigt? putCmd kann doch immer ausgeführt werden, egal ob value gesetzt ist oder nicht?!?
Die Prüfung prüft ja lediglich, ob hier ein entsprechendes -put Reading vorhanden ist, aber selbst ohne Reading sollte putCmd ausgeführt werden, nicht?
Naja, irgendwie brauchts ne Storyline - ich bin da relativ frei. Alternativ kommt zuerst answerReading mit state als Input, dann -put mit Inhalt des readings und zum Schluß putCmd. Ist mir eigentlich wurscht. Aber irgendeine Priorität muss man vorgeben..
Wie willst Du / Ihr es?

Zitat
2018.03.22 xx:xx:xx 1 : PERL WARNING: Use of uninitialized value $option in pattern match (m//) at ./FHEM/10_KNX.pm line 602.
2018.03.22 xx:xx:xx 1 : PERL WARNING: Use of uninitialized value $option in pattern match (m//) at ./FHEM/10_KNX.pm line 603.
Abgefangen...

Zitat
Nachtrag #2:
Diese Fehlermeldung verstehe ich nicht. Man sieht im Hintergrund, dass desired-temp als g4 angelegt ist, warum bekomme ich dann diese Fehlermeldung mit "1"?
Erledigt...

ZitatNachtrag 3;
Jetzt wird es kniffelig...
Die TUL kenn die Geräte nicht, für die Telegramme empfangen werden. Beim Empfang eines Telegrammes wird eine willkürliche KNX-Instanz (nicht deterministisch) angesprungen und in einer Schleife anhand des globalen Hashes "defptr" das entsprechende Hash in "deviceHash" gemapped.
Der restliche Kontext steht nicht zur Verfügung...
Ich hab mal einen Hack eingebaut. Funktioniert es damit?

Grüße, Andi



JoeALLb

Zitat von: Andi291 am 22 März 2018, 19:31:21
Naja, irgendwie brauchts ne Storyline - ich bin da relativ frei. Alternativ kommt zuerst answerReading mit state als Input, dann -put mit Inhalt des readings und zum Schluß putCmd. Ist mir eigentlich wurscht. Aber irgendeine Priorität muss man vorgeben..

Also putCmd würde gerne CH immer auswerten, wenn answerReading
1 ist,ndenn dafür macht man es ja ;-).
Im schlimmsten Fall kann man auch dort auf Statement oder reading-put reagieren, daher sollte das, wenn vorhanden, gewinnen.
Generell bräuchte ich eigentlich ein answerReading pro gad, denn wenn ich eine Gad in mehreren Devices nutze, sollte ich entscheiden können, welches davon antwortet.

Ich teste demnächst weiter, bin im Ausland....
SG Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

Hallo Andi,

noch ein Wunsch: Schön wäre es, wenn ein in putCmd verwendete Devices unten in der Liste
"Probably associated with" angezeigt werden würde.
Feedback: Ich bin noch unterwegs, aber die Version läuft im Moment (ohne außergewöhnliche Abfragen) stabil!!

sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

#71
Zusammenfassung der Erkenntnisse aus dem Wochenende ;-)

1.
Zitat von: Andi291 am 22 März 2018, 19:31:21
Aber jetzt: Kannst Du es bitte versuchen, einzugrenzen - siehe Anhang. Ich kann's nicht nachvollziehen...

Nein, leider. Geht bei mir nicht, egal was ich mache.

2.
Zitat von: Andi291 am 22 März 2018, 19:31:21
Naja, irgendwie brauchts ne Storyline - ich bin da relativ frei. Alternativ kommt zuerst answerReading mit state als Input, dann -put mit Inhalt des readings und zum Schluß putCmd. Ist mir eigentlich wurscht. Aber irgendeine Priorität muss man vorgeben..

Wie oben geschrieben sollte meiner Meinung nach definitiv putCmd immer ausgewertet werden! Dort kann ich auf die anderen Fälle alle reagieren!
Die aktuelle Variante funktioniert nicht, denn wenn value=0, was bei Temperaturen gerade öfter vorkommt, wird putCmd auch nicht ausgewertet. Ich habe die Prüfung für mich einfach entfernt!

3.
Zitat von: Andi291 am 22 März 2018, 19:31:21
Jetzt wird es kniffelig...
Die TUL kenn die Geräte nicht, für die Telegramme empfangen werden. Beim Empfang eines Telegrammes wird eine willkürliche KNX-Instanz (nicht deterministisch) angesprungen und in einer Schleife anhand des globalen Hashes "defptr" das entsprechende Hash in "deviceHash" gemapped.
Der restliche Kontext steht nicht zur Verfügung...
Ich hab mal einen Hack eingebaut. Funktioniert es damit?

Nein! Ich musste als Workaround fie Namen hardcodieren.

in #4 ist ein Testdevice! In diesem kannst Du auch den Fall für #3 testen. Aktuell gibt es als Temperatur über ETS abgefragt 0° zurück, anstatt 5.
wenn Du die eine Zeile in putCmd auskommentierst, wird korrekt 5° zurückgegeben.

Ein simples "{ ReadingsNum($name,"measured-temp-put",3) }" als stateCmd funktioniert jetzt übrigens auch nicht mehr, diehe Beispiel aus #4.

4. (Edit1):
Ein Device, das selbst eine Antwort mit putCmd liefert, kann nich selbst nicht mit "get <device> temperature" abfragen.

im Test für diesen Fall sollte meiner Meinung nach ein
get DemoKNX measured-temp ein Ergebnis liefern, und das Reading measured-temp-get aktualisieren.
Es wird jedoch lediglich measured-temp-put aktualisiert.

defmod DemoKNX KNX 1/0/30:dpt9.001:measured-temp
attr DemoKNX userattr correspondReturnSensor
attr DemoKNX answerReading 1
attr DemoKNX correspondReturnSensor DemoKNX
attr DemoKNX putCmd {\
  if ($gad =~ /measured-temp/) {\
   $value= ReadingsNum(AttrVal($name,"correspondReturnSensor",undef),"temperatureTest",0,1);;\
   #$value= ReadingsNum("DemoKNX","temperatureTest",0,1);;\
  }\
}
attr DemoKNX stateCmd { ReadingsNum($name,"measured-temp-put",3) }
attr DemoKNX verbose 5
attr DemoKNX widgetOverride stateCmd:textField-long\
eventMap:textField-long\
widgetOverride:textField-long\
putCmd:textField-long

setstate DemoKNX 2018-03-26 08:52:34 measured-temp-put 0.0
setstate DemoKNX 2018-03-26 08:52:35 temperatureTest 5



5. Wie wird GETSTRING wieder bereinigt, wenn ich GADs aus der Definition entferne?
Denn selbst beim kopieren eines Devices wird das immer mitgezogen!

6. beim Anlegen des Testdevices aus #4 bekomme ich diese Fehlermeldung:
Unknown argument, choose one of measured-temp:slider,-670760,13415,670760

Aber generell ist der Ansatz schon eine tolle Weiterentwicklung!! Möchte nicht mehr zum alten zurückkehren!!

sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

Nachtrag1:

Hier in diesem Device wird irgendwie die falsche Gruppenadresse abgefragt.
Geklickt habe ich im Webinterface auf "get knx.wetter measured-temp,
und hätte mir erwartet dass er 0/5/6 abfrägt.
Bei anderen Devices ist mir hier bishe rnie ein Fehler aufgefallen...

Siehe Screenshot:

sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Andi291

Öhm...

Wie kopierst Du ein Device?

Frage wegen des GETSTRING...

JoeALLb

#74
Mit
copy olddevice newdevice
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270