NEWS
GPIO's Steuern 16chRelais12V über RasPi o. Rock64
-
Moin moin allerseits,
Ich suche seit einigen Tagen nach einer Lösung.
Ich habe ioBroker auf einem Multihost am laufen.
Der Host ist ein Rock64.
Der Slave ein Raspberry Pi 3b.An die Ausgänge der GPIO's des Pi habe ich die Relais Karte angeschlossen.
Über den Adapter RPI2.0 kann ich die GPIO's aktivieren.
Unter Objekte tauchen nun die 16 GPIO's auf.
Aber Steuern lassen sie sich über die Objekte nicht.
Auch über das GPIO Register im RPI2.0 Adapter kommt keine gezielte Steuerung zu Stande.
Beim versuch einzelne Relais zu schalten, schalten entweder alle ein, oder alle aus.
Die meisten 'Schalter' bewirken allerdings nothing.So lange der Adapter und die GPIO's aktiviert sind kann ich jedoch über die Konsole (Putty - SSH) die Relais steuern!:
echo "in" > gpio2/direction - zieht das Relais über den GPIO2 an
echo "out" > gpio2/direction - lässt das Relais über den GPIO2 ungeschaltet
Das funktioniert tadellos bei jedem einzelnen Relais (GPIO)
Das sollte auf jeden Fall schon einmal für einen Großteil die richtige Verkabelung beweisen.
!!! So lange ich mich im Verzeichnis: 'sys/class/gpio' befinde !!!Ich habe gelesen das es 2 verschiedene Typen der Relais Karte gibt, und der RPI2.0 Adapter nicht zu invertieren ist. "https://forum.iobroker.net/topic/22045/rpi-adapter-gpi-schalten-standard-wert"
Bei deaktiviertem RPI2.0 Adapter verhält sich die Steuerung über den Node Red Adapter ebenso.
Nach der Anleitung von:
https://www.youtube.com/watch?v=RA06ee3jahM
Beim aktivieren des Adapters oder beim deploy'en schalten die Relais alle samt.
Gehe ich nun über das User Interface und Schalte GPIO manuell reagieren die Relais nicht.Als letztes habe ich nun noch einige Scripte ausprobiert:
https://www.youtube.com/watch?v=TFt480sxNWg
script16_1.py
'=#!/usr/bin/python import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) # init list with pin numbers pinList = [2, 3, 4, 17, 27, 22, 10, 9, 11, 5, 6, 13, 19, 26, 21, 20] # loop through pins and set mode and state to 'low' for i in pinList: GPIO.setup(i, GPIO.OUT) GPIO.output(i, GPIO.HIGH) # time to sleep between operations in the main loop SleepTimeL = 2 # main loop try: GPIO.output(2, GPIO.LOW) print "ONE" time.sleep(SleepTimeL); GPIO.output(3, GPIO.LOW) print "TWO" time.sleep(SleepTimeL); GPIO.output(4, GPIO.LOW) print "THREE" time.sleep(SleepTimeL); GPIO.output(17, GPIO.LOW) print "FOUR" time.sleep(SleepTimeL); GPIO.output(27, GPIO.LOW) print "FIVE" time.sleep(SleepTimeL); GPIO.output(22, GPIO.LOW) print "SIX" time.sleep(SleepTimeL); GPIO.output(10, GPIO.LOW) print "SEVEN" time.sleep(SleepTimeL); GPIO.output(9, GPIO.LOW) print "EIGHT" time.sleep(SleepTimeL); GPIO.output(11, GPIO.LOW) print "NINE" time.sleep(SleepTimeL); GPIO.output(5, GPIO.LOW) print "TEN" time.sleep(SleepTimeL); GPIO.output(6, GPIO.LOW) print "ELEVEN" time.sleep(SleepTimeL); GPIO.output(13, GPIO.LOW) print "TWELVE" time.sleep(SleepTimeL); GPIO.output(19, GPIO.LOW) print "THIRTEEN" time.sleep(SleepTimeL); GPIO.output(26, GPIO.LOW) print "FOURTEEN" time.sleep(SleepTimeL); GPIO.output(21, GPIO.LOW) print "FIFTEEN" time.sleep(SleepTimeL); GPIO.output(20, GPIO.LOW) print "SIXTEEN" time.sleep(SleepTimeL); GPIO.cleanup() print "Good bye!" # End program cleanly with keyboard except KeyboardInterrupt: print " Quit" # Reset GPIO settings GPIO.cleanup() # find more information on this script at # http://youtu.be/oaf_zQcrg7g
Nach der Anleitung im Video.
Wenn ich das Script starte schalten wieder alle Relais undefiniert zu gleich.
Das Script an sich läuft nachweißbar aber die Relais schalten nicht mit.Die Karte habe ich extern mit 12V angeschlossen.
Wenn ich die Pin's der Karte manuell auf GND Brücke schalten die Relais.Ich stehe also mal wieder völlig auf dem Schlauch...
-
...hat es vielleicht etwas mit den 2 Instanzen des Node Red Adapters zu tun?
Obwohl es in den Einstellungen der Adapter mit den jeweiligen IP Nummern angepasst wurde...
...erreiche ich über die Links nur die Oberflächen des Host's!
Die Oberfläche des Slave's erreiche ich nur über manuelle Eingabe im Browser.
-
Dann vielleicht erstmal das funktionierende nutzbar machen.
Wie setze ich die Befehle:
echo "in" > gpio2/direction
echo "out" > gpio2/direction
...die nur in dem Pfad:
sys/class/gpio
...im Slave funktionieren
im Blockly ein?Das Blockly läuft auf dem Host:
192.168.1.host
Der Pfad liegt auf dem Slave:
192.168.1.slaveWie muss also mein Befehl im Javascript (Variabel oder Funktion) unter Blockly lauten?
Und wie wende ich das Modul im Blockly an?Sowas wie:
@192.168.1.slave sys/class/gpio/ echo "in" > gpio2/directionBebilderte Beispiele sind bevorzugt, gerne gesehen.
Vielleicht erst mal hierzu einer eine Idee?
So viele Bäume hier, wo war noch mal der Wald!?
-
Wie gut sind denn deine Linux-Kenntnisse?
Versuche mal vom Host im Terminal:ssh root@192.168.1.slave 'cd /sys/class/gpio && echo "in" > gpio2/direction'
-
@DiveDancer
soweit ich das verstanden habe, wird bei multihost der exec() befehl ausgeführt, auf dem server, auf dem der javascript adapter installiert wurded.b. wenn du einen js-adapter auf dem slave installierst, kannst du direkt einen exec. ausführen. einfach beim erstellen des scripts auf den js-adapter achten!
wenn der befehl keinen root bzw sudo zugriff braucht, sollte es direkt laufen
im log sieht man die antwort des servers ! einfach eine variable result anlegen
du gibst den befehl im blockly genau so ein, wie auf der console - bei befehlen, die root oder sudo benuzen und das fixer-script gelaufen ist, werden noch weitere einstellungen benötigt - aber erst mal so versuchen
ich habe keinen multihost zum testen- aber hier mal ein thread wegen der installation des adapters - weiß nicht, wie aktuell der ist
https://forum.iobroker.net/topic/15651/adapter-für-multihost-installieren-hier-backitup -
@SBorg sagte in GPIO's Steuern 16chRelais12V über RasPi o. Rock64:
Wie gut sind denn deine Linux-Kenntnisse?
Versuche mal ...
Leider sind meine Linux Kenntnisse Mies.
root@Rock64:~# ssh pi@192.168.1.slave 'cd /sys/class/gpio && echo "in" > gpio2/direction' pi@192.168.1.slave's password: bash: gpio2/direction: Datei oder Verzeichnis nicht gefunden root@Rock64:~#
Mein erster Versuch schlug fehl.
Lösung des Problems war, dass der Rpi2.0 Adapter Deaktiviert war.
Dann schaltete das Relais (gpio2) mit selbigem Befehl nach angabe des Passwortes.
Erster Test also erfolgreich. -
Super, in der Konstellation läuft es schon mal.
Ich hatte den Javascript Adapter in zweiter Instanz bereits installiert, ihn jedoch deaktiviert.
Hab ihn einfach unter Instanzen auf den Slave gelegt und aktiviert.
Nach einigen Sekunden wurde der Adapter grün.
Ich musste noch in den Einstellungen des jacascript.1 Adapters das 'Erlaube das Kommando "exec" AN-haken.
Hier schaltet mein Relais dauerhaft im ein Sekunden Takt.Schalten kann ich also schon mal.
Nur leider kann ich keinen Status abfragen.
-
Mache ich im rpi2.0 Adapter etwas falsch?
Alle aktivierten Ports tauchen unter Objekte auf.
Jeder Port hat zwei Einträge.
Nach Dutzenden Schaltungen von Relais 2 ist hier leider nichts vermerkt. -
@DiveDancer ich habe keinen raspi - vielleicht meldet sich noch jmd, der das benutzt
aber - hast du den rpi2 auf dem slave installiert ?
-
Zumindest kriegen wir das hin
Ich nutze den Adapter nicht, deswegen nur mal so eine Vermutung. Was passiert denn wenn du bei dem "state" des GPIO-Ports (letzte Hardcopy) hinten mal ein "true" einträgst? Ich tippe stark darauf, dass dein Relais schaltet...
...und wahrscheinlich wird der Schaltzustand nirgends angezeigt. Kriegen wir ev. aber auch noch hin, nur eins nach dem anderen -
@liv-in-sky sagte in GPIO's Steuern 16chRelais12V über RasPi o. Rock64:
@DiveDancer ich habe keinen raspi - vielleicht meldet sich noch jmd, der das benutzt
aber - hast du den rpi2 auf dem slave installiert ?
Ja, das 'Tijger' steht bei Instanzen unter Server für den Slave (RasPi 3b)
Und das 'Rock64' für den Host.
(Siehe erstes Bild) -
@DiveDancer hast du mal das von @sborg probiert - kannst du über die objekte unter dem rpi die gpio schalten?
-
Wie schon im Startpost geschrieben,
lassen sich die Relais mit den Einträgen in den Objekten nicht schalten.
Weder mit isinput noch unter state.
Ich kann jeweils true oder false eintragen, einen Schaltvorgang bewirkt das jedoch nicht. -
@DiveDancer gibt den das log etwas her ?
wenn du den rpi mal auf debug bei instanzen schaltest - kommt da irgendetwas
-
Entweder blicke ich den Adapter nicht,
oder es liegt an meinem Relais was eventuell
vom Adapter nicht unterstützt wird.
Es gibr zwei verschiedene Arten von Relais (High oder Low).
Welches ich nutze weiß ich leider nicht.
Nur die wenigsten Händler zeichnen dies aus.Folgendes Verhalten habe ich nun herauskristallisiert!
Stehen in den Einstellungen des rpi2.0 Adapters alle gpio Ausgänge auf aktiv und OUT dann lassen sich die Relais schalten.
out bewirkt das die Relais angezogen werden.
in setzt das Relais zurück den Ruhezustand.
Unter Objekten wird keine Statusänderung angezeigt!
Schalte ich in den Einstellungen (Bild) auch nur einen Port der genutzten Relais (gpio's) von OUT auf IN,
ziehen alle Relais (alle 16) an.Wenn ich nun per Script oder ssh die Relais schalte passiert folgendes:
Der Status lässt sich auch weiterhin nicht über die Objekte steuern.
Die Statusänderung wird unter Objekten angezeigt. Yeah
Das schalten auf in schaltet das Relais für den Bruchteil einer Sekunde auf den Ruhemodus, wird aber augenblicklich wieder angezogen. Den gleichen Status den die Restlichen 15 einfach beibehalten haben. -
hast du mal im forum gesucht: die haben "alle" viele probleme damit z.b.
https://forum.iobroker.net/topic/5054/rpi-2-0-gpios-können-nicht-angesteuert-werden/22
https://forum.iobroker.net/topic/9691/rpi2-0-einige-gpios-sind-mit-raspberry-3-nicht-schaltbar?page=1sorry - aber ich glaube, ich bin da keine hilfe mehr - viel glück
-
@liv-in-sky sagte in GPIO's Steuern 16chRelais12V über RasPi o. Rock64:
@DiveDancer gibt den das log etwas her ?
wenn du den rpi mal auf debug bei instanzen schaltest - kommt da irgendetwas
Nein, ich glaube nicht,
während im Hintergrund ein Lauflicht Script läuft das die Relais der Reihe nach schaltet scheint mir der LOG Eintrag nichts gravierendes zu zeigen.
-
@liv-in-sky sagte in GPIO's Steuern 16chRelais12V über RasPi o. Rock64:
hast du mal im forum gesucht: die haben "alle" viele probleme damit z.b.
https://forum.iobroker.net/topic/5054/rpi-2-0-gpios-können-nicht-angesteuert-werden/22
https://forum.iobroker.net/topic/9691/rpi2-0-einige-gpios-sind-mit-raspberry-3-nicht-schaltbar?page=1sorry - aber ich glaube, ich bin da keine hilfe mehr - viel glück
Ja, recherchiert habe ich.
Deswegen habe ich diesen Thread eröffnet um irgendeinen nutzbaren Weg zu finden.Du hast mir aber schon sehr geholfen.
also Danke schon mal. -
Der Adapter legt kein logisches Verhalten an den Tag.
Ich dachte schon ich könnte jubeln.
Nachdem ich nun alle (16) genutzten gpio's im Adapter von OUT auf IN gestellt hatte,
wurden mit dem Speichern alle Relais in den Ruhezustand versetzt.Mei erstes Script:
Zog nun der Rehe nach ein Relais nach dem anderen an.
Etwas komisch fand ich zwar das dies im ca. Sekunden Takt geschah, obwohl ich doch gar keine Verzögerung eingebaut hatte,.
aber shit happens.Mein zweites Script jedoch was mit dem ersten Identisch ist, bis auf den Zustand der nicht mehr auf auf OUT sondern nun auf IN steuern sollte brachte nicht den gewünschten Erfolg:
Das erste der angezogenen Relais bekommt den Befehl des Lösens und löst. Aber augenblicklich wird das Relais wieder angezogen.
Das ganze wiederholt sich 16 mal. Bis alle Realais wieder angezogen sind statt sich im Ruhezustand zu befinden. -
Drück mal RESET
Also, der Adapter ist schon logisch. Wenn du auf "IN" stellst, will der GPIO Daten haben, sprich von einem angeschlossenem Sensor den Messwert etc. Bei "OUT" schickt der Daten auf dem GPIO heraus, um bspw. ein Relais zu schalten.
Deswegen gibt es auch den Datenpunkt "isInput" (false=Daten schicken, true=Daten empfangen). Unter dem "state" landen dann die empfangenen Messwerte des Sensors.
Also RESET und alles auf Anfang...@DiveDancer sagte in GPIO's Steuern 16chRelais12V über RasPi o. Rock64:
Hier schaltet mein Relais dauerhaft im ein Sekunden Takt.Schalten kann ich also schon mal.
Nur leider kann ich keinen Status abfragen.
Das hatte ja schon mal funktioniert, also machen wir da weiter.
@DiveDancer sagte in GPIO's Steuern 16chRelais12V über RasPi o. Rock64:
Leider sind meine Linux Kenntnisse Mies.
Kein Problem, muss ich halt nur mehr erklären ^^
Zuerst würde mich mal einls -al /sys/class/gpio
interessieren, ob es da xy-GPIO-Unterverzeichnisse gibt.