Jump to content

MAN_Jay

Members
  • Gesamte Inhalte

    3
  • Benutzer seit

  • Letzter Besuch

MAN_Jay's Achievements

Newbie

Newbie (1/14)

  • One Month Later
  • First Post
  • Week One Done
  • Conversation Starter

Recent Badges

0

Reputation in der Community

  1. Hallo Backdraft007, endlich habe ich Zeit gefunden mich darum zu kümmern. Letztendlich habe ich mich für den Enumerate Callback entschieden. Als C++ Programmierer tue ich mich mit J-Script immer noch schwer aber es funktioniert. Die Schwierigkeit lag darin genau heraus zu bekommen welcher Teilnehmer ausgefallen ist. Der Callback sagt einem ja nur was da ist, er weiß nicht, wenn etwas fehlt. Mein Programm ist sicher nicht optimal aber im Grunde bekommt jede UID eine Variable die ich mit einer Zeitverzögerung vom Callback abfrage. Meinen Testcode hänge ich hier mal an, falls noch mal jemand auf die gleiche Problematik stößt: var Tinkerforge = require('tinkerforge'); var HOST = 'localhost'; var PORT = 4223; var UID7 = 'Qv8' //Temperature Bricklet 2.0 Port A MasterBrick 2 var UID11 = '6feC5Q' //MasterBrick 3 var UID12 = 'SWt' //Industrial In var ipcon = new Tinkerforge.IPConnection(); // Create IP connection var t = new Tinkerforge.BrickletTemperatureV2(UID7, ipcon); var ma3 = new Tinkerforge.BrickMaster(UID11, ipcon); //MasterBrick3 var device1; var device2; var device3; ipcon.connect(HOST, PORT, function (error) { console.log('Error: ' + error); } ); function roundTo(value, places){ var power = Math.pow(10, places); return Math.round(value * power) / power; } // Register Enumerate Callback ipcon.on(Tinkerforge.IPConnection.CALLBACK_ENUMERATE, // Print incoming enumeration function(uid, connectedUid, position, hardwareVersion, firmwareVersion, deviceIdentifier, enumerationType) { switch (uid) { case UID7: // Anweisungen werden ausgeführt, // falls expression mit value1 übereinstimmt device1=1; break; case UID11: // Anweisungen werden ausgeführt, // falls expression mit value2 übereinstimmt device2=1; break; case UID12: // Anweisungen werden ausgeführt, // falls expression mit value2 übereinstimmt device3=1; break; default: // Anweisungen werden ausgeführt, // falls keine der case-Klauseln mit expression übereinstimmt break; } } ); ipcon.on(Tinkerforge.IPConnection.CALLBACK_CONNECTED, function (connectReason) { setInterval(function(){ device1=0; device2=0; device3=0; // Trigger Enumerate ipcon.enumerate(); setTimeout(function () { if(device1===0) { console.log('ERROR1'); } if(device2===0) { console.log('ERROR2'); } if(device3===0) { console.log('ERROR3'); } }, 800); },1000); } );
  2. Hi Chris, das Problem besteht weniger beim basteln als viel mehr beim Fahren mit dem Offroadmobil. Durch Vibrationen kann es immer zu einem Verbindungsabbruch kommen und ich merke das nur dadurch, dass zum Beispiel das Licht nicht mehr geht. Es wäre schön, wenn ich hier eine Fehlermeldung auf meinem IO-Broker generieren könnte indem das Javascrip eine Variable im Fehlerfall ändert. Ich bin eher der C++ Programmierer, daher habe ich Javascript sicher falsch verwendet. Ich würde mich sehr darüber freuen, wenn mir jemand helfen könnte. var Tinkerforge = require('tinkerforge'); var HOST = '192.168.0.20'; var PORT = 4223; var UID1 = 'Mkj' //Industrial Dual Analog In Bricklet 2.0 Port C MasterBrick 2 var UID2 = 'Mmh' //Industrial Dual Analog In Bricklet 2.0 Port D MasterBrick 2 var UID3 = 'H2J'; // Industrial Digital Out 4 Bricklet 2.0 Port D MasterBrick 1 var UID4 = 'H3C'; // Industrial Digital Out 4 Bricklet 2.0 Port C MasterBrick 1 var UID5 = 'Q6m'; // IO-16 Bricklet 2.0 Port A MasterBrick 1 var UID6 = '2gaETX'; // IO-16 Bricklet 2.0 Port B MasterBrick 1 var UID7 = 'Qvu' //Temperature Bricklet 2.0 Port A MasterBrick 2 var UID8 = 'R2J' //LCD 128x64 Bricklet Port B MasterBrick 2 var UID9 = '6KTNip' //MasterBrick 1 var UID10 = '69DeZc' //MasterBrick 2 var UID11 = '6feC5Q' //MasterBrick 3 var UID12 = 'R2V'; // Change XYZ to the UID of your OLED 128x64 Bricklet var UID13 = 'RzB'; // Industrial quad relais Bricklet var UID14 = '6CQzJH'; //IMU Bricklet var SCREEN_WIDTH = 128; var SCREEN_HEIGHT = 64; var A0duty = 0; var A1duty = 0; var A2duty = 0; var A3duty = 0; var A4duty = 0; var A5duty = 0; var A6duty = 0; var A7duty = 0; var m1; var m2; var m3; var BalkenFWlinks; var ProzentFWlinks; var BalkenFWrechts; var ProzentFWrechts; var BalkenAbwasser; var ProzentAbwasser; var m1_1; var m2_1; var m3_1; var ipcon = new Tinkerforge.IPConnection(); // Create IP connection var idai1 = new Tinkerforge.BrickletIndustrialDualAnalogInV2(UID1, ipcon); // Create device object var idai2 = new Tinkerforge.BrickletIndustrialDualAnalogInV2(UID2, ipcon); // Create device object var ido1 = new Tinkerforge.BrickletIndustrialDigitalOut4V2(UID3, ipcon); // Create device object var ido2 = new Tinkerforge.BrickletIndustrialDigitalOut4V2(UID4, ipcon); // Create device object var ido3 = new Tinkerforge.BrickletIO16V2(UID5, ipcon); // Create device object var ido4 = new Tinkerforge.BrickletIO16V2(UID6, ipcon); // Create device object var t = new Tinkerforge.BrickletTemperatureV2(UID7, ipcon); var ma1 = new Tinkerforge.BrickMaster(UID9, ipcon); //MasterBrick1 var ma2 = new Tinkerforge.BrickMaster(UID10, ipcon); //MasterBrick2 var ma3 = new Tinkerforge.BrickMaster(UID11, ipcon); //MasterBrick3 var lcd = new Tinkerforge.BrickletLCD128x64(UID12, ipcon); // Create device object var iqr = new Tinkerforge.BrickletIndustrialQuadRelayV2(UID13, ipcon); // Create device object var imu = new Tinkerforge.BrickIMUV2(UID14, ipcon); // Create device object ipcon.connect(HOST, PORT, function (error) { console.log('Error: ' + error); } ); function roundTo(value, places){ var power = Math.pow(10, places); return Math.round(value * power) / power; } ipcon.on(Tinkerforge.IPConnection.CALLBACK_CONNECTED, function (connectReason) { //IO16 Als Ausgänge setzen // Outputs 0-7 als Ausgang mit Startwert "true" konfigurieren //Outputs Wasserventile Steuerung ido3.setConfiguration(0, 'o', true); ido3.setConfiguration(1, 'o', true); ido3.setConfiguration(2, 'o', true); ido3.setConfiguration(3, 'o', true); ido3.setConfiguration(4, 'o', true); ido3.setConfiguration(5, 'o', true); ido3.setConfiguration(6, 'o', true); //Outputs Druckwasserpumpe ido3.setConfiguration(7, 'o', true); //Eingänge Schalter nr. 1 Seitenklappe links ido3.setConfiguration(8, 'i', true); ido3.setInputValueCallbackConfiguration(8, 100, true); //Eingänge Schalter nr. 2 Seitenklappe links ido3.setConfiguration(9, 'i', true); ido3.setInputValueCallbackConfiguration(9, 100, true); //Eingänge Schalter nr. 3 Seitenklappe links ido3.setConfiguration(10, 'i', true); ido3.setInputValueCallbackConfiguration(10, 100, true); //Eingänge Schalter nr. 4 Seitenklappe links ido3.setConfiguration(11, 'i', true); ido3.setInputValueCallbackConfiguration(11, 100, true); //Eingänge Schalter nr. 5 Seitenklappe links ido3.setConfiguration(12, 'i', true); ido3.setInputValueCallbackConfiguration(12, 100, true); //Eingänge Schalter nr. 6 Seitenklappe links ido3.setConfiguration(13, 'i', true); ido3.setInputValueCallbackConfiguration(13, 100, true); //Eingänge Schalter nr. 7 Seitenklappe links ido3.setConfiguration(14, 'i', true); ido3.setInputValueCallbackConfiguration(14, 100, true); //Eingänge Schalter nr. 8 Seitenklappe links ido3.setConfiguration(15, 'i', true); ido3.setInputValueCallbackConfiguration(15, 100, true); //Eingänge Schalter nr. 9 Seitenklappe links ido4.setConfiguration(0, 'i', true); ido4.setInputValueCallbackConfiguration(0, 100, true); //Eingänge Eingangstür Reedkontakt ido4.setConfiguration(1, 'i', true); ido4.setInputValueCallbackConfiguration(1, 100, true); //Eingänge Bedienpanel ido4.setConfiguration(3, 'i', true); ido4.setInputValueCallbackConfiguration(3, 100, true); ido4.setConfiguration(4, 'i', true); ido4.setInputValueCallbackConfiguration(4, 100, true); ido4.setConfiguration(5, 'i', true); ido4.setInputValueCallbackConfiguration(5, 100, true); ido4.setConfiguration(6, 'i', true); ido4.setInputValueCallbackConfiguration(6, 100, true); ido4.setConfiguration(7, 'i', true); ido4.setInputValueCallbackConfiguration(7, 100, true); //Eingänge abfragen // Register input value callback ido3.on(Tinkerforge.BrickletIO16V2.CALLBACK_INPUT_VALUE, // Callback function for input value callback function (channel, changed, value) { if(channel === 8){ setState('0_userdata.0.Tinkerforge.SeitenklappeLinks.Schalter1'/*Schalter1*/,!value); } if(channel === 9){ setState('0_userdata.0.Tinkerforge.SeitenklappeLinks.Schalter2'/*Schalter2*/,!value); } if(channel === 10){ setState('0_userdata.0.Tinkerforge.SeitenklappeLinks.Schalter3'/*Schalter3*/,!value); } if(channel === 11){ setState('0_userdata.0.Tinkerforge.SeitenklappeLinks.Schalter4'/*Schalter4*/,!value); } if(channel === 12){ setState('0_userdata.0.Tinkerforge.SeitenklappeLinks.Schalter5'/*Schalter5*/,!value); } if(channel === 13){ setState('0_userdata.0.Tinkerforge.SeitenklappeLinks.Schalter6'/*Schalter6*/,!value); } if(channel === 14){ setState('0_userdata.0.Tinkerforge.SeitenklappeLinks.Schalter7'/*Schalter7*/,!value); } if(channel === 15){ setState('0_userdata.0.Tinkerforge.SeitenklappeLinks.Schalter8'/*Schalter8*/,!value); } } ); //Callbackeingänge 16IO ido4.on(Tinkerforge.BrickletIO16V2.CALLBACK_INPUT_VALUE, // Callback function for input value callback function (channel, changed, value) { if(channel === 0){ setState('0_userdata.0.Tinkerforge.SeitenklappeLinks.Schalter9'/*Schalter9*/,!value); } if(channel === 1){ setState('0_userdata.0.Tinkerforge.Eingangstür.Reedkontakt'/*Reedkontakt*/,!value); } if(channel === 3){ setState('0_userdata.0.Tinkerforge.Bedienpanel.BedienpanelSchalter1'/*BedienpanelSchalter1*/,!value); } if(channel === 4){ setState('0_userdata.0.Tinkerforge.Bedienpanel.BedienpanelSchalter2'/*BedienpanelSchalter2*/,!value); } if(channel === 5){ setState('0_userdata.0.Tinkerforge.Bedienpanel.BedienpanelSchalter3'/*BedienpanelSchalter3*/,!value); } if(channel === 6){ setState('0_userdata.0.Tinkerforge.Bedienpanel.BedienpanelSchalter4'/*BedienpanelSchalter4*/,!value); } if(channel === 7){ setState('0_userdata.0.Tinkerforge.Bedienpanel.BedienpanelSchalterLandstrom'/*BedienpanelSchalterLandstrom*/,!value); } } ); setInterval(function(){ //Temperatursensor am Bedienpanel t.getTemperature(function (temperature) { setState('0_userdata.0.Tinkerforge.Bedienpanel.Temperatur1'/*Temperatur1*/,roundTo((temperature/100.0)-0.5, 1)); }, ); //Diagnose LEDs if(getState('0_userdata.0.Tinkerforge.Diagnose').val ===true) { lcd.setStatusLEDConfig(1); ma1.enableStatusLED(); ma2.enableStatusLED(); ma3.enableStatusLED(); ido1.setStatusLEDConfig(1); ido2.setStatusLEDConfig(1); ido3.setStatusLEDConfig(1); ido4.setStatusLEDConfig(1); t.setStatusLEDConfig(1); ido1.setChannelLEDConfig(0,3); ido1.setChannelLEDConfig(1,3); ido1.setChannelLEDConfig(2,3); ido1.setChannelLEDConfig(3,3); ido2.setChannelLEDConfig(0,3); ido2.setChannelLEDConfig(1,3); ido2.setChannelLEDConfig(2,3); ido2.setChannelLEDConfig(3,3); idai1.setChannelLEDConfig(0,1); idai1.setChannelLEDConfig(1,1); idai2.setChannelLEDConfig(0,1); idai2.setChannelLEDConfig(1,1); idai1.setStatusLEDConfig(1); idai2.setStatusLEDConfig(1); //iqr.setStatusLEDConfig(1); iqr.setChannelLEDConfig(0,3); iqr.setChannelLEDConfig(1,3); iqr.setChannelLEDConfig(2,3); iqr.setChannelLEDConfig(3,3); } if(getState('0_userdata.0.Tinkerforge.Diagnose').val ===false) { lcd.setStatusLEDConfig(0); ma1.disableStatusLED(); ma2.disableStatusLED(); ma3.disableStatusLED(); ido1.setStatusLEDConfig(0); ido2.setStatusLEDConfig(0); ido3.setStatusLEDConfig(0); ido4.setStatusLEDConfig(0); t.setStatusLEDConfig(0); ido1.setChannelLEDConfig(0,0); ido1.setChannelLEDConfig(1,0); ido1.setChannelLEDConfig(2,0); ido1.setChannelLEDConfig(3,0); ido2.setChannelLEDConfig(0,0); ido2.setChannelLEDConfig(1,0); ido2.setChannelLEDConfig(2,0); ido2.setChannelLEDConfig(3,0); idai1.setChannelLEDConfig(0,0); idai1.setChannelLEDConfig(1,0); idai2.setChannelLEDConfig(0,0); idai2.setChannelLEDConfig(1,0); idai1.setStatusLEDConfig(0); idai2.setStatusLEDConfig(0); //iqr.setStatusLEDConfig(0); iqr.setChannelLEDConfig(0,0); iqr.setChannelLEDConfig(1,0); iqr.setChannelLEDConfig(2,0); iqr.setChannelLEDConfig(3,0); } //230V Steuerung if(getState('0_userdata.0.Tinkerforge.230V.230VChanel1'/*230VChanel1*/).val ===true){ iqr.setSelectedValue(0, true); } else{ iqr.setSelectedValue(0, false); } if(getState('0_userdata.0.Tinkerforge.230V.230VChanel2'/*230VChanel2*/).val ===true){ iqr.setSelectedValue(1, true); } else{ iqr.setSelectedValue(1, false); } if(getState('0_userdata.0.Tinkerforge.230V.230VChanel3'/*230VChanel3*/).val ===true){ iqr.setSelectedValue(2, true); } else{ iqr.setSelectedValue(2, false); } if(getState('0_userdata.0.Tinkerforge.230V.230VChanel4'/*230VChanel4*/).val ===true){ iqr.setSelectedValue(3, true); } else{ iqr.setSelectedValue(3, false); } //Schreibt die Dutycyclelänge auf die Variable oder 0 wenn das Licht aus geschaltet ist if(getState('0_userdata.0.Tinkerforge.A0').val ===true){ A0duty = getState('0_userdata.0.Tinkerforge.IOc1A0duty').val; } else{ A0duty = 0; } if(getState('0_userdata.0.Tinkerforge.A1').val ===true){ A1duty = getState('0_userdata.0.Tinkerforge.IOc1A1duty').val; } else{ A1duty = 0; } if(getState('0_userdata.0.Tinkerforge.A2').val ===true){ A2duty = getState('0_userdata.0.Tinkerforge.IOc1A2duty').val; } else{ A2duty = 0; } if(getState('0_userdata.0.Tinkerforge.A3').val ===true){ A3duty = getState('0_userdata.0.Tinkerforge.IOc1A3duty').val; } else{ A3duty = 0; } if(getState('0_userdata.0.Tinkerforge.A4').val ===true){ A4duty = getState('0_userdata.0.Tinkerforge.IOc1A4duty').val; } else{ A4duty = 0; } if(getState('0_userdata.0.Tinkerforge.A5').val ===true){ A5duty = getState('0_userdata.0.Tinkerforge.IOc1A5duty').val; } else{ A5duty = 0; } if(getState('0_userdata.0.Tinkerforge.A6').val ===true){ A6duty = getState('0_userdata.0.Tinkerforge.IOc1A6duty').val; } else{ A6duty = 0; } //Steuerung Lüfter in Hecktüren if(getState('0_userdata.0.Tinkerforge.A7').val ===true){ A7duty = getState('0_userdata.0.Tinkerforge.IOc1A7duty').val; } else{ A7duty = 0; } //Konfiguration Industrial Out Bricklet als PWM //Bricklet IndustrialDo4 an Port C ido1.setPWMConfiguration(0, 10000, A0duty); ido1.setPWMConfiguration(1, 10000, A1duty); ido1.setPWMConfiguration(2, 10000, A2duty); ido1.setPWMConfiguration(3, 10000, A3duty); ido2.setPWMConfiguration(0, 10000, A4duty); //ido2.setPWMConfiguration(1, 10000, A5duty); //ido2.setPWMConfiguration(2, 10000, A6duty); ido2.setPWMConfiguration(3,210000, A7duty); //IO16 Bricklets // Steuerung Wasserventile als Output if(getState('0_userdata.0.Tinkerforge.Ventile.Ventil1Öffnen').val ===true){ ido3.setSelectedValue(0, false); } else{ ido3.setSelectedValue(0, true); } if(getState('0_userdata.0.Tinkerforge.Ventile.Ventil2Öffnen').val ===true){ ido3.setSelectedValue(1, false); } else{ ido3.setSelectedValue(1, true); } if(getState('0_userdata.0.Tinkerforge.Ventile.Ventil3Öffnen').val ===true){ ido3.setSelectedValue(2, false); } else{ ido3.setSelectedValue(2, true); } if(getState('0_userdata.0.Tinkerforge.Ventile.Ventil4Öffnen').val ===true){ ido3.setSelectedValue(3, false); } else{ ido3.setSelectedValue(3, true); } if(getState('0_userdata.0.Tinkerforge.Ventile.Ventil5Öffnen').val ===true){ ido3.setSelectedValue(4, false); } else{ ido3.setSelectedValue(4, true); } if(getState('0_userdata.0.Tinkerforge.Ventile.Ventil6Öffnen').val ===true){ ido3.setSelectedValue(5, false); } else{ ido3.setSelectedValue(5, true); } //Alle Ventile mit Ground verbinden if(getState('0_userdata.0.Tinkerforge.Ventile.VentileEinschalten'/*VentileEinschalten*/).val ===true){ ido3.setSelectedValue(6, false); } else{ ido3.setSelectedValue(6, true); } //Druckpumpe einschalten if(getState('0_userdata.0.Tinkerforge.Ventile.PumpeEinschalten'/*PumpeEinschalten*/).val ===true){ ido3.setSelectedValue(7, false); } else{ ido3.setSelectedValue(7, true); } //Analoge Wassertanksensoren //Auslesen der Tanksensoren idai1.getVoltage(0,function (voltage) { setState('0_userdata.0.Tinkerforge.Wassertanks.FrischwasserLinksSpannung'/*FrischwasserLinksSpannung*/,voltage/1000.0); }, ); idai2.getVoltage(1,function (voltage) { setState('0_userdata.0.Tinkerforge.Wassertanks.FrischwasserRechtsSpannung'/*FrischwasserLinksSpannung*/,voltage/1000.0); }, ); idai2.getVoltage(0,function (voltage) { setState('0_userdata.0.Tinkerforge.Wassertanks.AbwasserSpannung'/*AbwasserSpannung*/,voltage/1000.0); }, ); m1 = (getState('0_userdata.0.Tinkerforge.Wassertanks.FrischwasserLinksSpannung'/*FrischwasserLinksSpannung*/).val - 0) / (2.2 - 0); BalkenFWlinks=m1 * (125 - 2) + 2; ProzentFWlinks=m1 * (100 - 0) + 0; setState('0_userdata.0.Tinkerforge.Wassertanks.Prozent_FrischwasserLinks'/*Prozent FrischwasserLinks*/,Math.round(m1 * (100 - 0) + 0)); setState('0_userdata.0.Tinkerforge.Wassertanks.LiterFrischwasserLinks'/*LiterFrischwasserLinks*/,Math.round(m1 * (105 - 0) + 0)); m2 = (getState('0_userdata.0.Tinkerforge.Wassertanks.FrischwasserRechtsSpannung'/*FrischwasserLinksSpannung*/).val - 0) / (2.2 - 0); BalkenFWrechts=m2 * (125 - 2) + 2; ProzentFWrechts=m2 * (100 - 0) + 0; setState('0_userdata.0.Tinkerforge.Wassertanks.Prozent_FrischwasserRechts'/*Prozent FrischwasserRechts*/,Math.round(m2 * (100 - 0) + 0)); setState('0_userdata.0.Tinkerforge.Wassertanks.LiterFrischwasserRechts'/*LiterFrischwasserRechts*/,Math.round(m2 * (105 - 0) + 0)); m3 = (getState('0_userdata.0.Tinkerforge.Wassertanks.AbwasserSpannung'/*AbwasserSpannung*/).val - 0) / (2.2 - 0); BalkenAbwasser=m3 * (125 - 2) + 2; ProzentAbwasser=m3 * (100 - 0) + 0; setState('0_userdata.0.Tinkerforge.Wassertanks.Prozent_Abwasser'/*Prozent Abwasser*/,Math.round(m3 * (100 - 0) + 0)); setState('0_userdata.0.Tinkerforge.Wassertanks.LiterAbwasser'/*LiterAbwasser*/,Math.round(m3 * (75 - 0) + 0)); //Steuerung LCD Display Seiteklappe if(getState('0_userdata.0.Tinkerforge.SeitenklappeLinks.Schalter1').val ===true) { lcd.setDisplayConfiguration(15, 100, false, true); } else { lcd.setDisplayConfiguration(0, 0, false, true); lcd.clearDisplay(); m1_1=-1; m2_1=-1; m3_1=-1; } if(((m1!=m1_1)||(m2!=m2_1)||(m3!=m3_1))&&(getState('0_userdata.0.Tinkerforge.SeitenklappeLinks.Schalter1').val ===true)) { lcd.clearDisplay(); lcd.drawText(64, 0,0,1, Math.round(ProzentFWlinks)+'%'); lcd.drawText(1, 0,0,1, 'FW links'); lcd.drawBox(1, 8, 126, 16, false, true); lcd.drawBox(2, 9, BalkenFWlinks, 15, true, true); lcd.drawText(64, 22,0,1, Math.round(ProzentFWrechts)+'%'); lcd.drawText(1, 22,0,1, 'FW rechts'); lcd.drawBox(1, 30, 126, 38, false, true); lcd.drawBox(2, 31, BalkenFWrechts, 37, true, true); lcd.drawText(64, 44,0,1, Math.round(ProzentAbwasser)+'%'); lcd.drawText(1, 44,0,1, 'Abwasser'); lcd.drawBox(1, 53, 126, 61, false, true); lcd.drawBox(2, 52, BalkenAbwasser, 60, true, true); m1_1=m1; m2_1=m2; m3_1=m3; } },100); } );
  3. hallo, ich bin neu hier und auch was Javascript angeht noch grün hinter den Ohren. Ich steuere mein selbst ausgebautes Wohnmobil mit einem RasPi4 auf dem IoBroker läuft und einigen Tinkerforge Modulen. Das Ganze ist via Ethernet verbunden und funktioniert grundsätzlich ganz gut. Leider kommt es in der aktuellen Bastelphase schon mal vor, dass ich die Verbindung zu einzelnen Bricks und Bricklets verliere (Die 7/10 Pin Kabel machen viele Probleme). Ich würde das gerne auf meiner VIS von IoBroker als Fehlermeldung visualisieren aber bekomme das auf der JS Seite nicht hin. Hat jemand schon mal sowas gemacht und könnte mir bitte helfen? MfG Julien
×
×
  • Neu erstellen...