NEWS
Sonoff Geräte als HTML Tabelle - Vis
-
@liv-in-sky Ich bekomm folgenden Fehler
-
kommentiere den befehl aus in zeile 510 - überbleibsel - kann weg
-
@liv-in-sky Fehler ist dann weg, aber der Datenpunkt wird nicht gefüllt
-
@stephan-schleich den brauchen wir nicht - kannst du löschen - was macht der rest ? ist was in der tabelle ?
-
@liv-in-sky aah, hab den Fehler gefunden, 0_userdata.0 Pfade funktionieren nicht, du verweist auf 0_userdata.0 unter javascripte.
DP wird nun gefüllt. ON dürfte aber kein Licht sein, Power Button geht auch nicht.
Ansonsten ist bei mir alles vorhanden, wie beim vorherigen Script - Top -
@stephan-schleich geht eine kurze session - rufst du durch ?
-
@liv-in-sky nach der ganzen shelly umsteigerei bin ich endlich dazu gekommen mich an der sonoff liste zu versuchen.
grundsätzlich lööpts mal. alles mögliche schon nach meinem geschmack verbogen.
allerdings haut das mit dem sortieren (iQontrol) nicht hin. bei drauf klicken tut sich nichts. bei der shelly funktioniert das. aber auch wenn ich im script sortieren lasse stimmt da nichts. mit let welcheSortierung=0; // Startsortierung - je nach spalte 0: name; 2: online; 3:type; 4:rssi ..... stimmts ja noch.
nach type let welcheSortierung=3; // Startsortierung - je nach spalte 0: name; 2: online; 3:type; 4:rssi .....
nach IP let welcheSortierung=5; // Startsortierung - je nach spalte 0: name; 2: online; 3:type; 4:rssi .....
aber sonst machen die beiden listen untereinander schon was her!
-
moin - sorry - fehler in beschreibung bei sortierung - die erste spalte ist sortierung 0, die zweite spalte ist sortierung 1, usw ....
ich habe das spezielle script für iqontrol nicht verwendet, weil es einige mehr scripte sind, die da im hintergrund laufen. sebastian sagte, er wolle mach nachschauen, ob er das integrieren kann, ohne das ich sonder-scripte schreiben muss
kannst du eigentlich die flexbox einstellen: zeile 37: let flexboxView=true;soweit ich mich erinnere, muss diese zeile bei dir drin sein, damit du die spalten über button sortieren kannst - die müßtest du ersetzen -
das ist die zeile, die rein muss:
buttonScript = '<script> function setOnOtherValue(myval) { var Self = this;console.log(typeof self.servConn); if(typeof self.servConn == "function") Self.servConn.getStates(myval, (error, states) => { console.log(states); self.servConn.setState(myval, !states[myval].val);} ); else window.parent.postMessage({ command: "setState", stateId: myval, value: true }, "*"); } ;'
und die gehört hier hin (die zeilennummern stimmen nicht ganz - aber so ungefähr und nur die eine zeile !!!!
-
@liv-in-sky ich versuche gerade das neue Script zu testen.
Sind die Einstellungen korrekt?
In dpVIS habe ich den selben Pfad eingetragen wie im Script vorher.
in dpJSON habe ich nichts geändert. Richtig so?
Und im html-Widget habe in meinem Fall {0_userdata.0.Tabellen.Sonoff.Sonoff} eingetragen, also wie vorher auch.
Was ich anders gemacht habe ich nun javascript.1 anstatt .0 genommen zu haben.Bei Start des Scripts:
javascript.1 2021-03-22 09:50:41.610 info (28524) script.js.common.Tabellen.Sonoff3: registered 14 subscriptions and 0 schedules javascript.1 2021-03-22 09:50:41.598 warn (28524) at script.js.common.Tabellen.Sonoff3:1085:3 javascript.1 2021-03-22 09:50:41.598 warn (28524) at script.js.common.Tabellen.Sonoff3:600:5 javascript.1 2021-03-22 09:50:41.597 warn (28524) at writeHTML (script.js.common.Tabellen.Sonoff3:452:121) javascript.1 2021-03-22 09:50:41.591 warn (28524) getState "sonoff.0.CO2.POWER" not found (3) states[id]=null javascript.1 2021-03-22 09:50:41.407 info (28524) Start javascript script.js.common.Tabellen.Sonoff3
-
@liv-in-sky zo, let flexboxView=true; funktioniert. auf den sortierfehler hätte ich auch selbst kommen können. naja, erstes mal in einem neuen script, da versucht man sich zu konzentrieren und verstehen...
zeile 974 hab ich geändert. ergebniss: ein geplegtes undefined
buttonScript = '<script> function setOnOtherValue(myval) { var Self = this; Self.servConn.getStates(myval, (error, states) => { console.log(states); self.servConn.setState(myval, !states[myval].val);} )}; ' + '$( "button.myButt'+dpVIS+'" ).click(function() { $( this ).slideUp() ; setTimeout(function() { $( "button.myButt'+dpVIS+'" ).hide() ; $( ".mySpan'+dpVIS+'" ).text(\"wait ...\")}, 500); });' //'[class*="test"]' [class~="value"] "[class~='gerade']" /*search*/ + `var allRows = $("[class*='gerade${dpVIS}']"); $("input.myinputclass${dpVIS}").on("keydown keyup", function() { allRows.hide(); $("tr:contains('" + $(this).val() + "')").show();});` /*search*/ + `var allRows2 = $("div.divFlexBoxenEinzeln${dpVIS}"); console.log(allRows2); $("input.myinputclass${dpVIS}").on("keydown keyup", function() { allRows2.hide(); $("div.divFlexBoxenEinzeln${dpVIS}:contains('" + $(this).val() + "')").show();});` + `$( ".seitenleiste${dpVIS}:not(.seitenleiste${dpVIS}.sonderTablet${dpVIS})" ).click(function() { $( "button.myButt${dpVIS}" ).slideUp() ; setTimeout(function() { $( "button.myButt${dpVIS}" ).hide() ; $( ".mySpan${dpVIS}" ).text(\"refresh\")}, 500); var Self = this; var myvali='javascript.${instance}.Tabellen@Liv.${dpVIS}.Spalte8'; vis.setValue(myvali,true) ; console.log("spalt8") });` // + `$( ".seitenleiste${dpVIS}:not(.seitenleiste${dpVIS}.sonderTablet${dpVIS})" ).click(function() {var Self = this; var myvali='javascript.${instance}.Tabellen@Liv.${dpVIS}.Spalte5'; vis.setValue(myvali,true) ; console.log("spalt5") });` /*dbclick*/ + `$( "[class*='gerade${dpVIS}']" ).dblclick(function() {var Self = this; var myvali='javascript.${instance}.Tabellen@Liv.${dpVIS}.Spalte9'; vis.setValue(myvali,true) ; console.log("spalt9") });` /*dbclick*/ + `$( "[class*='divFlexBoxen${dpVIS}']" ).dblclick(function() {var Self = this; var myvali='javascript.${instance}.Tabellen@Liv.${dpVIS}.Spalte9'; vis.setValue(myvali,true); console.log("spalt9") });` /*tablet */+ `$( ".sonderTablet${dpVIS}" ).click(function() {var Self = this; var myvali='javascript.${instance}.Tabellen@Liv.${dpVIS}.Spalte10'; vis.setValue(myvali,true); console.log("spalt10") });` + `function setOnDblClickCustom( myvalue ) { var Self = this; var objID = myvalue; Self.servConn.getStates(objID, (error, states) => { console.log(states); Self.servConn.setState(objID, !states[objID].val); }); }` + spaltenAnzeigeScript + spaltenAnzeigeScriptEnd +'</script>'
const buttonScript = '<script> function setOnOtherValue(myval) { var Self = this;console.log(typeof self.servConn); if(typeof self.servConn == "function") Self.servConn.getStates(myval, (error, states) => { console.log(states); self.servConn.setState(myval, !states[myval].val);} ); else window.parent.postMessage({ command: "setState", stateId: myval, value: true }, "*"); } ;' + '$( "button.myButt'+dpVIS+'" ).click(function() { $( this ).slideUp() ; setTimeout(function() { $( "button.myButt'+dpVIS+'" ).hide() ; $( ".mySpan'+dpVIS+'" ).text(\"wait ...\")}, 500); });' //'[class*="test"]' [class~="value"] "[class~='gerade']" /*search*/ + `var allRows = $("[class*='gerade${dpVIS}']"); $("input.myinputclass${dpVIS}").on("keydown keyup", function() { allRows.hide(); $("tr:contains('" + $(this).val() + "')").show();});` /*search*/ + `var allRows2 = $("div.divFlexBoxenEinzeln${dpVIS}"); console.log(allRows2); $("input.myinputclass${dpVIS}").on("keydown keyup", function() { allRows2.hide(); $("div.divFlexBoxenEinzeln${dpVIS}:contains('" + $(this).val() + "')").show();});` + `$( ".seitenleiste${dpVIS}:not(.seitenleiste${dpVIS}.sonderTablet${dpVIS})" ).click(function() { $( "button.myButt${dpVIS}" ).slideUp() ; setTimeout(function() { $( "button.myButt${dpVIS}" ).hide() ; $( ".mySpan${dpVIS}" ).text(\"refresh\")}, 500); var Self = this; var myvali='javascript.${instance}.Tabellen@Liv.${dpVIS}.Spalte8'; vis.setValue(myvali,true) ; console.log("spalt8") });` // + `$( ".seitenleiste${dpVIS}:not(.seitenleiste${dpVIS}.sonderTablet${dpVIS})" ).click(function() {var Self = this; var myvali='javascript.${instance}.Tabellen@Liv.${dpVIS}.Spalte5'; vis.setValue(myvali,true) ; console.log("spalt5") });` /*dbclick*/ + `$( "[class*='gerade${dpVIS}']" ).dblclick(function() {var Self = this; var myvali='javascript.${instance}.Tabellen@Liv.${dpVIS}.Spalte9'; vis.setValue(myvali,true) ; console.log("spalt9") });` /*dbclick*/ + `$( "[class*='divFlexBoxen${dpVIS}']" ).dblclick(function() {var Self = this; var myvali='javascript.${instance}.Tabellen@Liv.${dpVIS}.Spalte9'; vis.setValue(myvali,true); console.log("spalt9") });` /*tablet */+ `$( ".sonderTablet${dpVIS}" ).click(function() {var Self = this; var myvali='javascript.${instance}.Tabellen@Liv.${dpVIS}.Spalte10'; vis.setValue(myvali,true); console.log("spalt10") });` + `function setOnDblClickCustom( myvalue ) { var Self = this; var objID = myvalue; Self.servConn.getStates(objID, (error, states) => { console.log(states); Self.servConn.setState(objID, !states[objID].val); }); }` + spaltenAnzeigeScript + spaltenAnzeigeScriptEnd +'</script>'
sorry, habe gestern total vergessen, daß ich eigentlich bei jeder änderung, nach speichern, schon warnings bekommen habe...
22:18:46.277 info javascript.0 (1256) Stop script script.js.common.Diverses.Sonoff_Tabelle 22:18:46.300 info javascript.0 (1256) Start javascript script.js.common.Diverses.Sonoff_Tabelle 22:18:46.325 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 22:18:46.325 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:583:5 22:18:46.325 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:1071:3 22:18:46.326 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 22:18:46.326 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:583:5 22:18:46.326 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:1071:3 22:18:46.327 info javascript.0 (1256) script.js.common.Diverses.Sonoff_Tabelle: registered 26 subscriptions and 0 schedules 22:22:02.606 info javascript.0 (1256) Stop script script.js.common.Diverses.Sonoff_Tabelle 22:22:04.452 info javascript.0 (1256) Start javascript script.js.common.Diverses.Sonoff_Tabelle 22:22:04.493 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 22:22:04.494 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:583:5 22:22:04.494 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:1071:3 22:22:04.502 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 22:22:04.503 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:583:5 22:22:04.503 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:1071:3 22:22:04.504 info javascript.0 (1256) script.js.common.Diverses.Sonoff_Tabelle: registered 26 subscriptions and 0 schedules 22:22:29.692 info javascript.0 (1256) Stop script script.js.common.Diverses.Sonoff_Tabelle 22:22:29.752 info javascript.0 (1256) Start javascript script.js.common.Diverses.Sonoff_Tabelle 22:22:29.779 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 22:22:29.779 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:583:5 22:22:29.779 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:1071:3 22:22:29.780 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 22:22:29.780 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:583:5 22:22:29.780 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:1071:3 22:22:29.781 info javascript.0 (1256) script.js.common.Diverses.Sonoff_Tabelle: registered 26 subscriptions and 0 schedules 22:27:37.418 info javascript.0 (1256) Stop script script.js.common.Diverses.Sonoff_Tabelle 22:27:37.492 info javascript.0 (1256) Start javascript script.js.common.Diverses.Sonoff_Tabelle 22:27:37.518 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 22:27:37.518 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:583:5 22:27:37.518 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:1071:3 22:27:37.519 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 22:27:37.519 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:583:5 22:27:37.519 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:1071:3 22:27:37.520 info javascript.0 (1256) script.js.common.Diverses.Sonoff_Tabelle: registered 26 subscriptions and 0 schedules 22:30:00.478 info javascript.0 (1256) Stop script script.js.common.Diverses.Sonoff_Tabelle 22:30:00.643 info javascript.0 (1256) Start javascript script.js.common.Diverses.Sonoff_Tabelle 22:30:00.680 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 22:30:00.680 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:583:5 22:30:00.680 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:1071:3 22:30:00.681 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 22:30:00.681 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:583:5 22:30:00.681 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:1071:3 22:30:00.682 info javascript.0 (1256) script.js.common.Diverses.Sonoff_Tabelle: registered 26 subscriptions and 0 schedules 01:16:01.883 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 01:16:01.884 warn javascript.0 (1256) at Object.<anonymous> (script.js.common.Diverses.Sonoff_Tabelle:1055:44) 01:16:01.885 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 01:16:01.885 warn javascript.0 (1256) at Object.<anonymous> (script.js.common.Diverses.Sonoff_Tabelle:1055:44) 01:57:47.238 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 01:57:47.238 warn javascript.0 (1256) at Object.<anonymous> (script.js.common.Diverses.Sonoff_Tabelle:1055:44) 01:57:47.241 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 01:57:47.241 warn javascript.0 (1256) at Object.<anonymous> (script.js.common.Diverses.Sonoff_Tabelle:1055:44) 01:57:52.806 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 01:57:52.806 warn javascript.0 (1256) at Object.<anonymous> (script.js.common.Diverses.Sonoff_Tabelle:1057:88) 01:57:52.807 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 01:57:52.807 warn javascript.0 (1256) at Object.<anonymous> (script.js.common.Diverses.Sonoff_Tabelle:1057:88) 09:22:10.357 info javascript.0 (1256) Stop script script.js.common.Diverses.Sonoff_Tabelle 09:22:10.436 info javascript.0 (1256) Start javascript script.js.common.Diverses.Sonoff_Tabelle 09:22:10.482 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 09:22:10.484 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:583:5 09:22:10.485 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:1071:3 09:22:10.487 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 09:22:10.488 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:583:5 09:22:10.488 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:1071:3 09:22:10.490 info javascript.0 (1256) script.js.common.Diverses.Sonoff_Tabelle: registered 27 subscriptions and 0 schedules 09:24:42.168 info javascript.0 (1256) Stop script script.js.common.Diverses.Sonoff_Tabelle 09:24:42.196 info javascript.0 (1256) Start javascript script.js.common.Diverses.Sonoff_Tabelle 09:24:42.236 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 09:24:42.236 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:583:5 09:24:42.236 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:1071:3 09:24:42.237 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:439:121) 09:24:42.237 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:583:5 09:24:42.237 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:1071:3 09:24:42.238 info javascript.0 (1256) script.js.common.Diverses.Sonoff_Tabelle: registered 27 subscriptions and 0 schedules
-
@lobomau sorry da ist ein fehler im der beschreibung - du mußt keinen datenpunkt setzen - lass den ursprünglichen namen unter dpVIS ( SONOFFTabelleVIS ) - das script macht den rest - die daten findest du dann unter
javascript.x.Tabellen@Liv.TestTabelleVIS.SONOFFTabelleVIS
-
@lobomau hole dir bitte das neue script von github
-
@da_woody - bei dem zeilen einfügen, darf das const nicht vor buttonscript stehen
hole dir auch bitte das neue script https://github.com/liv-in-sky/sonoff-iobroker-script
ich habe das mal in iqontrol getestet - das sortieren bringe ich nicht zum laufen - kannst du mir sagen, wie ich die anzeige groß bekomme - bin in iqontrol aus der übung - ich habe nur ein kleines fenster, wenn ich die tabelle öffnen will
leider habe ich keine ahnung, was da bei iqontrol im hintergrund abläuft, daher kann ich das script von sebastian nicht anpassen - wir müssen wohl warten, bis er jquery für diese art der anzeige integriert hat
-
@liv-in-sky sagte in Sonoff Geräte als HTML Tabelle - Vis - Iqontrol:
kannst du mir sagen, wie ich die anzeige groß bekomme - bin in iqontrol aus der übung - ich habe nur ein kleines fenster, wenn ich die tabelle öffnen will
@da_Woody habe es gefunden
-
@liv-in-sky oi, das hast du mir aber oben so vorgegeben mit const
k, hol mir dann spätäter das neue und fummel das wieder um...
ich hab das ganze als info text eingebunden. da gibts kein icon.
als verhalten hab ich
genommen. wobei das latürnich auf verschiedenen bildschirm größen auch schrott ist. sich das
ja nur auf state bezieht. -
@liv-in-sky Danke, das war ja einfach! Echt top.
-
habe ein paar sachen implementiert - kannst ja mal testen bei gelegenheit
https://github.com/liv-in-sky/sonoff-iobroker-script
- suchleiste mit rand
- border für rows und cols im setting unter "GANZE TABELLE" im HTML setting
-
@liv-in-sky so, das neue umgestrickt. sieht wieder so aus wie vorher...
hab allerdings nach wie vor die 6 warnings drinnen bei jedem speichern.21:15:02.639 info javascript.0 (1256) Stop script script.js.common.Diverses.Sonoff_Tabelle 21:15:02.751 info javascript.0 (1256) Start javascript script.js.common.Diverses.Sonoff_Tabelle 21:15:02.802 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:462:121) 21:15:02.803 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:610:5 21:15:02.803 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:1140:3 21:15:02.812 warn javascript.0 (1256) at writeHTML (script.js.common.Diverses.Sonoff_Tabelle:462:121) 21:15:02.813 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:610:5 21:15:02.814 warn javascript.0 (1256) at script.js.common.Diverses.Sonoff_Tabelle:1140:3 21:15:02.816 info javascript.0 (1256) script.js.common.Diverses.Sonoff_Tabelle: registered 27 subscriptions and 0 schedules
was ich mir noch wünschen würde, wie beim shelly, rechts den balken mit dem rahmen rundherum.
außerdem hab ich in der zeile 10 was mit json entdeckt! da ist mir das topic eingefallen. da hat @Mic was gestrickt. wär das nicht zu gebrauchen? -
@da_woody ich wollte dich eh fragen, ob iqontrok json lesen kann ?
der fehler könnte mit einemPOWERx schalter zu tun haben. der keinen state hat - kannst du das prüfen
-
@liv-in-sky offensichtlich nicht, aber genau darum gehts ja in dem thread.
Ausgabe erfolgt in ein JSON(_Objekt).
Jetzt möchte ich aber diese Ausgabe in iQontrol darstellen. Da geht kein JSON. Also möchte ich das JSON via SKript in ein HTML umwandeln und diese HTML irgendwo (Pfadangabe im Skript) ablegen.
und da hats eben ein skript dazu. wie man das verwenden könnte, zuwenig ahnung...bin jetzt mal alle 12 sonoff dingens durchgegangen.
D1-mini haben zwar einen Power, aber logischerweise nix drinnen. hängen ja nur fühler dran.
SP111 haben alle state einen in Power stehn.
SP112 haben leeren Power, aber alle Power1 und Power2 sind bestückt. die USB (Power2) und Power1 gekoppelt. wenn ich einen aufdrehe, geht der andere mit an und umgekehrt. hauptsächlich gemacht wegen der 3D-Drucker. am USB hängen die Raspis mit octoprint.