NEWS
UNSOLVED Hilfe USB Daten per Blockly senden
-
Hey Ho,
Vielleicht kann mir jemand weiter helfen.
Also folgendes habe ich vor:
Ich habe einen Controller der meine Strömungspumpen im Aquarium steuert.
Dieser ist per usb Kabel an einen windows Rechner angeschlossen und mit dem kleinen Programm was zum Controller gehört kann man verschiedene strömungs Programme an den Controller senden.
Das was von der Software an den Controller gesendet wird sieht so aus:
2;30;30;30;30;100;100;100;100;60;1;0;1;4;0;1;1;1;53;0;0;0;0Mehr ist es nicht.
Nun habe ich einen usb Anschluss an meiner eigenen Aquarium Steuerung eingebaut und das Original Kabel hat auf beiden Seiten einen USB A Stecker.
Den habe ich in meiner Aquarium Steuerung an meinem Raspberry an Gpio 7 angelötet - als Input mit dem usb Kabel weiß Data minus
Dann an Gpio 8 als Output grünes Kabel Data plus
Beide im rpi2.0 Adapter dann als output und Input deklariert.
Nun würde ich gerne diese Daten Zeile per usb upstream und Blockly auf das Gerät übertragen. Und das ganze dann per Cron Job steuern also wann welches Programm gesendet wird.
Es gibt die Steuerungen
Intervall
Sequenzial
Impulse und Wellengang
Dazu hatte ich datenpunkte erstellt und die Steuerungs Zeilen da als value eingefügt. Nun weiß ich absolut nicht wie ich diesen Windows sende Befehl von dem datenpunkt an den gpio übertragen kann. Der downstream ist nicht so wichtig darüber könnte man das aktuelle Programm was läuft runter laden und in dem Original Steuerungs Programm einsehen.
Meine Datnepunkte:
Das Blockly Script was ich geschrieben hatte, funktioniert so leider garnicht.
<xml xmlns="http://www.w3.org/1999/xhtml"> <variables> <variable type="" id="j},jeced{ZOOuK{-Kj[H">send</variable> <variable type="undefined" id="Intervall">Intervall</variable> <variable type="" id="{H0$F#{I7XI68*Jv!}RM">Wellengang</variable> <variable type="undefined" id="Wellengang">Wellengang</variable> </variables> <block type="variables_set" id="~u6%NbL7yZul$=78:5)q" x="-112" y="-287"> <field name="VAR" id="j},jeced{ZOOuK{-Kj[H" variabletype="">send</field> <value name="VALUE"> <block type="get_value" id="7x7sd2X,?qoMVITD^/dU"> <field name="ATTR">val</field> <field name="OID">rpi2.0.gpio.8.state</field> </block> </value> <next> <block type="variables_set" id="-doKoE!=5x`T2.S]R4kl"> <field name="VAR" id="Intervall" variabletype="undefined">Intervall</field> <value name="VALUE"> <block type="get_value" id=",Uih~x3K+%NlJ*9ZIK6*"> <field name="ATTR">val</field> <field name="OID">Aqua_Control.0.Tunze_Steuerung.Intervall</field> </block> </value> <next> <block type="variables_set" id="x*],L~^}#LN~Or=J}(Yt"> <field name="VAR" id="{H0$F#{I7XI68*Jv!}RM" variabletype="">Wellengang</field> <value name="VALUE"> <block type="get_value" id="25GXy6p|31GIw+2d!2p,"> <field name="ATTR">val</field> <field name="OID">Aqua_Control.0.Tunze_Steuerung.Wellengang</field> </block> </value> <next> <block type="schedule_create" id="xc4Y5+Bp?J]6PIDxH6vv"> <field name="NAME">Wellengang</field> <value name="SCHEDULE"> <shadow type="field_cron" id="9[PPm{p9~%zHxoe#q!D."> <field name="CRON">* * * * *</field> </shadow> <block type="field_cron" id="(F8;edIfk_P/$fjFVI2o"> <field name="CRON">48 19 * * *</field> </block> </value> <statement name="STATEMENT"> <block type="variables_set" id="3U@gUQlvoZ*Ea#-R!we-"> <field name="VAR" id="j},jeced{ZOOuK{-Kj[H" variabletype="">send</field> <value name="VALUE"> <block type="variables_get" id="H.`kGU;qGCXuM}SCq56N"> <field name="VAR" id="{H0$F#{I7XI68*Jv!}RM" variabletype="">Wellengang</field> </block> </value> <next> <block type="exec" id=",,i{+e6C_TAWNo9+;0,)"> <mutation with_statement="false"></mutation> <field name="WITH_STATEMENT">FALSE</field> <field name="LOG">log</field> <value name="COMMAND"> <shadow type="text" id="lwocm?I@~_VmZ%.}VlMP"> <field name="TEXT">send</field> </shadow> <block type="variables_get" id="REw3ki7IM)f^LBadPOWq"> <field name="VAR" id="j},jeced{ZOOuK{-Kj[H" variabletype="">send</field> </block> </value> </block> </next> </block> </statement> <next> <block type="schedule_create" id="Wzh.3oS`a86_+CsK6J@U"> <field name="NAME">Intervall</field> <value name="SCHEDULE"> <shadow type="field_cron" id="9[PPm{p9~%zHxoe#q!D."> <field name="CRON">* * * * *</field> </shadow> <block type="field_cron" id="N!pXd:vIQGN|AX%P2|,i"> <field name="CRON">0 20 * * *</field> </block> </value> <statement name="STATEMENT"> <block type="variables_set" id="fO8AIE{_-dO5V!LT$5UP"> <field name="VAR" id="j},jeced{ZOOuK{-Kj[H" variabletype="">send</field> <value name="VALUE"> <block type="variables_get" id="97Ui_`{=*qS$|lRL%?Qq"> <field name="VAR" id="Intervall" variabletype="undefined">Intervall</field> </block> </value> <next> <block type="exec" id="!dCHJpvc[#X}Hb^v%Zra"> <mutation with_statement="false"></mutation> <field name="WITH_STATEMENT">FALSE</field> <field name="LOG">log</field> <value name="COMMAND"> <shadow type="text" id="lwocm?I@~_VmZ%.}VlMP"> <field name="TEXT">send</field> </shadow> <block type="variables_get" id="e#(*zN]+oksKOwWf/REm"> <field name="VAR" id="j},jeced{ZOOuK{-Kj[H" variabletype="">send</field> </block> </value> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </xml>
Normal wäre das schon klasse nur wollte ich zb im VIS des späteren wenn dann die Steuerung läuft das ich einen datenpunkt verknüpfe und je nach dem was da drin steht kann ich auch selbst sagen was laufen soll also abgesehen von der cron Steuerung Bzw per Button dann den Inhalt des datenpunkten per Button ändern und die Blockly Steuerung soll dann darauf reagieren und die jeweilige Steuerung senden.
Eine Hilfe wäre mir Mega wichtig, da es die letzte Instanz ist die mir noch fehlt um es meinen Fischen und Korallen so Natur getreu wie möglich zu machen.
Ich möchte auch das kleine Netbook nicht mehr dauerhaft am laufen haben um die Steuerung zeitgesteuert zu ändern. -
@Aphofis sagte:
Den habe ich in meiner Aquarium Steuerung an meinem Raspberry an Gpio 7 angelötet - als Input mit dem usb Kabel weiß Data minus
Was hat USB mit GPIO zu tun ?
-
@paul53
Ich hatte versucht ein usb Kabel Data + Data - an gpio pins am pi an zu löten um die Daten darüber zu senden geht aber auch über einen der normalen usb Anschlüsse am pi.
Wenn ich die USB ports Auslese kommt bei dem angeschlossenen Controller folgendes raus:
Bus 001 Device 006: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
Vielleicht kann man die Daten Bzw die TXT Datei per JavaScript darüber senden.
Die Dokumente liegen in /opt/iobroker/iobroker-data/tunze/
Dort gibt es vier Text Dateien in denen die Steuer Zeile drin ist.
intervall.txt
impulse.txt
sequenzial.txt
Und wellengang.txt
Muss ja irgendwie möglich sein das so zu programmieren wenn der jeweilige datenpunkt auf true gesetzt wird das dann die nötige Datei per usb an den Controller gesendet wird.
Hatte auch eine Mail an Tunze an meinen Kontakt bei denen gesendet mit etwas Glück kann der mir sagen wie die die Daten an den Controller senden. Insofern die solche Informationen überhaupt rausgeben dürfen.
Man merkt ich bin ein wenig hilflos da ich JavaScript oder Windows Befehle überhaupt nicht programmieren kann und einfach versuche dieses Projekt zu realisieren. -
@Aphofis sagte:
Dort gibt es vier Text Dateien in denen die Steuer Zeile drin ist.
intervall.txt
impulse.txt
sequenzial.txt
Und wellengang.txtDu bist informiert, wie die Daten dieser 4 Dateien so auszuwerten sind, dass sie in der richtigen Reihenfolge an die serielle Schnittstelle (USB-UART) zu senden sind ?
Die serielle Schnittstelle zu bedienen, ist alles andere als trivial. -
Moin.
Die seriellen Schnittstellen bediene ich alle zuverlässig per Node Red. Da ist das dann trivial. -
@peterfido sagte:
Node Red. Da ist das dann trivial.
Mit Node Red kenne ich mich nicht aus. Man kann die Sendedaten sicherlich über einen Datenpunkt an Node Red übergeben ?
Ich vermute, dass Du diese Einstellmöglichkeiten in Vis realisieren möchtest ?
Die Daten sollen dann per Skript so aufbereitet werden, dass sie per Node Red an den Tunze Controller gesendet werden ? Damit ist Blockly wohl überfordert und man muss natives Javascript verwenden.
-
@paul53
Ich möchte den gesamten Inhalt senden also eine komplette Steuerung so wie wenn man die Daten exportiert als TXT Datei so soll dann auch das komplette programm an den Controller gesendet werden.
Eine komplette Steuerung wäre dann mit allen Einstellungen:
2;30;30;30;30;100;100;100;100;60;1;0;1;4;0;1;1;1;53;0;0;0;0
Da ist alles enthalten. Klar wenn’s per Blockly nicht geht langt es ja wenn man ein JavaScript schreibt und es per datenpunkt auslöst -
@Aphofis sagte:
Ich möchte den gesamten Inhalt senden
Das habe ich auch so verstanden.
@Aphofis sagte in Hilfe USB Daten per Blockly senden:
Daten exportiert als TXT Datei so soll dann auch das komplette programm an den Controller gesendet werden.
Du möchtest die Textdateien am PC erstellen, an den RPi übertragen und aus den Dateien einen Sendestring für Node Red zusammenstellen ? Dann benötigt man den Aufbau der Textdateien passend zum Sendestring.
-
Die TXT Dateien sind schon fertig!
Ob der Inhalt so direkt an den Controller gesendet wird weiß ich nicht genau!
Ich wollte das ganze per Blockly machen oder halt per JavaScript und dann das JavaScript zeitgesteuert über Blockly starten dh die TXT Datei oder nur der Inhalt soll dann an den Controller gesendet werden.
Der Inhalt der Text Datei denke ich wird in dieser Reihenfolge gesendet.
2;30;30;30;30;100;100;100;100;60;1;0;1;4;0;1;1;1;53;0;0;0;0Das ist ein Programm!
-
@Aphofis sagte:
Der Inhalt der Text Datei denke ich wird in dieser Reihenfolge gesendet.
Welcher Datei (es gibt 4) ? Ist der Inhalt einer Datei identisch mit dem gesendeten String ?
-
@paul53
Das sind die einzelnen Daten zu den ProgrammenIntervall Modus
1;30;30;30;30;100;100;100;100;320;15;0;1;4;0;1;5;0;65;0;0;1;0Pulse Only
0;30;100;30;100;100;30;100;30;250;15;0;1;4;0;1;5;0;65;0;0;1;0Sequential Modus
2;30;30;30;30;100;100;100;100;199;15;1;0;1;1;1;2;0;54;0;0;0;0Sequential Wellenmodus
2;30;30;30;30;100;100;100;100;60;1;0;1;4;0;1;1;1;53;0;0;0;0Wie der Sende String aussieht weiß ich auch nicht Ich weiß nur das dass die Daten sind die die Tunze Steuerung am PC (Laptop) abspeichert wenn man sie exportiert oder aus der TXT Datei importiert
-
@Aphofis sagte:
Wie der Sende String aussieht weiß ich auch nicht
Auf welcher Grundlage soll dann ein Skript erstellt werden ?
-
@paul53
Ich warte noch auf eine Antwort von Tunze ob die mir sagen können wie das ganze aussehen muss.
Ich vermute das per usb nur diese Semikolon getrennten Werte gesendet werden und intern im Controller auf einem Chip gespeichert werden. Bis man die Steuerung durch hochladen einer anderen Steuerung ändert das Programm vom Controller stellt ja auch nur ein was man in den Text Dateien hat wenn man davon eine lädt weiß das Programm ja anhand der anfangsnummer um welche Steuerung es sich handelt -
@peterfido sagte:
Die seriellen Schnittstellen bediene ich alle zuverlässig per Node Red. Da ist das dann trivial.
Dann teste es doch erst mal mit Node Red. Den Inhalt einer Datei hast Du bereits in einem Datenpunkt.
Wenn das funktioniert, können wir mit Javascript weitermachen, um die unterschiedlichen Dateien zu verarbeiten. -
@paul53
Ich wüsste nicht mal wie ich das testen soll!
Blockly geht ja noch ein wenig. Mit Node Red kenne ich mich überhaupt nicht aus -
@paul53
ich habe ja die Steuerungs Daten in einem Datenpunkt doch wie weise ich denn Blockly an das was im Datenpunkt steht über den oben angegebenen USB Port vom Pi zu senden!? und die Datenpunkte sind als Zeichenkette formatiertm geht das so oder muss es eine andere Option sein ? -
Moin,
Ja, als Text bzw. Zeichenkette. Ist es immer dieselbe, kannst du die auch in Node Red fest eintragen und das Senden dann boolisch oder numerisch auslösen.
Bin leider nicht am PC, sondern unterwegs. Sonst würde ich ein Beispiel posten. -
@peterfido
Irgendwie ist es sicherlich möglich diese Daten per USB zu senden.
Ein techniker von Tunze also der Firma von der der Controller stammt ist an meinem Problem dran.
Ich hoffe ich bekomme bald eine antwort. Wie die Daten gesendet werden müssen. -
Hallo,
das, was da als Textdatei exportiert wird, ist wohl nicht dass, was die Software an den Controller sendet. Diese bietet ja noch mehr Möglichkeiten, wie das Aulsesen der aktuellen Config.Da auf den Hersteller warten oder per seriellem Sniffer mitloggen, was da so hin- und hergeschickt wird. Interessant ist darüber hinaus noch die Baudrate sowie eine evtl. Verschlüsselung / Prüfsumme.?
-
@peterfido
Ja, ich hoffe der Techniker darf die Informationen so raus geben.
Nur scheint der viel um die Ohren zu haben.
Wie wir alle!
Da er sich noch nicht gemedet hat.
Obgleich Tunze immer sehr schnell ist mit dem antworten per Mail.
Ein Kumpel von mir ist Programmierer, ich hoffe ich kann ihn überreden das er sich den Controller mal anschaut.
Er hatte mir schon mal eine Batch Datei bzw ein kleines Batch programm geschrieben was die Daten sendet aber nur über die Original Software drüber gelegt. ohne hatte er es noch nicht versucht.