Fröling P4 einbinden

Begonnen von Tropaion, 07 Dezember 2014, 11:58:37

Vorheriges Thema - Nächstes Thema

Tropaion

Hallo Community,
Ich würde gerne die Steuerung unseres Pelletzkessels Fröhling P7 in FHEM einbinden, so das man ihn Steuern kann und Daten bekommt.
Hat das schon mal jemand probiert/umgesetzt?
Bzw. weis jemand etwas dazu?

Lg,
Tropaion

spooy99

Hi - habe einen S4 und hole mir die Werte via USB-Adapter auf einen PI - Anleitung von 'bashy' im Holzvergaser-Forum - Thema Visualisierungssoftware 3200. Dann hole ich die Daten via HTTPMOD nach FHEM und reagiere z.B. auf Feuererhaltung usw.

Leider tauch dein P7 nicht auf der Fröling-Homepage auf - ist der schon etwas älter - bzw. welche Steuerungssoftware nutzt der? Vorgenannter Weg sollte mit Lambdatronic 3100 und 3200 funktionieren.

FHEM auf Debian unter Hyper-V, HMLAN und KNX
Sonst: Fritzbox, Yamaha RX-V2065, Fröling S4 per MQTT, Enigma, Robonect, Hue, LG

Tropaion

Sorry, habe mich vertan, war P4 -.- http://www.froeling.com/at/produkte/pellets/pelletskessel-froeling-p4-pellet.html

Denn S4 kenne ich auch nicht, hab ihn auch nicht auf der Seite gefunden :D

Die Visualisierungssoftware hab ich schon gesehen, was kostet die denn? Auf Fröling sind keine Preise aufgelistet...
Ich hatte nur die Hoffnung gehabt das es auch ohne geht...

spooy99

Hi ... Den Thread samt Codezeilen usw findest Du unter folgendem Link:
http://www.holzvergaser-forum.de/index.php/forum/froehling/42741-visualisierungssoftware-3200

Ich habe den S4 turbo aber denke Funktionsweise usw. sind identisch.



FHEM auf Debian unter Hyper-V, HMLAN und KNX
Sonst: Fritzbox, Yamaha RX-V2065, Fröling S4 per MQTT, Enigma, Robonect, Hue, LG

SvenJust

#4
Das hier beschriebene Skript ist veraltet, eine aktuelle Version des Skriptes ist in diesem Thread beschrieben: https://forum.fhem.de/index.php/topic,65573.msg567703.html#msg567703


Hallo,

für die Anbindung des P4 (und auch S4) wurden im Holzvergaserforum zwei Möglichkeiten entwickelt. Zum einen ein rein lesender Zugriff per COM2 und zum anderen ein schreibender/lesender Zugriff per COM1-Schnittstelle.

Historisch gesehen wurde der lesende Zugriff per COM2 zuerst entwickelt, beschrieben wird dies im Thread https://www.holzheizer-forum.de/index.php?thread/42741-visualisierungssoftware-3200

Der lesende/schreibende Zugriff per COM1 wird in dem folgenden Thread behandelt: https://www.holzheizer-forum.de/index.php?thread/50090-annonce-p4d-visualisierung-und-einstellung-der-s-3200-via-com1

Ich habe unseren Frölingkessel per COM1 mit FHEM über einen MQTT Broker verbunden. Vom MQTT Broker bekommt fhem die Werte minütlich aktualisiert. Das funktioniert jetzt seit einem Monat ohne Auffälligkeiten. Beschrieben habe ich die Konfiguration zuerst unter: https://www.holzheizer-forum.de/index.php?thread/50090-annonce-p4d-visualisierung-und-einstellung-der-s-3200-via-com1/&postID=99938#post99938

Im Folgenden füge ich den Betrag hier hinzu:

Für die Übertragung der Daten aus der Fröling Steuerung nach MQTT und nutze ich ein Perl Script, p4tomqtt.pl. Dies liest die Daten mittels des Kommandozeilen-Tools p4 von horchi aus dem Thread https://www.holzheizer-forum.de/index.php?thread/50090-annonce-p4d-visualisierung-und-einstellung-der-s-3200-via-com1 aus und schickt diese Daten an einen MQTT Broker weiter.

