Uhrzeit mittels Fhem auf den KNX-Bus senden ? (Zeitgeber)

Begonnen von Peter-FL, 15 September 2014, 21:43:26

Vorheriges Thema - Nächstes Thema

Peter-FL

Hallo,

besteht die Möglichkeit mittels Fhem ein Zeitsignal auf den KNX Bus zu senden? Über die ETS Software kann ich mittels einer angelegten Gruppenadresse die aktuelle Zeit senden. Wäre schön wenn man das in Fhem automatisieren könnte da meine Gira Tastsensoren nach nur 24h um einige Minuten falsch gehen. Normalerweise wird dafür wohl ein Zeitgeber (~100€) eingesetzt...

VG
Peter

gki

Hallo Peter,

Ja.

http://fhem.de/commandref.html#EIB

http://forum.fhem.de/index.php/topic,10681.msg76533.html#msg76533

Antwort #5

   define timedev EIB 0/0/7
   attr timedev model time
   attr timedev eventMap /value now:now/
   attr timedev webCmd now
   
   define datedev EIB 0/0/8
   attr datedev model date
   attr datedev eventMap /value now:now/
   attr datedev webCmd now
   
   # send every midnight the new date
   define dateset at *00:00:00 set datedev value now
   
   # send every hour the current time
   define timeset at +*01:00:00 set timedev value now


Gruß,
Ines

Das Forum hat auch eine Suchfunktion  :) http://forum.fhem.de/index.php?action=search

Peter-FL

Hallo Ines,

vielen Dank für die schnelle Lösung meines Problems. Funktioniert super...

Ich habe vorher natürlich die Suchfunktion bemüht aber zu dem Stichwort "Zeitgeber" oder "Zeitsignal" (Begriffe aus der ETS) keine Treffer erzielt. Vielleicht hilft es ja dem Nächsten die Lösung jetzt auch unter diesen Suchbegriffen zu finden:)

Gruß
Peter

chrisb101

Hallo zusammen,

hoffe ich darf mich hier mal einklinken. ;-)

Ich habe das nun ebenfalls genauso implementiert, allerdings kommt auf den TS2+ nicht die korrekte Uhrzeit an. Seltsamerweise immer nur eine Uhrzeit zwischen 3 und 5.
Ist doch richtig dass 0/0/7 und 0/0/8 jeweils die Gruppenadressen im KNX für Datum und Uhrzeit sind, oder?

Zudem sendet wohl FHEM nicht den Tag mit auf den Bus, dieser fehlt dann bei der Heizungsprogrammierung im Tastsensor.
Sehe ich das richtig?

Gruss
Christian


Monosurround

Hallo Christian,

Bei mir funktionierte es mit einem TS3+ genau so.

Nur die Gruppenadresse für die Uhrzeit per ETS als Kommunikationsobjekt im Tastsensor eingetragen und seit dem wird die Uhrzeit von Fhem empfangen.

Wenn du das Beispiel genau so übernommen hast sendet Fhem jede Stunde die Uhrzeit auf den Bus.

# send every hour the current time
   define timeset at +*01:00:00 set timedev value now
Fhem on Pi3B (Buster): KNXD, HM-LAN, SIGNALduino, ....

chrisb101

Hi,

ok dann funktioniert zumindest das Senden der Uhrzeit auf den Bus. ;-)
Allerdings zeigen die Gira TS2+ eine Uhrzeit an welche exakt 5 Stunden in der Zukunft liegt. :-(

Dass Problem mit dem fehlenden Wochentag hab ich immernoch. Ist das bei Dir gelöst?
Ist lt. Gira Doku für die die Heizungssteuerung notwendig.

Gruss

Monosurround

Bei mir zeigt Fhem mit den oben geposteten Einstellungen folgendes:

timedev Uhrzeit bspw. 19:04:38 und dem Button now

Wenn ich now klicke schickt Fhem bei mir auch 13 04 auf dem Bus.

Angezeigt wird aber 19:04 am Tastsensor

Mit dem Datum hab ich mich bisher nicht weiter beschäftigt
Fhem on Pi3B (Buster): KNXD, HM-LAN, SIGNALduino, ....

apairon

Zitat von: chrisb101 am 05 Januar 2015, 18:23:08
Dass Problem mit dem fehlenden Wochentag hab ich immernoch. Ist das bei Dir gelöst?
Ist lt. Gira Doku für die die Heizungssteuerung notwendig.

Das Problem hatte ich auch, siehe Patch: http://forum.fhem.de/index.php/topic,34611.0.html

reTOric

Hallo,

ich bin gerade dabei mein KNX System aufzusetzen und hab ein komplett neues FHEM am laufen.
Nun wollte ich wie in der commandref aufgeführt Zeit und Datum über den Bus senden.

define timedev EIB 0/0/7
      attr timedev model dpt10
      attr timedev eventMap /value now:now/
      attr timedev webCmd now
     
      define datedev EIB 0/0/8
      attr datedev model dpt11
      attr datedev eventMap /value now:now/
      attr datedev webCmd now
     
      # send every midnight the new date
      define dateset at *00:00:00 set datedev value now
     
      # send every hour the current time
      define timeset at +*01:00:00 set timedev value now


Bekomme aber im Logfile diese Meldungen.

PERL WARNING: Use of uninitialized value $FW_id in hash element at ./FHEM/01_FHEMWEB.pm line 680.
2015.11.19 13:18:47 1: PERL WARNING: Use of uninitialized value $yyyy in subtraction (-) at ./FHEM/10_EIB.pm line 678.
2015.11.19 13:18:47 1: PERL WARNING: Use of uninitialized value $mm in left bitshift (<<) at ./FHEM/10_EIB.pm line 678.
2015.11.19 13:18:47 1: PERL WARNING: Argument "now" isn't numeric in left bitshift (<<) at ./FHEM/10_EIB.pm line 678.
2015.11.19 13:18:47 1: PERL WARNING: Hexadecimal number > 0xffffffff non-portable at ./FHEM/10_EIB.pm line 862.
2015.11.19 13:18:47 1: PERL WARNING: Use of uninitialized value $FW_id in concatenation (.) or string at ./FHEM/01_FHEMWEB.pm line 745.
2015.11.19 13:20:18 1: PERL WARNING: Use of uninitialized value $mm in left bitshift (<<) at ./FHEM/10_EIB.pm line 635.
2015.11.19 13:20:18 1: PERL WARNING: Use of uninitialized value $ss in addition (+) at ./FHEM/10_EIB.pm line 635.
2015.11.19 13:20:18 1: PERL WARNING: Argument "now" isn't numeric in left bitshift (<<) at ./FHEM/10_EIB.pm line 635.


Im STATE von Datedev steht immer 31.08.2048 im reading aber das aktuelle Datum.
Im STATE von Timedev steht 00:00:00 im Reading die aktuelle Zeit.

Kann bitte jemand helfen?
Viele Grüße
Henrik

Andi291

Abend!

Au weh - mir deucht, ich muss die Doku mal aufräumen.

Geht ganz easy - bitte nicht DPT10/11 verwenden, sondern date/time. Empfangene Telegramme werden ignoriert, gesendete enthalten immer die aktuelle Systemzeit.
Siehe Doku:

◦time -> receiving has no effect, sending any value contains actual system time
◦date -> receiving has no effect, sending any value contains actual system date

Was bei u.g. Skript klemmt - weiß nicht genau. Sieht nach einem Formatierungsproblem aus.

Grüße, Andi

reTOric

Hallo,

manchmal ist die Antwort so einfach. einfach mal die Augen auf machen und das Hirn anschalten. Sorry hätte ich auch sehen können wenn ich mir mal alle Elemente unter Model richtig angeschaut hätte. Ich verspreche Besserung. ;-)

Vielen Dank für die Hilfe.
Henrik

Andi291

Hallo Henrik,

ja, und wenn in der Doku kein Müll stände wärs noch einfacher :-P

Gut, wenn es funktioniert!

Schönen Abend!

Andi291

Servus!

so, habe nochmal geprüft.
So, wie es in der commandref drin steht, funktioniert es sogar. Dein Fehler waren "nur" die Datentypen...

Grüße, Andi

Alveole

#13
Hallo!
und wie funktioniert das nun nach der KNX Umstellung.
mit dpt10 und dpt11 gehts leider nicht.

define datedev KNX 1/1/1:dpt11
attr datedev IODev EIB
attr datedev eventMap /value now:now/
attr datedev webCmd now


define timedev KNX 1/1/0:dpt10
attr timedev IODev EIB
attr timedev eventMap /value now:now/
attr timedev webCmd now


bringt leider nicht das passende Ergebnis wie zuvor mit EIB

Andi291

Abend!

Müsste eigentlich funktionieren. Was passiert denn genau? Was sagt das verbose-5-log?

Grüße, Andi

erwin

Hi Andi!
Schaut so aus als ob das encoding nicht funktioniert:
2016.06.03 06:17:05.646 5: enter set KNXtime: hash: HASH(0x174f290), attributes:  KNXtime, value, now
2016.06.03 06:17:05.646 5: set KNXtime: model: dpt10, GAD: 10/0/9, GAD hex: a009 , gno: 1
2016.06.03 06:17:05.647 5: check value: now, gno: 1
2016.06.03 06:17:05.648 5: check value: now, gno: 1, model: dpt10, pattern: (?^: ((2[0-4]|[0?1][0-9]):(60|[0?1-5]?[0-9]):(60|[0?1-5]?[0-9]))|([nN][oO][wW]))
2016.06.03 06:17:05.648 5: encode value: now, gno: 1
2016.06.03 06:17:05.649 5: encode model: dpt10, code: dpt10, value: now
2016.06.03 06:17:05.649 5: encode normalized value: now
2016.06.03 06:17:05.650 5: encode model: dpt10, code: dpt10, value: 166:17:5, numval: 21369093, hexval: 001461105

Ich hab so getestet:
ETS-GA_Monitor -> FHEM: funktioniert ok, richtige Werte!
FHEM -> GA-Monitor: (mit set KNXTIME now) : brint obigen log, FHEM terminiert ohne weiteren log-eintrag, es kommt nix am GA-Monitor an.
PS: mit EIB-Definition (model time) funktionierts in beide Richtungen einwandfrei!
l.g. & danke 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,...

Alveole

#16
Hallo,
mein verbose-5 log sagt folgendes:

Zitat2016.06.03 04:00:00 5: exec at command timeset
2016.06.03 04:00:00 5: Cmd: >set timedev value now<
2016.06.03 04:00:00 5: enter set timedev: hash: HASH(0x1bee230), attributes: timedev, value, value, now
2016.06.03 04:00:00 5: set timedev: model: dpt10, GAD: 1/1/0, GAD hex: 1100, gno: 1
2016.06.03 04:00:00 5: check value: value, gno: 1
2016.06.03 04:00:00 3: timeset: invalid value: value
2016.06.03 04:00:00 5: redefine at command timeset as *04:00:00 set timedev value now

2016.06.03 04:05:00 5: exec at command dateset
2016.06.03 04:05:00 5: Cmd: >set datedev value now<
2016.06.03 04:05:00 5: enter set datedev: hash: HASH(0x1bee1d0), attributes: datedev, value, value, now
2016.06.03 04:05:00 5: set datedev: model: dpt11, GAD: 1/1/1, GAD hex: 1101, gno: 1
2016.06.03 04:05:00 5: check value: value, gno: 1
2016.06.03 04:05:00 3: dateset: invalid value: value
2016.06.03 04:05:00 5: redefine at command dateset as *04:05:00 set datedev value now

der aus folgenden Quellcode resultiert

