Modul 10_KNX.pm - support

Begonnen von erwin, 23 August 2021, 08:59:59

Vorheriges Thema - Nächstes Thema

appi

Hallo Erwin
ich würde auch die Variante 2 bevorzugen, also das Auswerten des unteren nibbles, dann wäre es glaub nahe am Standart und für viele Benutzer brauchbar. Leider bin ich kein Perl Programmierer, sorry.

gruss Remo

erwin

Hi,
Variante 2 würde so aussehen (ab zeile 1818 in 10_KNX.pm) :
sub dec_dpt20 { #HVAC
        my $numval = hex (shift);
        $numval = ($numval & 0x0f); # <- das ist die Änderung !!!

Falls du dir die Änderung zutraust, bitte versuchen! anschließen shutdown/restart machen...
Ich könnte, wenn von dir Bedarf besteht, den zusätzlichen RHCC Status (DPT 22.101) implementieren.... (siehe mein vorheriger screenshot....)
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,...

appi

Hallo Erwin
funktioniert perfekt, vielen Dank

Gruss Remo

erwin

Hi Remo,
good news, dann kann ich mir noch etwas Zeit lassen mit der neuen Version  ;D
In der nächsten Version wird das drinnen sein.
Ich teste gerade den dpt22.101 und ein paar kleinere Änderungen....
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,...

erwin

Hi KNX community!

neue Version ist am SVN, change-history im 1.Beitrag in diesem Thread!
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,...

erwin

Hi KNX community!

neue Version ist am SVN, change-history im 1.Beitrag in diesem Thread!
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,...

erwin

Hi KNX community!
neue Version ist am SVN, change-history im 1.Beitrag in diesem Thread! (minor additions to cmdref & some cleanup)
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,...

gnampf

Kann es sein, dass bei KNX_eval das $hash kaputt gegangen ist? Ich verwende folgendes stateCmd:
{
    if ($gadName eq "Helligkeit")
    {
      my $s = $state =~ s/ lux//r;
      my $newVal = $s * 10;
      fhem("set $name Helligkeit10 $newVal");
      readingsBeginUpdate(%hash);
    }

    return ReadingsVal($name, "Helligkeit", "");
}

um bei einem einkommenden Wert diesen verzehnfacht wieder auf einem anderen GroupObj den Bus zu jagen. Nun mosert er aber über unbekannte Variable $hash. Nehme ich %hash, dann mosert er
2022.07.25 21:59:37 1: ERROR evaluating my $gadName=   $evalSpecials->{'%gadName'};my %hash=%{$evalSpecials->{'%hash'}};my $name=   $evalSpecials->{'%name'};my $state=   $evalSpecials->{'%state'};{
    if ($gadName eq "Helligkeit")
    {
      my $s = $state =~ s/ lux//r;
      my $newVal = $s * 10;
      fhem("set $name Helligkeit10 $newVal");
      readingsBeginUpdate(%hash);
    }

    return ReadingsVal($name, "Helligkeit", "");
}: Can't use string ("27") as a HASH ref while "strict refs" in use at fhem.pl line 4818.

erwin

Hi,
Ich kann jetzt nicht testen (offline Urlaub),
Du brauchst kein readingsbeginupdate... nach einem fhem(,,set ...

Und ,,Return $state;" sollte reichen.
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,...

gnampf

Mache ich das reaginsBeginUpdate nicht, dann wirft er mir entsprechende Fehler ins Log. Vermutlich weil der vorherige fhem-set auch ein Reading aktualisiert und das laufende Update dann beendet. Helligkeit wurde dadurch dann wenn ich mich recht erinnere auch nicht gesetzt.
Mache ich nur "return $state", dann aendert sich State mit jedem der zugeordneten Objekte. Er zeigt dann also den 10-fachen Wert an, von Helligkeit10.

Eilt aber nicht, geniess den Urlaub! Vielleicht find ich in der Zwischenzeit auch die Loesung, wenn ich mich nochmal mit Perl und seinen Typen auseinander setz.

erwin

Hi,
ein erster Test:
my $s = $state =~ s/ lux//r;
ergibt einen syntax error, damit sind alle nachfolgenden Berechnungen kaputt! und selbst wenn ich den syntax error korrigiere kommt für $s immer 0 oder 1 heraus (match/nomatch)!
ein readingsBeginUpdate darfts du dort nicht machen, weil zu diesem Zeitpunkt läuft bereist ein readingsBeginUpdate, und falls doch, musst du auch ein readingsEndUpdate machen, sonst kommen alle internen strukturen durcheinander....
Das ist aber gar nicht nötig !
Falls ich dich richtig verstanden habe, willst du aus einem vom Bus kommenden event "Helligkeit" - den 10fachen wert auf eine andere GA im selben FHEM device schicken.
Das könnte beispielhaft so aussehen:
defmod dpt9004 KNX 14/3/9:dpt9.004:Helligkeit:listenonly 14/4/9:dpt9.004:Helligkeit10
attr dpt9004 IODev myKNXIO
attr dpt9004 stateCmd {\
    if ($gadName eq 'Helligkeit')\
    {\
#      my ($newVal) = $state =~ /([-+\d\.]+).*/ix;;\
      my $newVal = (split(' ',$state))[0];;\
      $newVal *= 10;;\
      Log3 undef, 1, "Helligkeit = $state H10 = $newVal";;  \
      fhem("sleep 0.1;;set $name Helligkeit10 $newVal");;\
    }\
\
    return $state;;\
}

... exportiert mit raw definition ! Falls du das im statecmd im detail-view eingeben willst: Aus den 2fachen ;; -> einfache Strichpunkte machen, und \ bedeutet newline!
Kommentar zum code:
2 Varianten um aus "xxx lux" -> "xxx"  zu machen, beide haben den charme dass sie alles ignorieren was nach dem 1sten blank kommt.   
fhem("sleep 0.1;set $name..... -> zuerst wird das ankommende reading komplett verarbeitet, dann erst erfolgt ein "set..." auf das neue reading- value.
Ganz wichtig: das neue reading: (im Bsp: Helligkeit10) muss in der definition existieren, sonst ergibt das chaos!
Tip: das reading "Helligkeit" mit listenonly spezifizieren, damit niemand in Verlegenheit kommt, das von FHEM aus zu setzen!
Letzte Bemerkung: falls den neue wert größer 670000 wird, wird intern auf 670000 geklippt! (max wert von dpt9)
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,...

thomasg

#86
Hi zusammen,

ich habe auf das aktuellste KNX/fhem geupdated und habe mir in diesem Zusammenhang auch mal das neue Wiki angeschaut, um ein paar Ideen zu bekommen, wie ich meine Dimmbaren Lampen, sowohl über die WebUI als auch über die HandyUI steuern kann. Also Ein/Aus und Irgendwie Dimmwert festlegen.
Für die WebUI ist mir das mit untem stehenden Code (adaptiert aus dem neuen KNX Wiki) gelungen. Die Ergebnisse könnt Ihr in den folgenden Screenshots sehen:


WebUI
HandyUI

Ich bräuchte jetzt allerdings noch ein paar Gedankenanstöße, wie ich das besser hinbekommen:

* WebUI: Icon (Bspw. Lampe) für ein/aus weider einblenden.
* Steuerung auch über HandyUI. Eine 1-Tasten Bedienung wäre schön: Du drückst auf die Lampe. Dann dimmt es hoch oder runter solange bis du wieder auf die Lampe drückst

Die KNX-Adressen für ein/aus und Rückgabe status ein/aus sind 1/1/10:dpt1:EinAus und 1/4/10:dpt1:Status:listenonly.


defmod WOH.WL_Ost KNX 1/3/10:dpt5.001:Dimmen:set:nosuffix 1/5/10:dpt5.001:DimmStatus:get:nosuffix
attr WOH.WL_Ost IODev KNX
attr WOH.WL_Ost room KNX,Wohnen
attr WOH.WL_Ost stateCmd { fhem "sleep 0.05 quiet;; setreading $name Dimmen $state" if ($gadName eq 'DimmStatus');; return $state;; }
attr WOH.WL_Ost webCmd Dimmen
attr WOH.WL_Ost widgetOverride Dimmen:slider,0,5,100


Lieben Dank



erwin

#87
Hi Thomas,
... cool das du das wiki liest!

ad. HandyUI: da wird KEIN Webcmd angezeigt - ich nehme an du hast diese FHEMWEB-Instanz mit attribut smallscreen od iossmallscreen,... definiert.... (das ist ein FHEM-weite Funktion, hat nix mit KNX zu tun. (siehe wiki: webCmd - Einschränkungen)
ad. WebUI: wenn ich dich richtig verstehe, willst du in deinem gezeigten device  WOH.WL_Ost zusätzlich die GA's für on/off haben ?
Das könnte dann so aussehen:

defmod WOH.WL_Ost 1/1/10:dpt1:EinAus:set:nosuffix  1/4/10:dpt1:Status:listenonly:nosuffix KNX 1/3/10:dpt5.001:Dimmen:set:nosuffix 1/5/10:dpt5.001:DimmStatus:get:nosuffix
attr WOH.WL_Ost devStateIcon off:li_wht_off:on on:li_wht_on:off 0.*:li_wht_off:on \d+.*:li_wht_on:off

das devStateIcon wird "on" wenn im state-reading "on" oder eine Zahl > 0 steht. Beim draufklicken wird jeweils ein on bzw. off cmd auf die GA EinAus gesendet.

"EinTasten" Hoch/runter-dimmen würde mit einem Timer funktionieren, das ist allerdings eher komplex...
Eine "dimup" und "dimdown"-Taste würde eher realisierbar sein - z.b. jeder klick um +/-10%...  ...mit webCmd realisierbar

Edit: habs gefunden...:
attr <FHEMWEB> smallscreenCommands 1    --> gesetzt im FHEMWEB der HandyUI -> commands, slider and dropdown menues will appear in smallscreen landscape mode.
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,...

thomasg

#88
Danke für den Input.
Insbesondere wusste ich noch nicht, dass wenn ich das Handy queer halte, die Schieberegler usw wieder eingeblendet werden.
So kann ich ggf. das Lampensymbol haben und daneben den Schieberegler zum Einstellen des Dimmwertes.

Allerdings bietet der Dimmaktor (Siehe Bild im Anhang) auch eine Ein-Tasten-Steuerung. Das ist ja ein etwas anderer Datentyp als ein/aus - könntest Du mir hier noch einen Tipp geben, wie ich diese KNX-Gruppenadresse ansteuere? Wenn ich das ähnlich wie bei EinAus ansteuere, dann bewirkt das bei der Lampe nichts.

Bei meinen KNX Tastern drücke ich dann einfsch lange auf den taster - dann dimmt es schrittweise hoch - wenn ich nochmal lange draufdrücke dann dimmt es runter. ich dachte soetwas könnte ich analog auch in fhem realisieren - aber notfalls dann wie oben beschrieben mit lampe und daneben einen slider. mal gucken, ob ich das hingebastelt bekomme ;)

UPDATE:

Habe jetzt einmal die Variante mit Lampe und Slider daneben umgesetzt. Die Lampe zeigt den aktuellen Dimmwert an. Wenn ich draufklicke geht es an oder aus jenach aktuellem Zustand. Zwei Sachen gefallen mir noch nicht so ganz (Siehe auch Bild im Anhang):

1) Wenn ich auf die Lampe klicke, um vom Zustand Aus einzuschalten, zeigt das Lampensymbol erstmal on an - und nach ein paar sekunden zeigt es erst den aktuellen Dimmwert an - gibt es da einen trick, das anzupassen?
2) der Slider ist nicht bündig mit den anderen Slidern von den Rolläden bspw. kann man das irgendwie ausrichten?


defmod WOH.WL_Ost1 KNX 1/1/10:dpt1:Schalten:set:nosuffix 1/4/10:dpt1:SchaltenStatus:listenonly:nosuffix 1/3/10:dpt5.001:DimmWert:set:nosuffix 1/5/10:dpt5.001:DimmWertStatus:get:nosuffix
attr WOH.WL_Ost1 IODev KNX
attr WOH.WL_Ost1 devStateIcon off.*:light_light_dim_00:on 0.*:light_light_dim_00:on 1\d.*:light_light_dim_10:off 2\d.*:light_light_dim_20:off 3\d.*:light_light_dim_30:off 4\d.*:light_light_dim_40:off 5\d.*:light_light_dim_50:off 6\d.*:light_light_dim_60:off 7\d.*:light_light_dim_70:off 8\d.*:light_light_dim_80:off 9\d.*:light_light_dim_90:off 100.*:light_light_dim_100:off [1-9].*:light_light_dim_10:off
attr WOH.WL_Ost1 icon light_wall_2
attr WOH.WL_Ost1 room KNX,Wohnen
attr WOH.WL_Ost1 stateCmd { fhem "sleep 0.05 quiet;; setreading $name DimmWert $state" if ($gadName eq 'DimmStatus');; return $state;; }
attr WOH.WL_Ost1 webCmd DimmWert

erwin

Hi,
ZitatBei meinen KNX Tastern drücke ich dann einfsch lange auf den taster ....
Ok, das ist eine Funktion des Tasters, der sendet bei langem Tastendruck eine andere GA wie bei einem kurzen Tastendruck (und wiederholt das solange gedrückt bleibt...) - Um das zu verifizieren, könnte man mit dem ETS-GAMonitor zuschauen, welche Messages beim drücken kommen.
ZitatAllerdings bietet der Dimmaktor (Siehe Bild im Anhang) auch eine Ein-Tasten-Steuerung
du meinst die GA 1/2/10 ?
... die ist mit 4 bit spezifiziert, ich nehme daher an, es ist ein dpt3 (in der doku vom dimmer nachschauen?)
ich würde als ersten test mal das als "extra" device definieren und schauen was passiert
defmod dpt3test KNX 1/2/10:dpt3
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,...