<?xml version="1.0" encoding="UTF-8"?>        <rss version="2.0"
             xmlns:atom="http://www.w3.org/2005/Atom"
             xmlns:dc="http://purl.org/dc/elements/1.1/"
             xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
             xmlns:admin="http://webns.net/mvcb/"
             xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
             xmlns:content="http://purl.org/rss/1.0/modules/content/">
        <channel>
            <title>
									Kundendisplay - QRK Feature Request				            </title>
            <link>https://www.ckvsoft.at/forum/qrk-feature-request/kundendisplay/</link>
            <description>QRK Registrier Kasse Discussion Board</description>
            <language>de</language>
            <lastBuildDate>Sat, 06 Jun 2026 07:38:38 +0000</lastBuildDate>
            <generator>wpForo</generator>
            <ttl>60</ttl>
							                    <item>
                        <title>RE: Kundendisplay</title>
                        <link>https://www.ckvsoft.at/forum/qrk-feature-request/kundendisplay/#post-3378</link>
                        <pubDate>Mon, 24 Jun 2024 08:42:26 +0000</pubDate>
                        <description><![CDATA[@stefaan 
HalloMehr ist eigentlich nicht da. Steht auch nur im QRK Kassenmode zu VerfügungHier ein kurzes Python3 snippet um zu sehen wie das ausgewertet werden könnte
import socket
impor...]]></description>
                        <content:encoded><![CDATA[<p>@stefaan </p>
<p>Hallo<br />Mehr ist eigentlich nicht da. Steht auch nur im QRK Kassenmode zu Verfügung<br />Hier ein kurzes Python3 snippet um zu sehen wie das ausgewertet werden könnte</p>
<pre contenteditable="false">import socket
import json

def receive_udp_data(host, port):
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    udp_socket.bind((host, port))
    print(f"Listening on {host}:{port}...")
    
    while True:
        try:
            data, addr = udp_socket.recvfrom(1024)
            if data:


                try:
                    # Debugging:
                    print(f"Received raw data: {data}")

                    # Extrahieren der Länge des "what"-Teils (ersten 4 Bytes)
                    what_length = int.from_bytes(data, byteorder='big')
                    print(f"Length of 'what': {what_length}")
                    # Extrahieren des "what"-Teils
                    what = data.decode('utf-8').replace('\0', '').strip()
                    print(f"'what': @{what}@")

                    # Startindex des JSON-Teils berechnen
                    start_idx = 4 + what_length  # Beginne 4 Bytes + Länge des 'what'-Teils

                    # Länge des JSON-Teils lesen (nächste 4 Bytes nach start_idx)
                    json_length = int.from_bytes(data, byteorder='big')
                    print(f"Length of 'json': {json_length}")

                    # JSON-String extrahieren und dekodieren
                    json_str = data.decode('latin1').replace('\0', '').strip()

                    # orders = json.loads(json_data)
                    print(f"'data': {json_str}")
                    print("=======================================================")

                    try:
                        if what == "orders":
                          json_data = json.loads(json_str)
                          process_orders(json_data)
                        elif what == "topay":
                            print(f"To pay: {json_str}")
                        elif what == "finished":
                            print("Payment finished")

                        print("=======================================================")

                    except json.JSONDecodeError as e:
                        print(f"Error decoding JSON data: {str(e)}")

                except UnicodeDecodeError as e:
                    print(f"Error decoding received data as Latin-1: {str(e)}")

        except KeyboardInterrupt:
            print("\nUDP Receiver stopped.")
            break

        except Exception as e:
            print(f"Error receiving UDP data: {str(e)}")

    udp_socket.close()

def process_orders(data):
    if isinstance(data, dict) and 'Orders' in data:
        orders = data
        for order in orders:
            try:
                count = order.get("count")
                product = order.get("product")
                sum_amount = order.get("sum")
                print(f"Order received: {count}x {product}, Total: {sum_amount}")

            except Exception as e:
                print(f"Error processing order: {str(e)}")

        print(f"Order received: Summe:  {data.get("sum", 0)}")

    else:
        print("Received data does not contain a valid 'Orders' key.")

if __name__ == "__main__":
    HOST = '0.0.0.0'
    PORT = 5824

    receive_udp_data(HOST, PORT)
</pre>]]></content:encoded>
						                            <category domain="https://www.ckvsoft.at/forum/qrk-feature-request/">QRK Feature Request</category>                        <dc:creator>chris</dc:creator>
                        <guid isPermaLink="true">https://www.ckvsoft.at/forum/qrk-feature-request/kundendisplay/#post-3378</guid>
                    </item>
				                    <item>
                        <title>RE: Kundendisplay</title>
                        <link>https://www.ckvsoft.at/forum/qrk-feature-request/kundendisplay/#post-3376</link>
                        <pubDate>Tue, 18 Jun 2024 18:35:49 +0000</pubDate>
                        <description><![CDATA[Ich muss Nachschauen was alles noch im Code vorhanden ist, Ich glaube ich habe die Sachen nur auskommentiert. Bin mir jetzt gar nicht sicher. Hat mich dann nicht weiter interessiert,]]></description>
                        <content:encoded><![CDATA[<p>Ich muss Nachschauen was alles noch im Code vorhanden ist, Ich glaube ich habe die Sachen nur auskommentiert. Bin mir jetzt gar nicht sicher. Hat mich dann nicht weiter interessiert,</p>]]></content:encoded>
						                            <category domain="https://www.ckvsoft.at/forum/qrk-feature-request/">QRK Feature Request</category>                        <dc:creator>chris</dc:creator>
                        <guid isPermaLink="true">https://www.ckvsoft.at/forum/qrk-feature-request/kundendisplay/#post-3376</guid>
                    </item>
				                    <item>
                        <title>RE: Kundendisplay</title>
                        <link>https://www.ckvsoft.at/forum/qrk-feature-request/kundendisplay/#post-3375</link>
                        <pubDate>Tue, 18 Jun 2024 15:56:10 +0000</pubDate>
                        <description><![CDATA[Wunderbar, da kommen ja schon brauchbare Daten raus! Danke!Einzelpreis in der Liste wäre noch ein Hit und eine Verfeinerung beim Zahlungsprozess (Zahlungsart(en) und Retourgeld).Ich melde mi...]]></description>
                        <content:encoded><![CDATA[<p>Wunderbar, da kommen ja schon brauchbare Daten raus! Danke!<br />Einzelpreis in der Liste wäre noch ein Hit und eine Verfeinerung beim Zahlungsprozess (Zahlungsart(en) und Retourgeld).<br />Ich melde mich einfach nochmals, wenn ich im Sommer ein paar ruhige Momente dafür finde.<br />Mit Multicast ist die Lösung ganz universell, da könnte man später einmal direkt über QRK der Kundschaft die (noch nicht vorhandene) Wallbox freischalten &#x1f600; . Einfach ein Produkt "Ladestation" eintippen, irgendwo lauscht ein Script mit und schaltet den Ladevorgang frei.</p>
<p>Bei den Features vom Kundendisplay bin ich bei dir, da ist sicher Entwicklungspotential da. Mal schauen bzw wäre interessant, ob potentielle User eh noch alte POS-Displays herumliegen haben oder selber was basteln wollen.<br />Das Epson-Display war gebraucht gekauft, da waren es €40 oder so. Neu hätte ich es auch nicht gekauft.</p>
<p>Stefan</p>]]></content:encoded>
						                            <category domain="https://www.ckvsoft.at/forum/qrk-feature-request/">QRK Feature Request</category>                        <dc:creator>Stefan</dc:creator>
                        <guid isPermaLink="true">https://www.ckvsoft.at/forum/qrk-feature-request/kundendisplay/#post-3375</guid>
                    </item>
				                    <item>
                        <title>RE: Kundendisplay</title>
                        <link>https://www.ckvsoft.at/forum/qrk-feature-request/kundendisplay/#post-3374</link>
                        <pubDate>Tue, 18 Jun 2024 11:55:29 +0000</pubDate>
                        <description><![CDATA[Es sollte ein 7-Zoll-LCD sein, das Werbebilder vom Betreiber anzeigen kann und über eine Kamera verfügt, um Gutscheincodes zu scannen. Der angestrebte Preis lag unter 100 Euro.Ein Epson Kund...]]></description>
                        <content:encoded><![CDATA[
<p>Hallo!</p>
<ul>
<li>Habe ein Epson DM-D110-Display für Tests</li>
</ul>
<br /><br />Es sollte ein 7-Zoll-LCD sein, das Werbebilder vom Betreiber anzeigen kann und über eine Kamera verfügt, um Gutscheincodes zu scannen. Der angestrebte Preis lag unter 100 Euro.<br /><br />Ein Epson Kundendisplay ist allein schon teuer; ein ESP32 mit Display könnte deutlich kostengünstiger sein.<br /><br /><br />
<p> </p>]]></content:encoded>
						                            <category domain="https://www.ckvsoft.at/forum/qrk-feature-request/">QRK Feature Request</category>                        <dc:creator>chris</dc:creator>
                        <guid isPermaLink="true">https://www.ckvsoft.at/forum/qrk-feature-request/kundendisplay/#post-3374</guid>
                    </item>
				                    <item>
                        <title>RE: Kundendisplay</title>
                        <link>https://www.ckvsoft.at/forum/qrk-feature-request/kundendisplay/#post-3372</link>
                        <pubDate>Tue, 18 Jun 2024 10:09:54 +0000</pubDate>
                        <description><![CDATA[Ja ich hatte so eine Kundenanzeige fast fertig. Lief schon im Test.Wurde aber mangels Interesse eingestellt.Auch die Kosten waren etwas zu hoch.Es war ein Raspberry Zero dafür vorgesehen mit...]]></description>
                        <content:encoded><![CDATA[
<p>Hallo!</p>
<p>Ich hätte über den Sommer die Motivation, die Ansteuerung des Kassendisplays bei unserer Kassa (ChromisPOS) aus ChromisPOS loszulösen, da nicht alle gewünschten Anzeigoptionen möglich sind. Die Idee ist, ein kleines Stück Software zu schreiben, die über eine Pipe oder übers Netzwerk ein XML/JSON-Dokument annimmt und richtig formatiert anzeigt.</p>
<p>Das könnte auch für QRK eine Option sein, da würde es reichen, bei jedem Vorgang (Produkt hinzufügen/ändern, Zahlung) einen String irgendwo hineinzukübeln und die ganze Ansteuerung des Displays wäre ausgelagert.</p>
<p>Gibt es Anregungen dazu?<br />Meine Idee:</p>
<ul>
<li>Plattformunabhängig (bei mir ist Linux im Einsatz, könnte mir Python vorstellen)</li>
<li>Am einfachsten wohl über TCP oder sogar HTTP</li>
<li>Habe ein Epson DM-D110-Display für Tests</li>
<li>Noch unklar: Soll die Formatierung in meinem Programm erfolgen oder 1:1 einen vorformatierten String aufs Display klatschen. Formatierung in meinem Programm wäre wahrscheinlich flexibler, wenn man die Anzeigelogik auslagern will. Dann wären problemlos unterschiedliche Displays möglich, wenn man einfach den aktuellen Verkaufsvorgang (x Produkte und Gesamtsumme etc) strukturiert als JSON/XML annimmt.</li>
<li>Für die ferne Zukunft: Anzeige auf einem 2. Display (regulärer 2. Bildschirm per HDMI/USB).</li>
</ul>
<p>Stefan</p>
<p><br /><br />Ja ich hatte so eine Kundenanzeige fast fertig. Lief schon im Test.<br />Wurde aber mangels Interesse eingestellt.Auch die Kosten waren etwas zu hoch.Es war ein Raspberry Zero dafür vorgesehen mit 7zoll Display.</p>
<p>Von QRK wurde per Datagram/udp ins netz geschickt. Es habe alle Monitore darauf reagiert.</p>
<pre contenteditable="false">void QRK::sendDatagram(QString what, QString data)
{
    //    qDebug() &lt;&lt; "Function Name: " &lt;&lt; Q_FUNC_INFO &lt;&lt; what &lt;&lt; " data: " &lt;&lt;
    //    data;
    QByteArray datagram;
    QDataStream out(&amp;datagram, QIODevice::WriteOnly);
    out &lt;&lt; what &lt;&lt; data;

    udpSocket.writeDatagram(datagram, QHostAddress::Broadcast, 5824);
}
</pre>
<p>Das ist noch als code vorhanden ;-) und wird teilweise noch ausgesendet.</p>
<pre contenteditable="false">nc -lukp 5824</pre>
<br />
<p> </p>]]></content:encoded>
						                            <category domain="https://www.ckvsoft.at/forum/qrk-feature-request/">QRK Feature Request</category>                        <dc:creator>chris</dc:creator>
                        <guid isPermaLink="true">https://www.ckvsoft.at/forum/qrk-feature-request/kundendisplay/#post-3372</guid>
                    </item>
				                    <item>
                        <title>Kundendisplay</title>
                        <link>https://www.ckvsoft.at/forum/qrk-feature-request/kundendisplay/#post-3371</link>
                        <pubDate>Tue, 18 Jun 2024 09:30:22 +0000</pubDate>
                        <description><![CDATA[Hallo!
Ich hätte über den Sommer die Motivation, die Ansteuerung des Kassendisplays bei unserer Kassa (ChromisPOS) aus ChromisPOS loszulösen, da nicht alle gewünschten Anzeigoptionen möglic...]]></description>
                        <content:encoded><![CDATA[<p>Hallo!</p>
<p>Ich hätte über den Sommer die Motivation, die Ansteuerung des Kassendisplays bei unserer Kassa (ChromisPOS) aus ChromisPOS loszulösen, da nicht alle gewünschten Anzeigoptionen möglich sind. Die Idee ist, ein kleines Stück Software zu schreiben, die über eine Pipe oder übers Netzwerk ein XML/JSON-Dokument annimmt und richtig formatiert anzeigt.</p>
<p>Das könnte auch für QRK eine Option sein, da würde es reichen, bei jedem Vorgang (Produkt hinzufügen/ändern, Zahlung) einen String irgendwo hineinzukübeln und die ganze Ansteuerung des Displays wäre ausgelagert.</p>
<p>Gibt es Anregungen dazu?<br />Meine Idee:</p>
<ul>
<li>Plattformunabhängig (bei mir ist Linux im Einsatz, könnte mir Python vorstellen)</li>
<li>Am einfachsten wohl über TCP oder sogar HTTP</li>
<li>Habe ein Epson DM-D110-Display für Tests</li>
<li>Noch unklar: Soll die Formatierung in meinem Programm erfolgen oder 1:1 einen vorformatierten String aufs Display klatschen. Formatierung in meinem Programm wäre wahrscheinlich flexibler, wenn man die Anzeigelogik auslagern will. Dann wären problemlos unterschiedliche Displays möglich, wenn man einfach den aktuellen Verkaufsvorgang (x Produkte und Gesamtsumme etc) strukturiert als JSON/XML annimmt.</li>
<li>Für die ferne Zukunft: Anzeige auf einem 2. Display (regulärer 2. Bildschirm per HDMI/USB).</li>
</ul>
<p>Stefan</p>]]></content:encoded>
						                            <category domain="https://www.ckvsoft.at/forum/qrk-feature-request/">QRK Feature Request</category>                        <dc:creator>Stefan</dc:creator>
                        <guid isPermaLink="true">https://www.ckvsoft.at/forum/qrk-feature-request/kundendisplay/#post-3371</guid>
                    </item>
							        </channel>
        </rss>
		