DPT_DateTime (dpt19.001)

Begonnen von NehCoy, 29 August 2017, 15:43:54

Vorheriges Thema - Nächstes Thema

NehCoy

Hallo!

Mein IP-Interface sendet u.a. die aktuelle Uhrzeit und Datum als DPT_DateTime (dpt19.001).
Wie kann ich diese Format richtig in FHEM darstellen?
Oder zumindest "richtig" ignorieren. Uhrzeit und Datum werden zusätzlich auch getrennt von einander als dpt10 bzw. dpt11 gesendet.

Danke und viele Grüße
NehCoy

Andi291

Gar nicht - den dpt müsste man erst implementieren  :-\

Da komm ich im Moment nicht dazu...

NehCoy

Ok. Kein Ding!
Würde dir ja gerne dabei helfen ...

erwin

Hi NehCoy & Andi,

ich hatte 2016 damit begonnen und es hat auch funktioniert (mit einer Einschränkung bezüglich Wochentag....), ich habs aber dann nicht weiterverfolgt, weil ich's nicht wirklich gebraucht habe.
Ich kann daher kein diff zur Verfügung stellen, sondern nur Fragmente für die KNX.pm:

my %dpttypes = (
....
  # Time of Day & Date combined
  "dpt19"                       => {CODE=>"dpt19", UNIT=>"", FACTOR=>undef, OFFSET=>undef, PATTERN=>qr/(((19[0-9][0-9]|2[01][0-9][0-9]).(1[0-2]|0?[0-9]).(3[01]|[0-2]?[0-9])_(2[0-4]|[0?1][0-9]):(60|[0?1-5]?[0-9]):(60|[0?1-5]?[0-9]))|([nN][oO][wW]))/, MIN=>undef, MAX=>undef},
....

in die encodeByDpt ($$$)

        #Time of Day & date combined
        elsif ($code eq "dpt19")
        {
                my ($secs,$mins,$hours,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
                if (lc($value) eq "now")
                {

                        #add offsets
#                        $year-=100; # year is based on 1900
                        $mon++;
                        # calculate offset for weekday
                        $wday = 7 if ($wday eq "0");
                        $wday = $wday<<5;
                        $hexval = sprintf("%04x%02x%02x%02x%02x%02x",$year,$mon,$mday,$wday+$hours,$mins,$secs);
                        $hexval .= sprintf("%04x",(0x60 + $isdst)<<8); # holiday not valid

                } else
                {
                        my ($yyyy, $mm, $dd, $hh, $mi, $ss) = split (/[\._ :]/, $value);
                        $yyyy -= 1900;  # year is based on 1900
        Log3 ($name, 5, "dpt19split= $yyyy, $mm, $dd, $hh, $mi, $ss");
                        $hexval = sprintf("%04x%02x%02x%02x%02x%02x",$yyyy,$mm,$dd,$hh,$mi,$ss);
                        $hexval .= sprintf("%04x",(0x64 + $isdst) <<8 );  # day of week not valid !
                }
                $numval = 0;
        }

in die decodeByDpt ($$$)

        #Time of Day & date combined
        elsif ($code eq "dpt19")
        {
                $numval = 0;
                my $numval1 = hex(substr($value,2,8)); # year/month/day/hours
                my $numval2 = hex(substr($value,10,8)); # mins/sec/2byte rest
                my $year  = ($numval1 >> 24) & 0xFF;
                my $month = ($numval1 >> 16) & 0x0F;
                my $day   = ($numval1 >> 8)  & 0x1F;
                my $dow   = ($numval1 >> 5)  & 0x07; # day of week: 0=any day,1=Monday,7=Sunday
                my $hours = $numval1         & 0x1F;
                my $mins  = ($numval2 >> 24) & 0x3F;
                my $secs  = ($numval2 >> 16) & 0x3F;

                $year += 1900;
                $state = sprintf("%04d.%02d.%02d_%02d:%02d:%02d",$year,$month,$day,$hours,$mins,$secs);
        }

Wie schon geschrieben, ich hab gegen die ETS4 Monitor getestet, aber mangels echter HW das nicht weiterverfolgt...
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,...

Andi291

Thx, kommt aufn Stapel.
Bald ist ja wieder Winter :-)

Wird dauern...

Grüße, Andi

NehCoy

Hi!

Kann man dann diese Gruppenadresse in FHEM irgendwie unterdrücken, so dass im Log auch nicht immer Fehlermeldungen eingetragen werden?

Danke & Grüße
NehCoy

Andi291

Verstehe die Frage nicht - kommentier das Gerät doch einfach aus?!

Ergo: ja!

JoeALLb

Häng mich da mal mit ran, habe eine Anzeige die nur DateTime kann, behelfe mir im Moment mit einer geliegenen GPS-Wetterstation zum Senden des Wertes..
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

habe es gerade getestet, wenn ich


2017.10.03_14:43:34 (also now)
sende, erhalte ich
1910.03.14_11:00:34
bei einer Leseabfrage.
Leider habe ich kein Gateway, nur den TUL und kann damit (mit meinen Einstellugen) nicht paralell im Gruppenmonitor mitlesen, was FHEM so absendet...
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

Habe es doch hinbekommen, dies ist die ETS-Fehlermeldung

GroupValueWrite 75 0A 03 4F 0F 2E 61 00 | Dienstag, 03.10.2017, 15:15:46 (-WV----S-) = (Fault: Normal (no fault), Working Day: Working day, No WD: WD field not valid, No Year: Year field valid, No Date: Month and Day of Month fields valid, No Day of Week: Day of week field valid, No Time: Hour of day, Minutes and Seconds field valid, Standard Summer Time: Time = UT+X+1, Qualitiy of clock: clock without ext. sync signal)
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

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

NoMercy

Hi Zusammen,

ich versuche gerade per dpt19 Daten von FHEM auf den KNX-Bus zu schicken. Irgendwie mache ich aber wohl noch einen Denkfehler und jemand kann mir helfen...

Aus meinem Vitotronic-Modul bekomme ich ein Reading "UpdateTime", welches das Datum/Uhrzeit des letzten Auslesens meiner Viessmann-Heizung beinhaltet. Das Format sieht so aus: "2018-04-30_12:32:44". Das sollte doch ziemlich genau dem dpt19.001 entsprechen, oder?

Mein KNX-Device sieht so aus:

# KNX-Device fuer die Übertragung des Zeitstempels der letzten Aktualisierung der Heizungsdaten
define UG_Heizkessel_AktualisierungSystemdaten2KNX KNX 4/7/60:dpt19
attr UG_Heizkessel_AktualisierungSystemdaten2KNX IODev KNX
attr UG_Heizkessel_AktualisierungSystemdaten2KNX group Parameter
attr UG_Heizkessel_AktualisierungSystemdaten2KNX room KNX,Heizung
attr UG_Heizkessel_AktualisierungSystemdaten2KNX webCmd :


Meine Idee war jetzt per DOIF, bei Änderung des Vitocontrol-Readings den aktuellen Wert auf den Bus zu senden. Das Reading "UG_Heizungsraum_Heizkessel:UpdateTime" stammt, wie gesagt aus dem Vitocontrol-Modul.

Mein DOIF sieht so aus:

### Aktualisierung des KNX-Readings für den Zeitstempel der Aktualisierung der Systemdaten
define DI_UG_Heizkessel_AktualisierungSystemdaten2KNX DOIF ([UG_Heizungsraum_Heizkessel:UpdateTime]) \
        (set UG_Heizkessel_AktualisierungSystemdaten2KNX value [UG_Heizungsraum_Heizkessel:UpdateTime])
attr UG_Heizkessel_AktualisierungSystemdaten2KNX cmdpause 30
attr UG_Heizkessel_AktualisierungSystemdaten2KNX do always
attr UG_Heizkessel_AktualisierungSystemdaten2KNX room Heizung,KNX


Mein Problem: Wie muß der SET-Befehl aussehen?

Egal, wie ich es versuche ( mit Set .. value... ; Set ... raw..., Set ... string, oder ohne) bekommt ich Meldungen zu inkompatiblen Datentypen etc.

Gruß,
Michael

Andi291

Hab grad keine ETS da, müsste so gehen:

set myDev value 13.01.1979_14:20:31

Bitte auch ein Log5 dranhängen - meine Glaskugel ist eingestaubt...

NoMercy

Hi,

meine Glaskugel auch  ;) Ich wollte nur hören, ob ich ggf. generell etwas falsch mache  :'(

Also ein paar Kleinigkeiten habe ich gefunden...

1.) Wenn ich es wie von Dir mit "set DPT19Test value 13.01.1979_14:20:31" versuche, kommt dies auch so als dpt19.001 auf dem Bus an (siehe Screenshot 1&2 aus der ETS)

2.) Ich bekomme den Wert in englischer Schreibweise aus meinem VCONTROL300-Device, also in Deinem Beispiel als "1979-01-13_14:20:31". Wenn ich diesen Wert in dieser Schreibweise als "set DPT19Test value 1979-01-13_14:20:31" über mein KNX-FHEM-Device absetze kommt der Fehler: Unknown argument 1979-01-13_14:20:31, choose one of on-for-timer on on-until value raw rgb:colorpicker string off off-till on-till toggle on-till-overnight blink intervals off-till-overnight off-for-timer

3.) In der FHEM-Weboberfläche wird allerdings in state "01.15.1900_13:14:20" angezeigt (siehe Screenshot 3)

Jetzt muß ich mir erstmal nur etwas ausdenken, wie ich die Werte aus meinem VCONTROL300-Device (englische Schreibweise) in das KNX-kompatible Format (deutsche Schreibweise) konvertieren kann. Die Daten landen dann ja schliesslich richtig auf dem Bus. Der Wert von "state" im KNX-Device ist für mich im Moment nur ein "Schönheitsfehler".