FHEM - Anwendungen > Heizungssteuerung/Raumklima

Fröling Heizungskessel P4, S4: Werte und Fehlermeldung auslesen

(1/4) > >>

SvenJust:
In diesem Thread wird die Übertragung von Werten und Fehlermeldungen aus der Fröling Heizungskesselsteuerung Lambdatronic S 3200 beschrieben. Die Steuerung wird bei Fröling Kesseln P4 und S4 eingesetzt.

In dem Vorgänger-Thread https://forum.fhem.de/index.php/topic,30088.0.html fehlte die Übertragung der Fehlermeldungen.


Übersicht Architektur
Im Folgenden wird von zwei Rechnern ausgegangen, einen für das Auslesen der Heizung und einen fhem Rechner mit dem MQTT-Broker.


--- Code: --- Gerät:      Frölingkessel <-- RS232 --> Heizungsrechner <-- (W)-LAN --> fhem Server
Beispiel IP:                            192.168.20.228                  192.168.20.240
Programme:                              /usr/local/bin/p4               fhem
                                        p4tomqtt.pl                     MQTT Broker
                                                                        MQTT-Devices
                                                                        Notifiy
--- Ende Code ---

Der Heizungsrechner und der fhem-Rechner können auch ein Rechner sein.


Vorbereitung
Für das Auslesen der Werte aus dem Frölingkessel wird das Kommandozeilentool p4 benötigt. Dieses muss auf dem Heizungsrechner installiert werden. Die Anleitung und den Code gibt es im Holzheizer-Forum. (Erläuterung im Holzheizer-Forum https://www.holzheizer-forum.de/index.php?thread/50090-announce-p4d-visualisierung-und-einstellung-der-s-3200-via-com1/&pageNo=1, Sourcen: https://github.com/horchi/linux-p4d/)

Auf dem fhem-Server wird ein MQTT-Broker benötigt. Ich verwende mosquitto. Die aktuelle Version wird mit dem Folgenden installiert.

--- Code: --- sudo apt-get update
sudo apt-get upgrade

# MQTT Broker auf dem Repo installieren:
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key
cd /etc/apt/sources.list.d/
sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list
# oder für jessie
sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list
sudo apt-get update
sudo apt-get install mosquitto mosquitto-clients
--- Ende Code ---


Auf dem fhem-Server UND dem Heizungsrechner werden zwei Perl-Libs benötigt. Diese bitte jeweils mit

--- Code: ---sudo cpan -i Net:MQTT:Simple
sudo cpan -i Net:MQTT:Constants
--- Ende Code ---
installieren.


Installation Skript auf dem Heizungsrechner
Das unten anhängende Skript bitte unter /usr/local/bin/p4tomqtt.pl auf den Heizungsrechner kopieren. Anschließend bitte die Rechte auf ausführbar setzen chmod 777 /usr/local/bin/p4tomqtt.pl. In dem Skript muss der USB-Adapter und die IP-Addresse des MQTT-Servers eingetragen werden.

--- Code: --- ####### In der folgenden Zeile den USB-Adapter eintragen
my $usbdev="/dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller_D-if00-port0";
####### In der folgenden Zeile die IP-Adresse des MQTT Servers eintragen
my $mqttServerIP = "192.168.20.240";
--- Ende Code ---

Bitte das Skript mit dem Aufruf von /usr/local/bin/p4tomqtt.pl testen. Die Ausgabe sollte mit
--- Code: --- # /usr/local/bin/p4tomqtt.pl                 
DEBUG: state
DEBUG: the result is:
Version: 50.04.05.12
Time: Monday, 23. Jan. 2017 14:22:33
2 - Automatik
13 - Abstellen Warten2
DEBUG: returncode was: 0
SWversion: 50.04.05.12, Zeit: Monday, 23. Jan. 2017 14:22:33, Status: 13 - Abstellen Warten2, Modus: 2 - Automatik

DEBUG: Type: ST, ID: 0, Name: Softwareversion, divider: NODEF, unit: NODEF
Topic: d8/p4/ST000-Softwareversion, value: 50.04.05.12

DEBUG: Type: ST, ID: 1, Name: Datum Uhrzeit der Heizung, divider: NODEF, unit: NODEF
Topic: d8/p4/ST001-DatumUhrzeitderHeizung, value: Monday, 23. Jan. 2017 14:22:33
--- Ende Code ---
beginnen. Es werden Werte vom Kessel ausgelesen. Abhängig von der Software des Kessel können unterschiedliche Werte ausgelesen werden.

Beginnt die Ausgabe mit
--- Code: --- DEBUG: state
DEBUG: the result is:
Error: Opening '/dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller_D-if00-port0' failed, errno was (2) 'No such file or directory'
--- Ende Code ---
so kann das USB Device nicht geöffnet werden.


Testen der Übertragung auf dem fhem-Rechner
Auf dem fhem-Rechner eine Console öffnen und mosquitto_sub -h localhost -t "d8/p4/+" aufrufen. Danach auf dem Heizungsrechner das Skript starten. Die Ausgabe sollte ähnlich aussehen:

--- Code: --- mosquitto_sub -h localhost -t "d8/p4/+" 
ST000-Softwareversion|50.04.05.12
ST001-DatumUhrzeitderHeizung|Monday, 23. Jan. 2017 15:09:52
ST002-Heizungsstatus|3 - Heizen
ST003-Betriebsmodus|2 - Automatik
VA000-Kesseltemperatur|70.5 °C
VA001-Abgastemperatur|164 °C
VA003-Restsauerstoffgehalt|8.19 %
VA004-Aussentemperatur|-2 °C
VA007-Saugzugdrehzahl|1396 U/min
DO010-Sonde1oeffnen|0
DO011-Sonde2oeffnen|1
DO012-Sonde3oeffnen|0
VA012-LuftgeschwindigkeitinderAnsaugoeffnung|1.65 m/s
DO015-PelletsSaugturbine|0
VA021-Vorlauf-Isttemperatur|51.5 °C
VA022-Vorlauf-Solltemperatur|52.5 °C
VA025-Vorlauf-Isttemperatur|52 °C
VA026-Vorlauf-Solltemperatur|52.5 °C
VA093-Boilertemperaturoben|58.5 °C
VA098-Betriebsstunden|16796 h
VA113-FuellstandimPelletsbehaelter|97.19 %
VA118-Puffertemperaturoben|63 °C
VA120-Puffertemperaturunten|50.5 °C
VA140-PufferpumpenAnsteuerung|55 %
VA144-BoilerpumpeAnsteuerung|0 %
VA180-BetriebsstundenZuendung|1527 h
VA213-StundenseitletzterWartung|2729 h
VA221-StundenimHeizen|11553 h
VA273-Resetierbarerkg-Zaehler:|606 kg
VA274-Resetierbarert-Zaehler:|1 t
XX001-ResetierbarerVerbrauchszaehler|1606 kg
VA279-VerbleibendeHeizstundenbiszurAscheentleerenWarnung|434 h
VA114-AnzahlderBrennerstarts|10076
--- Ende Code ---

Wird keine Ausgabe angezeigt, dann den Fehler suchen, evtl. ist die IP-Adresse im Skript falsch ($mqttServerIP).


Sub in 99_myUtils.pm hinzufügen
Wird die Ausgabe angezeigt, so werden im nächsten Schritt die Einstellungen in fhem gemacht.
In der fhem-Datei 99_myUtils.pm muss die folgende Sub hinzugefügt werden:
--- Code: ---sub MqttGetReadingsFromMessage($$){
   my($device, $event) = @_;
   Log 3, $device;
   Log 3, $event;
   if (substr($event, 0, 12) eq "MqttRawMsg: ") {
       my $dotrigger = 1;
       my $RawMessages = substr($event, 12);
       my $hash = $defs{$device};
       my $readingName ="";
       my $readingValue ="";
       # Log 1, "$RawMessages";
       my @msg = split("\n",$RawMessages);
       my $e;
       readingsBeginUpdate($hash);
       foreach $e (@msg){
           ($readingName,$readingValue)=split(/\|/,$e);
           # Log 1, $e;
           # Log 1, $readingName;
           # Log 1, $readingValue;
           readingsBulkUpdate($hash, $readingName, $readingValue);
       }
       readingsEndUpdate($hash, $dotrigger);
   }
}
--- Ende Code ---
fhem muss anschließend neu gestartet werden.


Device in fhem hinzufügen
In fhem muss die Verbindung zum MQTT-Broker mosquitto definiert werden. Dies geschieht mit:

--- Code: ---define mqttbroker MQTT 127.0.0.1:1883
--- Ende Code ---
Das fhem Device mqttboker muss bei den Readings state auf opened stehen.

Dann können die zwei MQTT-Devices in fhem definiert werden:

--- Code: --- define heating.values MQTT_DEVICE
attr heating.values autoSubscribeReadings d8/p4/+

define heating.errors MQTT_DEVICE
attr heating.errors autoSubscribeReadings d8/p4-error/+
--- Ende Code ---

Jetzt müssen auf dem fhem-Rechner noch zwei Notify angelegt werden, damit die Sub MqttGetReadingsFromMessage aufgerufen wird:

--- Code: ---define nt.heating.values notify heating.values.* {MqttGetReadingsFromMessage($NAME,$EVENT)}
define nt.heating.errors notify heating.errors.* {MqttGetReadingsFromMessage($NAME,$EVENT)}
--- Ende Code ---

Wenn jetzt auf dem Heizungsrechner das Skript p4tomqtt.pl aufgerufen wird, sollten nach kurzer Zeit die Readings in den beiden Devices heating.values und heating.errors gefüllt werden.


Cronjob aus dem Heizungsrechner
Damit das Skript regelmäßig aufgerufen wird, sollte auf dem Heizungsrechner ein Cronjob /etc/cron.d/p4tomqtt angelegt werden:

--- Code: ---PATH=/sbin:/usr/sbin:/bin:/usr/bin

# start p4tomqtt every two minutes
*/2 * * * * root /usr/local/bin/p4tomqtt.pl >> /dev/null 2>&1

--- Ende Code ---

/edit: notify nt.heating.errors korrigiert.

Tropaion:
Hi

ich habe das Script installiert und im Grunde funktioniert es auch, aber zwei Fragen habe ich.

Bei mir kommt die Fehlermeldung im Script, wieso?

--- Zitat ---DEBUG: Type: XX, ID: 1, Name:
Resetierbarer Verbrauchszähler, divider: , unit:
kg
DEBUG: getVA
DEBUG: the result is: Getting value failed, error -1992
DEBUG: returncode was: 0
DEBUG: getVA
DEBUG: the result is: Getting value failed, error -1992
DEBUG: returncode was: 0
Argument "error" isn't numeric in multiplication (*) at p4tomqtt.pl line 244.
Argument "error" isn't numeric in addition (+) at p4tomqtt.pl line 244.
Topic: d8/p4/XX001-ResetierbarerVerbrauchszaehler,
value: 0 kg
--- Ende Zitat ---

Und, ist es normal das die Error-Meldung in einer "Wurst" kommen?
Siehe Bild.

Danke und Mfg,
Tropaion

SvenJust:
Hallo Tropaion!


--- Zitat von: Tropaion am 24 Januar 2017, 09:28:15 ---Bei mir kommt die Fehlermeldung im Script, wieso?

--- Ende Zitat ---

Du nutzt eine ältere Softwareversion für den Kessel, diese kennt die Werte für die Pelletverbrauch nicht. Am einfachsten ist es wenn Du im Skript die Zeile 395 löschst:

--- Code: ---MakeMqttMessage("XX","1","Resetierbarer Verbrauchszähler","","kg");
--- Ende Code ---
Ebenso sollte die Zeilen 393 und 394 "Resetierbarer kg-Zähler" und "Resetierbarer t-Zähler:" keine Werte liefern, die kannst Du auch löschen.

Es können in dem Bereich auch beliebige andere Werte vom Kessel abgefragt werden, je nach Konfiguration des Heizungskessels und der Heizungsanlage. Ich frage mit dem Skript eine Anlage mit einem Puffer, zwei Heiz- und Warmwasserkreisläufen, sowie drei Ansaugsonden für die Pellets ab. Eventuell ist Deine Anlage anders aufgebaut.

--- Code: ---MakeMqttMessage(<type>,<id>,<name>,<divider>,<unit>);
--- Ende Code ---
Die Parameter für die Abfrage der Werte <type>, <id> können aus dem Webinterface, Setup, Aufzeichnung abgelesen werden, siehe beiliegendes Bild. Der Wert für Name kann frei vergeben werden. <divider> wird oft bei Temperaturen benötigt, um 0,5° Schritte zu kodieren oder auch zehntel Prozent wie bei dem Restsauerstoffgehalt. Der Wert für <unit> kann wiederrum aus besagten Webinterface abgelesen werden.
 

--- Zitat von: Tropaion am 24 Januar 2017, 09:28:15 ---Und, ist es normal das die Error-Meldung in einer "Wurst" kommen?

--- Ende Zitat ---
Die "Wurst" ;D ist der String, der vom Heizungsrechner in einem Rutsch zum fhem-Rechner übertragen wird. Bei Dir ist das Notify nt.heating.errors noch falsch (war ein Fehler in meinem Post, ist dort jetzt korrigiert).
--- Code: ---define nt.heating.errors notify heating.errors.* {MqttGetReadingsFromMessage($NAME,$EVENT)}
--- Ende Code ---

Nach der Korrektur des notifys sollte die "Wurst" auf einzelne Readings aufgeteilt sein.

VG Sven

Tropaion:
Die Values bekomme ich eh einzeln Aufgelistet, ohne Notify, nur die Fehlermeldungen nicht.
Das Notify funktioniert auch nicht.

Mfg,
Tropaion

SvenJust:

--- Zitat von: Tropaion am 24 Januar 2017, 11:15:23 ---Die Values bekomme ich eh einzeln Aufgelistet, ohne Notify, nur die Fehlermeldungen nicht.

--- Ende Zitat ---
Nein, die Readings sind alt, sie haben alle einen Zeitstempel von 9:14, nur das Reading MqttRawMsg hat einen aktuellen Zeitstempel 11:31. Dieses Reading wird auch nicht auf die einzelnen Readings aufgeteilt.


--- Zitat von: Tropaion am 24 Januar 2017, 11:15:23 ---Das Notify funktioniert auch nicht.

--- Ende Zitat ---
Hast Du die Sub MqttGetReadingsFromMessage in 99_myUtils.pm hinzugefügt und fhem neugestartet? Wenn ja, setzte den Loglevel global auf 3 (attr global verbose 3) und rufe die Sub von Notify in fhem ( {MqttGetReadingsFromMessage("Froeling_Values","MqttRawMsg")} ) direkt auf. In der fhem Logdatei solltest Du etwas von der Sub finden (2017.01.24 11:32:06 3: MqttRawMsg: ST000-Softwareversion|50.04.05.12) Loglevel wieder zurücksetzen (attr global verbose 1) Wenn das Notify nicht aufgerufen wird, was steht im Event monitor?

VG Sven

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln