OrangeClock Projektvorstellung

Das sollte so passen: https://justpaste.it/cyg79

1 „Gefällt mir“

OK, damit ist dann wohl alles drin. So geht’s auch.

Die die anderen Displays den „partial Refresh“ nicht unterstützen, ist einige Anpassung nötig.

Deshalb würde ich dir das in der Anleitung verlinkte empfehlen.

So nebenbei eine OrangeClock für den Browser
https://marc3linho.github.io/OrangeClockJS/

Hallo, eine Frage/Bitte, wäre es möglich, zusätzlich zum sat/USD noch ein Icon sat/EUR zu erstellen? Wie hast du die Icons erstellt? Meine OC zeigt jetzt alternierend je eine Minute lang den Preis in € pro BTC und den Preis in sat pro Euro an. Nutze aktuell das Satoshi-Symbol. Refresh des Displays habe ich jetzt natürlich öfter, alle Stunde. Danke nochmal für das tolle Projekt.

PS: Man kann auf die math-Bibliothek verzichten, wenn man int() statt math.trunc() benutzt. Spart ein paar Bytes.

1 „Gefällt mir“

Die tollen Icons hat easyuxd (easy) · GitHub erstellt.
Du kannst gerne im Github-Repo ein Issue öffnen und dir dieses Logo wünschen.

Danke für den Tipp mit dem int(). Ich fand math.trunc() einfacher zu lesen für diesen Fall :slight_smile:

Wie viele Stellen können eigentlich beim Preis angezeigt werden ? :innocent:
VG

1 „Gefällt mir“

Ab 100000 gibt es in der v0.2.0 Anzeigeprobleme.

Das ist auf main bzw. in der kommenden v0.3.0 durch eine angepasste Schriftgröße behoben (dieser Fix ist keine Preisprognose :nerd_face:).

1 „Gefällt mir“

Bei meiner veränderten Schriftart gibts auch keine Probleme. Natürlich habe ich daran gedacht, dass da noch ein paar Nullen dran kommen :sweat_smile:

2 „Gefällt mir“

Danke für die Info.

Habe meiner OC einen 18650 Akku spendiert. Den kann man direkt an Pin 39 (Plus) und an einen der Masse-Pins (z.B. 38, 33) des Pico anschließen. Den Halter habe ich mit doppelseitigem Klebeband hinten dran geflanscht. (vllt. kann jmd. ein entsprechend erweitertes Gehäuse entwerfen, ich bin da völlig untalentiert). Die Akkuspannung wird über ADC0 (GPIO26, Pin 31) überwacht. Dazu einen Widerstand 18k zw. Pin 31 (ADC0) und Pin 39 (Vsys) und einen 33k zw Pin 31 und Pin 28 (Masse). Damit werden ca. 5,1V auf 3,3V geteilt, dh. ein reading von 65535 enstricht dann ca 5V.

Nach jedem Refresh des Displays wird die Akkuspannung für ca. 20s angezeigt und bei Spannung unter 3V kommt als Warnung ein „L“ am Ende der Zeile 2 oder, besser eine Meldung in Zeile 3. Bin mal gespannt, wie lange der ca. 1.500mAh Akku durchhält. Falls es jmd. nachbauen will: Achtung: Der Akku muss dann vor USB-Anschluss entfernt werden!

Nicht nur, dass man kein Kabel mehr hat, die OC ist auch etwas standfester, vor allem mit kleinen Silikon- oder Gummifüßchen.

Das Beispielbild ist ohne Akku am USB-Port entstanden.

Statt L auf Zeile 2:

1 „Gefällt mir“

Super mit der doppelten Anzeige in der ersten Zeile. könntest du die Datein zu verfügung stellen oder eine genaue Anleitung dafür geben ?
MfG

Hi, kein Problem. Im Verzeichnis „ap_templates“ in der Datei „index.html“ zw. „Halving Countdown“ und „Nostr Zap Counter“ diese Zeilen einfügen:

<div>
       <input type="radio" id="bhal" name="line1" value="bhal">
       <label for="mt">Block Time & Halving Countdown</label>
</div>

Damit das Setup aufgerufen wird, die Datei „wifi.json“ auf dem Pico löschen.

Im Verzeichnis „orangeClockFunctions“ in der Datei „displayBlockMoscowFees.py“ folgende Änderungen machen:

