An die python cracks. Hilfe bei Minidisplay.

  • Hallo an alle die sich die Zeit das zu lesen und zu verstehen.

    Ich stehe etwas auf dem Schlauch.
    Ich versuche mein AddOn für das Adafruit SSD1306 OLED Display zu verfeinern stoße dabei aber eine Grenze.

    Hier mal mein Code

    Grundsätzlich funktioniert das aber...

    Ich möchte von Kodi auslesen ob gerade ein Video läuft, wenn ja mach das wenn nein dann prüfe ob Musik läuft wenn ja dann das... wenn nein dann prüfe welches welches Fenster auf ist und mache entsprechen dem Fenster was ich will.

    Ich habe null Ahnung von Python darum kann ich auch keinen schollernden Text oder so aber so wie das hier ist geht es ja nur das Kodi scheinbar immer ausgibt das der VideoPlayer aktiv ist und bei LiveTV,DVD,oder Stream wird keine eindeutige WindowID ausgegeben.

    xbmcgui.getCurrentWindowDialogId() gibt gar keinen Wert aus.

    Ich hoffe man kann mir helfen.

    Danke

  • Da ich ja nicht so der Crack bin, habe ich mir mal das Hello World Addon installiert um ein Addon zu haben, mit dem ich spielen kann. Ich habe den Code der addon.py wie folgt geändert:

    Das Problem an xbmcgui.Dialog().ok ist, dass es entweder unicode oder einen String haben möchte, was xbmcgui.getCurrentWindowId() nicht liefert. Daher der Umweg mit: window = str(wid)

    Ich rufe das script dann mit einem kodi-sent Befehl von der Konsole aus auf: kodi-send --action="RunScript(script.hello.world)"

    Das mache ich, damit ich halt auch das Fenster wechseln kann und dann eine andere WindowID bekomme. Das sieht dann wie folgt bei mir aus:


    Also bei mir funktioniert das.

    Wertschätzung kostet nichts, aber sie ist von unschätzbarem Wert.

  • Jetzt habe ich doch noch 2 Fragen die ich auch mit suchen nicht im Internet finde.

    1. Wie kann ich den Text scrollen lassen. gaaaaanz simpel.
    2.

    Python
    elif window=="10502":
    					draw.rectangle((0,0,width,height), outline=0, fill=0)
    					w,h = draw.textsize(systemtime,  font=font36)
    					mid2 = (width-w)/2
    					draw.text((mid2, top),    systemtime,  font=font36, fill=255)
    					w,h = draw.textsize("Music",  font=font28)
    					mid = (width-w)/2
    					draw.text((mid, padding),    "Music",  font=font28, fill=255)
    					disp.image(image)
    					pass

    wenn also ein Fenster mit der Nummer "x" aktiv ist wird das angezeigt. Jetzt möchte ich z.B. das der obere Text sich mit einem anderen abwechselt. Wie kann ich das realisieren?
    Ich steige durch die PIL nicht durch.

  • 1) in dem Du den Text immer um eine Stelle nach links oder rechts verschiebst
    2) meinst Du etwas wie 2 Texte zu toggeln?
    also etwa

    Zeige Text Video wenn letzter Text Music war ansonsten zeige Text Music
    oder suchst Du generell die Möglichkeit Text je nach Bedarf auszutauschen?

    Beim ersten würdest Du den Text der anzuzeigen ist in einer Variable speichern und
    dann beim nächsten Aufruf/Durchlauf ... abgleichen etwa

    draw('Video' if last_message == 'Music' else 'Music)

    Der 2te Fall wäre normalerweise mit einer Funktion zu lösen die dann den jweiligen Text schreibt.

    Der Code ist nur zur Veranschaulichung, kann so nicht verwendet werden.

    Cheers
    Claudia

  • zu 1. ja genau wenn also ein Text zu lang ist soll er von rechts ins Display kommen und nach links raus scrollen und sich wieder holen.
    zu 2. ich dachte so was wie obere Zeile wechselt alle 5 Sekunden von z.B. "Freitag" in 19.01.18 in einer schleife der untere Text bleibt dann.

    Ich habe das alles für die Adafruit_SSD1306 Lib gemacht ich benutze PIL.

  • Bei deinem 10 Zeilen Beispiel wird das erste draw.text vom zweiten draw.text überschrieben.
    Entweder einen pause (time.sleep) dazwischen oder falls die vorher gesetzt ist über eine Variable
    den Zustand ermitteln und dementsprechend setzen.

    Ohne den kompletten Code ist schwerlich zu sagen was alles Einfluß hat.

    Cheers
    Claudia

  • @tjost

    das braucht ein bisschen Zeit, langsam steige ich bei deinem Code durch.
    Allerdings sind drei Sachen schon mal fragwürdig

    1.)
    Du ermittelst playerisplaying = xbmc.getCondVisibility("Player.HasMedia"),
    laut Doku gibt die Funtion aber True (1) or False (0) as a bool zurück
    Daher würde ich vermuten dass innerhalb deines while loops
    entweder if playerisplaying==True: oder aber elif playerisplaying==False: ausgeführt wird, aber niemals else:

    2.)
    dadurch das Du fast alles innerhalb des while loops ausführst werden unter anderem
    diese Zeilen

    path = addon.getAddonInfo('path').decode('utf-8')
    fullpath = os.path.join(path, 'icon/')
    display = os.path.join(fullpath, thumb + suffix).decode('utf-8')
    error = os.path.join(fullpath, "error" + suffix).decode('utf-8')
    alternate = os.path.join(fullpath, 'error' + suffix)
    menu = os.path.join(fullpath, 'menu' + suffix)
    fontpath = os.path.join(fullpath, 'tiny' + suffix2)
    font10 = ImageFont.truetype('/usr/share/fonts/liberation/LiberationSans-Regular.ttf', 10)
    font18 = ImageFont.truetype('/usr/share/fonts/liberation/LiberationSans-Regular.ttf', 18)
    font28 = ImageFont.truetype('/usr/share/fonts/liberation/LiberationSans-Regular.ttf', 28)
    font30 = ImageFont.truetype('/usr/share/fonts/liberation/LiberationSans-Regular.ttf', 30)
    font32 = ImageFont.truetype('/usr/share/fonts/liberation/LiberationSans-Regular.ttf', 32)
    font36 = ImageFont.truetype('/usr/share/fonts/liberation/LiberationSans-Regular.ttf', 36)
    font60 = ImageFont.truetype('/usr/share/fonts/liberation/LiberationSans-Regular.ttf', 60)

    immer wieder ausgeführt, die sehen für mich aber so aus als ob die nur einmal beim
    Start ermittelt werden müssten.

    3.)
    sys.setdefaultencoding('utf-8')

    kann man machen, wenn man weiß was man tut.
    In wie weit die Adafruit_SSD1306 Bibliothek da mitspielt mag ich nicht zu sage,da ich die Bibliothek
    nicht benutze. Das gleiche gilt für alle anderen Bibliothek die Du per import einbindest.

    Also immer ein Auge darauf haben.


    Cheers

    Claudia

  • path = addon.getAddonInfo('path').decode('utf-8')
    fullpath = os.path.join(path, 'icon/')
    display = os.path.join(fullpath, thumb + suffix).decode('utf-8')
    error = os.path.join(fullpath, "error" + suffix).decode('utf-8')

    Das ist Schrott. Unter einem Kodi-(xbmc-) Environment liest man den Pfad so aus:

    path=xbmc.TranslatePath(addon.getAddonInfo(%s).decode('utf-8') %s (path))

    Hintendran (sagen die Bayern) kannste dann alles Mögliche anhängen.

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960
    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Ich liebe das !

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960
    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!