mdzio / ccu-jack

CCU-Jack bietet einen einfachen und sicheren REST- und MQTT-basierten Zugriff auf die Datenpunkte der Zentrale (CCU) des Hausautomations-Systems HomeMatic. Zudem können einfach Fremdgeräte an die CCU angebunden werden.
GNU General Public License v3.0
115 stars 12 forks source link

MQTT: Publizierung von Geräte-/Kanal-/Parametereigenschaften #90

Open mdzio opened 2 years ago

mdzio commented 2 years ago

Bisher werden nur Wertaktualisierungen von Datenpunkten über MQTT publiziert. Geräte-/Kanal-/Parametereigenschaften sollten zusätzlich über separate Topics publiziert werden.

Erste Überlegungen dazu sind in #73 zu finden.

Elix-g commented 1 year ago

Sehr sexy fände ich das Publizieren von Topics, worüber Homeassistant die Geräte der Zentrale erkennen und einbinden kann. Die Homematic-Integration in HA ist nicht sonderlich gut und funktioniert z.B. nicht wenn SSL auf der Zentrale aktiviert ist.

HA MQTT Discovery

mdzio commented 1 year ago

Sehr sexy fände ich das Publizieren von Topics, worüber Homeassistant die Geräte der Zentrale erkennen und einbinden kann. Die Homematic-Integration in HA ist nicht sonderlich gut und funktioniert z.B. nicht wenn SSL auf der Zentrale aktiviert ist.

HA MQTT Discovery

Da gab es bisher auch schon Anfragen (siehe auch Eintrag #7) . Leider ist dies sehr aufwändig und ist daher nicht in Planung.

kaistraube commented 1 year ago

Servus, ich bin nun nach zig Jahren von ioBroker auf HomeAssistant umgestiegen. Ich denke das Projekt erfreut sich deutlich größerer Beliebtheit und Aktivität. In diesem Sinne wäre nun die HASS Discovery tatsächlich eine richtig gute Sache, um CCU (bei mir Docker Raspberrymatic) anzubinden. Per Bridge die CCU Daten ein meinem EMQX senden wäre easy (die dann von HASS aufgrund der Discovery Daten so abgeholt werden können), fehlen nun tatsächlich aber die Metadaten. Erstens überlege ich einen Python Translater zu bauen, oder zweitens ein XMLAPI query, die dann das HASS Discovery per MQTT bereitstellt. Ich wüsste eben nicht wie ich anders leicht an die Daten der CCU käme. Also: CCU-Jack mit HASS Discovery wäre schon geil und ein richtiger Mehrwert, weshalb ich denke, dass das rauf-priorisiert anstatt herabgesetzt werden sollte. :-) Der Vorteil wäre auch, dass man sich eben für die in der Überschrift genannten Dinge keine Gedanken machen muss, weil eben die Spezifizierung durch HASS Discovery bereits existiert.

kaistraube commented 1 year ago

Gesagt, getan, ich habe einen ersten Wurf hochgeladen: https://github.com/kaistraube/ccujack_homeassistant Mit dem Script "hass_discovery_ccu.py" werden per CCU-Jack Rest API alle benötigten Daten ermittelt und an den MQTT Broker gesendet. Ich kann nun HomeMatic per MQTT verwenden. :-)

mdzio commented 1 year ago

Schönes Projekt. Ich nehme an, dass Du nichts dagegen hast, wenn ich von der CCU-Jack-Dokumentation auf dieses Projekt verweise. Um noch mehr Anwender zu erreichen und Rückmeldungen zu erhalten, kannst Du Dein Projekt auch im CCU-Jack Forum bekannt machen.

kaistraube commented 1 year ago

Ja, sehr gern. Ich schau mal ins Forum...

mpietruschka commented 10 months ago

Was ist denn aus der Idee geworden das in CCU-Jack zu implementieren? in https://github.com/mdzio/ccu-jack/issues/73#issuecomment-1107862492

mpietruschka commented 10 months ago

Als Lösungsidee...

Wenn ich das richtig sehe, werden mehrere CCU-Interfaces abgefragt:

  "BidCosRF",
  "HmIPRF",
  "VirtualDevices",
  "BidCosWired",
  "CUxD"

Dabei kann jeder Dienst nicht bzw. noch nicht verfügbar sein.

Würde man nun RegHass als Interface aufnehmen, dann könnte der seine Topics ab seiner Verfügbarkeit ebenfalls im MQTT publizieren. Beispielsweise in den vorhandenen Channel-Topics. https://github.com/mdzio/ccu-jack/issues/73#issuecomment-1107862492

Mit Veap müsste das auch nicht im Wiedersprich stehen. Dort könnten die Informationen aus RegHass auch erst nach Aktivierung des Interfaces verfügbar werden.

(Edit) Wenn es im CCU-Jack auch noch eine vom Interface abhängige Konfiguration (ähnlich der VirtualDevices) geben würde, dann wäre sogar das veröffentlichen als HA Discovery möglich. Prinzipiell, steht das HA Discovery zu den restlichen Topics auch nicht in Konkurrenz.


  "RegHass": {
     "EnableHAMQTTDiscovery": true
  }

  "VirtualDevices": {
    "Enable": false,
    "NextSerialNo": 0,
    "Devices": {}
  }

Mir persönlich würden Read-Only Werte ausreichen.

Für mich kann NodeRed mehrere Topics zu einem JSON-Objekte zusammenfassen: image

image

[
    {
        "id": "52d3c6d54b39ee66",
        "type": "mqtt in",
        "z": "a079c2c6d85e8f14",
        "name": "raspberrymatic/device/status/OEQ1234567/1/TEMPERATURE",
        "topic": "raspberrymatic/device/status/OEQ1234567/1/TEMPERATURE",
        "qos": "2",
        "datatype": "json",
        "broker": "80511ebb.0e3c18",
        "nl": false,
        "rap": false,
        "rh": "0",
        "inputs": 0,
        "x": 340,
        "y": 160,
        "wires": [
            [
                "91cf7844d9e92f21"
            ]
        ]
    },
    {
        "id": "838a824d56ffd735",
        "type": "mqtt in",
        "z": "a079c2c6d85e8f14",
        "name": "raspberrymatic/device/status/OEQ1234567/1/HUMIDITY",
        "topic": "raspberrymatic/device/status/OEQ1234567/1/HUMIDITY",
        "qos": "2",
        "datatype": "json",
        "broker": "80511ebb.0e3c18",
        "nl": false,
        "rap": false,
        "rh": "0",
        "inputs": 0,
        "x": 350,
        "y": 240,
        "wires": [
            [
                "91cf7844d9e92f21"
            ]
        ]
    },
    {
        "id": "91cf7844d9e92f21",
        "type": "change",
        "z": "a079c2c6d85e8f14",
        "name": "Entfernen Topic Prefix & verschieben \"v\" nach Payload",
        "rules": [
            {
                "t": "change",
                "p": "topic",
                "pt": "msg",
                "from": ".*/",
                "fromt": "re",
                "to": "",
                "tot": "str"
            },
            {
                "t": "move",
                "p": "payload.v",
                "pt": "msg",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 800,
        "y": 200,
        "wires": [
            [
                "3627f9e774896fb9"
            ]
        ]
    },
    {
        "id": "3627f9e774896fb9",
        "type": "join",
        "z": "a079c2c6d85e8f14",
        "name": "",
        "mode": "custom",
        "build": "object",
        "property": "payload",
        "propertyType": "msg",
        "key": "topic",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": false,
        "timeout": "",
        "count": "2",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "",
        "reduceFixup": "",
        "x": 1070,
        "y": 200,
        "wires": [
            [
                "de861f737a331563"
            ]
        ]
    },
    {
        "id": "de861f737a331563",
        "type": "debug",
        "z": "a079c2c6d85e8f14",
        "name": "debug 3",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1200,
        "y": 200,
        "wires": []
    },
    {
        "id": "80511ebb.0e3c18",
        "type": "mqtt-broker",
        "name": "mqtt",
        "broker": "mqtt",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "compatmode": false,
        "protocolVersion": "5",
        "keepalive": "60",
        "cleansession": true,
        "autoUnsubscribe": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthRetain": "false",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closeRetain": "false",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willRetain": "false",
        "willPayload": "",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    }
]
Elix-g commented 9 months ago

Ich bin auch endlich mal aktiv geworden und dabei heraus gekommen ist ein kleines Python-Tool, welches für die vorhandenen Homematic-Geräte, Systemvariablen und Programme MQTT Auto Discovery Einträge für Home Assistant erstellt und veröffentlicht. Alternativ die Ausgabe als HA yaml-Konfiguration.

Jacking2HA