CANBus / Spline / Innoxel interface with HA

Hallo Tinu
Ich schaue aktuell auch gerade wie ich mein Innoxel in HomeAssistant einbinden kann. Hast du mir allenfalls ein paar Tipps für den Start? Funktioniert der Controller (Industrial ESP32 IoT Programmable Controller | RS485, CAN, Ethernet - DFRobot) wie gewünscht und spielt es eine Rolle welchen Innoxel Master im Einsatz ist? Ich habe noch den Master 2. Danke für deine Rückmeldung.

Hi mmeister-119,
Did you read this article ? Use case: Freeing a fully locked home-automation system | Domedia
There are few useful informations to begin inoxel control.
We can help if need.
The DFRobot is a very robust gateway, it have been tested.

Hallo mmeister-119. Ja der DFRobot Edge 101 funktioniert wie gewünscht und liess sich gut mit ESPHome in HA integrieren. Es hat etwas gedauert bis ich rausgefunden habe wie die LAN-Schnittstelle aktiviert wird, da dies nirgends richtig dokumentiert war. WLAN ging von Anfang an.

ethernet:
  type: IP101
  mdc_pin: GPIO4
  mdio_pin: GPIO13
  clk:
    pin: GPIO0
    mode: CLK_EXT_IN
  phy_addr: 1
  power_pin: GPIO2

Ich habe den Noxmaster-1024 (ist das der Noxmaster 2 oder noch eine Generation früher, bin nicht sicher). Aber theoretisch sollte das keine Rolle spielen, weil man ja die Module direkt anspricht, d.h. so wie ich verstanden habe, könnte man den Controller dann sogar entfernen, wenn man alles über HA umsetzen will inkl. der Reaktion auf Tastendrücke von physischen Elektronik-Tastern usw.)

Was bei mir gemäss der Beschreibung von domedia.net nicht funktioniert hat, war eben diese Ansteuerung eines NoxSwitch “Control of ON/OFF circuits” über ASCII-Kommandos (zB. S6 / C6). Das konnte ich wie oben bereits beschrieben mit einem solchen Kommando lösen, was einem Tastendruck entspricht:

Beispiel:

  - id: o12_k7_toggle   # Lampe klein vorne
    then:
      - canbus.send: { can_id: 0x53C, data: [0x00, 0x0B] }
      - delay: 5ms
      - canbus.send: { can_id: 0x53C, data: [0x00, 0x0F] }

Ich habe eine Wetterstation in meinem Innoxel-System und auch einen RTI-Controller XP6s über einen Seriell-CAN-Gateway von Innoxel. Das verursacht sehr viel Traffic auf dem Bus, ein Sniffen aller Ereignisse war daher so nicht möglich, damit ist der Edge101 offenbar überlastet. Ich hatte auch keine Lust alles zu entfernen. Darum habe ich mir zuerst damit ausgeholfen direkt mit der ArduinoIDE ein paar spezifische Sketchs auf den Edge101 zu laden um damit zuerst alle Busadressen zu ermitteln und dann mit einem Sketch zB. auf einer Bus-Adresse eines NoxSwitch zu sniffen und alles was drumherum zb. +/- 100ms nach einer Auslösung eines Ausgangs passiert aufzuzeichnen. Damit konnte ich dann eine Tabelle erstellen, welche Kommandos ich wohin schicken muss.

Das hier wäre zb. dieser NoxSwitch 0x21D, welcher bei mir als 014 bezeichnet ist:

Relais-Modul Innoxel Kanal CAN Status 1 CAN Schalten 1 Delay 2
O14 0 0x21D b0 = 0x03, b1 & 0x01 0x550 00 0E 5ms 00 0F
O14 1 0x21D b0 = 0x03, b1 & 0x02 0x552 00 0E 5ms 00 0F
O14 2 0x21D b0 = 0x03, b1 & 0x04 0x552 00 0D 5ms 00 0F
O14 3 0x21D b0 = 0x03, b1 & 0x08 0x552 00 0B 5ms 00 0F
O14 4 0x21D b0 = 0x03, b1 & 0x10 0x552 00 07 5ms 00 0F
O14 5 0x21D b0 = 0x03, b1 & 0x20 0x554 00 07 5ms 00 0F
O14 6 0x21D b0 = 0x03, b1 & 0x40 0x554 00 0E 5ms 00 0F
O14 7 0x21D b0 = 0x03, b1 & 0x80 0x53E 00 0E 5ms 00 0F

