NEWS
Verbindung zu Mobotix T25
-
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 aufbauenDie 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 fragenVielen 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!' } ); } }
-
ich würde die Variablen sprechend benennen, dann ist der Code deutlich einfacher zu lesen und zu verstehen.
-
@Dreamdancer sagte in Verbindung zu Mobotix T25:
Also statt :
const Obj1 ="knx.1.Erdgeschoss.Systemobjekte.EG_-Klingel_Schaltimpuls_1(Klingel)"; // Link zur Klingel EG Flur
so :
const Klingel_Flur_EG ="knx.1.Erdgeschoss.Systemobjekte.EG_-Klingel_Schaltimpuls_1(Klingel)"; // Link zur Klingel EG Flur
?
-
Genau, und ich habe mir die Kameldeklaration angewöhnt.
Ist aber Geschmackssache...
Also...cLampeWohnen
Das kleine c sagt mir dann, daß es sich um "const" handelt.