[erledigt] keine Get-FN für set option, Korr. KNX_parse

Begonnen von erwin, 19 Oktober 2020, 10:13:42

Vorheriges Thema - Nächstes Thema

Amenophis86

Kein Stress, sind ja nicht auf der Flucht. Es hat sich seit Februar nix getan, da müssen wir jetzt nicht zum Sprint ansetzen :D
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...

JoeALLb

Hey Leute, echt cool dass ihr euch dem hier annehmt!
Leider habe ich  mittlerweile alleine wegen diesem Modul FHEM den Rücken gekehrt, aber wer weiß, vielleicht komme ich wieder zurück! :D

Top Arbeit, danke!

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

ReviloEgros

Vielen lieben dank lieber Hauswart für das neue, angepasste Modul. Für unsere Heizungssteuerung könnte ich noch folgende Datenpunkte gebrauchen, die das KNX Modul leider auch nicht versteht.


RHCC Status: dpt22.101
Verschiebung -128 bis 127: dpt6.010

Wäre klasse, wenn diese auch den Weg in das Modul finden würden!

erwin

Hi ReviloEgros,
ich bin gerade dabei, die dpt1 definitionen zu überarbeiten, es wird aber noch etwas dauern....
das mit dem dpt6.010 sollte kein Problem sein, das ist leicht! Frage dazu: funktionierts, wenn du dpt6 angibts ? sollte das gleiche sein!

zum dpt22.101: ich hab mir den standard angeschaut, das sind 16 Status-bits, jedes mit einem Text dargestellt. Wie sollte ein Reading ausschauen??
Vom coding her wärs kein Problem, ich weiß nur nicht wie ich das sinnvoll in ein reading packen soll... Vorschläge dazu?
Das sind die Bits und der text dazu:
bit 0   Fault
bit 1   StatusEcoH
bit 2   TempFlowLimit
bit 3   TempReturnLimit
bit 4   StatusMorningBoostH
bit 5   StatusStartOptim
bit 6   StatusStopOptim
bit 7   HeatingDisabled
bit 8   HeatCoolMode
bit 9   StatusEcoC
bit 10  StatusPreCool
bit 11  CoolingDisabled
bit 12  DewPointStatus
bit 13  FrostAlarm
bit 14  HeatCoolMode
bit 15  reserved


Eine denkbare Variante wär, einfach duch Bindestrich getrennt, NUR die aktiven Status-bits darzustellen, zB. so:
Fault-TempReturnLimit-HeatCoolMode- FrostAlarm

Andere Variante: du definierst ein dpt7 und machst ein userreading darauf - bei dem code könnt ich dich unterstützen, den hab ich fast fertig..
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,...

ReviloEgros

Hi,

dpt6 geht zur not auch, aber unschön  ;D

Und zum dpt22.101... Das kommt aus der ETS:

(OverheatAlarm: no alarm,
FrostAlarm: no alarm,
DewPointStatus: no alarm,
CoolingDisabled: false,
StatusPreCool: false,
StatusEcoC: false,
HeatCoolMode: heating,
HeatingDisabled: false,
StatusStopOptim: false,
StatusStartOptim: false,
StatusMorningBoostH: false,
TempFlowReturnLimit: false,
TempFlowLimit: false,
StatusEcoH: false,
Fault: false)


Idealerweise wäre es schön, würden entsprechende Unterreadings gleich im Modul erzeugt. Also wenn ich es zum Beispiel mit 0/4/24:dpt22.101:rhcc definiere, das dann entsprechende readings so aussehen könnten:

rhcc-FrostAlarm-get
rhcc-DewPointStatus-get

usw. Ich weiß nicht, wieviel Arbeit das machen würde.

erwin

Hi,
Zitatdpt6 geht zur not auch, aber unschön 
dpt6 ist genauso schön oder unschön  8) wie dpt6.010, weil exakt die gleiche definition - in FHEM und auch im ETX Standard.
den dpt6.010 werde ich implementieren, gemeinsam mit den dpt1 Änderungen.

