RevPiModIO - Python3 Direktzugriff auf IOs

Hier kannst du dein Revolution Pi Projekt der Community vorstellen
User avatar
RevPiModIO
KUNBUS
Posts: 335
Joined: 20 Jan 2017, 08:44
Contact:

Re: RevPiModIO - Python3 Direktzugriff auf IOs

Post by RevPiModIO »

Hi Ingo!

Das Modul ist an sich kein eigenständiges Programm, sondern eine Bibliothek. Sie stellt dir Funktionen zur Verfügung um den RevolutionPi mit python3 "bequem" zu programmieren.

Wenn du logiCAD zum programmieren verwendest, brauchst du das Modul nicht!

Python ist eine Alternative zu logiCAD. Du kannst auf dem RevPi ein Python-Programm schreiben um deinen Pool zu steuern, müsstest dich dann aber, neben der eigentlichen Logik der Poolsteuerung, auch noch damit beschäftigen die Daten aus dem Prozessabbild zu lesen und zu schreiben. Mal angenommen du hast ein Thermometer, welches bei 23 °C ein 24V Signal auf einen Eingang gibt, dann ist die Temperatur okay. Wenn das Signal nicht anliegt willst du die Heizung einschalten.

Also konfigurierst du in piCtory einen Eingang mit dem Namen "tempok" und einen Ausgang "heizung_an".

Dann müsste man das mit Python ganz grob und unschön so ungefähr machen:

Code: Select all

import time
fh = open("/dev/piControl0", "r+b", 0)
while True:
    fh.seek(2)
    mybyte = fh.read(1)
    int_byte = int.from_bytes(mybyte, byteorder="little")
    tempok = bool(int_byte & 1 << 3)

    if not tempok:
        # Jetzt wieder springen, bytes einlesen, ändern... umwandeln... schreiben... - Volker hat dazu mal ein Beispiel gemacht...
        ...
        ...

    time.sleep(1)
viewtopic.php?f=10&t=32

Man muss also wissen, wo in den 4096 Bytes des Prozessabbilds jetzt das Bit ist vom Eingang "tempok" ist und wo das Bit für den Ausgang "heizung_an"... Obwohl du die Ein- und Ausgänge in piCtory so benannt hast... Natürlich gibt es dafür auch Funktionen, die dir das piControl zur Verfügung stellt um die Adressen zu finden... aber ja...

Wenn du nun das Modul hier verwendest, sieht das Programm, was du in Python schreibst so aus:

Code: Select all

import revpimodio
import time
rpi = revpimodio.RevPiModIO(auto_refresh=True)
while True:
    rpi.devices["DIO1"]["heizung_an"].value = not rpi.devices["DIO1"]["tempok"].value
    time.sleep(1)
Der Ausgang "heizung_an" ist dann True, wenn der Eingang "tempok" NICHT Ture ist, also deine Temperatur unter 23 °C fällt... Hier kannst du direkt die piCtory-Namen verwenden!

Um das ganze lesen, schreiben und finden der Bits und Bytes kümmert sich RevPiModIO im Hintergrund.

Und wenn du weitere Fragen hast, immer raus damit! Dafür ist unser Forum doch da ;)

Gruß, Sven
python3-RevPiModIO - https://revpimodio.org/ || Der RevPi ist das Beste, was passieren konnte!
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Re: RevPiModIO - Python3 Direktzugriff auf IOs

Post by Ingo »

Hallo Miprotek,

ah nu hat es etwas klick gemacht, sowas ähnliches haben wir auch gemacht um von einem onewire controller die daten zu verarbeiten. das ganze geht mit phyton und wird dann an logicad weitergereicht. Funktioniert auch.
Ok um das ganze Poolprogram umzuschreiben in phyton habe ich wo eher nicht die erfahrung daher hatte ich auch logicad genommen, war einfacher für mich.
Aber danke für die Aufklärung vieleicht kann ich das ja auch noch für andere Projekte verwenden. Mal schauen was da noch so kommt.
Bin halt nur ein kleiner Privatmann und beschäftige mich nicht so oft mit dieser Materie. Bin mehr auf Verdrahtung der Anlagen und Schränke ausgelegt.

Also in diesem Sinne
Gruß
Ingo
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Re: RevPiModIO - Python3 Direktzugriff auf IOs

