iO Broker Datei in Home Assistant integrieren

Hallo zusammen,

ich habe in meinem Haus zwei verschiedene Hardware Konzepte. Der erste Umbau des Hauses (EG) hat Komponenten integriert die ein ehemaliger Arbeitskollege selber entwickelt hat.

Der zweite Umbauabschnitt (KG und OG) läuft komplett auf Homematic IP Wired.

Für Homematic und die ganzen anderen Sachen wie Roborock, Govee, etc. hab ich mir Home Assistent über Proxmoxx eingerichtet, was bisher auch recht problemlos läuft. Ab und an verliert er die Verbindung zu Homematic, wo ich noch am schauen bin an was das liegt.

Nun möchte ich aber die Hardware vom ersten Umbau (EG) auch in HA integrieren, damit ich alles aus einer App raus bedienen und Automationen erstellen kann.

Dazu habe ich den Kollegen gefragt, ob er sein System schon mal in HA integriert hat.

Hat er nicht……was er aber gemacht hat, ist es in iO Broker zu integrieren.

Er meinte es sollte ein leichtes sein, über eine KI, diese iO Broker Datei so umbauen zu lassen, damit es auch in HA funktioniert.

Leider kenn ich mich da noch überhaupt nicht aus.

Kann mir einer von euch da helfen?

Da ich keine Datei hochladen kann, hier der Inhalt der *.txt Datei.


 const PORT = 34012;
 const PORT_TX = 34001;
 const ADDRESS = '192.168.0.134';
 const IHC_STATE_FOLDER = '0_userdata.0.IHC.';
 const IHC_CONNECTION_ACTIVE = IHC_STATE_FOLDER + 'Info.connectionActive';
 const dgram = require('dgram');
 const server = dgram.createSocket('udp4');
 server.on('error', (err) => {
  console.error(`server error:\n${err.stack}`);
  server.close();
 });
 server.on('message', (msg, rinfo) => {
  const resArray = msg.toString().split("\r");
  if(resArray.length > 1 ){
  resArray.pop();
  //console.log('server got:')
  resArray.forEach(WriteToStates);
  setState(IHC_CONNECTION_ACTIVE,{val:true,expire: 300});
  }
 });
 async function WriteToStates(value) {
  const sig_name_arr = value.split("\n");
  const state_name = sig_name_arr[0] + '_' + sig_name_arr[1] + '_' + sig_name_arr[2] + '_' + sig_name_arr[3];
  const sig_name = IHC_STATE_FOLDER + '0.' + state_name;
  var common = {};
  var value0;
  common['name'] = state_name;
  common['ack'] = true;
  switch(sig_name_arr[2]){
  case '0': // digital Type
  common['type'] = 'boolean';
  if(sig_name_arr[4]!=0) value0 = true;
  else value0 = false;
  break;
  
  case '1': // analog Type
  common['type'] = 'number';
  value0 = parseInt(sig_name_arr[4]);
  break;
  
  case '2': // String Type
  common['type'] = 'string';
  value0 = sig_name_arr[4].replaceAll("°","°");
  break;
  
  case '3': // Temperature Type
  common['type'] = 'string';
  common['unit'] = '°C';
  value0 = sig_name_arr[4].replaceAll("°C","");
  break;
  
  case '4': // Time Type
  common['type'] = 'string';
  value0 = sig_name_arr[4];
  break;
  
  case '5': // Date Type
  common['type'] = 'string';
  value0 = sig_name_arr[4];
  break;
  default:
  value0=0;
  }
  if( existsState(sig_name) ) {
  await setStateAsync(sig_name, value0, true);
  } else {
  common.name = state_name;
  await createStateAsync(sig_name, value0, common);
  }
  //console.log(sig_name + ": " + value0);
 }
 server.on('listening', () => {
  const address = server.address();
  console.log(`server listening ${address.address}:${address.port}`);
 });
 server.bind(PORT+1);
 createState(IHC_CONNECTION_ACTIVE , false,true, {type: 'boolean'});
 //import { Buffer } from 'node:buffer';
 const message = Buffer.from('0');
 const client = dgram.createSocket('udp4');
 var sch_WDT = schedule('*/30 * * * * *', async function () {await client.send(message, PORT, ADDRESS);});
 const client_tx = dgram.createSocket('udp4');
 //client_tx.send(message_tx, PORT_TX, ADDRESS);
 async function StatesChange(obj) {
  const sig_name_arr = obj.id.substring(obj.id.lastIndexOf('.') + 1).split("_");
  //console.log(sig_name_arr.length + ' --Val ' + obj.state.val + ' --ACK ' + obj.state.ack + ' --From ' + obj.state.from);
  if(sig_name_arr.length == 4 ){
  // 0: Module ID 1: Type(0:IN,1:OUT,2:Var) 2:DataType 3: Signal Number
  if(sig_name_arr[0]<256 && sig_name_arr[1]==0 && sig_name_arr[2]<256 && sig_name_arr[3]<256){
  if(sig_name_arr[2]==0){//DataTpye digital
  const message_tx = Buffer.from([4, 0,0,0, // Num Of Data (4bytes) 
  2, 0,0,0, // Digital signal 
  sig_name_arr[0],0,0,0, // Module ID 
  sig_name_arr[3], 0,0,0, // Signal Number
  (obj.state.val==false)?2:1, 0,0,0, // operation (0=toggle, 1=Set 2 = Reset)
  0, 0,0,0, 0, 0,0,0, 0, 0,0,0, 0, 0,0,0, 0, 0,0,0, 0, 0,0,0, 0, 0,0,0]); // zero fill
  client_tx.send(message_tx, PORT_TX, ADDRESS);
  //console.log(sig_name_arr[0] + '-' + sig_name_arr[3] + ' --Val ' + obj.state.val + ' --ACK ' + obj.state.ack + ' --From ' + obj.state.from);//.state.val);
  }
  }
  }
 };
 //on({id:[].concat([IHC_STATE_FOLDER , '0.5_0_0_15']), change: "ne"}, StatesChange);
 //on({id:'0_userdata.0.IHC.0.5_0_0_15'/*5 0 0 15*/, change: "ne"}, StatesChange);
 on({id:/^0_userdata\.0\.IHC\.0\.\d+_0_[0-1]_\d+$/, change: "ne", ack:false}, StatesChange);
  // console.log('List Subscriptions:');
  // console.log(getSubscriptions());
 // bei Scriptstop
 onStop (function scriptStop () {
  clearSchedule(sch_WDT); 
  server.close();
  client.close();
  client_tx.close();
 }, 1000);