Ad dpt22.101:
dein Vorschag geht so nicht (zumindest nicht im Modul). Das würde ein komplettes rework des Moduls bedeuten, dass massiv in die Logik eingreift. Das wird sicher nicht passieren, schon aus Kompatibilitätsgründen... Selbst wenn das machbar wär, was schreiben wir dann in state?

Was geht, wär eine Lösung mittels userreadings oder statecmd, dafür sind die Dinger ja da.
Zeig mir mal deine def mit dpt7, dann kann ich dir mit userreading helfen...    Falls das ok ist, könnte ich den dpt22.101 so implementieren, dass bei der definition ein userreading automatisch generiert wird.... 
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,...

ReviloEgros

Ok, dann lassen wir das  ;)

Wie wäre es dann, wenn das Reading dann einfach in binär dargestellt wird? Das wäre jetzt meine letzte Idee die ich noch hätte. Klar geht umwandeln mit einem userreading auch so, aber würde denke ich für einige die Sache etwas vereinfachen.

Amenophis86

Was mir noch einfällt in Bezug auf dpt1.024 Tag/Nacht es müsste die Möglichkeit geben, dass ich die beiden umkehren kann. Ich habe viel MDT im Einsatz und die haben im Standard es leider genau anders herum als 1.024 es angelegt hat ist mir gerade aufgefallen. Vielleicht könnte man im KNX Client ein Reading setzen mit der Option 1.024 zu ändern.

Dies würde ich auch als steuerelement sehen um zum Beispiel automatisch ein Userreading anzulegen. Soll heißen man kann hier zum Beispiel die Option einfügen, wenn diese aktiv ist, dass in den entsprechenden GruppenDevice die Userreadings automatisch angelegt werden, sofern sie benötigt werden. Werfe die Idee mal so in Raum, da sie mir eben spontan gekommen ist.
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...

erwin

Irgendwie hat mich der Ergeiz erwischt...
Falls noch Interesse besteht,so könnte ein userreading ausschauen:
attr <device> userReadings status1:getG1.* {
    my $value = ReadingsNum("$NAME",'getG1',0);
    my $txt = '';
    $txt = 'Heating' if (($value & 0x0180) == 0x0100); #HeatCoolMode= 1,Heating disabled = 0
    $txt = 'Cooling' if (($value & 0x0900) == 0x0000); #HeatCoolMode= 0,Cooling disabled = 0
    $txt = 'Idle'    if (($value & 0x0880) == 0x0880); #Heating disabled,Cooling disabled
    $txt = 'Fault'   if (($value & 0x0001) > 0);
    $txt = 'Error'   if ($txt eq '');
    return $txt;
},
status2:getG1.* {
    my $value = ReadingsNum("$NAME",'getG1',0);
    my $mask = 0x01;
    my @text_arr = qw/Fault StatusEcoH TempFlowLimit TempReturnLimit StatusMorningBoostH
          StatusStartOptim StatusStopOptim HeatingDisabled HeatCoolMode StatusEcoC
          StatusPreCool CoolingDisabled DewPointStatus FrostAlarm OverheatAlarm reserved/;
    my $txt = '';
    for (my $i = 0; $i<=15; $i++) {
      if ($i == 0 || $i == 7 || $i == 8 || $i == 11) {  #already decoded before
        #already decoded before
      } else {
        $txt .= "$text_arr[$i]-" if (($value & $mask) > 0);
      }
      $mask = $mask<<1;
    }
    $txt =~ s/-$//x;
    return $txt;
}