Das Script p4tomqtt.pl habe ich unter Linux getestet, notwendig sind Perl und die Libraries Net::MQTT::Constants und Net::MQTT::Simple. Zum Installieren bitte das folgende ausführen.
cpan -i Net:MQTT:Simple
cpan -i Net:MQTT:Constants


In dem Script p4tomqtt.pl können die zu lesende Werte unten entsprechend angepasst werden.

Das Perl Script folgt, vielleicht kann es jemand gebrauchen, ich finde es extrem nützlich, da hiermit die Fröhling Steuerung in meine Hausautomatisierung eingebunden ist. Schreibzugriff von MQTT in die Fröling Steuerung ist NICHT implementiert, kann aber einfach ergänzt werden.

In der Zeile: my $usbdev=... muss die korrekte USB Schnittstelle eingetragen werden. Das Skript gibt auch einige Debugmeldungen aus. Wenn die Daten fehlerfrei bei fhem ankommen, können die Debugmeldungen mit $debug=0; ausgeschaltet werden.


#!/usr/bin/perl
use strict;
use warnings;
use Net::MQTT::Simple;

####### In der folgenden Zeile: 0 = keine Debugmeldungen, 1 = Debugmeldungen
my $debug = 1;
####### In der folgenden Zeile den USB-Adapter eintragen
my $usbdev="/dev/ttyUSB1";
####### In der folgenden Zeile die IP-Adresse des MQTT Servers eintragen
my $mqtt1 = Net::MQTT::Simple->new("192.168.20.240");

my $pretopic = "d8/p4";
my $swversion = ""; my $htime = ""; my $state = ""; my $mode = "";
initstate();

my %umlaute = ("ä" => "ae", "Ä" => "Ae", "ü" => "ue", "Ü" => "Ue", "ö" => "oe", "Ö" => "Oe", "ß" => "ss", " " => "" );
my $umlautkeys = join ("|", keys(%umlaute));

# Aufruf: p4ToMqtt(<Typ>,<ID>,<Name>,[<divider>],[<unit>])
sub p4ToMqtt{
my ($type, $id, $name, $divider, $unit) = @_;

if ($debug) {print STDERR "\nDEBUG: Type: $type, ID: $id, Name: $name, divider: $divider, unit: $unit \n";}
my $message = -1;

if ($type eq "VA"){
$message = getVA($id);
} elsif ($type eq "DO"){
$message = getDO($id);
} elsif ($type eq "ST"){
$message = getST($id);
}

if ($message ne -1){
if (($divider) and ($divider ne 0)){
$message = (int(($message / $divider) * 100))/100;
}
if ($unit) {
$message = "$message $unit";
}

$id = sprintf("%03d", $id);
$name = normalizeString($name);

if ($debug) {print STDERR "Topic: $pretopic/$type$id-$name, Message: $message\n";}
# Weitere MQTT Server ggfs ergänzen: for my $server ($mqtt1,$mqtt2,...) {
for my $server ($mqtt1) {
$server->publish("$pretopic/$type$id-$name", "$message");
}
}
}

sub getST {
my $address = shift;

if ($address == 0) {return $swversion}
elsif ($address == 1) {return $htime}
elsif ($address == 2) {return $state}
elsif ($address == 3) {return $mode}
else {return (-1)}
}

sub getVA {
my $address = shift;
my $vline = `/usr/local/bin/p4 getv -a "$address" -d "$usbdev" 2>&1`;
my $RC = ${^CHILD_ERROR_NATIVE}/256;
chomp($vline);

if ($debug) {
print STDERR "DEBUG: getVA \n";
print STDERR "DEBUG: the result is: $vline\n";
print STDERR "DEBUG: returncode was: $RC\n";
}

if ($RC eq 0) {
return((split(/ /,$vline))[3]);
}else{
return(-1);
}
}

sub getDO {
my $address = shift;
my $vline = `/usr/local/bin/p4 getdo -a "$address" -d "$usbdev" 2>&1`;
my $RC = ${^CHILD_ERROR_NATIVE}/256;
chomp($vline);

if ($debug) {
print STDERR "DEBUG: getDO \n";
print STDERR "DEBUG: the result is: $vline\n";
print STDERR "DEBUG: returncode was: $RC\n";
}

if ($RC eq 0) {
return((split(/ /,$vline))[3]);
}else{
return(-1);
}
}