Wie gesagt, ich hab keine Ahnung was ich damit machen soll.

Ich hab natürlich das Ding auch schon in Copilot reingeschmissen und gesagt bau mal um auf HA.

Aber ob das passt und wie ich das dann in HA bekomme, hab ich keine Ahnung davon.

Viele Grüße

Daniel

Willkommen hier im Forum!
Hast du in ioBroker MQTT Server laufen wo die Daten zusammen laufen? Wenn das hast kannst du die Daten in HA von dort holen. Oder geht es um das dass Device die in ioBroker laufen jetzt nach HA kommen sollen?

1 „Gefällt mir“

Herzlich Willkommen bei uns.

Was sind denn das für Komponenten die da selbst Entwickelt wurden.
Was für ein Funksystem.

Ich frage deshalb weil es genügend Möglichkeiten (Addons) gibt
andere Systeme direkt in HA zu Integrieren.

Das wäre evtl. die Lösung:

Ich hab noch keinen iO Broker am laufen.

Das ganze System läuft als eigenes System auf einem Raspberry. Da wird es auch weiterhin laufen. Ich will nur die Daten (Eingänge, Ausgänge) im HA haben.

Eine Idee von mir war auch…ich bekomm einen iO Broker ans Laufen (geht sicher über Proxmoxx als zweite Instanz auf meinem ThinClint) und lade dort die Datei, die ich bekommen habe nach oben. Hol mir dann die Daten von iO Broker auf HA.

Oder aber, die iO Broker Datei wird nach HA umgeschrieben, damit HA sich die Daten direkt von dem Raspberry holen kann, ohne nochmal ein System (iO Broker) dazwischen zu haben.

Die zweite Variante wäre meine bevorzugte Variante.

Nur weiß ich da nicht, wie ich das umsetzen kann, da ich da noch zu wenig Ahnung habe.

Es ist kein Funksystem. Alles ist verkabelt. Die Komponenten sind quasi wie Homematic IP Wired nur nicht so schick mit Display und Knöpfchen und halt vor ca. 20 Jahren entwickelt worden.

Es gibt Eingangsmodule und es gibt Ausgangsmodule.

Das hab ich auch schon gesehen, aber wie oben schon geschrieben, würde ich den Umweg über iO Broker gerne vermeiden, damit ich nicht nochmal ein System zwischendrin hängen habe.

Aktuell habe ich auf meinen Walldisplays immer zwei Webbrowser Tabs offen. Auf dem einen kann ich alles von dem IHC (das was der Kollege entwickelt hat) steuern und auf dem anderen Tab hab ich ein Standart-Dashboard von HA offen um das KG und das OG zu steuern.

Ich habe das oben so verstanden gehabt, das du von einem ioBroker die Daten in HA habe möchtest. Ok wenn das so eine Art Funkmodule sind die in HM laufen, werde die auf 868Mhz sein. Von dem RPi wo die Software drauf läuft, kannst du dort keinen MQTT Broker dazu installieren? Den das wäre die einfachste Lösung, den dann kannst du die Daten einfach über MQTT an HA senden und dort drin damit arbeiten. Was für ein OS läuft auf dem RPi drauf? Wird ein Linux sein vermute ich mal, darin kann man normal auch MQTT installieren.

Ich habe keine Funkmodule. Es sind alles verkabelte Ein- und Ausgänge. Sowohl bei dem eigenen System als auch bei HM IP Wired. Darum das Wired. ELV Homematic IP Wired

Ich muss mal schauen, bzw. nachfragen was auf dem RPI läuft. Ich vermute auch ein Linux.

Ich muss auf alle Fälle von dem System noch ein Update machen, damit das ganze gehen würde. Die Updatedatei hat er mir auch schon geschickt. Eventuell ist das dann sogar ein MQTT, die durch das Update aufgespielt wird.

Im Anhang mal der Text vom ersten Beitrag. Anhand dessen kann nicht gesagt werden ob das ganze über MQTT versendet wird??

IHC iO Broker.pdf (43,9 KB)

Gehe mal auf die Konsole von dem RPi und gib dort den Befehl ein

lsb_release -a 

Damit wird angezeigt was für ein OS auf dem PRi läuft! Zeig hier was die Ausgabe davon ist. MQTT kannst du bei jedem Linux System dazu installieren.

Hallo daniel,

die pdf ist iobroker code ist das richtig? Wenn du mir detailierte Angaben machst wie und was dein system womit sendet also eine genaue Beschreibung (auch code ist interessant) kann ich versuchen dir einen passenden Adapter zu HA zu programmieren. Habe zuletzt Atlas Framework und unter anderem einen MQTT-Client (bidiorektional) für HA entwickelt der mit IOBroker MQTT-Server spricht.

Habe mir schon ein Konzept überlegt mal sehen was sich machen lässt

mfg rockbaer