Ankündigung

Einklappen
Keine Ankündigung bisher.

Openhab mit HomeMatic HMLAN und BidCos Service

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Openhab mit HomeMatic HMLAN und BidCos Service

    Hi,

    Ich verwende im Moment fhem, will eigentlich aber auf openhab umsteigen. Jetzt habe ich aber nur einen Windows Server 24/7 am laufen.

    Ich habe den BiDCoS Service fuer windows zu installieren und konfiguriert, was gut funktioniert hat. Hier sehe ich die Statusmeldungen meiner Komponenten (im Log file).

    Ich habe nun versucht diese IP addresse bei der openhab homematic addresse anzugeben.

    Nun scheint es so dass ein Verbindung zu dem Service hergestellt werden kann, nur scheint trotzdem das script nicht zu funktionieren.

    Hier die debugausgabe vom openhab:

    16:19:09.059 [INFO ] [.b.h.i.c.HomematicCommunicator:120 ] - Shutting down Homematic communicator
    16:19:09.060 [DEBUG] [b.h.i.c.s.BinRpcCallbackServer:55 ] - Shutting down BinRpcCallbackServer
    16:19:09.061 [TRACE] [.o.b.h.i.c.client.BinRpcClient:191 ] - Client BinRpcRequest BinRpcRequest[methodName=init,args={binary://192.168.0.1:9123}]
    16:19:09.068 [TRACE] [.o.b.h.i.c.client.BinRpcClient:199 ] - Client BinRpcResponse:

    16:19:09.069 [TRACE] [.o.b.h.i.c.client.BinRpcClient:191 ] - Client BinRpcRequest BinRpcRequest[methodName=init,args={binary://192.168.0.1:9123}]
    16:19:10.072 [INFO ] [.o.b.h.i.c.client.BinRpcClient:218 ] - Interface BidCos-Wired not available, disabling support.
    16:19:10.073 [TRACE] [.o.b.h.i.c.client.BinRpcClient:191 ] - Client BinRpcRequest BinRpcRequest[methodName=init,args={binary://192.168.0.1:9123}]
    16:19:11.072 [INFO ] [.o.b.h.i.c.client.BinRpcClient:218 ] - Interface CUxD not available, disabling support.
    16:19:11.082 [DEBUG] [.h.i.communicator.ItemDisabler:63 ] - Stopping ItemDisabler
    16:20:11.083 [INFO ] [o.o.b.h.i.bus.HomematicBinding:192 ] - No event since 1165 seconds, refreshing Homematic server connections
    16:20:11.089 [INFO ] [.b.h.i.c.HomematicCommunicator:66 ] - Starting Homematic communicator
    16:20:11.090 [DEBUG] [.h.i.communicator.ItemDisabler:54 ] - Starting ItemDisabler
    16:20:11.092 [TRACE] [.o.b.h.i.c.client.BinRpcClient:191 ] - Client BinRpcRequest BinRpcRequest[methodName=getDeviceDescription,args={BidCoS-RF}]
    16:20:11.096 [TRACE] [.o.b.h.i.c.client.BinRpcClient:199 ] - Client BinRpcResponse: {
    ADDRESS=BidCoS-RF
    CHILDREN=
    [
    BidCoS-RF:0
    BidCoS-RF:1
    BidCoS-RF:2
    BidCoS-RF:3
    BidCoS-RF:4
    BidCoS-RF:5
    BidCoS-RF:6
    BidCoS-RF:7
    BidCoS-RF:8
    BidCoS-RF:9
    BidCoS-RF:10
    BidCoS-RF:11
    BidCoS-RF:12
    BidCoS-RF:13
    BidCoS-RF:14
    BidCoS-RF:15
    BidCoS-RF:16
    BidCoS-RF:17
    BidCoS-RF:18
    BidCoS-RF:19
    BidCoS-RF:20
    BidCoS-RF:21
    BidCoS-RF:22
    BidCoS-RF:23
    BidCoS-RF:24
    BidCoS-RF:25
    BidCoS-RF:26
    BidCoS-RF:27
    BidCoS-RF:28
    BidCoS-RF:29
    BidCoS-RF:30
    BidCoS-RF:31
    BidCoS-RF:32
    BidCoS-RF:33
    BidCoS-RF:34
    BidCoS-RF:35
    BidCoS-RF:36
    BidCoS-RF:37
    BidCoS-RF:38
    BidCoS-RF:39
    BidCoS-RF:40
    BidCoS-RF:41
    BidCoS-RF:42
    BidCoS-RF:43
    BidCoS-RF:44
    BidCoS-RF:45
    BidCoS-RF:46
    BidCoS-RF:47
    BidCoS-RF:48
    BidCoS-RF:49
    BidCoS-RF:50
    ]
    FIRMWARE=?
    FLAGS=9
    INTERFACE=LEQ0384530
    PARAMSETS=
    [
    MASTER
    ]
    PARENT=
    RF_ADDRESS=2728246
    ROAMING=0
    TYPE=HM-RCV-50
    VERSION=6
    }

    16:20:11.150 [INFO ] [.b.h.i.c.HomematicCommunicator:76 ] - Homematic ServerId[name=CCU,version=?,address=LEQ0384530]
    16:20:11.152 [INFO ] [o.o.b.h.i.c.client.CcuClient :78 ] - Starting CcuClient
    16:20:11.153 [DEBUG] [.o.b.h.i.c.client.BinRpcClient:44 ] - Starting BinRpcClient
    16:20:11.161 [INFO ] [b.h.i.communicator.StateHolder:83 ] - Loading Homematic datapoints
    16:20:11.162 [TRACE] [o.o.b.h.i.c.client.CcuClient :303 ] - TclRegaScript: string dev_id;
    string channel_id;
    string dp_id;
    Write('<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>\n');
    Write("<devices>\n");
    foreach (dev_id, root.Devices().EnumUsedIDs()) {
    object dev_obj = dom.GetObject(dev_id);
    string dev_interface= dev_obj.Interface();
    string interface_name = dom.GetObject(dev_interface).Name();
    boolean is_ready = dev_obj.ReadyConfig();
    if(is_ready &&
    (dev_obj.HssType() != "HMW-RCV-50")) {

    Write(" <device");
    Write(" address='"); WriteXML(dev_obj.Address());
    Write("' interface='"); WriteXML(interface_name);
    Write("' type='"); WriteXML(dev_obj.HssType());
    Write("'>\n");
    foreach(channel_id, dev_obj.Channels()) {
    object channel_obj = dom.GetObject(channel_id);

    Write(" <channel");
    Write(" number='"); WriteXML(channel_obj.Address().StrValueByIndex(":" ,1));
    Write("'>\n");

    object boot_dp = channel_obj.DPByHssDP("BOOT");
    if (boot_dp) {
    Write(" <datapoint");
    Write(" name='BOOT'");
    Write(" value='false'");
    Write(" valueType='" # boot_dp.ValueType());
    Write("' writeable='false'");
    Write(" />\n");
    }
    object work_dp = channel_obj.DPByHssDP("WORKING");
    if (work_dp) {
    Write(" <datapoint");
    Write(" name='WORKING'");
    Write(" value='false'");
    Write(" valueType='" # work_dp.ValueType());
    Write("' writeable='false'");
    Write(" />\n");
    }
    object dir_dp = channel_obj.DPByHssDP("DIRECTION");
    if (dir_dp) {
    Write(" <datapoint");
    Write(" name='DIRECTION'")
    Write(" value='0'");
    Write(" valueType='" # dir_dp.ValueType());
    Write("' subType='"); WriteXML(dir_dp.ValueSubType());
    Write("' valueList='" # dir_dp.ValueList());
    Write("' writeable='false'");
    Write(" />\n");
    }
    object install_test_dp = channel_obj.DPByHssDP("INSTALL_TEST");
    if (install_test_dp) {
    Write(" <datapoint");
    Write(" name='INSTALL_TEST'")
    Write(" value='false'");
    Write(" valueType='" # install_test_dp.ValueType());
    Write("' writeable='false'");
    Write(" />\n");
    }
    object press_long_release_dp = channel_obj.DPByHssDP("PRESS_LONG_RELEASE");
    if (press_long_release_dp) {
    Write(" <datapoint");
    Write(" name='PRESS_LONG_RELEASE'")
    Write(" value='false'");
    Write(" valueType='" # press_long_release_dp.ValueType());
    Write("' writeable='false'");
    Write(" />\n");
    }
    object press_cont = channel_obj.DPByHssDP("PRESS_CONT");
    if (press_cont) {
    Write(" <datapoint");
    Write(" name='PRESS_CONT'")
    Write(" value='false'");
    Write(" valueType='" # press_cont.ValueType());
    Write("' writeable='false'");
    Write(" />\n");
    }
    object humidityF = channel_obj.DPByHssDP("HUMIDITYF");
    if (humidityF) {
    Write(" <datapoint");
    Write(" name='HUMIDITYF'")
    Write(" value='"); WriteXML(humidityF.Value());
    Write("' valueType='" # humidityF.ValueType());
    Write("' min='" # humidityF.ValueMin());
    Write("' max='" # humidityF.ValueMax());
    Write("' writeable='false'");
    Write(" />\n");
    }
    object lastTicks = channel_obj.DPByHssDP("LAST_TICKS");
    if (lastTicks) {
    Write(" <datapoint");
    Write(" name='LAST_TICKS'")
    Write(" value='"); WriteXML(lastTicks.Value());
    Write("' valueType='" # lastTicks.ValueType());
    Write("' min='" # lastTicks.ValueMin());
    Write("' max='" # lastTicks.ValueMax());
    Write("' writeable='false'");
    Write(" />\n");
    }
    object unitSpturn = channel_obj.DPByHssDP("UNITSPTURN");
    if (unitSpturn) {
    Write(" <datapoint");
    Write(" name='UNITSPTURN'")
    Write(" value='"); WriteXML(unitSpturn.Value());
    Write("' valueType='" # unitSpturn.ValueType());
    Write("' min='" # unitSpturn.ValueMin());
    Write("' max='" # unitSpturn.ValueMax());
    Write("' writeable='false'");
    Write(" />\n");
    }

    foreach(dp_id, channel_obj.DPs().EnumUsedIDs()) {
    object dp_obj = dom.GetObject(dp_id);
    if(dp_obj) {
    string name = dp_obj.Name().StrValueByIndex(".",2);
    if (name != "") {
    Write(" <datapoint");
    Write(" name='"); WriteXML(name);
    Write("' value='"); WriteXML(dp_obj.Value());
    Write("' valueType='" # dp_obj.ValueType());
    if (dp_obj.ValueType() == 16) {
    Write("' subType='"); WriteXML(dp_obj.ValueSubType());
    Write("' valueList='" # dp_obj.ValueList());
    }
    if ((dp_obj.ValueType() != 2) && (dp_obj.ValueType() != 20)) {
    Write("' min='" # dp_obj.ValueMin());
    Write("' max='" # dp_obj.ValueMax());
    }
    Write("' writeable='");
    integer dp_operations = dp_obj.Operations();
    boolean writeable = dp_operations & OPERATION_WRITE;
    if (writeable) {
    Write("true");
    }
    else {
    Write("false");
    }
    Write("' />\n");
    }
    }
    }
    Write(" </channel>\n");
    }
    Write(" </device>\n");
    }
    }
    Write("</devices>");
    16:20:12.255 [INFO ] [.httpclient.HttpMethodDirector:439 ] - I/O exception (java.net.ConnectException) caught when processing request: Connection refused: conn
    ect
    16:20:12.258 [INFO ] [.httpclient.HttpMethodDirector:445 ] - Retrying request
    16:20:13.260 [INFO ] [.httpclient.HttpMethodDirector:439 ] - I/O exception (java.net.ConnectException) caught when processing request: Connection refused: conn
    ect
    16:20:13.263 [INFO ] [.httpclient.HttpMethodDirector:445 ] - Retrying request
    16:20:14.265 [INFO ] [.httpclient.HttpMethodDirector:439 ] - I/O exception (java.net.ConnectException) caught when processing request: Connection refused: conn
    ect
    16:20:14.268 [INFO ] [.httpclient.HttpMethodDirector:445 ] - Retrying request
    16:20:15.273 [ERROR] [.b.h.i.c.HomematicCommunicator:93 ] - Could not start Homematic communicator: Connection refused: connect
    org.openhab.binding.homematic.internal.communicato r.client.HomematicClientException: Connection refused: connect
    at org.openhab.binding.homematic.internal.communicato r.client.CcuClient.sendScript(CcuClient.java:321) ~[bundlefile:na]
    at org.openhab.binding.homematic.internal.communicato r.client.CcuClient.sendScriptByName(CcuClient.java :253) ~[bundlefile:na]
    at org.openhab.binding.homematic.internal.communicato r.client.CcuClient.iterateAllDatapoints(CcuClient. java:125) ~[bundlefile:na]
    at org.openhab.binding.homematic.internal.communicato r.StateHolder.loadDatapoints(StateHolder.java:84) ~[bundlefile:na]
    at org.openhab.binding.homematic.internal.communicato r.HomematicCommunicator.start(HomematicCommunicato r.java:85) ~[bundlefile:na]
    at org.openhab.binding.homematic.internal.bus.Homemat icBinding.execute(HomematicBinding.java:194) [bundlefile:na]
    at org.openhab.core.binding.AbstractActiveBinding$Bin dingActiveService.execute(AbstractActiveBinding.ja va:156) [org.openhab.core_1.6.1.jar:na]
    at org.openhab.core.service.AbstractActiveService$Ref reshThread.run(AbstractActiveService.java:173) [org.openhab.core_1.6.1.jar:na]
    Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.6.0_23]
    at java.net.PlainSocketImpl.doConnect(Unknown Source) ~[na:1.6.0_23]
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source) ~[na:1.6.0_23]
    at java.net.PlainSocketImpl.connect(Unknown Source) ~[na:1.6.0_23]
    at java.net.SocksSocketImpl.connect(Unknown Source) ~[na:1.6.0_23]
    at java.net.Socket.connect(Unknown Source) ~[na:1.6.0_23]
    at java.net.Socket.connect(Unknown Source) ~[na:1.6.0_23]
    at java.net.Socket.<init>(Unknown Source) ~[na:1.6.0_23]
    at java.net.Socket.<init>(Unknown Source) ~[na:1.6.0_23]
    at org.apache.commons.httpclient.protocol.DefaultProt ocolSocketFactory.createSocket(DefaultProtocolSock etFactory.java:80) ~[na:na]
    at org.apache.commons.httpclient.protocol.DefaultProt ocolSocketFactory.createSocket(DefaultProtocolSock etFactory.java:122) ~[na:na]
    at org.apache.commons.httpclient.HttpConnection.open( HttpConnection.java:707) ~[org.apache.commons.httpclient_3.1.0.v201012070820. jar:na]
    at org.apache.commons.httpclient.HttpMethodDirector.e xecuteWithRetry(HttpMethodDirector.java:387) ~[org.apache.commons.httpclient_3.1.0.v201012070820. ja
    r:na]
    at org.apache.commons.httpclient.HttpMethodDirector.e xecuteMethod(HttpMethodDirector.java:171) ~[org.apache.commons.httpclient_3.1.0.v201012070820. jar:n
    a]
    at org.apache.commons.httpclient.HttpClient.executeMe thod(HttpClient.java:397) ~[org.apache.commons.httpclient_3.1.0.v201012070820. jar:na]
    at org.apache.commons.httpclient.HttpClient.executeMe thod(HttpClient.java:323) ~[org.apache.commons.httpclient_3.1.0.v201012070820. jar:na]
    at org.openhab.binding.homematic.internal.communicato r.client.CcuClient.sendScript(CcuClient.java:309) ~[bundlefile:na]
    ... 7 common frames omitted
    16:20:15.304 [INFO ] [.b.h.i.c.HomematicCommunicator:120 ] - Shutting down Homematic communicator
    16:20:15.305 [DEBUG] [b.h.i.c.s.BinRpcCallbackServer:55 ] - Shutting down BinRpcCallbackServer
    16:20:15.307 [TRACE] [.o.b.h.i.c.client.BinRpcClient:191 ] - Client BinRpcRequest BinRpcRequest[methodName=init,args={binary://192.168.0.1:9123}]
    16:20:15.316 [TRACE] [.o.b.h.i.c.client.BinRpcClient:199 ] - Client BinRpcResponse:

    16:20:15.318 [TRACE] [.o.b.h.i.c.client.BinRpcClient:191 ] - Client BinRpcRequest BinRpcRequest[methodName=init,args={binary://192.168.0.1:9123}]
    16:20:16.321 [INFO ] [.o.b.h.i.c.client.BinRpcClient:218 ] - Interface BidCos-Wired not available, disabling support.
    16:20:16.323 [TRACE] [.o.b.h.i.c.client.BinRpcClient:191 ] - Client BinRpcRequest BinRpcRequest[methodName=init,args={binary://192.168.0.1:9123}]
    16:20:17.324 [INFO ] [.o.b.h.i.c.client.BinRpcClient:218 ] - Interface CUxD not available, disabling support.
    16:20:17.326 [DEBUG] [.h.i.communicator.ItemDisabler:63 ] - Stopping ItemDisabler


    Hat hier jemand eine Idee oder Lösung ? Wäre sehr dankbar!

    LG,
    Martin

    #2
    Hi,

    ich glaube das aktuelle Binding benötigt nahezu eine ganze CCU. Ich habe homegear am laufen. Wie wäre es einer kleinen Linux VM?

    Sascha

    Kommentar


      #3
      Hi danke fuer die Antwort,

      naja beim Homegear steht extra dass man es nicht in einer VM lauffen lassen soll, ansonsten waere das eh auch mein Weg gewesen.

      Da ich selbst Java Entwickler bin, werde ich vielleicht das Protokol fuer den HM-CFG-LAN selbst implementieren, da es ja eigentlich eine funktionieren Vorlage im FHEM gibt.

      Weis jemand ob ich hier definitiv etwas falsch gemacht habe (da ja der BiDCos Service laueft) oder ob das gar nicht funktionieren sollte. Irgendwie geht das nicht schluessig hervor, da im Wiki es auch einen Artikel gibt wie man genau diesen BiDCoS service unter Wine zum laufen bringt. Daraus habe ich vielleicht fälschlicher weise gefolgert das es mit dem original BiDCoS service unter windows funktionieren muesste.

      LG,
      Martin

      Kommentar


        #4
        Hallo Martin!

        Das Homematic Binding (1.6) funktioniert nur mit einer echten CCU oder mit Homegear. Das BiDCoS Service alleine reicht nicht, weil es keine TclRegaScripts unterstützt. Diese sind notwendig, um z.Bsp. alle Metadaten und Stati der Devices zu holen. Bei Homegear werden anstatt der TclRegaScript die dementsprechenden Rpc-Methoden aufgerufen.

        Du kannst also eine Linux VM probieren oder einen RaspberryPI auf Deinen Server dranhängen. Ich selber habe Homegear und openHab auf einem Cubietruck, funktioniert prächtig.

        LG
        Gerhard

        Kommentar


          #5
          Hi Gerhard,

          ja nur will ich keinen neue maschine dafuer laufen lassen, ich setz mich mal mit den Entwicklern in verbindung ob das hier nur nicht eingebaut ist oder ob es design maessig ein problem gibt, da ja der FHEM direkt mit dem LAN adapter reden kann.

          LG,
          Martin

          Kommentar


            #6
            Hallo Martin!

            Ich bin der Entwickler vom Homematic binding

            Damit ich alle Funktionen des bindings implementieren konnte, brauchte ich TclRegaScript oder eben spezielle Rpc-Methoden wie in Homegear. Der LAN Adapter hat beides nicht, somit wird er nicht funktionieren.
            Homegear kann problemlos alle möglichen Homematic Adapter, CUL's uvm. ansteuern, das baue ich sicher nicht im binding nach. Der Aufwand wäre ja viel zu groß und unnötig. Dafür ist Homegear ja da.

            Also ich würde mir wirklich einen PI nehmen und dort den LAN Adapter über Homegear ansteuern. Strom kannst Du ja von einem USB Port von Deinem Windows Server nehmen, somit brauchst Du kein extra Netzteil für den PI. openHab installierst Du auf Deinem Windows Server. Ist die einfachste, billigste und stabilste Lösung.

            LG
            Gerhard

            Kommentar


              #7
              Hallo Gerhard,

              ach so XD, wenn das so ist.
              Es stimmt schon das es dafuer homegear gibt, nur will ich halt nicht noch eine Hardewar kistn (auch wenns nur uber usb versorgt wird), wird aber eh vielleicht darauf rauslaufen.

              Naja das einzige was der HM-LAN nicht kann ist die abfrage der devices. Wenn man im Openhab (oder besser im modul) eine registry oder list der Devices mitfuehrt, welche dann extra wie FHEM gepaired werden muessen, dann muesste das doch gehen oder bin ich da komplett auf dem holzweg ?

              Die metadaten und stati muesste ich doch auch mit dem HMLan abfragen koennen, das einzige was er nicht kann ist das getDevicesList ?

              Und wenns nur ein wenig coden ist ... macht ja auch spass XD.

              LG,
              Martin

              Kommentar


                #8
                Hallo Martin!

                Wie schon erwähnt, holt sich das Binding beim Start alle notwendigen Metadaten und Stati der Devices und baut komplett darauf auf. Der LAN-Adapter schickt zwar auch beim ersten connect Daten, aber leider nicht alle die ich brauche. Ich müsste jetzt einzeln alle Devices abklappern, das braucht etwas Zeit und je nach Anzahl der Devices zahlreiche Einzelrequests. Das einzubauen ist recht aufwendig und widerspricht eigentlich komplett dem derzeitigen Design des bindings.

                Das Einzige was ich auf die Schnelle machen könnte ist, dass Du das notwendige XML der Metadaten selber erstellst und ich beim Start die XML Datei lade. Dann fehlen aber immer noch die aktuellen Stati der Geräte, sie werden alle Uninitialized sein. Du müsstest dann jedes Geräte einmal bedienen, damit der Status übertragen wird. Wie viele Homematic Geräte hast Du denn? Wenn das mehrere sind wird das aber aufwendig das XML zu erstellen und bei jedem Neustart darfst Du die Geräte bedienen. Höchst instabile Angelegenheit bei einem Stromausfall z.Bsp., ich rate Dir davon also ab.

                Ich verstehe Dich schon, dass Du nicht noch eine Hardware haben willst. Diese Einstellung hatte ich auch früher, bin aber dazu übergegangen manche Sachen aufzuteilen. Ich habe aktuell drei stromsparende Linux/Mac Server, wobei zwei 7/24 laufen und einer in den Standby geht wenn er nicht gebraucht wird und bin sehr zufrieden mit der Lösung. Bei dem heutigen Stromverbrauch der ARM Server von ein paar Watt ist mir eine Aufteilung lieber, weil bei Wartungstätigkeiten nicht immer gleich alle Services weg sind.

                Ich beginne demnächst das Binding für openHAB 2 anzupassen, habe also jede Menge zu tun

                LG
                Gerhard

                Kommentar

                Lädt...
                X