sub initstate {
$swversion = "";
$htime = "";
$state = "";
$mode = "";

my $vline = `/usr/local/bin/p4 state -d "$usbdev" 2>&1`;
my $RC = ${^CHILD_ERROR_NATIVE}/256;
chomp($vline);

if ($debug) {
print STDERR "DEBUG: state \n";
print STDERR "DEBUG: the result is:\n$vline\n";
print STDERR "DEBUG: returncode was: $RC\n";
}

if ($RC eq 0) {
my @lines = split /\n/, $vline;
$swversion = ((split(/ /,$lines[0]))[1]);
$htime = ((split(/Time: /,$lines[1]))[1]);
$state = $lines[2];
$mode = $lines[3];
}else{
return(-1);
}

if ($debug) {print STDERR "SWversion: $swversion, Zeit: $htime, Status: $state, Modus: $mode\n";}

}

sub normalizeString {
my $name = shift;
$name =~ s/($umlautkeys)/$umlaute{$1}/g;
return $name;
}

########################################################### Main #################################################
# Hier die zu lesenden Werte der Steuerung eintragen.

p4ToMqtt("ST","0","Softwareversion");
p4ToMqtt("ST","1","Datum Uhrzeit der Heizung");
p4ToMqtt("ST","2","Heizungsstatus");
p4ToMqtt("ST","3","Betriebsmodus");
p4ToMqtt("VA","0","Kesseltemperatur", 2, "°C");
p4ToMqtt("VA","1","Abgastemperatur","","°C");
p4ToMqtt("VA","3","Restsauerstoffgehalt", 10, "%");
p4ToMqtt("VA","4","Außentemperatur",2,"°C");
p4ToMqtt("VA","7","Saugzugdrehzahl","","U/min");
p4ToMqtt("DO","10","Sonde 1 öffnen");
p4ToMqtt("DO","11","Sonde 2 öffnen");
p4ToMqtt("DO","12","Sonde 3 öffnen");
p4ToMqtt("VA","12","Luftgeschwindigkeit in der Ansaugöffnung", 100,"m/s");
p4ToMqtt("DO","15","Pellets Saugturbine");
p4ToMqtt("VA","25","Vorlauf-Isttemperatur", 2, "°C");
p4ToMqtt("VA","26","Vorlauf-Solltemperatur", 2, "°C");
p4ToMqtt("VA","93","Boilertemperatur oben", 2, "°C");
p4ToMqtt("VA","98","Betriebsstunden","","h");
p4ToMqtt("VA","113","Füllstand im Pelletsbehälter", 207, "%");
p4ToMqtt("VA","118","Puffertemperatur oben", 2, "°C");
p4ToMqtt("VA","120","Puffertemperatur unten", 2, "°C");
p4ToMqtt("VA","140","Pufferpumpen Ansteuerung", "", "%");
p4ToMqtt("VA","144","Boilerpumpe Ansteuerung", "", "%");
p4ToMqtt("VA","212","Betriebsstunden Zündung","","h");
p4ToMqtt("VA","213","Stunden seit letzter Wartung","","h");
p4ToMqtt("VA","273","Resetierbarer kg-Zähler:","","kg");
p4ToMqtt("VA","274","Resetierbarer t-Zähler:","","t");
p4ToMqtt("VA","279","Verbleibende Heizstunden bis zur Asche entleeren Warnung","","h");


Viele Grüße
Sven

/edit1, 13.12.2015: Skript um die ersten vier Zeilen ergänzt und cpan -i Net:MQTT:Constants
/edit2, 01.06.2016: USB-Schnittstelle konfigurierbar in Zeile: my $usbdev=
/edit3, 28.10.2016: Links zum Holzheizer-Forum angepasst.
FTUI, Raspberry PI/SSD, CUL CC1101, HMLAN, 10x HM-LC-Bl1PBU-FM, HM-LC-Sw4-WM (KWL Pluggit P300), HM-WDS30-OT2-SM (Sonnensensor), HM-Sec-SCo, LW-12 Wifi LED, CUL Selbstbau nanoCUL 433 (IT), Arduino (S0-Stromverbrauch), OW DS2480 (OWX_ASYNC) 8x DS18B20, MQTT (Fröling P4), MYSENSORS (Roto Rollläden)

Tropaion

#5
Wie schließt du denn COM1 an FHEM? Ich verwende FHEM auf einem RasPi.
Gibt es da einen Adapter welchen du verwendest?

Ich kenn mich in dem Bereich noch sehr schlecht aus, darum bräuchte ich ein paar Ansätze bitte ;)

