Wie kann man denn mit mosquitto_sub den Wert einer bestimmten ID lesen?
Fröling: [ANNOUNCE] p4d - Visualisierung und Einstellung der S-3200 via COM1
Es gibt 4.961 Antworten in diesem Thema, welches 1.519.853 mal aufgerufen wurde. Der letzte Beitrag () ist von ranseyer.
-
-
die Parameter kann man darüber noch nicht abfragen, nur die Messwerte dazu lauscht man an einem Topic in welches diese zyklisch gesendet werden.
Welches Topic dies ist kommt auf diene persönliche Konfiguration an , also einfach den Subscribe auf das von dir beim p4d als Ziel konfigurierte Topic -
die Parameter kann man darüber noch nicht abfragen, nur die Messwerte dazu lauscht man an einem Topic in welches diese zyklisch gesendet werden.
Welches Topic dies ist kommt auf diene persönliche Konfiguration an , also einfach den Subscribe auf das von dir beim p4d als Ziel konfigurierte TopicVerstehe ich nicht ganz.
Meinst Du so? Da kommt aber nichts.
mosquitto_sub -t p4d2mqtt/sensor/Kesseltemperatur/state -p 1883 -
dann schau mal so:
mosquitto_sub -v -t p4d2mqtt/sensor/#Der Lattenzaun ist bei den Topic-Namen ein Wildcard, siehe www.
Mit dem -v bekommst du auch den Namen der Topics angezeigt, mit dem Kannst du dann gezielt auf einzelne Sensoren zugreifen. Wobei der Name immer der 'name' Spalte aus der valuefacts Tabelle ist. -
Ich hatte ja bis gestern null Ahnung von MQTT.
Hier ist was für Dummies wie mich:
https://blog.doubleslash.de/mqtt-fuer-dummies/Für alle, die es interessiert.
Hier mal die Ergebnisse der Abfragen von Werten mit Mosquitto.Abfrage aller Topics inkl. Werte (Payload):
Code
Alles anzeigen$ mosquitto_sub -v -t p4d2mqtt/sensor/# p4d2mqtt/sensor/Heizkreispumpe_0x0/state {"value": 1.0} p4d2mqtt/sensor/Kesseltemperatur_0x0/state {"value": 66.0} p4d2mqtt/sensor/Status/state {"value": "Betriebsbereit"} p4d2mqtt/sensor/Abgastemperatur_0x1/state {"value": 72.0} p4d2mqtt/sensor/Betriebsmodus/state {"value": "Automatik"} p4d2mqtt/sensor/Boardtemperatur_0x2/state {"value": 26.0} p4d2mqtt/sensor/Uhrzeit/state {"value": "Donnerstag, 28. Jan. 2021 15:04:55"} p4d2mqtt/sensor/Restsauerstoffgehalt_0x3/state {"value": 20.300000000000001} p4d2mqtt/sensor/Aussentemperatur_0x4/state {"value": 3.0} p4d2mqtt/sensor/Saugzugdrehzahl_0x7/state {"value": 0.0} p4d2mqtt/sensor/Kesselstellgroesse_0x12/state {"value": 95.0} p4d2mqtt/sensor/Abgas-Solltemperatur_0x13/state {"value": 82.0} p4d2mqtt/sensor/Vorlauf-Isttemperatur_0x15/state {"value": 51.5} p4d2mqtt/sensor/Vorlauf-Solltemperatur_0x16/state {"value": 50.0} p4d2mqtt/sensor/Boilertemperaturoben_0x5d/state {"value": 74.5} p4d2mqtt/sensor/BoilertemperaturSolarreferenz_0x5e/state {"value": 71.5} p4d2mqtt/sensor/Betriebsstunden_0x62/state {"value": 1072.0} ...
Abfrage Topic "Uhrzeit" inkl. Werte (Payload):Code$ mosquitto_sub -t p4d2mqtt/sensor/Uhrzeit/state {"value": "Donnerstag, 28. Jan. 2021 15:44:00"} {"value": "Donnerstag, 28. Jan. 2021 15:45:31"}
Abfrage Topic "Status" inkl. Werte (Payload): -
Hallo Leute,
ich brauche eure Hilfe. Ich versuche grade p4d auf einem Debian-LXC (ProxMox) zu installieren.
Beim compilieren kommen folgende Fehler:Code
Alles anzeigenwebsock.c: In member function 'int cWebSock::init(int, int, bool)': websock.c:69:17: error: 'struct lws_protocols' has no member named 'tx_packet_size'; did you mean 'rx_buffer_size'? protocols[1].tx_packet_size = 0; ^~~~~~~~~~~~~~ rx_buffer_size websock.c:88:10: error: 'struct lws_http_mount' has no member named 'basic_auth_login_file' mount.basic_auth_login_file = nullptr; ^~~~~~~~~~~~~~~~~~~~~ websock.c:118:9: error: 'struct lws_context_creation_info' has no member named 'ws_ping_pong_interval' info.ws_ping_pong_interval = timeout; ^~~~~~~~~~~~~~~~~~~~~ websock.c: In static member function 'static int cWebSock::callbackHttp(lws*, lws_callback_reasons, void*, void*, size_t)': websock.c:421:12: error: 'LWS_CALLBACK_HTTP_BIND_PROTOCOL' was not declared in this scope case LWS_CALLBACK_HTTP_BIND_PROTOCOL: // 49 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ websock.c:421:12: note: suggested alternative: 'LWS_CALLBACK_HTTP_WRITEABLE' case LWS_CALLBACK_HTTP_BIND_PROTOCOL: // 49 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LWS_CALLBACK_HTTP_WRITEABLE websock.c:422:12: error: 'LWS_CALLBACK_HTTP_DROP_PROTOCOL' was not declared in this scope case LWS_CALLBACK_HTTP_DROP_PROTOCOL: // 50 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ websock.c:422:12: note: suggested alternative: 'LWS_CALLBACK_HTTP_WRITEABLE' case LWS_CALLBACK_HTTP_DROP_PROTOCOL: // 50 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LWS_CALLBACK_HTTP_WRITEABLE websock.c: In static member function 'static int cWebSock::callbackWs(lws*, lws_callback_reasons, void*, void*, size_t)': websock.c:552:28: error: 'lws_write_ws_flags' was not declared in this scope int flags = lws_write_ws_flags(LWS_WRITE_TEXT, !clients[wsi].msgBufferSendOffset, pending <= maxChunk); ^~~~~~~~~~~~~~~~~~ websock.c:552:28: note: suggested alternative: 'lws_write_protocol' int flags = lws_write_ws_flags(LWS_WRITE_TEXT, !clients[wsi].msgBufferSendOffset, pending <= maxChunk); ^~~~~~~~~~~~~~~~~~ lws_write_protocol websock.c:590:17: error: 'lws_is_first_fragment' was not declared in this scope if (lws_is_first_fragment(wsi)) ^~~~~~~~~~~~~~~~~~~~~ websock.c:590:17: note: suggested alternative: 'lws_is_final_fragment' if (lws_is_first_fragment(wsi)) ^~~~~~~~~~~~~~~~~~~~~ lws_is_final_fragment websock.c:683:12: error: 'LWS_CALLBACK_ADD_HEADERS' was not declared in this scope case LWS_CALLBACK_ADD_HEADERS: ^~~~~~~~~~~~~~~~~~~~~~~~ websock.c:683:12: note: suggested alternative: 'LWS_CALLBACK_ADD_POLL_FD' case LWS_CALLBACK_ADD_HEADERS: ^~~~~~~~~~~~~~~~~~~~~~~~ LWS_CALLBACK_ADD_POLL_FD websock.c: In static member function 'static int cWebSock::getIntParameter(lws*, const char*, int)': websock.c:806:22: error: 'lws_get_urlarg_by_name' was not declared in this scope const char* arg = lws_get_urlarg_by_name(wsi, name, buf, 100); ^~~~~~~~~~~~~~~~~~~~~~ websock.c:806:22: note: suggested alternative: 'lws_get_parent' const char* arg = lws_get_urlarg_by_name(wsi, name, buf, 100); ^~~~~~~~~~~~~~~~~~~~~~ lws_get_parent websock.c: In static member function 'static const char* cWebSock::getStrParameter(lws*, const char*, const char*)': websock.c:818:22: error: 'lws_get_urlarg_by_name' was not declared in this scope const char* arg = lws_get_urlarg_by_name(wsi, name, buf, 512); ^~~~~~~~~~~~~~~~~~~~~~ websock.c:818:22: note: suggested alternative: 'lws_get_parent' const char* arg = lws_get_urlarg_by_name(wsi, name, buf, 512); ^~~~~~~~~~~~~~~~~~~~~~ lws_get_parent make: *** [Make.config:75: websock.o] Error 1
Es deutet stark darauf hin, das es an libwebsockets hängt, bin mir aber nicht sicher, wo genau das Problem ist. Installiert habe ich mit "apt install libwebsockets-dev".
Danke für eure Hilfe.
-
Hast du beachtet was ich im Readme zur libwebsocket geschrieben habe?
-
value von "Füllstand im Pelletsbehälter" auslesen.
Wie geht das?
Ich stehe mal wieder auf dem Schlauch.Aktuell habe ich diesen Wert:
Füllstand im Pelletsbehälter: 15.18 %Wenn ich aber den value anhand der Adresse auslese, erhalte ich 3142.
Adresse ermitteln: 0x0071
Code$ p4 values | grep "Füllstand" 124) 0x0071 207 '%' (0207) 'Füllstand im Pelletsbehälter' 203) 0x0071 207 '%' (0207) 'Füllstand im Pelletsbehälter'
value ermittteln: 3142 -
passt:
3142 / 207 = 15,1787439614Die Steuerung liefert je Messwert einen Faktor der ist bei dem Füllstand im Pelletsbehälter 207.
-
wenn du das mir den MQTT Commands mal testen magst, das:
Codemosquitto_pub -t mqtt2p4d/command -p 1883 -m '{ "command" : "parstore", "address" : 0, "value" : "7" }
setzt Parameter mit Adresse 0 auf den Wert 5.
Die p4d interne ID wird hier nicht mehr verwendet sondern die Parameter Adresse der Steuerung.
Dieses Feature ist nur rudimentär getestet!!@horchi
Hier hast Du geschrieben, dass man mit MQTT die Values der Parameter in die Steuerung MQTT schreiben soll.Oben im Quote steht: "Dieses Feature ist nur rudimentär getestet!!"
Wie soll man denn nun Values für Parameter in die Steuerung schreiben?
-
habe schon lange keine Updates mehr gemacht. Es wird mal wieder Zeit. Mittlerweile hat sich viel getan.Ich bin noch bei Version: 0.3.32 und nutze die MQTT Schnittstelle.
Muss ich für das Update irgendwas beachten? Was kann da alles schief gehen?
seit 0.5.0 ist das Web Interface komplett neu und basiert auf eine anderen Technologie.
Move mal den /var/lib/p4 Ordner weg oder löschen, je nachdem ob du ihn mal aufheben möchtest.
Dann so installieren:
https://github.com/horchi/linux-p4d#installApache benötigst du danach nicht mehr, der stört aber auch nicht.
Die neue URL wird die vom install Skript angezeigt. Die aufgezeichneten Daten gehen nicht verloren
Hallo in die Runde,habe gerade das Update von 0.3.32 zu 0.6.22-GITf30bccb durchgeführt. Vorher noch über 100 Debian Updates...
Nun läuft soweit erstmal alles wieder wie vorher. Auch mein FHEM empfängt wie gewohnt die Daten per MQTT. Nach der Installation und dem ersten Neustart hatte ich erstmal das Problem, dass das WebInterface nicht über Port 1111 erreichbar war. Laut systemctl status p4 lief der P4 aber. Das Log sah wie folgt aus:
Code
Alles anzeigenJan 31 13:07:14 rpi4 p4d: Read 5 option from /etc/p4d/p4d.conf Jan 31 13:07:14 rpi4 p4d: Info: Calling mysql_library_init() Jan 31 13:07:14 rpi4 p4d: Dictionary '/etc/p4d/p4d.dat' loaded Jan 31 13:07:14 rpi4 p4d: Try conneting to database Jan 31 13:07:14 rpi4 p4d: Checking database connection ... Jan 31 13:07:14 rpi4 p4d: Calling mysql_init(703) Jan 31 13:07:14 rpi4 p4d: SQL client character now 'utf8' Jan 31 13:07:14 rpi4 p4d: Checking table structure and indices ... Jan 31 13:07:14 rpi4 p4d: Checking table 'config' Jan 31 13:07:14 rpi4 p4d: Info: Definition of field 'config.VALUE' modified, try to alter table Jan 31 13:07:14 rpi4 p4d: Execute [alter table config modify column value TEXT comment '' ] Jan 31 13:07:15 rpi4 p4d: Checking table 'errors' Jan 31 13:07:15 rpi4 p4d: Checking table 'groups' Jan 31 13:07:15 rpi4 p4d: Checking table 'hmsysvars' Jan 31 13:07:15 rpi4 p4d: Checking table 'menu' Jan 31 13:07:15 rpi4 p4d: Info: Missing field 'menu.DIGITS', try to alter table Jan 31 13:07:15 rpi4 p4d: Execute [alter table menu add column digits INT(1) after unit] Jan 31 13:07:15 rpi4 p4d: Info: Missing field 'menu.MIN', try to alter table Jan 31 13:07:15 rpi4 p4d: Execute [alter table menu add column min INT(1) after digits] Jan 31 13:07:15 rpi4 p4d: Info: Missing field 'menu.MAX', try to alter table Jan 31 13:07:15 rpi4 p4d: Execute [alter table menu add column max INT(1) after min] Jan 31 13:07:16 rpi4 p4d: Info: Missing field 'menu.DEF', try to alter table Jan 31 13:07:16 rpi4 p4d: Execute [alter table menu add column def INT(1) after max] Jan 31 13:07:16 rpi4 p4d: Info: Missing field 'menu.FACTOR', try to alter table Jan 31 13:07:16 rpi4 p4d: Execute [alter table menu add column factor INT(1) after def] Jan 31 13:07:16 rpi4 p4d: Info: Missing field 'menu.PUB1', try to alter table Jan 31 13:07:16 rpi4 p4d: Execute [alter table menu add column pub1 INT(1) after value] Jan 31 13:07:16 rpi4 p4d: Info: Missing field 'menu.PUB2', try to alter table Jan 31 13:07:16 rpi4 p4d: Execute [alter table menu add column pub2 INT(1) after pub1] Jan 31 13:07:16 rpi4 p4d: Info: Missing field 'menu.PUB3', try to alter table Jan 31 13:07:16 rpi4 p4d: Execute [alter table menu add column pub3 INT(1) after pub2] Jan 31 13:07:16 rpi4 p4d: Info: Missing field 'menu.PUW1', try to alter table Jan 31 13:07:16 rpi4 p4d: Execute [alter table menu add column puw1 INT(1) after pub3] Jan 31 13:07:16 rpi4 p4d: Checking table 'peaks' Jan 31 13:07:16 rpi4 p4d: Checking table 'samples' Jan 31 13:07:17 rpi4 p4d: create index idxaggregate on samples(aggregate);
Da ich daraus nicht schlau wurde, habe ich dann nach ein paar Minuten einmal den p4d Service neu gestartet. Dann ging es sofort. Anschließend dann nochmal den RPi rebootet und nun klappte es auch hier sofort. Keine Ahnung, warum das nicht direkt beim ersten Neustart nach der Installation geklappt hat bzw. was sich da verschluckt hatte. Nun ist auch ein Bisschen mehr im Log passiert.
Danke für dieses super tolle Spielzeug horchi.
Schönen Sonntag noch bei diesem traumhaften Wetter.
Gruß Hoppel
-
Der hatte sich nicht verschluckt, er war am erzeugen einen zusätzlichen Index auf eine Tabelle. Wenn die groß isr kann das lange dauern (gerade wenn die Datenbank auf den raspi läuft).
-
Jo, die Datenbank läuft auf dem RasPi.
Wurde dieser Index dann beim nächsten Start noch erzeugt oder fehlt das jetzt?
Während des Erzeugens des Index ist also das WebInterface nicht erreichbar?
Gruß Hoppel
-
das sollte hoffentlich irgendwie/irgendwann fertig geworden sein.
der p4d legt alle Tabellen und Indices die er benötigt beim Start an und altert Tabellen falls nötig. Sollter den Index beim nächsten Start noch gefehlt haben sollte er dann angelegt worden sein.Richtig Starten und erreich bar ist er erst im Anschluss.
-
wer was wie macht ist die eigene Entscheidung. Man kann es über das Web Interface machen oder über MQTT, Das p4 Kommandozeilen Tool ist zum testen des Protokolls entstanden und dient mir der Diagnose. Bei Software kann es immer Fehler geben und das ganze Protokoll der Heizung ich auch nur re-engineered eben so gut wie ich er herausfinden konnte. Was ich mit dem Satz oben sagen wollte, ich hab das eingebaut aber er ist ganz frisch, also NOCH besser aufpassen
-
Ok, danke für die Erläuterung! Laut p4d.log sieht jetzt auch alles gut aus.
Das neue WebInterface gefällt mir richtig gut! Auch auf dem iPhone sieht das echt schick aus. TOP!
Gruß Hoppel
-
Der Sprung zwischen "Tag" und "Monat" vor/zurück in den Charts war mir etwas zu groß. Deshalb habe ich noch "Woche" eingebaut. Die Knöpfe habe ich nach links verschoben, da der Chart selbst auch linksbündig ausgerichtet ist. Ich finde, das paßt jetzt besser.
Wem das gefällt, kann die Dateien in der angehängten ZIP nutzen (Ordner "htdocs"), um die vorhandenen in "/var/lib/p4" zu ersetzen. Das diff im ZIP ist für Jörg, damit er es auf das Repository anwenden kann, falls ihm die Änderung gefällt.
-
Man kann es über das Web Interface machen oder über MQTT
...
Bei Software kann es immer Fehler geben und das ganze Protokoll der Heizung ich auch nur re-engineered eben so gut wie ich er herausfinden konnte.Frage zum Zurückschreiben des Value vom Parameter 'Start der 1. Pelletsbefüllung'.
Muss die Adresse als Hex-Zahl oder als Dezimal-Zahl angegeben werden?
Wie ist es richtig?Code$ p4 menu | grep "1. Pelletsbefüllung" 181) Address: 0x003c, parent: 0x0387, child: 0x0000; 'Start der 1. Pelletsbefüllung'
Entweder zurückschreiben mit Adresse als Hex-Zahl?
mosquitto_pub -t mqtt2p4d/command -p 1883 -m '{ "command" : "parstore", "address" : 0x003c, "value" : "720" }Oder zurückschreiben mit Adresse als Dezimal-Zahl?
mosquitto_pub -t mqtt2p4d/command -p 1883 -m '{ "command" : "parstore", "address" : 60, "value" : "720" } -
schau mal weiter oben einer der ersten Posts dazu. Könne wir bei Gelegenheit mal ins Wiki übertragen
-
schau mal weiter oben einer der ersten Posts dazu. Könne wir bei Gelegenheit mal ins Wiki übertragen
Meinst Du das?
Fröling: [ANNOUNCE] p4d - Visualisierung und Einstellung der S-3200 via COM1Dann muss man also die Adresse als Dezimalzahl angeben.
Hat mit mosquitto_pub -t... schon jemand erfolgreich Values in die Anlage geschrieben?
Ich will mir da nichts zerschiessen.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!