Post by Ingo »

Hallo Miprotek

Ich habe da noch eine Frage.
Wie habt Ihr das gelöst mit den Virtuellen Geräten? Ich habe in meiner Configuration 1 Virtuelles Gerät enthalten wo ich die OneWire Sensoren als Eingang drüber laufen lasse. Funktioniert soweit ganz gut mit dem was wir gebastelt haben.
Aber um Ehrlich zu sein ist euer Tool oder Biblo um einiges besser. Da merkt man wer sich mit Phyton Programmierung auskennt*gg

//Virtuelle Eingänge
BeckenTemp_ist AT %IW1.228 : WORD;
HeizungTemp AT %IW1.230 : WORD;
AussenTemp_ist AT %IW1.232 : WORD;
Fuelstand_Pool AT %IW1.234 : WORD;
Solar_Temp AT %IW1.236 : WORD;
Druck_Becken AT %IW1.238 : WORD;
IButton_Master AT %IW1.240 : WORD;
IButton_Slave AT %IW1.242 : WORD;
........
........
usw.

Da haben wir noch ein paar kleine Probleme.
Auch mussten wir erst noch die Version 3 aufspielen da wir nur mit 2.7 gearbeitet haben. das Funktionierte auch bis auf ein paar kleinen Aenderungen bei den Umlauten da noch viele ö,ä und ü vorhanden waren. Aber das ging schnell zu ändern.
Vieleicht kannst du mir hierdrüber ja eine Lösung anzeigen?

gruß
Ingo
User avatar
RevPiModIO
KUNBUS
Posts: 335
Joined: 20 Jan 2017, 08:44
Contact:

Re: RevPiModIO - Python3 Direktzugriff auf IOs

Post by RevPiModIO »

Hi Ingo!

Wenn man bei Python einsteigt sollte man, meiner Meinung nach, auf jeden Fall mit python3 arbeiten - gar nicht erst mit 2 beginnen... Habe den Vorschlag mal im Forum gepostet, dass python3 standardmäßig enthalten sein sollte...

Die Virtuellen-Devices werden in der 0.8.7 Version leider noch gar nicht unterstützt :( Aber wir haben diese bereits einprogrammiert und testen die neuen Codezeilen momentan. Ich denke wir werden morgen die Version 0.8.8 veröffentlichen, in der die Virtuellen Devices, genau wie alle Anderen, ansprechbar sind.

ABER: Du bringt mich da auf eine neue Idee!

Über deine Integration von einem 1Wire USB Adapter habe ich im Forum schon gelesen und finde die Idee, die Daten von 1Wire in die Virtuellen Devices zu schieben, richtig genial!

Denn für solche "Treiber", die die Daten in die VDevs schieben, könnte man das RevPiModIO Modul wohl wirklich verwenden, wenn man es etwas erweitert :D Und die Daten dann in logiCAD oder einem anderen Python-Programm verwenden.

Im Treiber könnte man dann z.B. einen Output (aus Treibersicht) registrieren, der in die Inputs (aus piCtory bzw. logiCAD sicht) etwas reinschreibt:

Code: Select all

rpi.devices["virtuellesdevice"].reg_output("HeizungTemp", "pictoryname_input", "f")
# "f" steht für eine 4Byte große Floatzahl.
(über "pictoryname_input" kann logiCAD den Wert einlesen, wir schreiben aus Programmsicht aber einen Output, darum "reg_output" und "pictoryname_input")

Und wenn man über 1Wire einen Dezimalwert bekommt, könnte man den einfach immer mit:

Code: Select all

rpi.devices["virtuellesdevice"]["HeizungTemp"].value = one_wire_wert
schreiben...

Gruß, Sven
python3-RevPiModIO - https://revpimodio.org/ || Der RevPi ist das Beste, was passieren konnte!
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Re: RevPiModIO - Python3 Direktzugriff auf IOs

Post by Ingo »

Hallo Sven,

Wir haben am Wochenende Üblegt ob es nicht möglich ist einen Python HTML Server zu erstellen der die Daten aus dem RevPi bereitstellt und diese dann mit nodejs in einer Html seite als visu zu verwenden.
Habt Ihr in dieser Richtung schon mal etwas gemacht? Eure Python sache wäre dafür genau das Richtige.
Weil wenn es geht dann sollte es auch möglich sein eine Seite in HTML zu schreiben und dann alles über die weboberfläche zu bedinen so wie man es brauch Visuell eben*gg
Ok da ich da nicht so konform bin ist es wo etwas schwer zu verstehen was ich meine.
Nur so Spare ich mir den ganzen anderen Kram von drittanbietern und habe alles aus einer Hand.

gruß
User avatar
RevPiModIO
KUNBUS
Posts: 335
Joined: 20 Jan 2017, 08:44
Contact:

Re: RevPiModIO - Python3 Direktzugriff auf IOs

Post by RevPiModIO »

Hi Ingo!

Ja, hier im Forum hatten wir ja auch schon das Thema "Valueserver" viewtopic.php?f=14&p=375#p342

Um wirklich "einfach nur" Daten vom Pi abzufragen. Ich erweitere das RevPiModIO-Modul momentan um den Parameter "monitoring=True", mit dem es ein reines Monitoring macht. Es ließt dann nicht nur Inputs zyklisch aus, sondern auch Outputs. In das Prozessabbild schreiben ist in dem Modus dann NICHT möglich, weil das ja z.B. logiCAD macht.

Die Daten kann man dann auf beliebigen Weg austauschen... Ob, wie oben, als XML-RPC-Server oder als HTTP z.B. mit wget http://revpiip:55000/devname/ioname - Und der Inhalt ist dann einfach nur der Wert als Text. ODER was wir auch noch vorhaben das RevPiModIO-Modul Netzwerkfähig machen, dass man vom RevPi nur die Prozessdaten bekommt und die Verarbeitung auf einer ganz anderen Maschine läuft :D

Herrliches Gerät, da kommen viele neue Ideen ;)