Danke und Mfg,
Tropaion

Tropaion

#6
Habe mich jetzt genauer eingelesen und wollte dich fragen ob du so etwas schon mal verwendet hast:
https://www.amber-wireless.de/de/produkte/funkmodule/alle-wireless-module/868-mhz-long-range-funkmodem-rs232-amb8350.html
Das Gerät könnte dann eig. direkt mit der CUL kommunizieren. Ist das möglich?

Und ich hätte auch überlegt ob ich einen RS232 to Wlan Adapter nehmen könnte, damit ich nicht extra einen Pi in denn Keller stellen muss.
Wäre das möglich?

SvenJust

Hallo Tropaion,

bei mir betreibe ich die Heizung in dem folgenden Layout. Das Heizungshaus, mit Heizung und Raspi, ist räumlich von meinem Wohnhaus etwa 30m entfernt und per WLAN an das Hausnetz angebunden. Falls die WLAN-Verbindung mal unterbrochen wird, wird diese automatisch wieder hergestellt und die Daten werden wieder an den MQTT Broker übermittelt. Auf dem Raspi im Heizungshaus ist kein Fhem installiert.

Ich verwende für die Verbindung der Heizung von COM1 zu einem Raspberry einen einfachen USB auf RS232 Adapter (http://www.amazon.de/Manhattan-USB-Seriell-Konverter-USB-Seriell/dp/B0007OWNYA/ref=sr_1_fkmr1_1?s=ce-de&ie=UTF8&qid=1435041896&sr=1-1-fkmr1&keywords=RS232+auf+WLAN-Adapter).

Für die Verbindung der Heizung COM1 zum Raspi habe ich eine geschirmte 4 Draht Leitung verwendet. Die Leitung ist etwa 10m lang. Die Leitung ist auf einen weiblichen RS232 Stecker gelötet und mit dem USB Adapter verbunden. Der USB Adapter steckt in einem USB Hub, welcher mit dem Raspi verbunden ist.

Der Raspberry liest die Daten der Heizung aus und schriebt die Werte in einen entfernten MQTT Broker. Der MQTT Broker ist auf dem Fhem-Rechner (Banana PI, Raspi geht ebenso) im Wohnhaus installiert. Vom MQTT Broker werden die Werte nach Fhem geschrieben.

Die Verwendung von Standardkomponenten (Raspi, WLAN) macht die Fehlersuche einfach und falls etwas defekt ist, auch den Austausch von defekten Teilen.

Erfahrungen bei der Verwendung von 868 MHZ FUNKMODEM RS232 habe ich keine.

VG
Sven
FTUI, Raspberry PI/SSD, CUL CC1101, HMLAN, 10x HM-LC-Bl1PBU-FM, HM-LC-Sw4-WM (KWL Pluggit P300), HM-WDS30-OT2-SM (Sonnensensor), HM-Sec-SCo, LW-12 Wifi LED, CUL Selbstbau nanoCUL 433 (IT), Arduino (S0-Stromverbrauch), OW DS2480 (OWX_ASYNC) 8x DS18B20, MQTT (Fröling P4), MYSENSORS (Roto Rollläden)

Tropaion

Verstehe, aber irgendwie verstehe ich das mit dem MQTT Broker noch nicht wirklich.

Habe jetzt auch einen RasPi mit einem RS232 Adapter genommen und über DLAN ins Netz gebracht.
Ich habe das Installationsscript von der GitHub-Seite ausgeführt: https://github.com/horchi/linux-p4d nur hab ich keine Ahnung wie es weitergeht, die Anleitung ist da ein wenig verwirrend für mich. Ich kann auf die "It Works"-Seite zugreifen. Wie muss ich fortfahren?

Danke und Mfg,
Tropaion

SvenJust

Hallo,

,,It works" ist die Willkommensmeldung vom Apache Server, nicht vom p4d Script. Wenn das p4d Script korrekt installiert ist, kommt beim Aufruf die unten stehende Website.

Was steht bei Dir im Verzeichnis /var/www/ ? Falls im Verzeichnis ,,/var/www/" eine Datei ,,index.html" vorhanden ist, benenne diese doch bitte um in ,,index.html.weg" und versuche die Webseite erneut aufzurufen.

Wenn Du die p4d Seite korrekt aufrufen kannst, machen wir mit dem mqtt Broker weiter.

VG
Sven
FTUI, Raspberry PI/SSD, CUL CC1101, HMLAN, 10x HM-LC-Bl1PBU-FM, HM-LC-Sw4-WM (KWL Pluggit P300), HM-WDS30-OT2-SM (Sonnensensor), HM-Sec-SCo, LW-12 Wifi LED, CUL Selbstbau nanoCUL 433 (IT), Arduino (S0-Stromverbrauch), OW DS2480 (OWX_ASYNC) 8x DS18B20, MQTT (Fröling P4), MYSENSORS (Roto Rollläden)

Tropaion

#10
Hallo SvenJust, danke für deine Hilfe!

Sofort nachdem ich aus Rom zurückgekehrt bin hab ich das durchgeführt was du gesagt hast und jetzt sieht es so aus!
Ich nehmen mal das eine erfolgreiche Verbindung besteht?

Lg,
Missing1996

SvenJust

Hallo,

ja, die Kommunikation scheint erfolgreich aufgebaut worden zu sein (Fröling p4 ONLINE).

Jetzt gibt es zwei Optionen weiter zu machen: a) Einlesen der Heizungkonfiguration in das jetzt laufende Skript oder b) direkt den MQTT Broker installieren und verbinden. Ich würde empfehlen mit a) weiter zu machen, da Fehler dann leichter gefunden werden.

