Seite 1 von 2

Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 09 Aug 2022, 23:56
von baschdl78
Liebes Forum,

hat zufällig schon jemand damit experimentiert auf die Ein- und Ausgänge des FT-Controllers aus Node-RED heraus direkt zuzugreifen? Wäre doch fein wenn man z.B. steigende oder fallende Flanken der Eingänge "direkt" auswerten könnte und den Status nicht laufend über die API abfragen müsste.

Für den Raspi gibt es ein, über das Node-RED-interne Paketverwaltungstool, instalierbares GPIO-Modul. Gibt es so was schon oder ginge das für den TXT 4.0 auch? Weiß jemand wie das geht?

Ich bin gespannt auf euer "Schwarmwissen" dazu...

Grüße aus dem Urlaub an der Ostsee,

Sebastian

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 10 Aug 2022, 16:31
von Kali-Mero
Nääää - Du hast das Controllergeraffel mit an die Ostsee genommen?! Hast Du Angst, dass Dir langweilig wird? :-D

Grüßle ausm Zug nach FFM - ohne ft ;-)

Grüßle
Der Kali

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 10 Aug 2022, 20:42
von baschdl78
Ne... Ich war mir sicher hier die Ruhe zu haben darüber nachzudenken.... dabei hab ich das Zeug nicht.
Aber ich war kurz davor und hatte schon Taster und LEDs gerichtet :lol:

Grüße von der Ostsee!

Sebastian.

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 22 Aug 2022, 22:47
von rugee-f
Fertige Nodes für die IOs des TXT 4 gibt es bislang nicht.
Ich habe mir ein Python Programm für den TXT4 geschrieben, wo ich die IOs des TXT auf MQTT abbilde.
In Node Red benutze ich dann MQTT Nodes um die an den TXT angeschlossene Hardware anzusteuern bzw. auszulesen.
Das funktioniert ganz gut wenn du keine wahnsinnig schnellen Reaktionszeiten brauchst...

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 23 Aug 2022, 01:07
von baschdl78
Okay, das es keine fertigen Nodes gibt war mir klar, sorry falls der Eindruck erschien ich hätte die als Lösung "erwartet".

Den "Umweg" über Python und MQTT habe ich schon entdeckt, schick ist er aber nicht wirklich. Bei Raspi und Co funktioniert das wohl über die libgpiod. Die Infos und der Zugriff darauf erfordern aber Root Zugriff auf den TXT4.0.
Vielleicht hat ja da jemand Tips wie man weiter kommt?

Ich nutze seit langem privat ausschließlich ein Linux als OS auf allen Geräten und habe hier ein RasPi basiertes Mini-Smart-Home-System am laufen das auf Home-Assistant, Node-Red und einigen Wemos-Boards basiert, deshalb wollte ich einfach mal mit dem Node-Red auf dem TXT4.0 "spielen". Wenn am Schluss nur der Weg über MQTT bleibt dann ist es halt so.... der "Spieltrieb" lässt mich aber noch forschen, irgendwie müssen die I/Os ja auch an Python übergeben werden ;-)
Ich freu mich über eure Tips und Ideen, DANKE!

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 23 Aug 2022, 10:44
von vleeuwen
You can also use a web socket in the localhost on the TXT4.0.
Node Red can deal with web sockets too.
The integration of a web socket into RoboPro coding Blockly, see: http://tescaweb.nl/Carel/?p=713

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 23 Aug 2022, 13:52
von MasterOfGizmo
In dem von ft in meiner Frage nach den TXT-4.0-Quellen angegebenen Repository gibt es ein paar einfache C- und Python-Beispiele, die auf die IOs des TXT-4.0 direkt zugreifen. Mit denen als Vorlage müsste man sich doch auch was direkteres für Node-Red basteln können.

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 24 Aug 2022, 13:34
von rugee-f
Hallo Sebastian,
du schreibst du steuerst den TXT "via API ..." machst Du das aus Node-Red mit HTTP-Request Nodes?

Das geht nämlich auch. Unter http://[IP des TXT4]/api/v1/ui/ findest du die Swagger Seite zur REST Api des TXT4.
Die CURL Kommandos dort, lassen sich relativ leicht in Node-Red umsetzen.

Das bauen eines Node-Red nodes aus den Python beispielen habe ich damals nicht geschafft.
Das liegt aber eher an meinen begrenzten Fähigkeiten beim "Knotenbau" in Node-Red.

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 24 Aug 2022, 22:20
von baschdl78
rugee-f hat geschrieben:
24 Aug 2022, 13:34
.... Das geht nämlich auch. Unter http://[IP des TXT4]/api/v1/ui/ findest du die Swagger Seite zur REST Api des TXT4.
Die CURL Kommandos dort, lassen sich relativ leicht in Node-Red umsetzen.
...
Das dachte ich auch... aber ich scheitere schon daran die Abfrage direkt auf der Swagger Seite über die Try Out Funktion anzustoßen. Ich bekomme immer nur "TypeError: Failed to fetch" Es ist schon richtig zur Authorisation den API-Schlüssel aus dem Einstellungsmenü des TXT4.0 zu nehmen, oder?

Aus Node-Red heraus bekomme ich immer nur 401 Unauthorized (No Token).

Ist da irgendwo noch mehr Dokumentation zu finden?

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 24 Aug 2022, 22:32
von baschdl78
MasterOfGizmo hat geschrieben:
23 Aug 2022, 13:52
In dem von ft in meiner Frage nach den TXT-4.0-Quellen angegebenen Repository gibt es ein paar einfache C- und Python-Beispiele, die auf die IOs des TXT-4.0 direkt zugreifen. Mit denen als Vorlage müsste man sich doch auch was direkteres für Node-Red basteln können.
Meinst du dieses https://git.fischertechnik-cloud.com/txt40 Repository?
Da finde ich keine Beispiele und hier https://github.com/fischertechnik/txt40_c_cpp ist leider auch nichts zu holen. :-(