Gruß, Sven
python3-RevPiModIO - https://revpimodio.org/ || Der RevPi ist das Beste, was passieren konnte!
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41

Re: RevPiModIO - Python3 Direktzugriff auf IOs

Post by volker »

Liebe Fans,
bevor ihr sehr viel Mühe in eine eigene Lösung investiert, wartet noch die messe nächste Woche ab. ich verrate Euch schon mal ein Geheimnis - aber pssst! Nicht weitersagen:
Wir werden dort die KUNBUS Cloud vorstellen. Werte in die Cloud zu pushen wird gaaaaanz einfach sein. Sie von dort abholen wird mit jedem Browser gehen und man kann sogar eigene Dashboards einrichten. Bitte fragt mich keine Details, eigentlich sollte noch gar nichts drüber kommuniziert werden. Aber auf und nach der Messe werden wir sehr ausführlich alle Fragen dazu beantworten...
Unser RevPi Motto: Don't just claim it - make it!
User avatar
RevPiModIO
KUNBUS
Posts: 335
Joined: 20 Jan 2017, 08:44
Contact:

Re: RevPiModIO - Python3 Direktzugriff auf IOs

Post by RevPiModIO »

... und gaaaaaaaaaaaaaanz einfach raus zu holen für JEDEN

Sorry... passt nicht in diesen Thread, aber in diesen viewtopic.php?f=8&t=152
python3-RevPiModIO - https://revpimodio.org/ || Der RevPi ist das Beste, was passieren konnte!
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41

Re: RevPiModIO - Python3 Direktzugriff auf IOs

Post by volker »

Nein Sven, eben nicht für jeden, sondern nur gaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanz einfach für den Inhaber der Daten, sofern er seine Zugangsdaten sicher verwahrt und nicht auf der Rückseite seines Mousepad aufklebt :-)
Unser RevPi Motto: Don't just claim it - make it!
User avatar
RevPiModIO
KUNBUS
Posts: 335
Joined: 20 Jan 2017, 08:44
Contact:

Version 0.9.5 - Eventfunktionen mit IO-Name und IO-Value

Post by RevPiModIO »

Wir haben eine neue Version veröffentlicht:

https://revpimodio.org/version-0-9-5/

Neben ein paar anderen Dingen wird der Eventfunktion nun der IO-Name und IO-Wert zum Auslösezeitpunkt übergeben! Den Wunsch hatten wir von vielen erhalten und nun erfüllt :D

Gruß, Sven
python3-RevPiModIO - https://revpimodio.org/ || Der RevPi ist das Beste, was passieren konnte!
Post Reply