Ebus Messages zusammenbauen und senden

Begonnen von Antarctica, 21 Mai 2020, 17:07:00

Vorheriges Thema - Nächstes Thema

Antarctica

Hallo zusammen,

Ich weiß nicht ob ich hier richtig bin mit einer Frage zu Ebus, aber ich zerbreche mir schon den Kopf darüber und habe kein einsteigerfreundliches Tutorial gefunden.

Ich habe ein Raspberry Pi Zero mit Ebus Adapter 2.1 (Raspi Platine) an einen Ebus angeschlossen, an dem auch eine Heizung "Vaillant ecoTec Plus" angeschlossen ist und ein Inennraumthermostat "Vaillant VRT50", und habe ebusd soweit konfiguriert dass ich folgende Ausgabe bekomme:

Zitatebusctl scan result
08;Vaillant;BAI00;0104;7803
15;Vaillant;05000;0113;9601
84;Vaillant;OTS00;0205;9101

Nun muss ich dem Raspi möglichst folgende drei Befehle beibringen:

- Hole aktuelle Innentemperatur (Ist).
- Hole aktuelle Temperatureinstellung (Soll).
- Stelle Zieltemperatur auf x°C.

Kann ich solche Befehle dann einfach mit "ebusctl write" wegsenden, oder muss ich da noch irgendwas beachten?

Die restliche Logik (hole aus dem Internet die Information, wann die Temperatur auf welchen Wert geändert werden soll und agiere entsprechend, sende aktuelle Werte wieder ins Internet) habe ich schon von einer gpio-schaltbaren Steckdose hier rumfliegen.

Weiß jemand wie man solche Vaillant-spezifischen Befehle zusammenbauen kann oder wo ein einsteigerfreundliches Tutorial dazu zu finden ist?

Prof. Dr. Peter Henning

Ja. In der ausführlichen Dokumentation zum ebusd.

Im Übrigen handelt es sich dabei um keine FHEM-bezogene Frage.

LG

pah


Beta-User

Falls die Frage (auch) ist, wie du den Ebus von FHEM aus kontrollierst: Vermutlich am einfachsten via MQTT (MQTT2_DEVICE). Näheres steht im Wiki, einstieg evtl. über die Praxisbeispiele zu MQTT2_DEVICE.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Antarctica

Zitat von: Prof. Dr. Peter Henning am 22 Mai 2020, 03:45:13
Ja. In der ausführlichen Dokumentation zum ebusd.
Dann bin ich zu blöd diese zu finden oder etwas darin zu finden. Unter der Annahme, dass wir über https://github.com/john30/ebusd/wiki/3.1.-TCP-client-commands reden, die dortigen Beispiele liefern bei mir "element not found" und ich kriege nicht die für meine Anlage richtigen Parameter raus:

read -c mc Timer.Monday from.0
ERR: element not found
ebusctl read -c mc temp scan.08
ERR: element not found
ebusctl find -f -c broadcast outsidetemp
ERR: element not found
ebusctl find -f -c broadcast temp
ERR: element not found
ebusctl find -f -c broadcast insidetemp
ERR: element not found


Ein "find" ohne Parameter ist auch nur sehr bedingt aussagekräftig:
ebusctl find
broadcast datetime = no data stored
broadcast error = no data stored
broadcast ident = no data stored
broadcast signoflife = no data stored
broadcast ident = no data stored
memory eeprom = no data stored
memory ram = no data stored
scan.08 ident = Vaillant;BAI00;0104;7803
scan.15 ident = Vaillant;05000;0113;9601
scan.84 ident = Vaillant;OTS00;0205;9101


ZitatIm Übrigen handelt es sich dabei um keine FHEM-bezogene Frage.
Davon ging ich aus, aber da ich auch kein Forum für ebusd-spezifische Fragen gefunden habe und ich den ebus-Adapter über dieses Forum hier gefunden habe, habe ich es hier trotzdem mal versucht.

Damian

#4
Man muss sich die Informationen etwas zusammensuchen.

Bei mir läuft ebusd Version 3.4 mit mqtt auf einem raspi 2, der sendet die Messages auf mein FHEM-raspi, dort werden sie im Mqtt-Device ausgewertet.

Hier paar Auszüge:

Konfigurationsdatei für ebusd auf raspi 2