Also im Webinterface auf ,,Login" klicken und Logindaten eingeben (User: p4 Pass: p4-3200), dann 2.) Setup -> Aufzeichnung -> Init select the values you like to record and store your selection (click 'Speichern') 3.) Menu -> Init 4.) Menu -> Aktualisieren. Steht alles hier: https://github.com/horchi/linux-p4d#setup-and-configure-webif

Danach sollten in dem Script Messwerte angezeigt werden.

Dann geht es mit der Installation des MQTT Brokers weiter. Unter Debian und auf dem Raspi mit apt-get install mosquitto
Details habe ich hier http://forum.fhem.de/index.php/topic,30088.msg293487.html#msg293487 beschrieben. Weiteres zu Mosquitto gibt es hier: http://mosquitto.org/

Ist der MQTT Broker installiert, muss Perl um die mqtt Library ergänzt werden, der folgende Befehl ist im Terminal einzugeben: cpan -i Net:MQTT:Simple

Dann den Code aus dem Post in einer Datei speichern, ich habe die Datei unter /usr/local/bin/p4tomqtt.pl gespeichert und in dem Script die IP des Servers anpassen, dritte Zeile im Script.

In Fhem muss dann die Verbindung zum MQTT Broker hergestellt werden, http://fhem.de/commandref.html#MQTT

Viel Erfolg
Sven
FTUI, Raspberry PI/SSD, CUL CC1101, HMLAN, 10x HM-LC-Bl1PBU-FM, HM-LC-Sw4-WM (KWL Pluggit P300), HM-WDS30-OT2-SM (Sonnensensor), HM-Sec-SCo, LW-12 Wifi LED, CUL Selbstbau nanoCUL 433 (IT), Arduino (S0-Stromverbrauch), OW DS2480 (OWX_ASYNC) 8x DS18B20, MQTT (Fröling P4), MYSENSORS (Roto Rollläden)

Tropaion

Ok, da hab ich schon das erste Problem.
Wenn ich auf Aufzeichnung gehe, kann ich nichts auswählen und wenn ich init drücke ändert sich auch nichts.


SvenJust

Schau mal in die Datei /var/log/syslog

Stehen dort Fehlermeldungen bzgl. p4d?
FTUI, Raspberry PI/SSD, CUL CC1101, HMLAN, 10x HM-LC-Bl1PBU-FM, HM-LC-Sw4-WM (KWL Pluggit P300), HM-WDS30-OT2-SM (Sonnensensor), HM-Sec-SCo, LW-12 Wifi LED, CUL Selbstbau nanoCUL 433 (IT), Arduino (S0-Stromverbrauch), OW DS2480 (OWX_ASYNC) 8x DS18B20, MQTT (Fröling P4), MYSENSORS (Roto Rollläden)

Tropaion

#14
Ne da steht gar nichts über p4d drinnen.
Es steht überhaupt kein Error drinnen.
Soll ich vll mal COM2 probieren? Oder kann es sein das man denn Bedienlevel umstellen muss?