@jwerlsdf Hallo, ich nutze das selbst nicht mehr. Die Kombinationen der Grundrisse sind für die ganze Wohnung zuviele. Deswegen würde ich Dir heute empfehlen gerade mit VIS vielleicht mit Ebenen zu arbeiten und die Grundrisse mit den eingeschalteten Lampen jeweils für einen Raum zu machen. Wie gesagt - ich kann Dir das Prinzip nochmals genau verdeutlichen. Hier ist er mal das Excelsheet.
Beleuchtung codierung Bild.xlsx
Ausserdem siehst Du dass ich hier mit Bits und insgesamt 16 Lampen gearbeitet habe. Ich will Dir nur mal das Prinzip erklären:
Wichtig sind nur die vorderen Spalten
598a2d0f-e899-4508-a78c-4cf7bb4e253f-image.png
Links sind nun alle Lampen und das Bit was mit der Lampe verknüpft ist. In der gelben Spalte machst Du statt 0 eine 1 wenn die Lampe an ist - wie gesagt Du wirst kaum alle 65.536 Dateien für alle Kombinationen erstellen. Also deswegen auf ein Zimmer oder halt nur die häufigsten Kombis erstellen.
Wenn also die Lampe im Wohnzimmer (TV-Lampe, Vitrine) und TV und das Licht im Flur eingeschaltet ist, wird das als Datei mit 71 codiert:
8bdbcb70-b27c-4ad8-ad39-2e288bf1019e-image.png
Diese ganzen Grundrisse speicherst Du in einem Verzeichnis, auf das VIS zugriff hat:
3c961edd-8b79-43e6-81ea-d70b40ef1cf2-image.png
Ich hab das für das Gerät (iPad) in einem Verzeichnis unter vis.0 gespeichert:
GR-1366-1004-NA-71.png
In Deiner VIS nimmst Du nun ein Widget, bei dem Du das anzuzeigende Bild nicht direkt, sondern den Pfad zu der Datei die anzuzeigen ist enthält:
ed078668-8ae4-4408-91c8-33ba9c454187-image.png
In diesen Datenpunkt schreibst Du dann welche Datei angezeigt werden soll:
112da0e0-4c70-410e-85b8-2676c919ecc5-image.png
Ich bin bekanntlich kein Blockly-Fan und will das nun auch nicht in Blockly codieren, aber ich kann Dir mal den Flow soweit erklären. Du musst halt das was NodeRed automatisch kann halt im JS nachbauen oder in Blockly.
9a6d210a-1a52-49cc-ba11-cd06b47c24e5-image.png
Der linke Teil bis zu der JOIN Node sind alles Lampen die im iobroker oder mqtt triggern und Du erstellst daraus ein Objekt, wo Du alle Lampen mit dem Zustand (true=eingeschaltet) oder (false=ausgeschaltet) hast:
{
"wohnzimmer/esstisch": false,
"bad/deckenleuchten": false,
"flur/deckenleuchten": false,
"diele/deckenleuchten": false,
"buero/computer": false,
"küche/deckenleuchten": false,
"buero/deckenleuchten": false,
"wohnzimmer/deckenleuchten": false,
"wohnzimmer/vitrine": true
}
Nun erstelle ich daraus den Code - der die gleiche Nummer enthält wie die XLS Tabelle. Die payload ist in diesem Fall so ein Objekt wie gerade gepostet, also quasi der Zustand aller Lampen in einem Objekt (halt in einem Zimmer, Wohnung etc.)
Das heißt dieses Objekt wird abgeprüft via JS:
var x;
var obj = msg.payload;
var code = 0;
for (x in obj) {
var val=0;
switch(x) {
case "wohnzimmer/tischlampe":
val = obj[x] ? 1 : 0;
break;
case "wohnzimmer/vitrine":
val = obj[x] ? 2 : 0;
break;
case "tv":
val = obj[x] ? 4 : 0;
break;
case "wohnzimmer/deckenleuchten":
val = obj[x] ? 8 : 0;
break;
case "wohnzimmer/esstisch":
val = obj[x] ? 16 : 0;
break;
case "küche/deckenleuchten":
val = obj[x] ? 32 : 0;
break;
case "flur/deckenleuchten":
val = obj[x] ? 64 : 0;
break;
case "diele/deckenleuchten":
val = obj[x] ? 128 : 0;
break;
case "bad/deckenleuchten":
val = obj[x] ? 256 : 0;
break;
case "bad/spiegel":
val = obj[x] ? 512 : 0;
break;
case "monitor":
val = obj[x] ? 1024 : 0;
break;
case "buero/computer":
val = obj[x] ? 2048 : 0;
break;
case "buero/schreibtisch":
val = obj[x] ? 4096 : 0;
break;
case "buero/deckenleuchten":
val = obj[x] ? 8192 : 0;
break;
case "schlafzimmer/bettlampen":
val = obj[x] ? 16384 : 0;
break;
case "schlafzimmer/schrankbeleuchtung":
val = obj[x] ? 32768 : 0;
break;
}
code += val;
}
msg.payload=code.toString();
return msg;
Wie Du siehst,
case "wohnzimmer/vitrine":
val = obj[x] ? 2 : 0;
break;
wird jedes topic als Bit gesetzt und das ganze Objekt durchanalysiert und dann aufsummiert. In dem Beispiel die Vitrine mit Bit 2.
Daraus errechnet sich dann das Bild das angezeigt werden soll und das wird in den Datenpunkt geschrieben, auf das das Widget verweist.
So habe ich dir das Funktionsprinzip beschrieben.