Ansonsten wäre das genau der Ansatz den ich gesucht habe :-)

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 24 Aug 2022, 23:48
von rugee-f
Für den Zugriff über die Swagger Seite musst du über USB mit dem TXT verbunden sein, sonst stimmt die IP Adresse in der URL nicht.
Dann muß die Autorisierung mit dem Api Key aus den Settings vorgenommen weden. Wenn das geschlossene Vorhängeschloß angezeigt wird, war die Autorisierung erfolgreich. Generell funktionieren die CURL Kommandos aber auch über die WLAN Adresse des TXT.

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 24 Aug 2022, 23:53
von baschdl78
Die Swagger Seite kann ich, via WLAN über die vom Router zugewiesene IP Adresse aufrufen. Das Schloss ist nach eingabe des API-Keys geschlossen. Auf der Swagger Seite habe ich (ganz oben auf der Seite) den "htp://localhost..." Eintrag gewählt.... und dann besagtes Ergebnis bekommen :-(

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 25 Aug 2022, 00:05
von rugee-f
Ich hab ein paar Flows gebastelt um die API Schnittstelle zu testen - ich häng dir die Flows hier im Text dran.
Du musst nur den API-Key anpassen und die WLAN Adresse deines TXT in der URL eintragen.

(Start der Flows)

[
{
"id": "ce8d8a558e1ab29c",
"type": "http request",
"z": "32711f3c08d8be6f",
"name": "",
"method": "GET",
"ret": "txt",
"paytoqs": "ignore",
"url": "http://192.168.0.16/api/v1/controller/0/inputs/1",
"tls": "",
"persist": false,
"proxy": "",
"authType": "",
"senderr": false,
"x": 450,
"y": 340,
"wires": [
[
"39c71c0a61a7286f"
]
]
},
{
"id": "a8ccfcde86a483c6",
"type": "function",
"z": "32711f3c08d8be6f",
"name": "",
"func": "var apikey = \"oShVKk\";\n\nmsg.headers = { \n \"X-API-KEY\": apikey,\n \"Content-Type\":\"application/json\"\n };\n\nmsg.payload = {};\nreturn msg;\n",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 280,
"y": 340,
"wires": [
[
"ce8d8a558e1ab29c"
]
]
},
{
"id": "39c71c0a61a7286f",
"type": "debug",
"z": "32711f3c08d8be6f",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 610,
"y": 340,
"wires": []
},
{
"id": "b70f6defd4774b3f",
"type": "inject",
"z": "32711f3c08d8be6f",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 120,
"y": 340,
"wires": [
[
"a8ccfcde86a483c6"
]
]
},
{
"id": "de2a8d82513d5556",
"type": "http request",
"z": "32711f3c08d8be6f",
"name": "",
"method": "POST",
"ret": "txt",
"paytoqs": "ignore",
"url": "http://192.168.0.16/api/v1/controller/0/inputs/2",
"tls": "",
"persist": false,
"proxy": "",
"authType": "",
"senderr": false,
"x": 450,
"y": 220,
"wires": [
[
"626824f25103c824"
]
]
},
{
"id": "549d90d06f661342",
"type": "function",
"z": "32711f3c08d8be6f",
"name": "",
"func": "var apikey = \"oShVKk\";\n\nmsg.headers = { \n \"X-API-KEY\": apikey,\n \"Content-Type\":\"application/json\"\n };\n\nmsg.payload = { \"device\": \"PHOTO_RESISTOR\",\n \"enabled\": true,\n \"name\": \"string\",\n \"value\": 0\n };\nreturn msg;\n",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 280,
"y": 220,
"wires": [
[
"de2a8d82513d5556"
]
]
},
{
"id": "626824f25103c824",
"type": "debug",
"z": "32711f3c08d8be6f",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 610,
"y": 220,
"wires": []
},
{
"id": "69ded15a837bac55",
"type": "inject",
"z": "32711f3c08d8be6f",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 120,
"y": 220,
"wires": [
[
"549d90d06f661342"
]
]
},
{
"id": "fe0ee6c071d15fdb",
"type": "inject",
"z": "32711f3c08d8be6f",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 120,
"y": 180,
"wires": [
[
"cbc4082cb4ee0e5a"
]
]
},
{
"id": "cbc4082cb4ee0e5a",
"type": "function",
"z": "32711f3c08d8be6f",
"name": "",
"func": "var apikey = \"oShVKk\";\n\nmsg.headers = { \n \"X-API-KEY\": apikey,\n \"Content-Type\":\"application/json\"\n };\n\nmsg.payload = { \"device\": \"MINI_SWITCH\",\n \"enabled\": true,\n \"name\": \"string\",\n \"value\": 0\n };\nreturn msg;\n",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 280,
"y": 180,
"wires": [
[
"65fa4095764f73cf"
]
]
},
{
"id": "65fa4095764f73cf",
"type": "http request",
"z": "32711f3c08d8be6f",
"name": "",
"method": "POST",
"ret": "txt",
"paytoqs": "ignore",
"url": "http://192.168.0.16/api/v1/controller/0/inputs/1",
"tls": "",
"persist": false,
"proxy": "",
"authType": "",
"senderr": false,
"x": 450,
"y": 180,
"wires": [
[
"a6fb586ac02c3957"
]
]
},
{
"id": "a6fb586ac02c3957",
"type": "debug",
"z": "32711f3c08d8be6f",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 610,
"y": 180,
"wires": []
},
{
"id": "9fb68a3470844e1e",
"type": "inject",
"z": "32711f3c08d8be6f",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 120,
"y": 380,
"wires": [
[
"9ea3efc939716748"
]
]
},
{
"id": "9ea3efc939716748",
"type": "function",
"z": "32711f3c08d8be6f",
"name": "",
"func": "var apikey = \"oShVKk\";\n\nmsg.headers = { \n \"X-API-KEY\": apikey,\n \"Content-Type\":\"application/json\"\n };\n\nmsg.payload = {};\nreturn msg;\n",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 280,
"y": 380,
"wires": [
[
"ad6baa95d571fafe"
]
]
},
{
"id": "ad6baa95d571fafe",
"type": "http request",
"z": "32711f3c08d8be6f",
"name": "",
"method": "GET",
"ret": "txt",
"paytoqs": "ignore",
"url": "http://192.168.0.16/api/v1/controller/0/inputs/2",
"tls": "",
"persist": false,
"proxy": "",
"authType": "",
"senderr": false,
"x": 450,
"y": 380,
"wires": [
[
"a686d3dbf2ec3f89"
]
]
},
{
"id": "a686d3dbf2ec3f89",
"type": "debug",
"z": "32711f3c08d8be6f",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 610,
"y": 380,
"wires": []
},
{
"id": "5afd9dafe03ea131",
"type": "inject",
"z": "32711f3c08d8be6f",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 120,
"y": 80,
"wires": [
[
"b6661bb071f9c5cf"
]
]
},
{
"id": "b6661bb071f9c5cf",
"type": "function",
"z": "32711f3c08d8be6f",
"name": "",
"func": "var apikey = \"oShVKk\";\n\nmsg.headers = { \"accept\":\"*/*\",\n \"X-API-KEY\": apikey\n //\"Content-Type\":\"application/json\"\n };\n\nmsg.payload = { //\"device\": \"MINI_SWITCH\",\n //\"enabled\": true,\n //\"name\": \"string\",\n //\"value\": 0\n };\nreturn msg;\n",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 280,
"y": 80,
"wires": [
[
"43190488443a1054"
]
]
},
{
"id": "43190488443a1054",
"type": "http request",
"z": "32711f3c08d8be6f",
"name": "",
"method": "POST",
"ret": "txt",
"paytoqs": "ignore",
"url": "http://192.168.0.16/api/v1/controller/0",
"tls": "",
"persist": false,
"proxy": "",
"authType": "",
"senderr": false,
"x": 450,
"y": 80,
"wires": [
[
"373f28e1237f4dfc"
]
]
},
{
"id": "373f28e1237f4dfc",
"type": "debug",
"z": "32711f3c08d8be6f",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 610,
"y": 80,
"wires": []
},
{
"id": "a5419c8a7f0ed424",
"type": "comment",
"z": "32711f3c08d8be6f",
"name": "init controller",
"info": "",
"x": 110,
"y": 40,
"wires": []
},
{
"id": "6ba2bcc2a8c065ab",
"type": "comment",
"z": "32711f3c08d8be6f",
"name": "init IO",
"info": "",
"x": 90,
"y": 140,
"wires": []
},
{
"id": "a8b299678eb5be11",
"type": "comment",
"z": "32711f3c08d8be6f",
"name": "read IO",
"info": "",
"x": 90,
"y": 300,
"wires": []
}
]

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 25 Aug 2022, 00:14
von rugee-f
Deine Nachricht hatte ich noch nicht gesehen - wir schreiben fast zeitgleich...
Ich hab mir aus Swagger nur die CURL Kommandos geholt und diese auf Node-Red umgesetzt.

Mein Node-Red läuft auf einem PC der im selben Netz wie der TXT4 steht - nicht auf dem TXT selbst.
Ich denke bei dir ist das ähnlich.

Der Client der bei dir auf swagger schaut ist "localhost" nicht der TXT4.
Deshalb funktioniert das CURL Kommando bei dir nicht.
Läuft Node-Red auf dem TXT kannst du in der URL des HTTP-Request nodes auch localhost verwenden - ansonsten die IP des TXT4.

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 25 Aug 2022, 00:30
von baschdl78
Mit deinen Flows und den Änderungen klappt es. Und über USB und der vordefinierten "USB-IP Adresse" auf des Swagger-Seite dann auch.
Bei localhost habe ich eigentlich "erwartet" der TXT4.0 wäre "automatisch" der localhost da ich ja auf dessen Webserver zugreife auf der die Swagger-Seite liegt, oder? Leider kann ich keine IP-Adresse dort eingeben, es gibt nur die drei "Profile" http://... https:// und eben die 192.168.7.2 für die USB Verbindung. Damit bleibt fürs Testen nur der Zugriff auf den TXT4.0 über USB :-(

Vielen Dank für die Unterstützung bis zu diesem Punkt, der nächste Schritt wäre es dann die Flanken als echten "Trigger" nutzen zu können, aber dafür ist die "Abfrage" der Zustände über die API zu träge.... mal schauen ob ich die von MasterOfGizmo erwähnten Beispiele noch finde oder er noch einen Tip hat.

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 25 Aug 2022, 06:38
von rugee-f
Da der Browser den Code ausführt müsste localhost immer da sein, wo der Browser läuft - huch dann stimmt mein Satz
...Läuft Node-Red auf dem TXT kannst du in der URL des HTTP-Request nodes auch localhost verwenden - ansonsten die IP des TXT4...
auch nicht!

Nimm den Netzwerknamen des TXT in die URL, dann klappt es immer, wenn du für die richtige Namensauflösung sogst.

In der API gibt es auch Befehle die Streams über alle Inputs bzw. Counter zurückliefern - evtl. sind die schneller hab ich noch nicht ausprobiert...

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 25 Aug 2022, 12:20
von vleeuwen
An older version of Node Red runs on the TXT4.0 (not the TXT).
It is not possible to install every Node Red add-on on the TXT4.0.
If you place the TXT and/or TXT 4.0 in a local network and also your laptop, it is very easy to work with Node Red on the laptop.

TXT4.0: However, the MQTT Blocklies in RoboPro encoding do not support local MQTT broker.
This TXT4.0 Python code generator is very limited in its capabilities.
With the TXT this is easier to implement.
============================================
Eine ältere Version von Node Red läuft auf dem TXT4.0 (nicht dem TXT).
Es ist nicht möglich, jedes Node Red-Add-On auf dem TXT4.0 zu installieren.
Wenn Sie den TXT und/oder TXT 4.0 in einem lokalen Netzwerk und auch Ihren Laptop platzieren, ist es sehr einfach, mit Node Red auf dem Laptop zu arbeiten.

TXT4.0: Die MQTT-Blocklies in RoboPro-Codierung unterstützen jedoch keinen lokalen MQTT-Broker.
Dieser TXT4.0-Python-Codegenerator ist in seinen Fähigkeiten sehr begrenzt.
Mit dem TXT ist dies einfacher umzusetzen.

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 25 Aug 2022, 13:47
von rugee-f
Hi,vleeuwen
sorry I mixed up my naming of the ft-controller.
All I wrote above was concerning the TXT4 (even when I wrote TXT).

You need not use ROBOPro Coding for writing Python Programs for the TXT4.
I use an Texteditor (Notepad++) and place the *.py file on the TXT4 via WINSCP.

Then I start the Python Prog with an EXEC Node in Node Red.
I think I had this already explained to you in an older Thread.

On the older TXT I was able to Install Node-Red in the factory default firmware.
So I could use my Python Program (MQTT IO/I2C Wrapper) from the TXT4 with slightly adjustments on the TXT. Only the usb camera support via CV2 did not run on the TXT... But performance was very poor.

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 25 Aug 2022, 19:35
von vleeuwen
@ rugee-f
I am using MS-Visual Studio code (free) for remote Python development on the TXT4.0.
So I can develop, test en debug remotely on the TXT4.0. and includes also a version management system.
MS-VS code offers a nice support for the libraries and Python syntax.
This is must faster developing then what you are doing.
\Eclipse is also offering a kind of remote developing for Python and C++ but i did not tested this already.

However the connection between MS-VS Code and the TXT4.0 (firmware 3.1.0) is not so stable.
Python is not the best language for embedded programming but it works; the code is slow.

Re: Node-RED | TXT 4.0 | I/O-Direktzugriff

Verfasst: 25 Aug 2022, 21:24
von MasterOfGizmo
baschdl78 hat geschrieben:
23 Aug 2022, 01:07
Den "Umweg" über Python und MQTT habe ich schon entdeckt, schick ist er aber nicht wirklich
Ich verstehe nicht ganz, warum Du überhaupt den Umweg über MQTT gehst. Wie man aus Python auf dem TXT4 direkt auf die IOs zugreift zeigt einem doch z.B. RoboPro-Coding. Du klickst Dir ein einfaches Beispiel im Blockly-Editor von RoboPro-Coding zusammen und lässt Dir den erzeugten Python-Code anzeigen. Dort siehst Du dann doch, wie Python-Code aussehen muss, der die IOs direkt bedient.