# /etc/default/ebusd:
EBUSD_OPTS="--scanconfig --accesslevel=* --mqttport=1883 --mqttjson --mqtthost=192.168.178.33 --mqtttopic=ebusd/%circuit/%name"


MQTT2_Device auf FHEM-raspi (192.168.178.33)

defmod vaillant MQTT2_DEVICE ebusd_bai
attr vaillant IODev MQTT2_FHEM_Server
attr vaillant devStateStyle style="text-align:left"
attr vaillant event-on-change-reading .*
attr vaillant group Ebus
attr vaillant icon sani_boiler_temp
attr vaillant jsonMap Status01_0_value:Vorlauf Status01_0_name:0\
Status01_1_value:Ruecklauf Status01_1_name:0\
Status01_2_value:Aussentemp Status01_2_name:0\
Status01_3_value:Warmwasser Status01_3_name:0\
Status01_4_value:WWSpeicher Status01_4_name:0\
Status01_5_value:Pumpenstatus Status01_5_name:0\
Flame_0_value:Flame Flame_0_name:0\
Storageloadpump_percent0_value:Storageloadpump\
FlowTempDesired_temp_value:VorlaufSoll\
Hc1HeatCurve_0_value:HeizKennlinie Hc1HeatCurve_0_name:0\
HolidayEndPeriod_hto_value:FerienEnde\
HolidayStartPeriod_hfrom_value:FerienBeginn\
PumpPower_0_value:PumpenLeistung PumpPower_0_name:0\
PrimaryCircuitFlowrate_uin100_value:Umlaufmenge\
z1DayTemp_tempv_value:TagSolltemp\
z1NightTemp_tempv_value:NachtSolltemp\
FanSpeed_0_value:LuefterDrehzahl FanSpeed_0_name:0\
WaterPressure_pressv_value:Wasserdruck\
z1OpMode_opmode_value:Heizmodus
attr vaillant model eBus_bai_jsonmap
attr vaillant readingList ebusd/bai/PumpHours:.* { json2nameValue($EVENT, 'PumpHours_', $JSONMAP) }\
ebusd/bai/WPPostrunTime:.* { json2nameValue($EVENT, 'WPPostrunTime_', $JSONMAP) }\
ebusd/bai/PowerValue:.* { json2nameValue($EVENT, 'PowerValue_', $JSONMAP) }\
ebusd/bai/StorageExitTemp:.* { json2nameValue($EVENT, 'StorageExitTemp_', $JSONMAP) }\
ebusd/global/version:.* version\
ebusd/global/running:.* running\
ebusd/scan\x5c\x2e08/:.* { json2nameValue($EVENT, 'scan.08_', $JSONMAP) }\
ebusd/scan\x5c\x2e08/id:.* { json2nameValue($EVENT, 'id_', $JSONMAP) }\
ebusd/global/uptime:.* uptime\
ebusd/global/signal:.* signal\
ebusd/scan\x5c\x2e15/:.* { json2nameValue($EVENT, 'scan.15_', $JSONMAP) }\
ebusd/scan\x5c\x2e15/id:.* { json2nameValue($EVENT, 'id_', $JSONMAP) }\
ebusd/bai/FanSpeed:.* { json2nameValue($EVENT, 'FanSpeed_', $JSONMAP) }\
ebusd/bai/PumpPower:.* { json2nameValue($EVENT, 'PumpPower_', $JSONMAP) }\
ebusd/broadcast/vdatetime:.* { json2nameValue($EVENT, 'vdatetime_', $JSONMAP) }\
ebusd/broadcast/outsidetemp:.* { json2nameValue($EVENT, 'outsidetemp_', $JSONMAP) }\
ebusd/bai/DateTime:.* { json2nameValue($EVENT, 'DateTime_', $JSONMAP) }\
ebusd/global/updatecheck:.* updatecheck\
ebusd/bai/DCFTimeDate:.* { json2nameValue($EVENT, 'DCFTimeDate_', $JSONMAP) }\
ebusd/bai/PumpPowerDesired:.* { json2nameValue($EVENT, 'PumpPowerDesired_', $JSONMAP) }\
ebusd/bai/HwcImpellorSwitch:.* { json2nameValue($EVENT, 'HwcImpellorSwitch_', $JSONMAP) }\
ebusd/bai/ReturnTemp:.* { json2nameValue($EVENT, 'ReturnTemp_', $JSONMAP) }\
ebusd/700/HwcStorageTempBottom:.* { json2nameValue($EVENT, 'HwcStorageTempBottom_', $JSONMAP) }\
ebusd/700/HwcTempDesired:.* { json2nameValue($EVENT, 'HwcTempDesired_', $JSONMAP) }\
ebusd/bai/FanPWMSum:.* { json2nameValue($EVENT, 'FanPWMSum_', $JSONMAP) }\
ebusd/bai/HcHours:.* { json2nameValue($EVENT, 'HcHours_', $JSONMAP) }\
ebusd/bai/HoursTillService:.* { json2nameValue($EVENT, 'HoursTillService_', $JSONMAP) }\
ebusd/bai/PumpHwcFlowNumber:.* { json2nameValue($EVENT, 'PumpHwcFlowNumber_', $JSONMAP) }\
ebusd/bai/WP:.* { json2nameValue($EVENT, 'WP_', $JSONMAP) }\
ebusd/700/WaterPressure:.* { json2nameValue($EVENT, 'WaterPressure_', $JSONMAP) }\
ebusd/bai/PrimaryCircuitFlowrate:.* { json2nameValue($EVENT, 'PrimaryCircuitFlowrate_', $JSONMAP) }\
ebusd/bai/Flame:.* { json2nameValue($EVENT, 'Flame_', $JSONMAP) }\
ebusd/bai/Storageloadpump:.* { json2nameValue($EVENT, 'Storageloadpump_', $JSONMAP) }\
ebusd/bai/Status01:.* { json2nameValue($EVENT, 'Status01_', $JSONMAP) }\
ebusd/bai/FlowTempDesired:.* { json2nameValue($EVENT, 'FlowTempDesired_', $JSONMAP) }\
ebusd/700/FrostOverRideTime:.* { json2nameValue($EVENT, 'FrostOverRideTime_', $JSONMAP) }\
ebusd/700/Hc1ActualFlowTempDesired:.* { json2nameValue($EVENT, 'Hc1ActualFlowTempDesired_', $JSONMAP) }\
ebusd/700/Hc1AutoOffMode:.* { json2nameValue($EVENT, 'Hc1AutoOffMode_', $JSONMAP) }\
ebusd/700/Hc1CircuitType:.* { json2nameValue($EVENT, 'Hc1CircuitType_', $JSONMAP) }\
ebusd/700/Hc1HeatCurve:.* { json2nameValue($EVENT, 'Hc1HeatCurve_', $JSONMAP) }\
ebusd/700/HcStorageTempBottom:.* { json2nameValue($EVENT, 'HcStorageTempBottom_', $JSONMAP) }\
ebusd/700/HcStorageTempTop:.* { json2nameValue($EVENT, 'HcStorageTempTop_', $JSONMAP) }\
ebusd/700/HolidayTemp:.* { json2nameValue($EVENT, 'HolidayTemp_', $JSONMAP) }\
ebusd/700/OpMode:.* { json2nameValue($EVENT, 'OpMode_', $JSONMAP) }\
ebusd/700/z1RoomTemp:.* { json2nameValue($EVENT, 'z1RoomTemp_', $JSONMAP) }\
ebusd/700/z1SFMode:.* { json2nameValue($EVENT, 'z1SFMode_', $JSONMAP) }\
ebusd/700/z1OpMode:.* { json2nameValue($EVENT, 'z1OpMode_', $JSONMAP) }\
ebusd/700/Time:.* { json2nameValue($EVENT, 'Time_', $JSONMAP) }\
ebusd/bai/EbusVoltage:.* { json2nameValue($EVENT, 'EbusVoltage_', $JSONMAP) }\
ebusd/bai/extWP:.* { json2nameValue($EVENT, 'extWP_', $JSONMAP) }\
ebusd/bai/FanStarts:.* { json2nameValue($EVENT, 'FanStarts_', $JSONMAP) }\
ebusd/700/z1NightTemp:.* { json2nameValue($EVENT, 'z1NightTemp_', $JSONMAP) }\
ebusd/700/z1DayTemp:.* { json2nameValue($EVENT, 'z1DayTemp_', $JSONMAP) }\
ebusd/700/HolidayStartPeriod:.* { json2nameValue($EVENT, 'HolidayStartPeriod_', $JSONMAP) }\
ebusd/700/HolidayEndPeriod:.* { json2nameValue($EVENT, 'HolidayEndPeriod_', $JSONMAP) }\
ebusd/bai/PrEnergyCountHc1:.* { json2nameValue($EVENT, 'PrEnergyCountHc1_', $JSONMAP) }\
ebusd/bai/PrEnergyCountHwc1:.* { json2nameValue($EVENT, 'PrEnergyCountHwc1_', $JSONMAP) }\
ebusd/bai/PrEnergySumHc1:.* { json2nameValue($EVENT, 'PrEnergySumHc1_', $JSONMAP) }\
ebusd/bai/PrEnergySumHwc1:.* { json2nameValue($EVENT, 'PrEnergySumHwc1_', $JSONMAP) }\
\
\
\

