Seite 1 von 1

Datei neu einlesen

Verfasst: Dienstag 2. Mai 2017, 10:31
von egon11
Hallo liebes Forum,
Ich bin grad dabei Python zu lernen, nun habe ich aber Probleme, bei einer Datei, die sich immer verändert.
An mein Raspberry pi hab ich ein Thermometer angeschlossen, was mithilfe eines Python Script regelmäßig Daten in eine Datei schreibt.
Das ganze möchte ich mir mit einen Plugin am Enigma2 Receiver ausgeben lassen, soweit habe ich das auch hinbekommen, nur es aktualisiert sich nicht.
Ich bräuchte mal eure Hilfe, wie man aller x Sekunden oder Minuten die Datei neu einliest und am Bildschirm übers Plugin ausgibt.

Re: Datei neu einlesen

Verfasst: Dienstag 2. Mai 2017, 10:39
von egon11

Code: Alles auswählen

from Screens.Screen import Screen
from Components.Label import Label
from Components.ActionMap import ActionMap
from Plugins.Plugin import PluginDescriptor
import time
########################################################################

f = open( "/usr/text")
a = f.read()
f.close()

class HalloWorldScreen(Screen):
	skin = """
		<screen position="130,150" size="460,150" title="Ihad.tv e2-tutorial lesson 1" >
			<widget name="myLabel" position="10,60" size="200,40" font="Regular;20"/>
		</screen>"""
	def __init__(self, session, args = None):
		self.session = session

		Screen.__init__(self, session)
		self["myLabel"] = Label(_(a))
		self["myActionMap"] = ActionMap(["SetupActions"],
		{
			"cancel": self.close # add the RC Command "cancel" to close your Screen
		}, -1)


###########################################################################

def main(session, **kwargs):
	print "\n[Hallo World] start\n"
	
	session.open(HalloWorldScreen)

###########################################################################

def Plugins(**kwargs):
	return PluginDescriptor(
			name="HelloWorld",
			description="lesson 1 - Ihad.tv e2-tutorial",
			where = PluginDescriptor.WHERE_PLUGINMENU,
			icon="../ihad_tut.png",
			fnc=main)

Re: Datei neu einlesen

Verfasst: Dienstag 2. Mai 2017, 13:57
von Alfons Mittelmeyer
@egon11: Es kommt darauf an, was Dein Programm sonst noch tun soll, und ob es sequentielll programmiert ist, oder ereignisgesteuert.

Wenn Du eine Zeitschleife machts, dann macht das Programm sonst nichts als Warten und Einlesen, wenn es danach auch ausgibt und wenn das reicht, naja, warum nicht.

Aber wenn Du ein Programm hast, das allerhand macht und nebenbei die Daten so eingelesen werden, dann mache das in einem Thread. Wenn im Hauptprogramm nichts aufgerufen zu werden braucht, wenn die Daten sich geändert haben, dann ist das auch kein Problem.

Du müßtest schon etwas genauer beschreiben, wie der Ablauf sein soll. Etwa, ob es auch auf Benutzereingaben reagieren soll, oder einfach nur mißt und ausgibt ohne Benutzerinteraktionen.

Genügt so etwas?

Code: Alles auswählen

import time

WARTE_SEKUNDEN = 4

def einlesen():
    print("lese ein")

def ausgeben():
    print("gebe aus")


def main():
    while True:
        einlesen()
        ausgeben()
        time.sleep(WARTE_SEKUNDEN)

main()

Re: Datei neu einlesen

Verfasst: Dienstag 2. Mai 2017, 15:23
von egon11
Das Programm (Plugin) soll nur die Daten am Fernseher ausgeben und aller paar Minuten neu eingelesen werden.
Sonst nix weiter. In meinen 2. Post habe ich ja ein funktionierendes Plugin, aber es aktualisiert nichts, so dass immer der erste Wert, nachdem ich dieses Plugin aufrufe, stehen bleibt, während die Datei aber eine ganz andere Zahl/Buchstabe hat.
(der Raspberry schreibt jede Minute die aktuelle Zeit in die Datei und überschreibt die alte).

Re: Datei neu einlesen

Verfasst: Dienstag 2. Mai 2017, 15:56
von BlackJack
@egon11: Da müsstest Du in der Plugin-API schauen ob man da irgendwie zeitbasiert Rückrufe registrieren kann und dann bei so einem Rückruf die Datei auslesen und die Anzeige aktualisieren.

Re: Datei neu einlesen

Verfasst: Dienstag 2. Mai 2017, 16:10
von egon11
OK ich werde mal schauen, aber das klingt für mich alles wie böhmische Dörfer.
Ich dachte ich kann das mit einer while Schleife regeln, aber das geht auch nicht.

Re: Datei neu einlesen

Verfasst: Dienstag 2. Mai 2017, 21:51
von Alfons Mittelmeyer
@egon11: ich habe es gefunden: from enigma import eTimer

siehe dazu: https://i-have-a-dreambox.com/wbb2/thre ... id=2097046

Re: Datei neu einlesen

Verfasst: Mittwoch 3. Mai 2017, 19:19
von egon11
@ Alfons Mittelmeye
Danke, genau das habe ich gesucht.