Den Status erhalte ich dann so:

      # Status-Frames O14 (0x21D)
      - can_id: 0x21D
        can_id_mask: 0x7FF
        then:
          - lambda: |-
              if (x.size() < 2) return;
              const uint8_t b0 = x[0];
              const uint8_t b1 = x[1];
              if (b0 != 0x03) return;
              id(o14_k0).publish_state(b1 & 0x01);
              id(o14_k1).publish_state(b1 & 0x02);
              id(o14_k2).publish_state(b1 & 0x04);
              id(o14_k3).publish_state(b1 & 0x08);
              id(o14_k4).publish_state(b1 & 0x10);
              id(o14_k5).publish_state(b1 & 0x20);
              id(o14_k6).publish_state(b1 & 0x40);
              id(o14_k7).publish_state(b1 & 0x80);

Die Dimmer wiederum konnte ich mit ASCII-Kommandos ansteuern wie im Artikel beschrieben.
Bei den Storen (NoxMotor) sende ich ebenfalls die HEX-Commands wie bei den NoxSwitchs, da wiederum brauchte ich noch eine lambda Funktion um den Stop richtig verwenden zu können.

Das alles funktioniert. Die Rückmeldung soweit auch, nur bei den Dimmern habe ich das noch nicht.

Also ich bin bestimmt auch noch nicht fertig, ich verwende es auch noch nicht “produktiv”. Ich möchte zB. auch die Schaltuhr setzen können. Von Wetterstation-Daten gar nicht zu reden. (Die habe ich aktuell über den RTI XP6s-Controller - MQTTDriver in HA. Vermutlich ist das alles von mir auch zu kompliziert gelöst, leider habe ich wirklich noch nicht herausgefunden wie es so wie im Artikel beschrieben funktionieren soll.
Es wäre interessant zu wissen ob und wie es bei dir funktioniert, wenn du auch ein reines Innoxel-System hast. Ich kann dir gerne mein YAML für den Edge zur Verfügung stellen wenn es dir etwas hilft.
Ich wäre auch sehr interessiert daran von dir zu erfahren, wie du es gelöst hast und ob du bei dir so wie im Artikel beschrieben einen Ausgang schalten kannst.

Die Experten sind hier sicher Clément und Vincèn, wenn man es professionell machen will ist man bei Ihnen am besten bedient denke ich. Für mich reicht es im Moment so.

Hi Clément, yes I have read the article, but I must admit that I haven’t quite understood everything yet, as I am just getting started and have no experience with ESPHome so far. I am also still very new to HA. However, I set up the Innoxel myself without any problems and have expanded it several times since then.
I am currently struggling to find the Edge101 via the Ethernet interface in my network. I use HA on my NAS as a Docker container.

Furthermore, I don’t quite understand how the mapping of the CAN bus addressing works or how it can be derived. For example, I have 5 switch actuators with the addresses 0 (0.0 - 0.7), 1 (1.0-1.7), etc. Shouldn’t it be possible to derive a general mapping, or am I wrong?
Best regards Marcel

Hallo Tinu, Danke für die Ausführliche Rückmeldung. Wie im anderen Post erwähnt, ich stehe noch ganz am Anfang werde aber gerne meine Ergebinsse teilen sobald ich welche habe :wink: Deine YAML wäre natürlich sicher hilfreich und ich bin dankbarer Empfänger.

Marcel

@mmeister-119,
Here is the base config for Edge 101. You could start with it easily.

esphome:
  name: can-gateway-1
  friendly_name: "CAN Gateway 1"
  area: "Technical Room"
  
esp32:
  board: esp32dev
  framework:
    type: esp-idf

logger:

api:
  reboot_timeout: 120min

ota:
  - platform: esphome

ethernet:
  type: IP101
  mdc_pin: GPIO4
  mdio_pin: GPIO13
  clk:
    pin: GPIO0
    mode: CLK_EXT_IN
  power_pin: GPIO2
  phy_addr: 1

web_server:

uart:
  tx_pin: GPIO17
  rx_pin: GPIO36
  baud_rate: 9600

sensor:
  - platform: uptime
    name: Uptime
    filters:
      - lambda: return x / 60.0 /60.0 /24;
    unit_of_measurement: d

canbus:
    - platform: esp32_can
      tx_pin: GPIO32
      rx_pin: GPIO33
      can_id: 4
      bit_rate: 100kbps
      use_extended_id: false

The best way to find your can bus adress is to decode it adding this in canbus section :


      on_frame:   
      - can_id: 0x000
        can_id_mask: 0x000
        then:
        - lambda: |-
            std::string b(x.begin(), x.end());
            ESP_LOGD("can id 0x000 ", "%s", &b[0] );

You will see the canbus message in the logs. You will be able to see your can bus adress when you trigger something.

In other way, you can try the list i will send you with the maching inoxel number-> can adresses. I’m not sure, it will works in your system.
Do you have the config file of your inoxel system ?
Sometime it can help finding the adresses.

I have now tried another NoxSwitch-0806 module, which was retrofitted. This accepts the S and C commands and switches the output. However, there is no status feedback or update, e.g., on my RTI app or the touch panel. For me, this means that I will stick with my version, as it also provides me with the corresponding feedback. Of course, this means that my version only works with an RTI master.

Bei mir sind es diese Adressen:

O0 0x201
O1 0x203
O2 0x205
O3 0x207
O4 0x209
O5 0x20B
O6 0x20D
O7 0x20F
O8 0x211
O9 0x213
O10 0x215
O11 0x217
O12 0x219
O13 0x21B
O14 0x21D
O15 0x21F
D0 0x60C
D1 0x60E

Hallo zusammen danke für die Rückmeldungen und Tipps. Ich werde das sobald ich Zeit finde testen. @Tinu1 wie können wir die YAML austauschen? Sehe hier gerade keine Möglichkeit um DM auszutauschen.

Hello everyone,
Very exciting,
finally a way to get away from the RTI restrictions.
But we (I hardware, my wife also likes software) start with Hue and Reolink to get to know HA. Tomorrow the Green with Zigbee antenna will be installed and then we can start.
Thank you for your great preparatory work!
I’m happy to get involved when we’ve built up some know-how.
Greetings
Patrick

Hallo Beisammen

Sehr spannend,
endlich eine Möglichkeit weg von den RTI Restriktionen zu kommen.
Wir (Ich Hardware, meine Frau gerne auch Software) starten aber erstmal mit Hue und Reolink um HA kennen zu lernen. Morgen wird die Green mit Zigbee Antenne installiert und dann kann’s losgehen.

Danke für eure tolle Vorarbeit!:pray:t2:
Ich klinke mich gerne ein wenn wir etwas Know-how aufgebaut haben. :+1:t2:

Gruss
Patrick

First, a fundamental question:
In your YAML file, you have “all at can: 4”. Is this the physical connection to the bus master, which has buses 0 and 4? My actuators are all connected to bus 0. Do I then need to enter “can: 0”, or is this entry unrelated to the bus master CAN connection?

HA, das ESP32 Zeug, Blue, da ist Shelly und Reolink pure Erholung :grin:

It has no relation with physical bus or wiring as it’s the same bus for the whole system. It’s the ESPHome node id on the can bus (messages sent includes a sender id and a receiver id and if the device answers/acknowledges it should send message at the ID of the ESPHome node as destination of message)
Side note: we have completed with success full migration of a Spline/AMX system to HA using ESPHome for communication with CAN bus (lights (dim and switch), cover, shades, heating).

1 Like

Hallo zusammen, nach langem habe ich mich wieder an das Projekt gewagt.
Bisher konnte ich allerdings “nur” erfolgreich die Rückmeldungen der Schaltaktoren integrieren. Die Adressierung entspricht die von @Tinu1
Trotz der Filterung auf diese Adressen kann ich leider keine can id für die Schaltung ausmachen. Die Version aus dem Pilotprojekt von @vincen und @OBM funktioniert bei mir leider auch nicht.

  • platform: template
    #id: O_0_1
    name: “0.1 Licht Küche Unterschrank”
    optimistic: True
    turn_on_action:
    • canbus.send:
      data: “S7”
      can_id: 0x201
      turn_off_action:
    • canbus.send:
      data: “C7”
      can_id: 0x201

Die Betätigung dieses Schalters bleibt ohne Reaktion.

Schalte ich jedoch via Innoxel Taster erhalte ich im HA den korrekten Status des Ausgangs.

@Tinu1 mit welchen Sketches (Filter oder ähnlich) konntest du die Can Adressen zum Schalten ermitteln? Hast du mir allenfalls die komplette Tabelle damit ich sehe welche welche Kommandos zu den Innoxell Relais O 0 - 3 ( bei mir ON/Off) & O 10 - 14 (Storen) sowie D 0 - 3 gehören?

Vielen Dank für die Rückmeldung.

Hi Clément,
I have seen that the addresses of the outputs correspond to those of tinu. Unfortunately, there is so much traffic on the bus that I am having great difficulty determining the addresses of the switches. After pressing 1-2 buttons, my Edge 101 freezes and I always have to reload the configuration. I have the Innoxel configuration because I programmed it myself and have made several adjustments to it recently.

Can the Can ID be derived from the innoxel button addressing?
For example, my single-button switch “Light Ground Floor” (INNOXEL 11LP61) has the address 14 in the Innoxel configuration.

Hi @mmeister-119
Did you try to disconnect weather station of your system ? it’s the main “pollution” of the bus in Spline systems.
What are saying logs of ESPHome when the DFRobot freezes ? as it should not freeze so easily.

yep it is, an input module at address C14 in Spline system maps to x41C in CAN address for direct commands and x41D for feedback if you want to use them :wink: Here it is mapping for inputs:

C1 x402
C2 x404
C3 x406
C4 x408
C5 x40A
C6 x40C
C7 x40E

For dimmers:

B1 x60C
B2 x614
B3 x61C
B4 x624
B5 x62C
B6 x634
B7 x63C

For relays and switches:

A1 x203
A2 x205
A3 x207
A4 x209
A5 x20B
A6 x20D
A7 x20F
A8 x211

Hope it helps :wink:

I have now tested various filters and am now able to interpret the switching commands from the buttons. I can’t disconnect the weather station so easily because I can’t reach it very well in the riser zone. :grimacing: But if I get stuck, I’ll check it again. In the log, I only have a message saying that the API unexpectedly lost the connection or something similar. But that’s no longer a problem. The switching of the outputs now works according to the principle described by @tinu1.

Thanks for the tip about the addresses for the switches, etc. I was able to derive a list and filter the switch commands specifically.

I will now try to get the output relays to switch directly.

1 Like

With my Busmaster 2, a bus coupler is still necessary for the galvanic separation.
It’s normal in drying, so in UV at the Busmaster. Maybe with you too?

I can’t even get the ESP32. Been trying for days…
Someone in Aargau (near Wohlen) at home who can bring the things to life?

Bei meinem Busmaster 2 ist noch ein Busskoppler für die galvanische Trennung notwendig.
Die ist normal im Trocknen , also im UV beim Busmaster. Vielleicht auch bei dir?

Ich bekomme nichtmal das ESP32 hin. Seit Tagen am versuchen…
Jemand im Aargau (Nähe Wohlen) zuhause welcher die Dinger zum Leben erwecken kann?

@pahuerma May you please have a little of respect for other members of the forum ? and post in english as this forum is english based language !! If you don’t speak english use an automated translation tool Thanks

Hi Patrick, first it would be useful to know what kind of hardware you are using. ESP? Busmaster (Innoxel?)? For me, it was very helpful to start programming step by step. So, first establish a connection and observe the log as described above. To avoid too much data chaos in the log, I specifically observed one of my switches and an output module. I am curious to know what hardware you are working with.

Yes, we have a Innoxel busmaster 2.
First step ESP32 with the DFRobot. A lot of yaml. Wlan works fine, but never a log from Innoxel Can. We have changed all, different yaml Code, Cable,Laptop or dirrectly with the HA Green…
Last step was a change to an other ESP32 (buyed also by bastelgarage). It’s the Waveshare ESP32-S3 RS485 CAN Board. Bild the yaml with chatgpt. It work, but with this Modul I have trouble with the Wlan connection. First install, we can see the modul with correct name on my ufiniti AP. But bit later without USB Cable, this shitti ESP thing forget the Wlan and give us a nogo when we will install the full yaml code…
At time, I dislike ESP32…

Other Things with HA works perfectly, my wive will be nearly to make the master . :slight_smile: :sunglasses: