Daten aus CCU auslesen für externe Verwendung (zb. IPS)

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

tomtom
Beiträge: 35
Registriert: 29.02.2008, 21:42

Daten aus CCU auslesen für externe Verwendung (zb. IPS)

Beitrag von tomtom » 12.03.2008, 07:46

Nachdem ja seitens IPS (derzeit) nicht geplant ist HomeMatic zu unterstützen (siehe: http://www.ipsymcon.de/forum/showthread.php?t=3702 ) ich aber trotzdem dieses System verwenden werde, suche ich nach einer möglichkeit verschiedene Daten aus der CCU zu lesen.

Ist es möglich die Werte der Wandthermostate zb. in eine Datei zu schreiben und diese zb. mittels FTP von der CCU zu lesen?

lg
tom

Benutzeravatar
a.krypthul
Beiträge: 41
Registriert: 27.01.2008, 13:51
Danksagung erhalten: 1 Mal

Re: Daten aus CCU auslesen für externe Verwendung (zb. IPS)

Beitrag von a.krypthul » 12.03.2008, 18:29

Hi tomtom,

that´s easy :mrgreen:

you have to start a tcl-script from a web-ui program periodically:
  • - condition time periodical (e.g. every 5 minutes)
    - activity "script" with the following line:
    "system.Exec("/etc/config/rega DAA0245873:1 TEMPERATURE /var/log/testfile.dat Y");"
Explanation:
  • call the script "rega" located in "etc/config/" with parameters e.g.
    DAA0245893:1 - weather sensor
    TEMPERATURE - what info do you want - HEATERS have other params
    /var/log/testfile.dat - the logfile where to write in
    Y - append the logfile -> growing or not -> only one line
befor activating the script you have put the following tcl-script ( my first in life :shock: ) via ftp to a place where you want
(put it under /etc/config/ then it will stay there after reboot or put it under /var/ = gone after reboot

Code: Alles auswählen

#!/bin/tclsh

load tclrega.so

proc readvalue {p1 p2 p3 p4} {

# build rega-script to query data
    set cmd ""
    append cmd "var id = \"$p1\";"
    append cmd "var type = \"$p2\";"
    append cmd "string sLastTime = \"\";"
    append cmd "integer iSeconds = 0;"
    append cmd "var obj = dom.GetObject(\"BidCos-RF.\" # id # \".\" # type );" 
    append cmd "var devs = type # \"@\" # id # \" = \" # obj.State();"
    append cmd "if(obj)"
    append cmd "    {"
    append cmd "    if( obj.IsTypeOf( OT_CHANNEL ) )"
    append cmd "        {"
    append cmd "         sLastTime = obj.LastDPActionTime();"
    append cmd "         iSeconds = obj.LastDPActionTimeSeconds();"
    append cmd "        }"
    append cmd "    if( obj.IsTypeOf( OT_DP ) )"
    append cmd "        {"
    append cmd "         sLastTime = obj.Timestamp();"
    append cmd "         iSeconds = obj.TimestampSeconds();"
    append cmd "        }"
    append cmd "    if( obj.IsTypeOf( OT_PROGRAM ) )"
    append cmd "        {"
    append cmd "         sLastTime = obj.ProgramLastExecuteTime();"
    append cmd "         iSeconds = obj.ProgramLastExecuteTimeSeconds();"
    append cmd "        }"
    append cmd "    if( iSeconds == 0 )"
    append cmd "        {"
    append cmd "         sLastTime = \"\";"
    append cmd "        }"
    append cmd "    else"
    append cmd "        {"
    append cmd "         sLastTime = sLastTime.Format(\"%d.%m.%Y %H:%M:%S\");"
    append cmd "        }"
    append cmd "     }" 

# execute rega-script 
    array set result [rega_script "$cmd"  ]

# get data from rega-script    
    set data  $result(devs)
    set ltime $result(sLastTime)

# write to file      
    if { $p4  == "Y" } then {
       set fhandle [open $p3 a]
    } else {
       set fhandle [open $p3 w]}
    puts $fhandle [concat $ltime $data]  
    close $fhandle
}

set objID      [lindex $argv 0]
set objData    [lindex $argv 1]
set filename   [lindex $argv 2]
set fileappend [lindex $argv 3]

readvalue $objID $objData $filename $fileappend
don´t forget to change the file attribute to executable:

Code: Alles auswählen

chmod 007 /etc/config/rega
using telnet or some ftp-client allow that too (e.g. filezilla)

Activate the script in the web-ui - and there it goes

the file will look like

Code: Alles auswählen

12.03.2008 18:10:01 TEMPERATURE@DAA0245873:1 = 20.200000
12.03.2008 18:11:01 TEMPERATURE@DAA0245873:1 = 20.200000
12.03.2008 18:12:01 TEMPERATURE@DAA0245873:1 = 20.200000
12.03.2008 18:13:01 TEMPERATURE@DAA0245873:1 = 20.200000
12.03.2008 18:14:01 TEMPERATURE@DAA0245873:1 = 20.200000
12.03.2008 18:15:01 TEMPERATURE@DAA0245873:1 = 20.200000
12.03.2008 18:16:01 TEMPERATURE@DAA0245873:1 = 20.200000
12.03.2008 18:17:01 TEMPERATURE@DAA0245873:1 = 20.300000
12.03.2008 18:18:01 TEMPERATURE@DAA0245873:1 = 20.300000
Remark:
I would highly recommend to store the log-data in the ram of the CCU (/var/) not in the flash (/etc/config/) not to shorten the lifetime of the flash memory, which is of course by some thousand write-cycles, you won´t reach that manually - but it can be done easily by programs)

Bye

Alex

mpcc
Beiträge: 710
Registriert: 09.03.2007, 16:38
System: sonstige
Wohnort: Eichwalde bei Berlin
Hat sich bedankt: 6 Mal
Danksagung erhalten: 24 Mal
Kontaktdaten:

Re: Daten aus CCU auslesen für externe Verwendung (zb. IPS)

Beitrag von mpcc » 13.03.2008, 16:57

Hi Alex

für die IPS-User ist das zumindest erst einmal eine erste Lösung ...

aber du hast folgendes geschrieben :

-----------------
First of all a little bit about the HomeMatic basic-communication to understand the solution:
Internally HM-software uses " a kind of" rpc-calls (remote procedure calls) to communicate between
- the "logic-processor (system)"
- the "wired controller"
- the "wireless controller"
ec.ec.
-----------------

was erst einmal heisst, Daten können nur auf "Anstoß" von aussen erhalten werden.
IPS lebt aber gerade davon "jedes Ereignis mitzubekommen" und das sofort.

Gibt es keinerlei Möglichkeit oder welche gibt es , daß jedes in der HM Zentrale eintreffende
Ereignis sofort nach "außen" gegeben wird , ohne ein Polling ?

Gruss
Marco
Gruss Marco Pniok
http://www.piotek-smarthome.de
Systemhaus für SmartHome mit HomeMatic, HomeMatic IP, PioTek, CUxD, IP-Symcon, Symbox Pro, Shelly, Eltako, free@home, PEHA, Synco Living.

Benutzeravatar
a.krypthul
Beiträge: 41
Registriert: 27.01.2008, 13:51
Danksagung erhalten: 1 Mal

Re: Daten aus CCU auslesen für externe Verwendung (zb. IPS)

Beitrag von a.krypthul » 13.03.2008, 18:14

Hi Marco,
mpcc hat geschrieben: Gibt es keinerlei Möglichkeit oder welche gibt es , daß jedes in der HM Zentrale eintreffende
Ereignis sofort nach "außen" gegeben wird , ohne ein Polling ?
:mrgreen: there are possibilities:

the different engines communicate via IP-ports, that means, there is tcp and udp-traffic on the localhost-address 127.0.0.1
The simplest way now, is to sniff these tcp/udp packets by a process running on the CCU - this process has to inform the "external client" about the events (interpret them) or redirect the raw packets to the "external client" (who interprets them).

This is not only theory:
if you look at the "hmbinrpc" application: kaju is so kind to host it on his homematic-blog site, you will find a part "tcplog".
Included are two programs for the CCU and a calling script as an example.

The programs are:
tcpdump - the packetsniffer
socat - used to redirect the ascii-output of tcpdump to a definable tcp-port

(if you don´t know these great tools - try google)

The .Net application acts as the "external client" which shows in realtime the traffic on the CCU (the traffic is filtered of course - to get rid of the tons of html-stuff from the web-gui)

You don´t need the .Net application- there is a little application "netcat" for windows - (the older brother of socat) you can it use in a command-shell on your pc (dos-box) to connect to the CCU-port socat is offering.

If you have further question - just ask :D

Alex

mpcc
Beiträge: 710
Registriert: 09.03.2007, 16:38
System: sonstige
Wohnort: Eichwalde bei Berlin
Hat sich bedankt: 6 Mal
Danksagung erhalten: 24 Mal
Kontaktdaten:

Re: Daten aus CCU auslesen für externe Verwendung (zb. IPS)

Beitrag von mpcc » 13.03.2008, 20:14

thank you Alex

gehe ich dann richtig in der Annahme,

- daß solch eine Information eines Clients in der CCU gar nicht vorgesehen ist ?
- daß Software wie homeputer CL "nur" über die xmlrpc Schnittstelle kommuniziert ?
- daß damit eine "echte" Visualisierung gar nicht gegeben ist und nur z.b mit der von
Dir vorgeschlagenen Lösung derzeit machbar ist ?

Gruss Marco
Gruss Marco Pniok
http://www.piotek-smarthome.de
Systemhaus für SmartHome mit HomeMatic, HomeMatic IP, PioTek, CUxD, IP-Symcon, Symbox Pro, Shelly, Eltako, free@home, PEHA, Synco Living.

Benutzeravatar
a.krypthul
Beiträge: 41
Registriert: 27.01.2008, 13:51
Danksagung erhalten: 1 Mal

Re: Daten aus CCU auslesen für externe Verwendung (zb. IPS)

Beitrag von a.krypthul » 13.03.2008, 21:06

@mpcc

to be honest: I don´t know ! I have the same docu (official functionality) like all others :cry:

Alex

mpcc
Beiträge: 710
Registriert: 09.03.2007, 16:38
System: sonstige
Wohnort: Eichwalde bei Berlin
Hat sich bedankt: 6 Mal
Danksagung erhalten: 24 Mal
Kontaktdaten:

Re: Daten aus CCU auslesen für externe Verwendung (zb. IPS)

Beitrag von mpcc » 14.03.2008, 17:23

ok Alex

aber mit deinen Programmierkenntnissen kannst du ja viel mehr erkennen :-)