attr vaillant room Ebus,MQTT2_DEVICE
attr vaillant setList HeizKennlinie:selectnumbers,0,.1,2,1,lin ebusd/700/Hc1HeatCurve/set $EVTPART1\
TagSolltemp:selectnumbers,15,1,25,1,lin ebusd/700/z1DayTemp/set $EVTPART1\
NachtSolltemp:selectnumbers,15,1,25,1,lin ebusd/700/z1NightTemp/set $EVTPART1


Und hier noch die Visualisierung und das Pollen bestimmter Infos auf FHEM-Raspi:


defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set("MQTT2_FHEM_Server publish ebusd/bai/$_/get")}}\
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set("MQTT2_FHEM_Server publish ebusd/bai/$_/get")}}\
{[00:01];;foreach (qw(PrEnergyCountHc1 PrEnergyCountHwc1 PrEnergySumHc1 PrEnergySumHwc1)) {fhem_set("MQTT2_FHEM_Server publish ebusd/bai/$_/get")}}\
{[+01:00];;foreach (qw(z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set("MQTT2_FHEM_Server publish ebusd/700/$_/get")}}\
{if ([00:05|WE]) {fhem_set("MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year");;fhem_set("MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year")}}
attr di_vaillant event-on-change-reading .*
attr di_vaillant room Ebus
attr di_vaillant uiTable {\
  package ui_Table;;\
  $TC{0..5}="align='center'";;\
  $TD{3}{0..1}="colspan=3";;\
  $TD{4}{0..1}="colspan=3";;\
  $TD{5}{0..2}="colspan=2";;\
  $TD{7}{0}="colspan=6";;\
}\
\
style("Außen","Darkorange")|style("Therme","Darkorange")|style("WW-Sp.","Darkorange")|style("Zirk.","Darkorange")|style("Vorlauf","Darkorange")|style("Rücklauf","Darkorange")\
ICON("temp_outside")|\
icon([vaillant:Flame],"sani_boiler_temp","sani_boiler_temp\@Darkorange")|\
ICON([vaillant:Pumpenstatus] eq "4" ? "sani_buffer_temp_down\@Darkorange" : "sani_buffer_temp_down")|\
icon([Zirk],"sani_pump")|\
ICON([vaillant:Pumpenstatus] eq "on" ? "sani_floor_heating_neutral\@Darkorange" : "sani_floor_heating_neutral")|\
ICON("sani_floor_heating_neutral")\
temp_bar([vaillant:Aussentemp],-15,40)|\
temp_bar([vaillant:Vorlauf],15,70)|\
temp_bar([vaillant:WWSpeicher],15,70)|\
temp_bar([ESPEasy_ESP_Temp_Zirkulation:Temperature],15,45)|\
temp_bar([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45)|\
temp_bar([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,45)\
style("Umlaufmenge","Darkorange")|style("Wasserdruck","Darkorange")\
ring([vaillant:Umlaufmenge],0,20,120,0,"l/min",120)|ring([vaillant:Wasserdruck],0,3,0,180,"bar",120)\
style("Heizkennlinie","Darkorange")|style("Tagtemperatur","Darkorange")|style("Nachttemperatur","Darkorange")\
ICON("time_graph")|WID([vaillant:HeizKennlinie],"selectnumbers,0.4,.1,1,1,lin","set")|\
ICON("scene_day\@yellow")|temp_knob([vaillant:TagSolltemp],"yellow")|\
ICON("scene_night\@#3464eb")|temp_knob([vaillant:NachtSolltemp],"#3464eb")\
::SVG_FwFn("WEBHOME","P01","",{})\


Das Ergebnis im Anhang:
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF