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