Nächstes Problem :
welches auch gerade hier : http://homematic-forum.de/forum/viewtop ... 7739#p7385 angefangen wird zu diskutieren.

Wir brauchen und sicherlich alle anderen User auch , die Möglichkeit die Anwesenheit festzustellen.
Das kann man sicherlich später über Bewegungsmelder und Taster ec. machen, aber so richtig gefällt
mir das nicht. Für unsere Kunden und alle Hausautomatisierer haben wir schon länger was im Kopf ,
was sich vielleicht jetzt realisieren lässt.

Die CCU scheint bei einem Reboot die bisher angemeldeten Komponenten abzufragen. Dabei scheint sie
nur deren Existenz zu prüfen.
Wenn Sie das kann , dann muss es auch Befehle geben um Geräte nicht zu schalten ec. sondern nur auf
Ihre Existenz hin zu prüfen.

Jetzt wäre es natürlich traumhaft, wenn wir jedem Familienmitglied an den Schlüsselbund einen kleinen
Schlüsselbund-Handsender "verpassen" und die CCU1 regelmäßig prüfen lassen ob dieser Sender existiert !
Das geht zwar auf die Batterien, aber der Effekt ist dies natürlich wert. Verlässt jemand das Haus und
der Sender gerät außer Reichweite, kann die Anwesenheitsvariable des Familienmitglieds auf false gesetzt
werden und entsprechende Aktionen auslösen. Natürlich auch umgekehrt.

