Verständnisfrage zu P4D und MQTT?

Es gibt 18 Antworten in diesem Thema, welches 1.728 mal aufgerufen wurde. Der letzte Beitrag () ist von kdp622.

  • Hallo,


    ich habe eine Frage zur MQTT-Integration von P4D. Wie ich es richtig verstanden habe kann man mit dem Topic "p4d2mqtt/command" und dem Daten { "command" : "parstore", "address" : 60, "value" : "480" } Werte schreiben und mit { "command" : "parget", "address" : 60 } Werte lesen. Das Schreiben funktioniert in meinem Fall auch aber auf welches Topic kommt die Antwort auf { "command" : "parget", "address" : 60 }?


    Vielleicht kann mir da einer helfen.

    Danke

  • 855

    Hat das Thema freigeschaltet.
  • Etaminator

    Hat den Titel des Themas von „Verständigungsfrage zu P4D und MQTT?“ zu „Verständnisfrage zu P4D und MQTT?“ geändert.
  • Hallo BennoB,


    da scheint sich kürzlich etwas geändert zu haben: Die Hinweise im Zitat und den Beiträgen davor und danach kennst du?


    Viele Grüße von Karlheinz :)

    Habe es angepasst, das topic für die Kommandos an die Heizung muss nun so heißen: p4d2mqtt/s3200/request

    Und es muss konfiguriert sein:



    Seit Juni 2011:

    ETA Twin: SH30/P25 "noTouch" (Füllraum 150 Liter)

    Hopf Pelletaustragung: 6x UniWok-Saugsonden (Lager für 6 to)

    Paradigma Pufferspeicher: 2x Aqua Expresso (1090 + 958 Liter; seriell verbunden)

    Paradigma FrischWasserStation

    Paradigma VRK-Anlage: 2x CPC21 Star Azzurro Solarpanel (10m²; Aqua-System ohne Glykol)

  • Hallo Karlheiz, Vielen Dank für die Rückmeldung. Das hatte ich schon mal gelesen. War mir aber nicht sicher ob das nun die letzte Information ist. Ich habe "p4d2mqtt/s3200/request" unter zusätzliche topics eingetragen und per MQTT Explorer an das topic "p4d2mqtt/s3200/request" den JSON Request "

    {"command": "parget","address": 844}" gesendet aber da taucht weder im log noch im MQTT broker eine Antwort auf. Das scheint es also noch nicht zu sein.


    Liebe Grüße

    Benno

  • Zur Info:


    nach einem update auf die neuste Version funktioniert der Topic "p4d2mqtt/s3200/request".

    Mit einem Publish mit dem JSON {"command": "parget","address": 844} (844 als Beispiel für Startpunkt 2 bei Pufferladezustand) kommt unter dem Topic p4d2mqtt/s3200/reply die Antwort.


    PS: Bei mir hat nach dem Update von P4D der Dienst nicht mehr gestartet. Ich musste mit sudo apt-get install liblua5.3-0 eine fehlende lib nachinstallieren.

  • Hallo,


    ich möchte mich hier mal dranhängen. Vorweg ein paar Stichworte zu meiner Installation. Bisher war die auf einem Raspi (ohne MQTT), aber da ich inzwischen ProxMox aufgesetzt habe, auf dem unter anderem Home Assistant läuft, wurde es Zeit, einen weiteren Schritt zu machen: p4d in eine VM (statt auf Raspi) und Anbindung von p4d per MQTT an Home Assistant... Heute also p4d aus den Sourcen kompiliert und konfiguriert: ProxMox als Host, darin eine VM mit Debian Bookworm, darauf p4d. Das läuft soweit.


    MQTT bekomme ich aber nicht zum Laufen. Folgendes habe ich unter Setup / Allg. Konfiguration zu MQTT abgespeichert:

    Code
    MQTT Broker Url:            tcp://haos-dev:1883
    User:                       <Account auf dem MQTT Broker>
    Password:                   <Passwort auf dem MQTT Broker>
    Zusätzliche sensor Topics:  +/w1#,p4d2mqtt/s3200/request
    Data Topic Name:            p4d2mqtt/s3200/request
    Adresse übertragen:         <leer>
    Config Topic:               <Ein>


    Im Log zu MQTT erhalte ich regelmäßig Fehler. Im Folgenden habe ich den p4d bewußt neu gestartet (erste zwei Zeilen).

    Ich beobachte:

    • Es treten immer wieder MQTT Fehler auf.
    • Die gemeldeten Statusänderungen wie z.B. "p4d2mqtt/changes" sehe ich per MQTT Explorer auf meinem MQTT Broker.
    • Sonst sehe ich im MQTT Explorer nur einen einzigen Eintrag: request = {"": {"Status": {"value": "Kessel Aus"}}}
    • Sonst sehe ich keinen einzigen Parameter.

    Ich sehe im Log des MQTT-Broker ebenfalls Fehler:

    Code
    2024-07-28 17:42:53: New client connected from 192.168.100.16:43650 as auto-2FB0D1DD-8542-DBDD-4777-974D91212D05 (p2, c1, k400, u'pe1').
    2024-07-28 17:42:53: Invalid subscription string from 192.168.100.16, disconnecting.
    2024-07-28 17:42:53: Client auto-2FB0D1DD-8542-DBDD-4777-974D91212D05 disconnected due to malformed packet.
    2024-07-28 17:43:14: New connection from 192.168.100.16:44444 on port 1883.
    2024-07-28 17:43:14: New client connected from 192.168.100.16:44444 as auto-D448FD39-AEF9-A83B-9C3E-11108306595E (p2, c1, k400, u'pe1').
    2024-07-28 17:43:14: Invalid subscription string from 192.168.100.16, disconnecting.


    Wo/wie sollte ich jetzt weiter zum Debuggen ansetzen?

  • Heute also p4d aus den Sourcen kompiliert und konfiguriert: ProxMox als Host, darin eine VM mit Debian Bookworm, darauf p4d. Das läuft soweit.

    OT:

    Aus eigenem Interesse eine Frage.

    Wie hast Du die Verbindung von der VM zum seriellen Port der Heizung realisiert?

    Warum VM und nicht LXC-Container?

    Fröling Pelletskessel PE1 25 kW, Fröling Hygiene-Solarschichtspeicher H3 850, 4x Buderus Flachkollektor SKN4.0-w


    fraenk for friends Code: MATF103

  • Warum VM und nicht LXC-Container?


    Ich würde aus heutiger Sicht nur mehr als in LXC-Container in Proxmox legen.

    Hat den Vorteil, dass man die Größe eines LXC in einigen Sekunden erweitern oder reduzieren kann, bei VM wird es bei der Vergrößerung echt kompliziert.


    Hatte soeben dieses Problem.

  • Heute also p4d aus den Sourcen kompiliert und konfiguriert: ProxMox als Host, darin eine VM mit Debian Bookworm, darauf p4d. Das läuft soweit.

    OT:

    Aus eigenem Interesse eine Frage.

    Wie hast Du die Verbindung von der VM zum seriellen Port der Heizung realisiert?

    Warum VM und nicht LXC-Container?

    Weil das Durchreichen des USB-Sticks in die VM unter Proxmox ein Kinderspiel ist. Vorgehen:

    • Auf Root-Konsole der PVE (nicht in einer VM) das Kommando lsusb absetzen und gucken, welche Ports sich melden.
    • Nun USB-Stick anstecken und notieren, mit welcher ID sich der Stick gemeldet hat, im Beispiel unten mit 067b:2303
    • Nun an der stehenden VM für p4d die Hardware-Konfiguration aufrufen und ein USB-Gerät hinzufügen, dabei als Option "Hersteller/Geräte ID verwenden" auswählen und das angesteckte Gerät auswählen.


    Das mag ja sein. Aber bei p4d ist das Problem ungefähr so groß als wenn ich in einem Raspi eine größere SD-Karte unterschieben wollte. Ja, kann passieren, aber mit einer 16 GB Disk in Proxmox für p4d komme ich lange aus. Und die 16 GB sind bei meinem unterliegenden Verbund von 6 TB vernachlässigbar.


    Die Probleme mit MQTT sind aber heftig. Heute Abend war das WebGUI von p4d nicht mehr erreichbar. Ein systemctl restart p4d hat das Problem behoben. Die Daten waren dennoch alle sauber weggeschrieben worden.


    Ich habe jetzt erst einmal die MQTT-Eintragungen wieder entfernt. Jetzt sehe ich auch keine Fehlermeldungen mehr im Log. Ich werde jetzt erst mal beobachten, ob p4d sauber durchläuft.

  • OT:

    Aus eigenem Interesse eine Frage.

    Wie hast Du die Verbindung von der VM zum seriellen Port der Heizung realisiert?

    Warum VM und nicht LXC-Container?

    Weil das Durchreichen des USB-Sticks in die VM unter Proxmox ein Kinderspiel ist. Vorgehen:

    • Auf Root-Konsole der PVE (nicht in einer VM) das Kommando lsusb absetzen und gucken, welche Ports sich melden.
    • Nun USB-Stick anstecken und notieren, mit welcher ID sich der Stick gemeldet hat, im Beispiel unten mit 067b:2303
    • Nun an der stehenden VM für p4d die Hardware-Konfiguration aufrufen und ein USB-Gerät hinzufügen, dabei als Option "Hersteller/Geräte ID verwenden" auswählen und das angesteckte Gerät auswählen.

    Danke fürs erklären.


    Ich meinte aber die Verbindung von der Proxmox-Hardware zur Heizung.

    Ich dachte nicht, dass der Proxmox neben der Heizung steht und dort ein USB zu Seriell-Adapter steckt.

    Ich dachte, Du gehst über Netzwerk zum Proxmox.

    Fröling Pelletskessel PE1 25 kW, Fröling Hygiene-Solarschichtspeicher H3 850, 4x Buderus Flachkollektor SKN4.0-w


    fraenk for friends Code: MATF103

  • Das stimmt, meine Proxmox-Maschine steht nicht neben der Heizung. Zwischen beiden liegt aber ein Netzwerkkabel, das ich beidseits mit RJ45-Kupplungen bestückt habe. Die sind beidseits mit Eigenbau-Adaptern von RJ45 auf 9-poligen Sub-D bestückt. Über das Netzwerkkabel läuft RS232. Die Länge beträgt ungefähr 15 Meter, das geht problemlos.


    Aber zurück zum eigentiichen Topic... p4d ist jetzt mit "abgedrehtem" MQTT problemlos durchgelaufen. Wie gehe ich das MQTT-Problem weiter an?

  • Mit einigem Zeitaufwand ist es mir jetzt gelungen, die neueste p4d-Version auf "Bookworm" zum Laufen zu bringen. Die p4d-SW ist für Stretch entwickelt und führt mit Bookworm zu kleineren Problemen wie z.B. dass es den Befehl syslog nicht mehr gibt. Per MQTT bekomme ich jetzt alle Analogwerte sauber übertragen und kann z. B. auch die Heizkreispumpe ein- bzw. ausschalten. Da die Heizkreispumpe über einer parametrierten Außentemperatur nicht mehr läuft, obwohl die Heizkreispumpe eingeschaltet ist, lese ich den DO Heizkreispumpe_0x1 über MQTT aus. Leider liefert mir das Subscribe immer den Wert {"state": "OFF", "brightness": 255} zurück, egal ob die Heizkreispumpe läuft oder nicht.

    Daher meine Frage

    horchi oder andere, die mehr Durchblick haben als ich:

    mache ich etwas falsch, oder ist im Programm ein Fehler? Müsste nicht ein value 0 bzw. 1 gepublished werden?


    Danke im Voraus für die Hilfe!

  • Mit einigem Zeitaufwand ist es mir jetzt gelungen, die neueste p4d-Version auf "Bookworm" zum Laufen zu bringen.

    Kannst Deine Patches hier einstellen?

    Guten Morgen Panzerknacker,
    my patches are your patches ;) . Ich habe Deinen Patch vom 27. November 2023 #4.823 genommen und so lange versucht mit git am klarzukommen, bis es funktioniert hat. Vielen Dank dafür! Ich bin Elektroingenieur und kurz vor der Rente; mit dem ZX SPECTRUM und ATARI aufgewachsen und im Studium mit PASCAL und FORTRAN an das Programmieren herangeführt worden. Bin gut in MS ACCESS VBA und versuche die 4-5 Raspberry Pi's mit Raspbian und Linux in meinem Smart Home irgendwie up to date zu halten und Solaranlage, Wallbox, E-Auto (Stromanbieter neuerdings Tibber), Heizung und Haus irgendwie zur vernünftigen Zusammenarbeit zu bewegen.


    horchi und alle:

    Kann mir keiner bei meinem Problem helfen? Warum liefert mir das Subscribe bei allen Digitalausgängen immer den Wert {"state": "OFF", "brightness": 255} zurück, z. B. auch der Türkontaktschalter, egal ob geschlossen oder geöffnet, obwohl der Status bei offener Tür "Tür offen" anzeigt?


    Danke für die Hilfe!


  • Auf diesem System baut der p4d beim mir ohne Probleme (abgesehen von unkritischen Warnungen für die libcurl)

    Code
    root@dashboard:~/source/linux-p4d# lsb_release -a
    
    No LSB modules are available.
    
    Distributor ID: Debian
    Description:    Debian GNU/Linux 12 (bookworm)
    Release:        12
    Codename:       bookworm


    ich verwende den letzten Stand aus dem git. Wenn das bei dir nicht klappt ist noch was anderen schräg, am Code solltest du dafür nichts anpassen müssen.


    Das mit den Ausgängen muss ich mir ansehen.

    Seit Oktober 2009:
    Fröling P4 mit 1000l Pufferspeicher

  • syslog nicht mehr gibt

    die vom p4d verwendete c Funktion syslog gibt es noch

    Hmm, vielleicht habe ich dann doch irgendeinen Fehler bei der Installation gemacht. Ich habe mit einem neuen bookworm-image auf meinem Raspberry 3b+ angefangen. Anschließend habe ich p4d nach Deiner Anleitung "Installation by source" installiert. Das hatte aber nicht funktioniert. Leider habe ich die Fehlermeldungen nicht dokumentiert und wieder vergessen. Daraufhin habe ich die Patches von Panzerknacker irgendwie verarbeitet. Daraufhin läuft p4d jetzt.

    Zum syslog: wenn ich im SetUp-Menü den Button "Syslog" drücke , dreht sich permanent der "busy"-Kreis. Im Internet habe ich dazu gefunden, dass das Syslog seit Debian 12 durch journalctl ersetzt wird und angenommen, dass es damit zusammenhängt.


    Das ist aber alles für mich auch nicht tragisch. Ich bekomme via MQTT die benötigten Infos von meinem S4Turbo auf meinen FHEM-Hausautomatisierungs-RPi und kann auch Befehle an die Heizung schicken. Das einzige, was mir (im Moment) fehlt, ist der Zustand der Heizkreispumpe, also Ein bzw. Aus des Digitalausgangs DO Heizkreispumpe_0x1. Wenn ich die Pumpe ins Dashboard ziehe, dreht sie im eingeschalteten Zustand. Das MQTT-Topic meldet immer {"state": "OFF", "brightness": 255}.

    Da wäre ich Dir für einen Tip wirklich dankbar.

    Grüße aus Brandenburg!

  • dass das Syslog seit Debian 12 durch journalctl ersetzt wird

    stimmt, hat aber mit den c++ Code nichts zu tun.Der Fix für den digitalen Ausgang ist jetzt mit Version 0.10.2 im Git

    Hole die dir am besten mal ganz neu mit clone, statt deine bestehende Kopie mit pull zu aktualisieren (die bestehende hebe zur Sicherheit mal auf wegen des Patch). Dann baue das neu (make) und schick mir mal den Fehler falls das nicht ohne Patch klappt.

    Seit Oktober 2009:
    Fröling P4 mit 1000l Pufferspeicher

  • dass das Syslog seit Debian 12 durch journalctl ersetzt wird

    stimmt, hat aber mit den c++ Code nichts zu tun.Der Fix für den digitalen Ausgang ist jetzt mit Version 0.10.2 im Git

    Hole die dir am besten mal ganz neu mit clone, statt deine bestehende Kopie mit pull zu aktualisieren (die bestehende hebe zur Sicherheit mal auf wegen des Patch). Dann baue das neu (make) und schick mir mal den Fehler falls das nicht ohne Patch klappt.

    vielen Dank, das versuche ich in den nächsten Tagen und gebe Dir dann Rückmeldung.

  • Hallo horchi,

    habe jetzt nach Deiner Empfehlung p4d mit git clone neu erzeugt und installiert => keine Fehlermeldung (außer Warnmeldungen bei make clean all) - super! :)
    Auch den State der Heizkreispumpe bekomme ich jetzt richtig über MQTT-subscribe. Vielen Dank dafür!


    Zwei Fragen hätte ich aber doch noch:

    1. Frage:

    subscribeReading Heizkreispumpe_0x1 liefert mir bei laufender Pumpe zwei Topics im MQTT Explorer:

    1. Heizkreispumpe_0x1 = {"state": "ON", "brightness": 255}

    2. state = {"state": "OFF", "brightness": 255}

    Wie kommt das?


    2. Frage:

    Kann es sein, dass mein Raspberry Pi 3b+ mit dem p4d etwas überfordert ist, obwohl die im Menü "Liste" angezeigte CPU-Last bei 0 .0x rum dümpelt.

    Beim Aufruf der Servicemenüs kommt häufig das busy-Symbol und bleibt minutenlang bis ich es über den Neuaufruf der Startseite abbreche.

    Ist für mich nicht tragisch, da ich die nur die Daten benötige, die ich über MQTT meinem FHEM-RPi schicke - nur interessehalber.


    In jedem Fall: vielen Dank horchi (Kaffeespende ist auf dem Weg)

Jetzt mitmachen!

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