433 MHZ Funk-Zwischenstecker in ioBroker integrieren
In diesem Tutorial zeige ich Dir, wie ich meine alte 433MHZ-Technik (Funk-Zwischenstecker) in ioBroker integriert habe.
Für manche Geräte (z.B. die Weihnachtsbeleuchtung) habe ich noch die alte 433 MHZ-Technik im Einsatz. Die Zwischenstecker wurden in der Vergangenheit über eine Fernsteuerung geschaltet. Ich wollte die Aktoren entweder durch Homematic Zwischensticker ersetzen (ziemlich teuer), oder versuchen die bestehenden Aktoren auf 433 MHZ Basis in ioBroker zu integrieren. Nach kurzer Recherche habe ich auf Amazon einen entsprechenden 433 MHZ Sender gefunden, welchen ich auf einen Raspberry PI aufstecken kann. Über diesen Sender können wir nach der Konfiguration dann die bestehenden Zwischenstecker steuern. Zunächst einmal die Auflistung der benötigten Komponenten:
Nach dem alle Komponenten eingetroffen waren, habe ich zunächst auf meinem Test Raspberry PI ioBroker installiert. Im nächsten Schritt habe ich dann den PI wieder ausgeschaltet und mit dem Aufbau des 4333 MHZ Tests begonnen. Hierzu werden drei Jumper Kabel (female-female) benötigt, welche das Sendemodul mit den entsprechenden GPIO Pins verbinden.
Das folgende Schaltbild zeigt den Anschluss des 433 MHZ Senders an das GPIO-Board das Raspberry PI:
Für eine höhere Reichweite habe ich noch an den Antennen-Anschluss des Senders eine 17cm lange Antenne (einfache Litze) angelötet. Das folgende Foto zeigt die angelötete Antenne:
Nach dem wir nun den Sender mit dem Raspberry PI verbunden haben können wir uns wieder am PI anmelden und mit der Einrichtung beginnen. Im ersten Schritt bringen wir dazu mit folgenden Befehlen des PI auf den neuesten Stand:
sudo apt-get update sudo apt-get install git-core
Im nächsten Schritt müssen wir WiringPI installieren und builden. Dieses Paket dient der Kommunikation mit den Sender über das GPIO-Board:
git clone git://git.drogon.net/wiringPi cd wiringPi ./build
Nachdem WiringPI installiert wurde, müssen wir nun Raspberry-Remote installieren:
git clone git://github.com/xkonni/raspberry-remote.git cd raspberry-remote make send
Das war es auch schon mit der Installation von Software. Nun können wir einen ersten Test starten. Dazu benötigen wir aber im nächsten Schritt noch die Steckdosen und die Fernbedienung, da wir die Systemcodes sowie den Unitcode der Steckdose ermitteln müssen. In der Regel lassen sich die Geräte öffnen, sodass der Systemcode und der Unitcode eingestellt werden können. Wir müssen also die beiden Geräte (Sender und Empfänger) öffnen sodass wir die Codes einsehen können:
Die Codes zum Senden an die 433 MHZ Geräte haben folgenden Aufbau:
(Systemcode) | (Unitcode) | Befehl
Der Systemcode oben rechts im Bild lautet „11111“, da alle Schalter auf ON stehen. Der Unitcode links wird folgendermaßen ermittelt:
10000 = 1
01000 = 2
00100 = 3
00010 = 4
00001 = 5
Um nun mit dem Sender die zweite Steckdose einzuschalten muss nun folgender Befehl über die Konsole auf dem PI abgesetzt werden:
sudo /home/pi/raspberry-remote/./send 11111 2 1
Im Befehl wird zunächst das send Tool mit sudo-Berechtigungen gestartet und den Systemcode „11111“, die Steckdosennummer „2“ sowie der Befehl „1“=An, „0“=Aus übergeben.
Wenn alles korrekt installiert und die Codes korrekt eingestellt wurden sollte nun die Steckdose eingeschaltet werden 🙂
Im nächsten Schritt müssen wir den Send-Befehl in den ioBroker integrieren.
Im ersten Schritt legen wir uns über das folgende Script drei Variablen (3=Zwischenstecker) für den Status der 433 MHZ-Aktoren an.
createState('433MHZ_Aktoren.Zwischenstecker_A', 0, { type: 'number' }); createState('433MHZ_Aktoren.Zwischenstecker_B', 0, { type: 'number' }); createState('433MHZ_Aktoren.Zwischenstecker_C', 0, { type: 'number' });
Da wir über das 433 MHZ-Protokoll keine Status-Informationen über den aktuellen Schaltzustand bekommen, müssen wir uns die Aktoren „virtuell“ als Datenpunkte im ioBroker anlegen, sodass wir die Schaltzustände via Button darstellen können.
In VIS können wir jetzt drei RadioButtons (on/off) einfügen, welche wir mit den Datenpunkten des jeweiligen Aktors verknüpfen.
Jetzt müssen wir bei Veränderung des Datenpunktes nur noch den Sender mit dem entsprechenden Unitcode und Befehl aufrufen. Dazu schreiben wir uns ein Script, welches diese Aufgabe erledigt.
on('javascript.0.433MHZ_Aktoren.Zwischenstecker_A', function (obj) { exec('sudo /home/pi/raspberry-remote/./send 11111 1 '+obj.state.val); }); on('javascript.0.433MHZ_Aktoren.Zwischenstecker_B', function (obj) { exec('sudo /home/pi/raspberry-remote/./send 11111 2 '+obj.state.val); }); on('javascript.0.433MHZ_Aktoren.Zwischenstecker_C', function (obj) { exec('sudo /home/pi/raspberry-remote/./send 11111 3 '+obj.state.val); });
Im Skript reagieren wir bei Veränderung des jeweiligen Datenpunktes und rufen über die exec() Funktion den Befehl für den Sender auf. Das war es schon, so einfach sind die 433 MHZ-Zwischenstecker in unser Smart-Home integriert, wir können diese nun in unsere bestehende Logik integrieren, und via Script schnell und einfach schalten.
Ich hoffe ich konnte damit zeigen wie einfach bestehende System in den ioBroker integriert werden können. Bei Fragen wie immer per Kommentar oder E-Mail 🙂
Hier gibt es immer wieder interssante Beiträge
Ich bau gerade eine Wohnung neu mit HM Wireless aus und suche noch eine günstige Lösung um Bewegungsmelder oder Präsenzmelder einzubinden.
Da wäre ich für Lösungsvorschläge dankbar.
Hallo Matthias,
ich habe ein kleines Problem mit dem Einrichten meiner Funksteckdosen im ioBroker. Deine Anleitung bin ich Schritt für Schritt nachgegangen. Klappte auch bis zu einem gewissen Punkt, ich komm mit meinem Anfänger Wissen nicht weiter.
Kurz zu meiner Hardware, ich habe einen Raspi 3 mit StromPi2, drei Funksteckdosen mit DIP Schalter von Brennenstuhl (RCR 1000N). Habe noch 433Mhz Sendemodul und Empfänger. PIR Sensor und Temp Sensor (DHT22) sind auch am Breadboard angeschlossen.
Auf dem Pi habe ich ein ioBroker Image gespielt. Die Einrichtung und Steuerung der Sensoren und Funksteckdosen funktionieren auf dem Pi per SSH problemlos. Auf der Weboberfläche des ioBrokers nicht.
Mein erstes Problem war ds ich nicht wusste wo ich dieses Script anlegen sollte:
on(‚javascript.0.433MHZ_Aktoren.Zwischenstecker_A‘, function (obj) {
exec(’sudo /home/pi/raspberry-remote/./send 11100 1 ‚+obj.state.val);
});
Die 3 Aktoren habe ich angelegt bekommen:
createState(‚433MHZ_Aktoren.Zwischenstecker_A‘, 0, { type: ’number‘ });
createState(‚433MHZ_Aktoren.Zwischenstecker_B‘, 0, { type: ’number‘ });
createState(‚433MHZ_Aktoren.Zwischenstecker_C‘, 0, { type: ’number‘ });
alles was danach kommt klappt nicht mehr???
Hoffe du kannst mir noch helfen…
MfG
DFC
Hallo Daniel,
Du musst die Skripte in ioBroker unter dem Bereich Skripte anlegen und aktivieren. Ich werde hierzu in den nächsten 1-2 Wochen einen ioBroker Skripting Einführungsartikel veröffentlichen, damit sollten dann diese Fragen ebenfalls geklärt werden können 🙂
Viele Grüße,
Matthias
Hallo Mathias
irgendwie geht es mir ähnlich wie DFC.
Im „Edit vis“ unter Eigenschaften — Skripte dein Script eingefügt. Auch bei mir funktioniert das Script in der Console. Der Value im Bereich Objekte wurde beim Betätigen der Schaltfläche von 0 nach 1 geändert. Trotzdem schaltet die Steckdose nicht.
Moin Jörg,
ist das evtl. ein Reichweiten-Problem? Bitte prüfe mal ob es in der Nähe besser funktioniert. Zudem mal ausprobieren ob es funktioniert, wenn Du den Befehl direkt unter den PI (Hostsystem) in der Konsole ausführst.
Viele Grüße,
Matthias
Direkt am Raspberry ausgeführt funktioniert es. Ich habe aber eine andere Spur. Wenn ich dem Script ein einfaches Lampen Widget (An / Aus) zuweise funktioniert es. Wie unterscheiden sich deine Schalter von den „normalen“ Lampe an Schalter?
Danke für Deine Rückmeldung. Was passiert denn auf der Ebene der Objekte (Datenpunkte), wenn Du den Button aus dem Artikel verwendest. Werden die Datenpunkte richtig gesetzt? Eigentlich sollte das exakt das gleiche Verhalten des „normalen“ Schalters besitzen.
Hallo,
gibts denn ein Bild mit angelöteter Antenne?
Nach dem anlegen der Aktoren kam ich leider auch nicht weiter.
Hallo, ich habe gerade den Artikel um das Foto erweitert.
Im nächsten Schritt einfach ein weiteres Skript anlegen und den Code mit den On(…) Anweisungen einfügen. Dann das Skript auf Aktiv umstellen und fertig 🙂
Hallo Matthias,
dein Artikel war sehr inspirierend für mich. Hat alles super geklappt.
Vielen Dank!
Auf diese Art kann ich jetzt meine Schaltsteckdosen mit einem Hue Bewegungsmelder schalten.
Den Bewegungsmelder lese ich mit node red aus und schalte bei einer Bewegung die Schaltsteckdosen.
Gruß Kalle
Hallo Kalle, cool, danke für Dein Feedback! 🙂
Hallo Matthias,
kann man auch das ganze mi einem Broadlink pro realisieren ?
Ich habe gelesen, dass es gehen soll. Allerdings würde ich vor dem Kauf gerne wissen wie der Kommunikationsweg ist.
Läuft es über Wlan und wie muss man das konfigurieren. Vielleicht kannst Du ein kleines Tutorial machen.
Mario
Hallo Matthias,
wo muss ich die 3 Aktoren anlegen?
createState(‚433MHZ_Aktoren.Zwischenstecker_A‘, 0, { type: ’number‘ });
createState(‚433MHZ_Aktoren.Zwischenstecker_B‘, 0, { type: ’number‘ });
createState(‚433MHZ_Aktoren.Zwischenstecker_C‘, 0, { type: ’number‘ });
und wo das javaskrip.0?
Hallo,
die Aktoren müssen als Datenpunkt anlegt sein. Also entweder das Script von mir einmal ausführen oder die Datenpunkte manuell anlegen. Du musst dafür natürlich den JS-Adapter installiert haben.
Hallo Mtthias,
leider komme ich damit nicht weiter.
Wo muss ich die Aktoren als Datenpunkt anlegen?
Den JS-Adapter habe ich installiert, wie fühe ich dein Skript aus?
Gibt es eine Punkt für Punkt Anleitung, ich bin noch recht neu mit iobroker.
Gruß Klaus
Moin Klaus,
dann schaue Dir doch bitte mal die JavaScript Artikelserie an. Dort erkläre ich den Editor und auch wie Scripts angelegt und ausgeführt werden können.
Hallo,
ich brauche mal Hilfe.
Die Aktoren schalten 0 und 1 ohne Probleme.
Aber wie genau werden die on Scripts mit dem exec Befehl eingebunden und wo kommen diese hin.
Ich habe diese unter 433MHZ_Aktoren als Script zwei angelegt und gestartet.
Aber leider schaltet nichts, im Raspi kann ich mit den Kommandos schalten.
Gruß
Thrsten
Hallo,
bitte schaue Dir mal vorab die Artikelserie „ioBroker JavaScript“ an, dort findest Du die Antworten auf Deine Fragen 🙂 Ansonsten nochmals Bescheid geben.
Hallo,
wo finde ich den JS-adapter bzw. ist die genaue Bezeichnung?
Hallo,
erstklassige Homepage, danke dafür.
Beschreibungen sehr verständlich und schön bebildert.
Danke und Gruß
Artur
Hallo,
danke für das Lob, das motiviert sehr 🙂
Viele Grüße,
Matthias
Hallo,
langsam zweifle ich an der Funktion der oben beschriebenen Anleitung. Die Aktoren funktionieren (1 oder 0) alles iO. Aber der Skript schaltet nur die Ausgabe, nicht aber die Anweisung “ exec(’sudo /opt/raspberry-remote/./send 10001 1 0′ „.
on({id: ‚javascript.0.433MHZ_Aktoren.Zwischenstecker_A‘, change: „ne“}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
console.log((String(‚Taster betätigt, Status: ‚) + String(getState(„javascript.0.433MHZ_Aktoren.Zwischenstecker_A“).val)));
if (getState(„javascript.0.433MHZ_Aktoren.Zwischenstecker_A“).val == 0) {
exec(’sudo /opt/raspberry-remote/./send 10001 1 0′);
} else if (getState(„javascript.0.433MHZ_Aktoren.Zwischenstecker_A“).val == 1) {
exec(’sudo /opt/raspberry-remote/./send 10001 1 1‘);
}
});
Hallo,
die Anleitung sollte so schon funktionieren, gibt natürlich immer Ausnahmen. Hast Du im ioBroker JS-Adapter die Ausführung von exec Kommondas erlaubt? Für mich sieht es so aus, dass hier das Problem liegt. Auf der Linux Maschine funktionieren manuell die Ausführung der Befehle?
Viele Grüße,
Matthias
Ja habe den Fehler gefunden. Sudo darf nicht davor sein.
Habe aber jetzt ein anderes Problem:
Ich habe drei 433mHz Funk-Systeme mit jeweils 5 Schaltern also A,B,C …
Ich habe die Aktoren so aufgeteilt:
createState(‚433MHZ_Aktoren.System_1.Zwischenstecker_A‘, 0, { type: ’number‘ });
createState(‚433MHZ_Aktoren.System_1.Zwischenstecker_B‘, 0, { type: ’number‘ });
.
createState(‚433MHZ_Aktoren.System_2.Zwischenstecker_A‘, 0, { type: ’number‘ });
createState(‚433MHZ_Aktoren.System_2.Zwischenstecker_B‘, 0, { type: ’number‘ });
.
createState(‚433MHZ_Aktoren.System_3.Zwischenstecker_A‘, 0, { type: ’number‘ });
createState(‚433MHZ_Aktoren.System_3.Zwischenstecker_B‘, 0, { type: ’number‘ });
.
Pro System habe ich einen separaten Skript angelegt
zB. System 1
on({id: ‚javascript.0.433MHZ_Aktoren.System_1.Zwischenstecker_A‘, change: „ne“}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
console.log((String(‚Taster betätigt, Status: ‚) + String(getState(„javascript.0.433MHZ_Aktoren.System_1.Zwischenstecker_A“).val)));
if (getState(„javascript.0.433MHZ_Aktoren.System_1.Zwischenstecker_A“).val == 100) {
exec(‚/home/pi/raspberry-remote/./send 10001 1 1‘);
console.log(„exec: “ + ‚/home/pi/raspberry-remote/./send 10001 1 1‘);
} else if (getState(„javascript.0.433MHZ_Aktoren.System_1.Zwischenstecker_A“).val == 0) {
exec(‚/home/pi/raspberry-remote/./send 10001 1 0‘);
console.log(„exec: “ + ‚/home/pi/raspberry-remote/./send 10001 1 0‘);
}
});
on({id: ‚javascript.0.433MHZ_Aktoren.System_1.Zwischenstecker_B‘, change: „ne“}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
console.log((String(‚Taster betätigt, Status: ‚) + String(getState(„javascript.0.433MHZ_Aktoren.System_1.Zwischenstecker_B“).val)));
if (getState(„javascript.0.433MHZ_Aktoren.System_1.Zwischenstecker_B“).val == 100) {
exec(‚/home/pi/raspberry-remote/./send 10001 2 1‘);
console.log(„exec: “ + ‚/home/pi/raspberry-remote/./send 10001 2 1‘);
} else if (getState(„javascript.0.433MHZ_Aktoren.System_1.Zwischenstecker_B“).val == 0) {
exec(‚/home/pi/raspberry-remote/./send 10001 2 0‘);
console.log(„exec: “ + ‚/home/pi/raspberry-remote/./send 10001 2 0‘);
}
});
on({id: ‚javascript.0.433MHZ_Aktoren.System_1.Zwischenstecker_C‘, change: „ne“}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
console.log((String(‚Taster betätigt, Status: ‚) + String(getState(„javascript.0.433MHZ_Aktoren.System_1.Zwischenstecker_C“).val)));
if (getState(„javascript.0.433MHZ_Aktoren.System_1.Zwischenstecker_C“).val == 100) {
exec(‚/home/pi/raspberry-remote/./send 10001 3 1‘);
console.log(„exec: “ + ‚/home/pi/raspberry-remote/./send 10001 3 1‘);
} else if (getState(„javascript.0.433MHZ_Aktoren.System_1.Zwischenstecker_C“).val == 0) {
exec(‚/home/pi/raspberry-remote/./send 10001 3 0‘);
console.log(„exec: “ + ‚/home/pi/raspberry-remote/./send 10001 3 0‘);
}
});
on({id: ‚javascript.0.433MHZ_Aktoren.System_1.Zwischenstecker_D‘, change: „ne“}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
console.log((String(‚Taster betätigt, Status: ‚) + String(getState(„javascript.0.433MHZ_Aktoren.System_1.Zwischenstecker_D“).val)));
if (getState(„javascript.0.433MHZ_Aktoren.System_1.Zwischenstecker_D“).val == 100) {
exec(‚/home/pi/raspberry-remote/./send 10001 4 1‘);
console.log(„exec: “ + ‚/home/pi/raspberry-remote/./send 10001 4 1‘);
} else if (getState(„javascript.0.433MHZ_Aktoren.System_1.Zwischenstecker_D“).val == 0) {
exec(‚/home/pi/raspberry-remote/./send 10001 4 0‘);
console.log(„exec: “ + ‚/home/pi/raspberry-remote/./send 10001 4 0‘);
}
});
Funktioniert mit allen Schaltern über VIS — SUPER.
Nun wollte ich allerdings zwei Schalter aus System 1, drei aus System 2 und drei aus System 3 mit einem Schalter belegen. Als Gedanke „Panikschalter“. Diesem habe ich auch einen Aktor angelegt
und einen Script Notschalter_1 wie folgt geschrieben.
var timeout, timeout8, timeout2, timeout9, timeout3, timeout10, timeout4, timeout11;
on({id: „javascript.0.Notschalter_Aktoren.Notschalter_1″/*Notschalter_Aktoren.Notschalter_1*/, change: „ne“}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if (getState(„javascript.0.Notschalter_Aktoren.Notschalter_1“).val == 0) {
exec(‚/home/pi/raspberry-remote/./send 10001 4 0‘);
timeout = setTimeout(function () {
exec(‚/home/pi/raspberry-remote/./send 10001 3 0‘);
}, 1000);
} else if (getState(„javascript.0.Notschalter_Aktoren.Notschalter_1“).val == 1) {
exec(‚/home/pi/raspberry-remote/./send 10001 4 1‘);
timeout8 = setTimeout(function () {
exec(‚/home/pi/raspberry-remote/./send 10001 3 1‘);
}, 1000);
}
});
on({id: „javascript.0.Aktor_Gewitter.Gewitter1“, change: „ne“}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if (getState(„javascript.0.Notschalter_Aktoren.Notschalter_1“).val == 0) {
exec(‚/home/pi/raspberry-remote/./send 11001 1 0‘);
timeout2 = setTimeout(function () {
exec(‚/home/pi/raspberry-remote/./send 11001 2 0‘);
}, 1000);
} else if (getState(„javascript.0.Notschalter_Aktoren.Notschalter_1“).val == 1) {
exec(‚/home/pi/raspberry-remote/./send 11001 1 1‘);
timeout9 = setTimeout(function () {
exec(‚/home/pi/raspberry-remote/./send 11001 2 1‘);
}, 1000);
}
});
on({id: „javascript.0.Aktor_Gewitter.Gewitter1“, change: „ne“}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if (getState(„javascript.0.Notschalter_Aktoren.Notschalter_1“).val == 0) {
exec(‚/home/pi/raspberry-remote/./send 10101 1 0‘);
timeout3 = setTimeout(function () {
exec(‚/home/pi/raspberry-remote/./send 10101 2 0‘);
}, 1000);
timeout4 = setTimeout(function () {
exec(‚/home/pi/raspberry-remote/./send 10101 3 0‘);
}, 1000);
} else if (getState(„javascript.0.Notschalter_Aktoren.Notschalter_1“).val == 1) {
exec(‚/home/pi/raspberry-remote/./send 10101 1 1‘);
timeout10 = setTimeout(function () {
exec(‚/home/pi/raspberry-remote/./send 10101 2 1‘);
}, 1000);
timeout11 = setTimeout(function () {
exec(‚/home/pi/raspberry-remote/./send 10101 3 1‘);
}, 1000);
}
});
und da liegt mein Problem. Aus System 1 schalten alle zwei verzögert ein und aus,
aber aus System 2 und 3 schaltet nichts. WARUM?
Ist das evtl. ein Timing-Problem?
Ich glaube Du schickst hier zu schnell zu viele Befehle.
Hallo,
mir geht es auch so.
Langsam zweifle ich an der Funktion der oben beschriebenen Anleitung. Die Aktoren funktionieren (1 oder 0) alles iO. Aber der Skript schaltet nur die Ausgabe, nicht aber die Anweisung “ exec(’sudo /opt/raspberry-remote/./send 01100 1 0′ „.
Habe es mit und ohne sudo probiert, beides funktioniert nicht.
Unter Sripte habe ich 433MHZ_Akoren angelegt mit Zwischenstecker A und B wie im Tutorial gezeigt. Und auch gestartet. Das Exec Komando habe ich erlaubt.
Den On OFF Button habe ich unter Scripte die
on(‚javascript.0.433MHZ_Aktoren.Zwischenstecker_A‘, function (obj) {
exec(’sudo /home/pi/raspberry-remote/./send 11111 1 ‚+obj.state.val);
}); angelegt.
Leider keine Reaktion.
Was mach ich falsch?
Hallo Klaus,
funktioniert denn der Befehl „sudo /opt/raspberry-remote/./send 01100 1 0“ so in der Shell des PI? Kannst Du so die Steckdosen schalten. Ich würde jetzt so einmal testen und mich an das genaue Problem rantasten.
Wenn der Befehl so funktioniert, zurück in ioBroker und in einem kleinen Skript weitertesten. Ich würde mir dafür eine Funktion schreiben, die einfach einen Aktor ein- oder ausschaltet. Diese Funktion dann manuell im Skript aufrufen.
Sag Bescheid, wenn Du neue Erkenntnisse hast.
Viele Grüße,
Matthias
Hallo Matthias,
ja, das schalten mit dem Befehl „sudo /opt/raspberry-remote/./send 01100 1 0“ funktioniert.
Ich würde mir dafür eine Funktion schreiben, die einfach einen Aktor ein- oder ausschaltet. Diese Funktion dann manuell im Skript aufrufen.
Wo kann ich diese Funktion in IOBroker schreiben und wie sieht die aus und wie starte ich die manuell im Skript?
Hallo Klaus,
Du erstellst Dir ein neues Skript und packst dort z.B. folgenden Code rein:
function TestRemote() {
exec('sudo /home/pi/raspberry-remote/./send 11111 2 1');
}
TestRemote();
Wenn Du das Script jetzt speicherst, aktivierst und dann über die Speichern-Schaltfläche erneut speicherst, sollte das Script auch direkt ausgeführt werden.
Hallo Matthias,
super, das funktioniert damit!
Wie bekome ich nun das andere zum Laufen?
Script für Stecker A
createState(‚433MHZ_Aktoren.Zwischenstecker_A‘, 0, { type: ’number‘ });
Das habe ich im Edit vis für die ON OFF Button in Skripte abgelegt.
on(‚javascript.0.433MHZ_Aktoren.Zwischenstecker_A‘, function (obj) {
exec(’sudo /home/pi/raspberry-remote/./send 11111 1 ‚+obj.state.val);
});
Okay, dann funktioniert es ja grundsätzlich in ioBroker. Hast Du mal kontrolliert, ob die Scripts bei dem Klick auf die Buttons auch wirklich ausgeführt werden? Schreibe Dir mal einen Log-Eintrag in das Protokoll mit der Info ob es ausgeführt wurde.
Hallo,
ich habe gerade versucht das nachzubauen.
Leider schalten bei mir die Steckdosen nicht.
Wenn ich per SSH auf den Pi gehe und von dort aus über die Konsole:
sudo /home/pi/raspberry-remote/./send 00011 1 1
eingebe wird die Steckdose korrekt geschaltet.
Wenn ich jedoch im vis auf den Button ON/OFF klicke schaltet zwar der Zustand im ioBroker von 0 auf 1 aber die Steckdose schaltet nicht.
In der Instanz Javaskript habe ich die Option „exec erlauben“ aktiviert.
Wenn ich ein Skript mit folgendem Inhalt erstelle:
function TestRemote() {
exec(’sudo /home/pi/raspberry-remote/./send 00011 1 1′);
}
TestRemote();
schaltet die Steckdose auch nicht.
Scheinbar gibt es Probleme den exec Befehl auszuführen.
Kann mir da jemand einen Tipp geben woran das scheitern könnte?
Zur Info:
Ich habe ioBroker nicht als Image installiert sonder erst Rasbian und dann ioBroker per Skript.
Tasmota Geräte kann ich ohne Probleme schalten.
Ohne Sudo funktioniert es
Danke für Deine Rückmeldung 🙂
Hallo Matthias,
bei mir funktioniert das mit IOBroker leider noch nicht, siehe mein Kommentar weiter oben.
Auch ohne sudo kein Erfolg.
Wo kann ich den Zustand sehen?
„Wenn ich jedoch im vis auf den Button ON/OFF klicke schaltet zwar der Zustand im ioBroker von 0 auf 1 aber die Steckdose schaltet nicht.“
Bei mir wird der Button beim anklicken umgeschalten.
Hallo Matthias,
super, das funktioniert damit!
function TestRemote() {
exec(’sudo /home/pi/raspberry-remote/./send 11111 2 1′);
}
TestRemote();
Wie bekome ich nun deinTutorial zum Laufen?
Script für Stecker A
createState(‚433MHZ_Aktoren.Zwischenstecker_A‘, 0, { type: ’number‘ });
Das habe ich im Edit vis für die ON OFF Button in Skripte abgelegt:
on(‚javascript.0.433MHZ_Aktoren.Zwischenstecker_A‘, function (obj) {
exec(’sudo /home/pi/raspberry-remote/./send 11111 1 ‚+obj.state.val);
});
Kann ich feststellen, ob im +obj.state.val der richtige Wert übergeben wird?
Oder wie komme ich weiter?
Gruß Klaus
Hallo,
ich habe alles so eingerichtet wie beschrieben aber leider schaltet die Dose nicht.
Ich habe ein Raspberry Pi 3b+ und den Data auf 22 gelegt.
Kann man irgendwie kontrollieren ob der 433mhz sender überhaupt aktiv ist ?
Hallo,
prüfe bitte einmal, ob es ohne „sudo“ funktioniert. Ansonsten muss man sich an das Problem rantasten. Erst mal direkt unter der Console ausprobieren, dann über ein kleines Script…
Ohne Sudo klappt es leider auch nicht.
Per putty getestet
Hallo Matthias,
habe ich etwas falsch gemacht oder warum antwortest Du mir nicht?
Gruß Klaus
Moin Klaus,
alles gut, neben der Webseite habe ich noch einen normalen Job, Familie und Privatleben. Von daher kommt nicht immer gleich eine Antwort 🙂
Ich würde jetzt so vorgehen, dass Du in der Funktion eine Ausgabe für das ioBroker Log erstellst.
log(obj.state.val, ‚info‘);
Hattest Du im Script evtl. einen Tippfehler?
exec(’sudo /home/pi/raspberry-remote/./send 11111 1+obj.state.val);
Es muss so aussehen:
exec(’sudo /home/pi/raspberry-remote/./send 11111 1’+obj.state.val);
Hallo Matthias,
Danke für die Info. Das verstehe ich.
Mit dem Log habe ich folgende Info bekommen.
error javascript.0 script.js.common.433MHZ_Aktoren.Zwischenstecker_A compile failed:
at script.js.common.433MHZ_Aktoren.Zwischenstecker_A:2
bei log(obj.state.val, ,“info“); ist obj und das zweite Koma rot unterstrichen.
Stimmt da was mit der Syntax nicht?
Hallo Klaus,
das muss natürlich so aussehen 🙁
log(obj.state.val, ‚info‘);
Sorry, aber jetzt sollte die Log-Ausgabe funktionieren.
Hallo Matthias,
leider funktioniert das auch nicht.
Habe deinen Vorschlag kopiert und eingefügt.
Es wird nun obj und ‚info‘ rot unterstrichen.
Der Fehler ist der selbe wie zuvor.
Nur log(obj.state.val, ‚info‘); liefert ‚info‘ mit roter Schrift.
obj ist noch rot unterstrichen.
Der Fehler ist
error javascript.0 script.js.common.433MHZ_Aktoren.Zwischenstecker_A compile failed:
at script.js.common.433MHZ_Aktoren.Zwischenstecker_A:2
und
error javascript.0 at script.js.common.433MHZ_Aktoren.Zwischenstecker_A: 2:5
Ist das vor ,info‘ ein Komma und danach ein Hochkoma?
Poste mal bitte dein gesamten Code hier.
Hallo Matthias,
unter Skripte habe ich für Zwischenstecker A das
createState(‚433MHZ_Aktoren.Zwischenstecker_A‘,1, { type:’number‘});
log(obj.state.val, ‚info‘);
Das bekomme ich als Fehler
error javascript.0 script.js.common.433MHZ_Aktoren.Zwischenstecker_A: script.js.common.433MHZ_Aktoren.Zwischenstecker_A:2
15:20:17.277 error javascript.0 at script.js.common.433MHZ_Aktoren.Zwischenstecker_A:2:5
Das ist der Code für die Buttons
on(‚javascript.0.433MHZ_Aktoren.Zwischenstecker_A‘, function (obj) {
(’sudo /home/pi/raspberry-remote/./send 01100 1′ +obj.state.val);
});
on(‚javascript.0.433MHZ_Aktoren.Zwischenstecker_B‘, function (obj) {
exec(’sudo /home/pi/raspberry-remote/./send 01100 1′ +obj.state.val);
});
Ich hoffe das ist das was du wolltest.
Gruß Klaus
Hallo Klaus,
Du musst in deiner on(…) Subscription die Log-Ausgabe machen, sonst kann das nicht funktionieren:
Zum Beispiel so:
on('javascript.0.433MHZ_Aktoren.Zwischenstecker_A', function (obj) {
log(obj.state.val, 'info');
exec('sudo /home/pi/raspberry-remote/./send 11111 1 '+obj.state.val);
});
Bitte achte hier auf die genaue Schreibweise. Bei Dir im Script war auch noch nach dem on( ein Komma, das darf da nicht hin.
Bitte geb mir Bescheid ob Du damit im Log Ausgaben bekommst.
Hallo Matthias,
das nach dem on war ein Hochkomma, wurde beim kopieren als Komma geschrieben.
Ok, nun das log
javascript.0 2019-01-25 19:53:38.575 info script.js.common.433MHZ_Aktoren.Zwischenstecker_A: 0
javascript.0 2019-01-25 19:53:37.316 info script.js.common.433MHZ_Aktoren.Zwischenstecker_A: 1
Die Null und Eins wird angezeigt, aber wo ist die Adresse 01100?
Gruß Klaus
Hallo Klaus,
die Adresse steht doch im String fest codiert im Aufruf der exec Funktion. Dass hier 0 oder 1 kommt ist absolut korrekt. Kannst Du mal ein Screenshot des gesamten Codes erstellen und mir per E-Mail senden. Irgendwas stimmt da nicht.
Grüße,
Matthias
Hallo Zusammen,
hatte das gleiche Problem. Über SSH ging der Befehl zum Schalten ohne Probleme, über ioBroker aber nicht. Der Logeintrag war korrekt.
Das Ganze hing dann an den Rechten, neue Installationen von ioBroker installieren den User iobroker.
Der hat aber keine Rechte. Mit dem Befehl sudo Visudo und dann die nachfolgenden Einträge funktioniert alles:
# User privilege specification
root ALL=(ALL:ALL) ALL
iobroker ALL=(ALL:ALL) NOPASSWD: ALL
iobroker ALL=NOPASSWD:/sbin/reboot
iobroker ALL=NOPASSWD:/sbin/shutdown
Ich bin aber auch nur blutiger Anfänger und kam nur durch einen richtigen Artikel in einem Forum diesem Verhalten auf die Spur.
Vielleicht hilft es jemandem.
MFG
Danke für den Hinweis 🙂
Danke für die Anleitung.
Hat erst nicht funktioniert, bis ich in den Kommentaren den Hinweis las,
im Script beim exec befehl das sudo weg zu lassen.
————
on(‚javascript.0.433MHZ_Aktoren.10010_D‘, function (obj) {
exec(‚/home/pi/raspberry-remote/./send 10010 4 ‚+obj.state.val);
});
————
So hat es dann Funktioniert.
Liegt das an anderen Rechten für den IoBroker bei der Installation?
Hallo
habe versucht das ganze zu realisieren.
Aber ich scheitere schon am anfang.
das wirringpi wird wohl nicht mehr supportet.
Habe gedacht ich hab es hin bekommen zu installieren.. Wenn ich aber dann nachher den Befehl home/pi/raspberry-remote/./send ……..
verwende kommt die Meldung command not found
Wo liegt den nun mein Problem?
Was hat es zb mit dem Teil/./ auf sich?
Wenn ich gpio -v eingebe kommt
gpio version: 2.52
Copyright (c) 2012-2018 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty
Raspberry Pi Details:
Type: Pi 3B+, Revision: 03, Memory: 1024MB, Maker: Sony
* Device tree is enabled.
*–> Raspberry Pi 3 Model B Plus Rev 1.3
* This Raspberry Pi supports user-level GPIO access.
Wiring pi muss wohl für den Pi 4 upgedated werden. Bei mir hat das geholfen. Es geht nun.
Hier die Anleitung:
http://wiringpi.com/wiringpi-updated-to-2-52-for-the-raspberry-pi-4b/
Hi Matthias,
ich gehe mal davon aus, dass Du mir weiterhelfen kannst. Die Funksteckdose in den Iobroker einbinden und Steuerung über Blockly skript ist alles kein Thema, dank deiner Webseiten.
Nachhaltigkeit ist jedoch das Thema. Ich habe nun den Funksender der Steckdose und das 433 MHz Emfänger-Modul übrig. Hier könnte ich mir schöne Anwendungen vorstellen. Ich bekomme aber die Sache nicht in den Iobroker. Auf dem Raspberry kann ich über den Sniffer-Befehl die Tasten A,B,C,D auslesen, dass war es aber auch schon.
Ich habe im Moment keine Idee wie ich weiterkommen. Wäre echt cool, wenn Du mir einen Tipp geben könntest wie ich den Funksender in den Iobroker bekomme.
Gruß,
Jürgen
Hallo Matthias,
kleiner Tip für alle, die bis zum erfolgreichen Shell-Kommando durchgekommen sind und sich jetzt die Zähne im vis ausbeißen, weil er -verdammich noch mal- nicht schaltet (exec-Problem) :
https://iot-blog.net/2019/07/05/iobroker-nicht-mehr-als-root-fixer-skript-verstehen-und-anwenden/
Danke für Deine Arbeit und die Hilfe bei meinem 433-Projekt !
Grüße vom Tom
Hallo Tom,
danke für den Tipp und Dein Feedback 🙂
Einen guten und vor allem gesunden Rutsch ins neue Jahr.
LG Matthias