if dispVersion1 == "zap":
    symbolRow1 = "F"         # Blitz
    blockHeight = getNostrZapCount(npub)
    elif dispVersion1 == "hal":
        symbolRow1 = "E"         # Sanduhr
        blockHeight = getNextHalving()
    elif dispVersion1 == "bh":
        symbolRow1 = "A"         # Block
        blockHeight = getLastBlock()
    else:
        symbolRow1 = "A"         # Block
        blockHeight = getLastBlock() + " / " + getNextHalving()

Das beginnt so etwa auf Zeile 180. Die Änderungen müssen natürlich auf dem Pico gemacht bzw. auf den Pico übertragen werden.

Ich hoffe, das hilft.

1 „Gefällt mir“

Mal ne blöde Frage dazu…
Wenn ich die Datei Datei „displayBlockMoscowFees.py“ in Thonny direkt vom Pi öffne, ändere was in der Schleife und speichere, ist das dann direkt aktiv, oder muss ich noch was machen?

Nur den Pico neu starten. Entweder über main.py aus Thonny heraus oder durch Abziehen und Wiederherstellen der Stromversorgung. Die Änderung greift natürlich nur, wenn das im Setup entsprechen ausgewählt wurde.

2 „Gefällt mir“

Leider ist dieses ganze phyton und thonny alles neu für mich und ich finde es gerade echt schwer mich da durch zu kämpfen.
Ich hatte ein paar Ideen, aber werde vermutlich nicht die Zeit haben mich da so tief einzuarbeiten.

Daher hier meine Anregungen:

Ich hätte anstatt der time.sleep() eher time.time() genutzt und dann den Preis z.B. nach einer festen Zeit aktualisiert.
Das hätte den Vorteil, dass im Hintergrund die Blockhöhe noch weiter im Auge gehalten werden könnte und dann ein Refresh gemacht werden könnte, wenn ein neuer Block gemined wurde.
Man könnte dann glaube ich auch wechselnde Anzeigen leichter realisieren.

Dann ist mir noch aufgefallen, dass die Aktualisierung des Preises auf mempool.space recht selten stattfindet.
Gibt es vielleicht noch eine andere API die man da nutzen kann?
Hab mal gegooglet aber meist muss man sich registrieren und einen Token erzeugen.

Hab beides an den richtigen stellen eingefügt und die Wifi datei gelöscht.
Wenn ich den Pico neu anstecke kommt jedoch kein Setup. Und wenn ich über Thonny die main.py datei neu starte kommt in der Kommandozeile eine Fehlermeldung.

%Run -c $EDITOR_CONTENT

MPY: soft reboot
Traceback (most recent call last):
File „< stdin >“, line 172
SyntaxError: invalid syntax

Du könntest auch versuchen den Energieverbrauch zu optimieren. Man kann die Taktrate der CPU senken oder den Pico in ein Schlafmodus versetzen und alle x Minuten kurz aufwecken um die Anzeige zu aktualisieren.

Hier nochmal der komplette try-Block, direkt vom Pico kopiert:

    try:
        if dispVersion1 == "zap":
            symbolRow1 = "F"         # Blitz
            blockHeight = getNostrZapCount(npub)
        elif dispVersion1 == "hal":
            symbolRow1 = "E"         # Sanduhr
            blockHeight = getNextHalving()
        elif dispVersion1 == "bh":
            symbolRow1 = "A"         # Block
            blockHeight = getLastBlock()
        else:
            symbolRow1 = "A"         # Block
            blockHeight = getLastBlock() + " / " + getNextHalving()
    except Exception as err:
        blockHeight = "No data, please wait."
        symbolRow1 = ""
        print("Block: Handling run-time error:", err)
        debugConsoleOutput("3")
        issue = True

Bei python scheint es wichtig zu sein, dass auch die Formatierung stimmt. Ich bin da nicht firm drin.

Ja, das wäre sinnvoll, aber so tief bin ich da noch nicht drin. Ich habe gelesen, dass der Stromverbrauch mit WLAN gut und gerne bei 30-50mA liegen kann. Da käme man so um die 2 Tage mit dem Akku hin. Zum Glück habe ich noch welche mit 3.000mAh …

Es ist übler, als ich dachte. Eher 50-60mA. Ich hätte erwartet, dass der Pico bei sleep() in Energiesparmodus geht. Da ist also noch viel Luft drin.