Hallo zusammen, ich bin neu hier und bei iobroker
Zwar nicht grundsätzlich neu im Thema Programmierung, aber doch mit Javascript habe ich ein Script erstellt, welches die Verbindung zwischen iobroker und einer Mobotix T25 realisiert.
Allerdings war der Weg dorthin etwas holprig, und es würde mich freuen, wenn die Profis mal darüber sehen, und es konstruktive Kritik hagelt.
Vielleicht kann ja auch ein anderer Neuling darauf aufbauen
Die T25 arbeitet mit ihrerseits genannten "Netzwerkmeldungen", das heisst, sie ruft eine URL auf. Sie kann auch HTTPS Seiten aufrufen, ich habe leider keine Möglichkeit gefunden, den iobroker mit HTTPS anzusprechen, und habe daher etwas "Pseudo Sicherheit" mit einer Name/PW abfrage eingebaut, was ungesichert halt eben nur Pseudo ist. Hat hier jemand eine Idee?
Ich hoffe der Rest meiner Absichten damit wird im Script deutlich, sonst einfach fragen
Vielen Dank an alle im Vorraus
//
// Mobotix Klingel Script
// Aufruf: http://192.168.X.X:8087/setBulk?javascript.0.Input_Name=Mobotix&javascript.0.Input_Passwort=XXX8&javascript.0.Input_Klingel_EG=true
// ACHTUNG: Bei der Aufruf URL ist darauf zu achten, das der Trigger zum Schluss kommt (&javascript.0.Input_Klingel_EG=true), da sonst bei der PW-überprüfung noch keine Daten vorhanden sind!
//
// Links zu den Datenpunkten
const Obj1 ="knx.1.Erdgeschoss.Systemobjekte.EG_-_Klingel_Schaltimpuls_1_(Klingel)"; // Link zur Klingel EG Flur
const Obj2 ="knx.0.Kellergeschoss.Systemobjekte.KG_-_Klingel_Flur_Schaltimpuls_1_(Klingel)"; // Link zur Klingel KG Flur
const Obj3 ="knx.0.Kellergeschoss.Systemobjekte.KG_-_Klingel_Garage_Schaltimpuls_1_(Klingel)"; // Link zur Klingel KG Garage
const Obj4 ="knx.2.Dachgeschoss.Systemobjekte.DG_-_Klingel_Schaltimpuls"; // Link zur Klingel DG Flur
const Obj5 ="javascript.0.Input_Klingel_EG"; // Wurde im EG geklingelt?
const Obj6 ="javascript.0.Input_Klingel_DG"; // Wurde im DG geklingelt?
const Obj7 ="javascript.0.Input_Passwort"; // Übertragenes Passwort
const Obj8 ="javascript.0.Input_Name"; // Übertragener Name
// Benötigte Objekte anlegen, falls nicht vorhanden ...
if(!existsObject(Obj5) ||!existsObject(Obj6) ||!existsObject(Obj7) ||!existsObject(Obj8)) CreateObjects();
// Benötigte Variablen
var debug = true; // Aktiviere Debugging
var id0 ="XXX"; // Passwort Netzwerkmeldung von Mobotix zum Abgleich
var id1 ="Mobotix"; // Name Netzwerkmeldung von Mobotix zum Abgleich;
var id2 = true; // Rücksetzen aktiv
// Initiierende Trigger ///////
on({id: 'javascript.0.Input_Klingel_EG', change: "any", val: true}, function (obj) {
var value = obj.state.val;
var Name = getState(Obj8).val; // Übertragener Name
var Password = getState(Obj7).val; // Übertragenes Passwort
if(value) Klingeln(Name, Password, "EG");
if(debug && value) log('Trigger Klingel EG aktiviert!');
if(id2) ClearStates();
});
on({id: 'javascript.0.Input_Klingel_DG', change: "any", val: true}, function (obj) {
var value = obj.state.val;
var Name = getState(Obj8).val; // Übertragener Name
var Password = getState(Obj7).val; // Übertragenes Passwort
if(debug && value) log('Trigger Klingel DG aktiviert!');
if(value) Klingeln(Name, Password, "DG");
if(id2) ClearStates();
});
//////////////////////////////
// Script starten /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function Klingeln(Name, Password, Etage) {
if(debug)log('Skriptanlauf ...');
// Abfrage Übertragener Name
// Abfrage, ob Eingegebener Name und Passwort korrekt ...
if( id1 == Name && id0 == Password){
if(debug)log('Name und PW korrekt');
if(Etage=="EG"){
// Klingeln im EG
if(debug)log('Klingeln im EG');
//setState(Obj1, true);
//setState(Obj2, true);
//setState(Obj3, true);
}else if(Etage=="DG"){
if(debug)log('Klingeln im DG');
// Klingeln im DG
//setState(Obj4, true);
}else{
if(debug)log('Klingeln Gescheitert, keine Etagenangabe!');
}
}else{
if(debug)log('Unerlaubter Zugriff auf das Script der Mobotix Verbindung!');
if(debug)log('Name SOLL:' + id1 + ' Name IST:' + Name);
if(debug)log('PW SOLL:' + id0 + ' PW IST:' + Password);
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Variablen am Ende wieder leeren!
function ClearStates(){
setStateDelayed(Obj5, false, 2000 );
setStateDelayed(Obj6, false, 2000 );
setStateDelayed(Obj7, '', 2000 );
setStateDelayed(Obj8, '', 2000 );
}
function CreateObjects(){
// Eingangsvariablen anlegen, falls nicht vorhanden
if(!existsObject('javascript.0.Input_Klingel_EG')){
createState('javascript.0.Input_Klingel_EG',
{
def: 'false',
type: 'boolean',
name: 'Eingang von Mobotix, es wurde im EG geklingelt wurde!'
}
);
}
if(!existsObject('javascript.0.Input_Klingel_DG')){
createState('javascript.0.Input_Klingel_DG',
{
def: 'false',
type: 'boolean',
name: 'Eingang von Mobotix, es wurde im DG geklingelt wurde!'
}
);
}
if(!existsObject('javascript.0.Input_Name')){
createState('javascript.0.Input_Name',
{
def: 'false',
type: 'string',
name: 'Eingang von Mobotix, Übergabewert Anmeldename!'
}
);
}
if(!existsObject('javascript.0.Input_Passwort')){
createState('javascript.0.Input_Passwort',
{
def: 'false',
type: 'string',
name: 'Eingang von Mobotix, Übergabewert Anmeldepasswort!'
}
);
}
}