Wir bräuchten also ein Programm auf der CCU, welches die Anwesenheit eines oder mehrerer Sender
in bestimmten Zeitintervallen prüft und eine zugeordnete Variable setzt.

Gruss Marco
Gruss Marco Pniok
http://www.piotek-smarthome.de
Systemhaus für SmartHome mit HomeMatic, HomeMatic IP, PioTek, CUxD, IP-Symcon, Symbox Pro, Shelly, Eltako, free@home, PEHA, Synco Living.

Nereus
Beiträge: 43
Registriert: 05.02.2008, 23:33

Re: Daten aus CCU auslesen für externe Verwendung (zb. IPS)

Beitrag von Nereus » 14.03.2008, 20:41

Hallo Marco,
das was Du da mit den Handsendern vor hast wird nicht möglich sein. Die Handsender sind ja "reine" Seder, die in der übrigen Zeit ja nicht auf Empfang sind. Sie warten immer nur nach dem Betätigen einer Taste auf eine Bestätigung vom Aktor oder der Zentrale. Dies ist ja auch der Grund dafür, dass zum Übertragen von Konfigurationsdaten immer die Anlern-Taste gedrückt werden muss.
Ansonsten finde ich die Idee auch sehr gut, habe selbst auch noch keine vernünftige Lösung für die Anwesenheitserkennung gefunden.