define timedev KNX 1/1/0:dpt10
attr timedev IODev EIB
attr timedev eventMap /value now:now/
attr timedev webCmd now

define datedev KNX 1/1/1:dpt11
attr datedev IODev EIB
attr datedev eventMap /value now:now/
attr datedev webCmd now

define dateset at *04:05:00 set datedev value now

define timeset at *04:00:00 set timedev value now


das komische ist, wenn ich das senden des Wertes manuell auslöse (auf "now" clicke) und schaue was in der ETS mitgelesen wird kommt das richtige Datum, aber immer als Wochentag Samstag.

erwin

Hi Andi,

Problem gefunden: die zeile 1079 soll so lauten:

#                       $numval = $secs + ($mins<<8) + (($hoffset + $hours)<<16);
                       $numval = $secs + ($mins<<8) + ($hours<<16);

...derzeit wird der Tag 2* addiert....
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

Servus!

Ich schau mal drauf - hoffe, ich schaffe es am Sonntag...

Grüße, Andi

setstate

#19
Was mache ich hier falsch?


2016.06.04 11:48:39 5: exec at command timeset
2016.06.04 11:48:39 5: Cmd: >set timedev value now<
2016.06.04 11:48:39 5: enter set timedev: hash: HASH(0x34241e0), attributes: timedev, value, value, now
2016.06.04 11:48:39 5: set timedev: model: dpt10, GAD: 0/0/7, GAD hex: 0007, gno: 1
2016.06.04 11:48:39 5: check value: value, gno: 1
2016.06.04 11:48:39 3: timeset: invalid value: value


Definition sieht so aus (laut Commendref)

Zitat###  KNX  ###
define tul TUL eibd:localhost 1.1.255
attr tul room System
attr tul useEIB 1
define timedev KNX 0/0/7:dpt10
attr timedev IODev tul
attr timedev eventMap /value now:now/
attr timedev webCmd now
     
define datedev KNX 0/0/8:dpt1
attr datedev IODev tul
attr datedev eventMap /value now:now/
attr datedev webCmd now
     
# send every midnight the new date
#define dateset at *00:00:00 set datedev value now
     
# send every hour the current time
#define timeset at +*01:00:00 set timedev value now

Mit Fixwert klappt es:


2016.06.04 11:43:55 5: Cmd: >set timedev value 12:13:14<
2016.06.04 11:43:55 5: enter set timedev: hash: HASH(0x34241e0), attributes: timedev, value, 12:13:14
2016.06.04 11:43:55 5: set timedev: model: dpt10, GAD: 0/0/7, GAD hex: 0007, gno: 1
2016.06.04 11:43:55 5: check value: 12:13:14, gno: 1
2016.06.04 11:43:55 5: check value: 12:13:14, gno: 1, model: dpt10, pattern: (?^:((2[0-4]|[0?1][0-9]):(60|[0?1-5]?[0-9]):(60|[0?1-5]?[0-9]))|([nN][oO][wW]))
2016.06.04 11:43:55 5: encode value: 12:13:14, gno: 1
2016.06.04 11:43:55 5: encode model: dpt10, code: dpt10, value: 12:13:14
2016.06.04 11:43:55 5: encode normalized value: 12:13:14
2016.06.04 11:43:55 5: encode model: dpt10, code: dpt10, value: 12:13:14, numval: 789774, hexval: 000c0d0e
2016.06.04 11:43:55 5: sending Cw0007000c0d0e
2016.06.04 11:43:55 5: encode_eibd dst: 0007 apci: 2 datalen: 4 data: 0 12 13 14
2016.06.04 11:43:55 5: SendGroup: dst: 0007, msg: 7 0 128 12 13 14

2016.06.04 11:43:55 5: sendRequest: 0027000700800c0d0e

2016.06.04 11:43:55 5: set timedev: cmd: value, value: 12:13:14, translated: 000c0d0e
2016.06.04 11:43:55 5: decode value: 000c0d0e, gno: 1
2016.06.04 11:43:55 5: decode model: dpt10, code: dpt10, value: 000c0d0e
2016.06.04 11:43:55 5: decode model: dpt10, code: dpt10, value: 000c0d0e, numval: 789774, state: 12:13:14