..basierend auf einer dpt7 definition, die bei mir so ausschaut:
define dpt22test KNX 11/2/3:dpt7:get
es werden 2 neue readings generiert:
status1: Zustände: Fault/Cooling/Heating/Idle
status2: alle anderen, wo die jeweiligen bits 1 sind - im wesentlichen Alarme.
Binärdarstellung wär auf dieser Basis auch möglich, ich find die Texte aber aussagekräftiger.
gib einfach Bescheid ob das Sinn ergibt, ich hab keine solche Heizung, kann das nicht beurteilen.
falls ja, könnte das die Basis einer dpt22 Implementation werden.
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

@Amenophis86
hast du ein KNX-Standard Dokument wo dpt1.024 vorkommt? falls ja, würd ich dringend darum bitten.
Alternative: dpt1.001 mit eventmap on:Tag off:Nacht (oder umgekehrt...)
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

Habe an Dokumenten auch nur die V2.1 welche wir auf der KNX Seite gefunden haben. Ich habe es bei mir in der ETS mal für meine Tag Nacht Adressen eingestellt und dabei gemerkt, dass es "falsch herum" ist.

Stimmt, könnte man in FHEM auch einfach ummappen.
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...

erwin

Ich hab ein Wetterstation von MDT, ich glaube SCN-WS3HW.01 da gibts eine Dämmerungsfunktion bei der kann man einstellen (ETS) Tag=1 Nacht=0 oder Tag=0 Nacht=1 ...
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

Hatte je geschrieben, dass ich es bei allen andern könnte aber das wäre ein riesen Aufwand jetzt meine gesamte Anlage zu drehen, weil es in der ETS fest vorgegeben ist. Daher war die Überlegung, dass man es im KNX Modul auswählen kann, denke es wird noch mehr Leuten so gehen. Aber über mapping geht es ja zur Not auch, daran hatte ich nicht gedacht.
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...

ReviloEgros

Zitat von: erwin am 15 November 2020, 19:49:20
gib einfach Bescheid ob das Sinn ergibt, ich hab keine solche Heizung, kann das nicht beurteilen.

Macht auf jeden Fall Sinn. Sehr viel aussagekräftiger als ein Binär oder Dezimalwert allemal!
Aktuell behelfe ich mir mit einem Notify. Ich poste das mal, falls es jemand gebrauchen könnte.
Über Sinn und Unsinn meiner Variablen und Formatierung lässt sich streiten, aber sollte ja nur für mich sein ;)

heizung.eg:rhcc-status-get:.*
{
my @myPART    = split(//, sprintf("%016b", ReadingsVal($NAME,"rhcc-status-get","")));
my $myREADING = "";

my @myTEXT    =({ name => "reserved",              0 => "reserved", 1 => "reserved" },
                { name => "OverheatAlarm",         0 => "no alarm", 1 => "alarm" },
                { name => "FrostAlarm",            0 => "no alarm", 1 => "alarm" },
                { name => "DewPointStatus",        0 => "no alarm", 1 => "alarm" },
                { name => "CoolingDisabled",       0 => "false",    1 => "true" },
                { name => "StatusPreCool",         0 => "false",    1 => "true" },
                { name => "StatusEcoC",            0 => "false",    1 => "true" },
                { name => "HeatCoolMode",          0 => "cooling",  1 => "heating" },
                { name => "HeatingDisabled",       0 => "false",    1 => "true" },
                { name => "StatusStopOptim",       0 => "false",    1 => "true" },
                { name => "StatusStartOptim",      0 => "false",    1 => "true" },
                { name => "StatusMorningBoostH",   0 => "false",    1 => "true" },
                { name => "TempFlowReturnLimit",   0 => "false",    1 => "true" },
                { name => "TempFlowLimit",         0 => "false",    1 => "true" },
                        { name => "StatusEcoH",            0 => "false",    1 => "true" },
                        { name => "Fault",                 0 => "false",    1 => "true" });
   
    for (my $i = 0; $i<=15; $i++)
        {
$myREADING = "rhcc-" . $myTEXT[$i]->{"name"} . " " . $myTEXT[$i]->{$myPART[$i]};
fhem "setreading $NAME $myREADING";
        }
}