Grüße
Nereus

mpcc
Beiträge: 710
Registriert: 09.03.2007, 16:38
System: sonstige
Wohnort: Eichwalde bei Berlin
Hat sich bedankt: 6 Mal
Danksagung erhalten: 24 Mal
Kontaktdaten:

Re: Daten aus CCU auslesen für externe Verwendung (zb. IPS)

Beitrag von mpcc » 14.03.2008, 20:53

Hallo Nereus

richtig ! du hast recht !

Müssen wir leider begraben die Variante. Wir hatten das ganze schon mal mit FS20
direkt bei ELV versucht (Sonderprogrammierung) worauf man allerdings nicht eingegangen
ist.
Es bliebe also auch hier nur die Variante, daß z.b. ein Handsender aller 5 min seine Existenz
meldet. Was eigentlich beim verwendeten Atmel Prozessor kein Problem sein sollte .....

Gruss
Marco
Gruss Marco Pniok
http://www.piotek-smarthome.de
Systemhaus für SmartHome mit HomeMatic, HomeMatic IP, PioTek, CUxD, IP-Symcon, Symbox Pro, Shelly, Eltako, free@home, PEHA, Synco Living.

mpcc
Beiträge: 710
Registriert: 09.03.2007, 16:38
System: sonstige
Wohnort: Eichwalde bei Berlin
Hat sich bedankt: 6 Mal
Danksagung erhalten: 24 Mal
Kontaktdaten:

Re: Daten aus CCU auslesen für externe Verwendung (zb. IPS)

Beitrag von mpcc » 14.03.2008, 21:46

Ergänzung :

es könnte doch gehen Nereus ?

Schau dir dazu mal das hier an , was ich gerade untersucht habe : http://www.ipsymcon.de/forum/showthread.php?t=4631

Ich weiss zwar noch nicht , welche HM's das sind die da selbstständig eingelesen wurden, was ich aber
gelegentlich mal herausbekommen will

Gruss
Marco
Gruss Marco Pniok
http://www.piotek-smarthome.de
Systemhaus für SmartHome mit HomeMatic, HomeMatic IP, PioTek, CUxD, IP-Symcon, Symbox Pro, Shelly, Eltako, free@home, PEHA, Synco Living.

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“