FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: Torxgewinde am 18 Februar 2023, 08:19:52

Titel: OpenMQTTGateway/BLE eQ-3 eqiva Heizkörperventil,CC-RT-BLE (RTV) Sollwert senden
Beitrag von: Torxgewinde am 18 Februar 2023, 08:19:52
OpenMQTTGateway kann Bluetooth-Low-Energy (BLE) Geräte empfangen und auch ansteuern. Das Ansteuern ist IMHO nicht so einfach, da man sich die Service IDs und Characteristic IDs zusammensuchen muss, und die eQ3 Heizkörperventile dann auch ihren Sollwert in spezieller Form erhalten müssen.

Als Fingerübung und zum Verständnis hier ein paar Befehle wie man ein eQ-3 eqiva Bluetooth CC-RT-BLE Ventil mit MQTT und einem OpenMQTTGateway+BLE auf einem ESP32 steuern kann (ohne FHEM). Das Ventil habe die Adresse "AA:BB:CC:DD:EE:FF", dies kann man recht einfach finden, wenn man dem Gateway zuschaut und ein Gerät mit "CC-RT-BLE" empfangen wird. Einen Pincode brauchte ich übrigens nicht.
##auf 30.0°C stellen = ON (HEX Wert ist 0x3C=60=2*30.0°C, die 0x41 davor ist fix)
mosquitto_pub -t "OpenMQTTGateway/commands/MQTTtoBT/config" -p 1883 -h server.lan -u "Nutzername" -P "passwort123" -m '{
  "ble_write_address":"AA:BB:CC:DD:EE:FF",
  "ble_write_service":"3e135142-654f-9090-134a-a6ff5bb77046",
  "ble_write_char":"3fa4585a-ce4a-3bad-db4b-b8df8179ea09",
  "ble_write_value":"413C",
  "value_type":"HEX",
  "ttl":4,
  "immediate":true }'

##auf 4.5°C stellen = OFF (HEX Wert ist 0x09=9=2*4.5°C, die 0x41 davor ist fix)
mosquitto_pub -t "OpenMQTTGateway/commands/MQTTtoBT/config" -p 1883 -h server.lan -u "Nutzername" -P "passwort123" -m '{
  "ble_write_address":"AA:BB:CC:DD:EE:FF",
  "ble_write_service":"3e135142-654f-9090-134a-a6ff5bb77046",
  "ble_write_char":"3fa4585a-ce4a-3bad-db4b-b8df8179ea09",
  "ble_write_value":"4109",
  "value_type":"HEX",
  "ttl":4,
  "immediate":true }'

##auf 5.5°C stellen (HEX Wert ist 0x0B=11=2*5.5°C, die 0x41 davor ist fix)
mosquitto_pub -t "OpenMQTTGateway/commands/MQTTtoBT/config" -p 1883 -h server.lan -u "Nutzername" -P "passwort123" -m '{
  "ble_write_address":"AA:BB:CC:DD:EE:FF",
  "ble_write_service":"3e135142-654f-9090-134a-a6ff5bb77046",
  "ble_write_char":"3fa4585a-ce4a-3bad-db4b-b8df8179ea09",
  "ble_write_value":"410B",
  "value_type":"HEX",
  "ttl":4,
  "immediate":true }'

usw...


Bildet man das Device in FHEM ab, geht das auch (bei setList muss es alles in einer Zeile sein, die ist dadurch recht lang):
defmod Thermostat.device MQTT2_DEVICE
attr Thermostat.device IODev Mosquitto
attr Thermostat.device alias Thermostat
attr Thermostat.device comment Der Wert in Celsius (auch mit Komma) muss mal zwei gerechnet werden und dann nach uint8_t und dann als zwei Hex-Ziffern an 0x41 anfügen
attr Thermostat.device devicetopic OpenMQTTGateway/BTtoMQTT/AABBCCDDEEFF
attr Thermostat.device group Thermometer
attr Thermostat.device icon sani_heating
attr Thermostat.device readingList $DEVICETOPIC:.* { my $ret=json2nameValue($EVENT);; return $ret }
attr Thermostat.device setList temperaturesetpoint:knob,min:4.5,max:30,width:64,height:64,step:0.5,lineCap:round,angleOffset:180,cursor:3,thickness:.3 {my $id=ReadingsVal($NAME, "id", "???");; my $ret=sprintf("OpenMQTTGateway/commands/MQTTtoBT/config {\"ble_write_address\":\"%s\",\"ble_write_service\":\"3e135142-654f-9090-134a-a6ff5bb77046\",\"ble_write_char\":\"3fa4585a-ce4a-3bad-db4b-b8df8179ea09\",\"ble_write_value\":\"41%x\",\"value_type\":\"HEX\",\"ttl\":4,\"immediate\":true }",$id,$EVTPART1*2.0);; readingsSingleUpdate($defs{"$NAME"}, "temperaturesetpoint", "$EVTPART1", 0);; Log 1, "($NAME): $ret";; return "$ret";;}
attr Thermostat.device webCmd temperaturesetpoint

setstate Thermostat.device 2023-02-18 07:42:26 temperaturesetpoint 30
setstate Thermostat.device 2023-02-18 07:58:29 id AA:BB:CC:DD:EE:FF


HTH und viel Erfolg!