Hi Zusammen,
Ich habe ein 8 Kanal USB Relaisboard an meinem Server das über HID angesteuert wird.
Dazu habe ich ein Python Skript geschrieben, das von IO Broker aufgerufen wird und an das in einem Skript per Exec Variablen übergeben werden.
In IO Broker habe ich ein Objekt mit 8 Kanälen, deren Status True/False sein kann, angelegt.
Das ganze funktioniert auch soweit, aber ich kann nicht den Status für alle Relais auf einmal übergeben, da maximal 3 Variablen übergeben werden können.
Also rufe ich je Kanal bei einer Änderung des Wertes einmal mein Skript auf.
Hier der Auszug für den ersten Kanal.
on({id: "0_userdata.0.Relaisboard_8_Kanal.Kanal_1", change: "any"}, function (obj) {
console.log("Wert Kanal 1 geändert");
//Werte für die Variable holen
var Kanal = "1";
var Status = getState("0_userdata.0.Relaisboard_8_Kanal.Kanal_1").val;
//Python Script starten und Werte übergeben
exec('/usr/bin/python3 /home/iobroker/Dokumente/Python/Relays/klingelpython2.py ' + Kanal + ' ' + Status, function (error, stdout, stderr) {
console.log('*** stdout: ' + stdout);
if (error !== null) {
console.log('*** stderr: ' + error);
}
});
});
Ich hatte jetzt gedacht, dass ich bei Änderung von einem Status einfach alle Werte in einem Boolean Array oder einem String mit 8 Stellen speichere, zum Beispiel 01100010, und diesen String/Array dann an das Python Script übergebe.
Leider bin ich damit noch nicht wirklich weiter gekommen, weil ich mich mit Java auch nicht so richtig auskenne und noch nicht hinbekommen habe einen String zu addieren oder ein Boolean Array zu erstellen.
Habt ihr eine Idee, wie sich das Umsetzen lässt?
Und das nächste Problem: Wie kann man sicher stellen, dass beim Starten des Scriptes die Werte übergeben werden (also zum Beispiel nach dem Neustart von IO Broker, damit die Kanäle vom Relaisboard mit dem Status in IO Broker übereinstimmen weil das Board ja nur bei Änderung eines Werte angesteuert wird).
Danke