Wenn ich webCmd drücke, hängt sich FHEM kpl. auf. Dann muss ich auf mein RestartScript warten. Im Log sieht man keinen Fehler, nur den Neustart (12:00 - 12:05)


2016.06.04 12:00:44 4: WEB_192.168.178.58_58341 GET /fhem?detail=timedev&cmd.timedev=set%20timedev%20now; BUFLEN:0
2016.06.04 12:00:44 5: Cmd: >set timedev now<
2016.06.04 12:00:44 5: enter set timedev: hash: HASH(0x34241e0), attributes: timedev, value, now
2016.06.04 12:00:44 5: set timedev: model: dpt10, GAD: 0/0/7, GAD hex: 0007, gno: 1
2016.06.04 12:00:44 5: check value: now, gno: 1
2016.06.04 12:00:44 5: check value: now, gno: 1, model: dpt10, pattern: (?^:((2[0-4]|[0?1][0-9]):(60|[0?1-5]?[0-9]):(60|[0?1-5]?[0-9]))|([nN][oO][wW]))
2016.06.04 12:00:44 5: encode value: now, gno: 1
2016.06.04 12:00:44 5: encode model: dpt10, code: dpt10, value: now
2016.06.04 12:00:44 5: encode normalized value: now
2016.06.04 12:00:44 5: encode model: dpt10, code: dpt10, value: 204:0:44, numval: 25952300, hexval: 0018c002c
2016.06.04 12:00:44 5: sending Cw00070018c002c
2016.06.04 12:05:05 5: Initializing Type Library:
2016.06.04 12:05:05 1: Including /opt/fhem/fhem.cfg


value: 204:0:44
anstatt 12:00:44 wird die Ursache sein ...

Übrigens, beim datedev gibt es keine Probleme

setstate

ich gehe jetzt mal davon aus, dass das ein Fehler im 10_KNX ist und hoffe auf einen baldigen Fix.

Oder steht das in der KNX Spec (habe ich nicht gelesen), dass in die Uhrzeit der Wochentag als Offset eingeht? Oder ist das eher ein copy&paste Fehler?

#add offsets
$year+=1900;
$mon++;
# calculate offset for weekday
$wday = 7 if ($wday eq "0");
$hoffset = 32*$wday;
$hours += $hoffset;

Andi291

Geprüft, geändert und nochmal geprüft.

Wird die nächsten 15min eingechecked.

Und ja: den Offset brauchts wegen der Unix-Time. Aber halt nur einmal - und keine zwei mal :-)

Grüße, Andi

setstate

Danke fürs Anpassen, jetzt hängt sich FHEM nicht mehr auf.

Aber ich bekomme noch das bei diesem Befehl im FHEMWEB
set timedev value now

Ergebnis:
Zitatinvalid value: value

Und damit funktioniert das Beispiel aus dem Commandref nicht:

Zitat
      # send every midnight the new date
      define dateset at *00:00:00 set datedev value now
     
      # send every hour the current time
      define timeset at +*01:00:00 set timedev value now

Muss das nicht so heißen? So geht es ...

define timeset at +*01:00:00 set timedev now

Andi291


Andi291

Hatte ich neulich aber bereits in der comandref angepasst. Kriegst Du das noch nicht angezeigt?

Falki

Hallo Andi,

kannst du bitte die genannte Änderung (Wegfall von value) in der Commandref einpflegen? Das hilft sich noch dem einen oder anderen weiter.

Ich sehe unter http://fhem.de/commandref.html#KNX immer noch die Eib-Version. Danke.

Grüße
Falki
KNX + Cubietruck + FHEM

Andi291

Jup. Kommt in die nächste Version. Warum auch immer ich das noch nicht gemacht habe...

Andi291


lichtimc

Hey Andi,

zur Info: das "attr timedev eventMap /value now:now/" fehlt noch in der Commandref... hab mich gerade gewundert, wieso der Befehlt nicht funktioniert hat...

lg, LichtiMC

Syon

Hallo, ich hänge mich hier mich mal an.

Mit meiner fhem.cfg schreibt er statt des Datums die Werte mittels Zeit Formatierung...
efine timedev KNX 6/1/1:dpt10
attr timedev IODev KNX
attr timedev eventMap /value now:now/
attr timedev webCmd now

define datedev KNX 6/1/2:dpt11
attr datedev IODev KNX
attr datedev eventMap /value now:now/
attr datedev webCmd now


# send every midnight the new date
define dateset at *00:00:00 set datedev now

# send every hour the current time
define timeset at +*01:00:00 set timedev now


In der ETS kommt dann sowas wie im Bild.

Andi291


Syon

Hey,

Die Internals:
DEF                                  6/1/2:dpt11
DEVNAME                              datedev
IODev                                           KNX
KNX_MSGCNT                           2
KNX_RAWMSG                          C01102w06102160611
KNX_TIME                                  2017-06-22 12:16:17
LASTInputDev                            KNX
MSGCNT                                    2
NAME                                          datedev
NR                                              49
NTFY_ORDER                          50-datedev
STATE                                        22.06.2017
TYPE                                           KNX


Die Readings:

getG1                 22.06.2017                      2017-06-22 12:16:17
last-sender                  1/1/2                                 2017-06-22 12:16:17
setG1                           22.06.2017                       2017-06-22 13:07:20
state                             22.06.2017                       2017-06-22 13:07:20


Attributes:
IODev          KNX
eventMap              /value now:now/
webCmd                now

Andi291


Syon

In meinem ersten Post ist ein Bild vom Problem.
Das Datum wird als Zeit formatiert.

Andi291

Wo denn? In der ETS?

Dann stell im Gruppenmonitor in der Dropdownliste von Uhrzeit auf Datum. Nachdem beides 3-Byte-Werte sind, kann die ETS das nicht automatisch erkennen. Muss man ihr sagen...

Syon

Also nur ein Darstellungsproblem? Super, vielen Dank.

gimate

Hallo, in der commandref steht immer noch


      # send every hour the current time
      define timeset at +*01:00:00 set timedev value now


damit hat es bei mir nicht funktioniert. erst mit dem Hinweis aus diesem thread:


define timeset at +*01:00:00 set timedev now


wird die Zeit auch stündlich verschickt.

Commandref Beispiel sollte korrigiert werden.

Andi291

Sorry, aber das kann nicht sein.

set myDevice now

Wird unweigerlich in einem Fehler enden. Es sei denn, Du hast per webCmd ein Alias angelegt...

gimate

Ich habe genau das Beispiel aus der commandref benutzt



The current date and time can be sent to the bus by the following settings:

      define timedev EIB 0/0/7
      attr timedev model time
      attr timedev eventMap /value now:now/
      attr timedev webCmd now
     
...
     
      # send every hour the current time
      define timeset at +*01:00:00 set timedev value now



so sieht es bei mir aus:


define KNX TUL knxd:192.168.178.29 0.0.1
attr KNX useEIB 0

define timedev KNX 0/0/3:dpt10
attr timedev IODev KNX
attr timedev eventMap /value now:now/
attr timedev webCmd now

# send every hour the current time
define timeset at +*01:00:00 set timedev now



Wenn  ich


set timedev value now


eingebe, bekomme ich eine Fehlermeldung:

Zitat
invalid value: value

das hingegen geht:

set timedev now


Andi291

Komisch. Habe es nachgestellt. Entzieht sich meiner Konrolle.
Lösche das Attribut "EventMap" und alles ist gut. Scheinbar hat die Weboberfläche ein Problem mit dem gleichlautenden Befehl...

Ich werde das Beispiel in der Commandref bei Gelegenheit anpassen.

Grüße, Andi