LinkTap D1 Bewässerungscomputer - MQTT

Begonnen von Aeroschmelz, 08 April 2023, 11:08:02

Vorheriges Thema - Nächstes Thema

Aeroschmelz

Hallo,

ich habe einen Bewässerungscomputer von LinkTap. Dieser bietet eine API bei der man einen MQTT Client aktivieren kann. Ich frage diesen mit dem FHEM MQTT2 Server ab:

define myBroker MQTT2_SERVER 1883 global
attr myBroker autocreate simple
attr myBroker group Tranceiver/Sensoren
attr myBroker room FHEM->System
#  CONNECTS  3
#  Clients    :MQTT2_DEVICE:MQTT_GENERIC_BRIDGE:
#  ClientsKeepOrder 1
#  DEF        1883 global
#  FD        13
#  FUUID      63f0bb24-f33f-0756-ae98-eb37b85acfbad3e3
#  NAME      myBroker
#  NR        125
#  PORT      1883
#  STATE      Initialized
#  TYPE      MQTT2_SERVER
#  eventCount 5
#  .attraggr:
#  .attrminint:
#  .clientArray:
#    MQTT2_DEVICE
#  Helper:
#    DBLOG:
#      nrclients:
#        myDbLog:
#          TIME      1680943455.34412
#          VALUE      1
#  MatchList:
#    1:MQTT2_DEVICE ^.
#    2:MQTT_GENERIC_BRIDGE ^.
#  READINGS:
#    2023-04-08 10:44:15  nrclients      1
#    2023-04-08 10:22:28  state          Initialized
#  clients:
#    myBroker_192.168.0.147_60287 1
#  retain:
#
setstate myBroker 2023-04-08 10:44:15 nrclients 1
setstate myBroker 2023-04-08 10:22:28 state Initialized

und der Client wird mit Autocreate "complex" auch korrekt angelegt:

define LinkTap_Garten MQTT2_DEVICE 19029228004B1200
attr LinkTap_Garten event-min-interval Schlauch_DF:1200,Schlauch_Volumen:1200,Pipeline_DF:1200,Pipeline_Volumen:1200
attr LinkTap_Garten event-on-change-reading Schlauch_DF:0.01,Schlauch_Volumen:1,Pipeline_DF:0.01,Pipeline_Volumen:1,Pipeline_VolumeInt:0.1
attr LinkTap_Garten group Bewässerung
attr LinkTap_Garten jsonMap 6692D81D004B1200_2_dev_stat_volume:Pipeline_Volumen 6692D81D004B1200_2_dev_stat_speed:Pipeline_DF 6692D81D004B1200_1_dev_stat_volume:Schlauch_Volumen 6692D81D004B1200_1_dev_stat_speed:Schlauch_DF
attr LinkTap_Garten readingList 19029228004B1200:/linktap/up_cmd:.* { json2nameValue($EVENT, 'up_cmd_', $JSONMAP) }\
19029228004B1200:/linktap/up_cmd/6692D81D004B1200_1:.* { json2nameValue($EVENT, '6692D81D004B1200_1_', $JSONMAP) }\
19029228004B1200:/linktap/up_cmd/6692D81D004B1200_2:.* { json2nameValue($EVENT, '6692D81D004B1200_2_', $JSONMAP) }
attr LinkTap_Garten userReadings Pipeline_VolumeInt:Pipeline_DF.* integral {sprintf("%.2f",ReadingsVal($name,"Pipeline_DF",0)/60)}, Sclauch_VolumeInt:Schlauch_DF.* integral {sprintf("%.2f",ReadingsVal($name,"Schlauch_DF",0)/60)},
#  .attreocr-thresholdPipeline_DF 0.00
#  .attreocr-thresholdPipeline_VolumeInt 4.55852634429932
#  .attreocr-thresholdPipeline_Volumen 4.88
#  .attreocr-thresholdSchlauch_DF 0.00
#  .attreocr-thresholdSchlauch_Volumen 7.34
#  .lastTimePipeline_DF 1680944268.49455
#  .lastTimePipeline_Volumen 1680944263.13366
#  .lastTimeSchlauch_DF 1680944669.69726
#  .lastTimeSchlauch_Volumen 1680944669.69726
#  CID        19029228004B1200
#  DEF        19029228004B1200
#  FUUID      6430048c-f33f-0756-c57d-aad54c51e3470234
#  IODev      myBroker
#  LASTInputDev myBroker
#  MSGCNT    129
#  NAME      LinkTap_Garten
#  NR        637
#  STATE      ???
#  TYPE      MQTT2_DEVICE
#  eventCount 35
#  myBroker_CONN myBroker_192.168.0.147_60287
#  myBroker_MSGCNT 129
#  myBroker_TIME 2023-04-08 11:05:13
#  .DT:
#    DEVICETOPIC LinkTap_Garten
#  .attraggr:
#  .attreocr:
#    Schlauch_DF:0.01
#    Schlauch_Volumen:1
#    Pipeline_DF:0.01
#    Pipeline_Volumen:1
#    Pipeline_VolumeInt:0.1
#  .attrminint:
#    Schlauch_DF:1200
#    Schlauch_Volumen:1200
#    Pipeline_DF:1200
#    Pipeline_Volumen:1200
#  .userReadings:
#    HASH(0x84d5190)
#    HASH(0x4a67060)
#  Helper:
#    DBLOG:
#      Pipeline_DF:
#        myDbLog:
#          TIME      1680944268.51178
#          VALUE      0.00
#      Pipeline_VolumeInt:
#        myDbLog:
#          TIME      1680944268.51178
#          VALUE      4.55852634429932
#      Pipeline_Volumen:
#        myDbLog:
#          TIME      1680944263.14771
#          VALUE      4.88
#      Schlauch_DF:
#        myDbLog:
#          TIME      1680944669.71393
#          VALUE      0.00
#      Schlauch_Volumen:
#        myDbLog:
#          TIME      1680944669.71393
#          VALUE      7.34
#  JSONMAP:
#    6692D81D004B1200_1_dev_stat_speed Schlauch_DF
#    6692D81D004B1200_1_dev_stat_volume Schlauch_Volumen
#    6692D81D004B1200_2_dev_stat_speed Pipeline_DF
#    6692D81D004B1200_2_dev_stat_volume Pipeline_Volumen
#  OLDREADINGS:
#  READINGS:
#    2023-04-08 11:04:29  6692D81D004B1200_1_cmd 3
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_battery 100
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_child_lock 0
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_dev_id 6692D81D004B1200_1
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_failsafe_duration 0
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_is_broken false
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_is_clog false
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_is_cutoff false
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_is_fall false
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_is_final true
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_is_flm_plugin true
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_is_leak false
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_is_manual_mode false
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_is_rf_linked true
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_is_watering false
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_plan_mode 0
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_plan_sn 877611211
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_remain_duration 0
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_signal 86
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_total_duration 0
#    2023-04-08 11:04:29  6692D81D004B1200_1_dev_stat_volume_limit 0.00
#    2023-04-08 11:04:29  6692D81D004B1200_1_gw_id 19029228004B1200
#    2023-04-08 11:05:13  6692D81D004B1200_2_cmd 3
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_battery 100
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_child_lock 0
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_dev_id 6692D81D004B1200_2
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_failsafe_duration 0
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_is_broken false
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_is_clog false
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_is_cutoff false
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_is_fall false
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_is_final true
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_is_flm_plugin true
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_is_leak false
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_is_manual_mode false
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_is_rf_linked true
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_is_watering false
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_plan_mode 5
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_plan_sn 864554875
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_remain_duration 0
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_signal 86
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_total_duration 30
#    2023-04-08 11:05:13  6692D81D004B1200_2_dev_stat_volume_limit 0.00
#    2023-04-08 11:05:13  6692D81D004B1200_2_gw_id 19029228004B1200
#    2023-04-08 11:05:13  Pipeline_DF    0.00
#    2023-04-08 10:57:48  Pipeline_VolumeInt 4.55852634429932
#    2023-04-08 11:05:13  Pipeline_Volumen 5.46
#    2023-04-08 11:04:29  Schlauch_DF    0.00
#    2023-04-08 11:04:29  Schlauch_Volumen 7.34
#
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_cmd 3
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_battery 100
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_child_lock 0
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_dev_id 6692D81D004B1200_1
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_failsafe_duration 0
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_is_broken false
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_is_clog false
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_is_cutoff false
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_is_fall false
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_is_final true
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_is_flm_plugin true
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_is_leak false
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_is_manual_mode false
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_is_rf_linked true
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_is_watering false
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_plan_mode 0
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_plan_sn 877611211
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_remain_duration 0
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_signal 86
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_total_duration 0
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_dev_stat_volume_limit 0.00
setstate LinkTap_Garten 2023-04-08 11:04:29 6692D81D004B1200_1_gw_id 19029228004B1200
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_cmd 3
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_battery 100
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_child_lock 0
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_dev_id 6692D81D004B1200_2
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_failsafe_duration 0
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_is_broken false
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_is_clog false
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_is_cutoff false
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_is_fall false
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_is_final true
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_is_flm_plugin true
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_is_leak false
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_is_manual_mode false
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_is_rf_linked true
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_is_watering false
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_plan_mode 5
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_plan_sn 864554875
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_remain_duration 0
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_signal 86
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_total_duration 30
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_dev_stat_volume_limit 0.00
setstate LinkTap_Garten 2023-04-08 11:05:13 6692D81D004B1200_2_gw_id 19029228004B1200
setstate LinkTap_Garten 2023-04-08 11:05:13 Pipeline_DF 0.00
setstate LinkTap_Garten 2023-04-08 10:57:48 Pipeline_VolumeInt 4.55852634429932
setstate LinkTap_Garten 2023-04-08 11:05:13 Pipeline_Volumen 5.46
setstate LinkTap_Garten 2023-04-08 11:04:29 Schlauch_DF 0.00
setstate LinkTap_Garten 2023-04-08 11:04:29 Schlauch_Volumen 7.34


Ich möchte nun den Verbrauch an Wasser für die Bewässerung plotten. Dabei bereitet mir etwas Schwierigkeiten, dass er den Eintrag unter "Pipeline_Volumen" bzw. "Schlauch_Volumen" nicht auf 0 setzt, wenn die Bewässerung abgeschlossen ist, d.h. er bleibt auf dem letzten Wert stehen und reported das auch schön regelmäßig. Das macht eine Verbrauchsermittlung mit statistics und für die Plots etc. etwas blöde. Als Umweg habe ich nun Userreadings mit der Funktion "integral" für den Durchfluss [l/min] angelegt, da die Werte den realen Durchfluss angeben und dann auch wieder auf 0 zurückkehen. Leider sind aber die ermittelten Werte auch nicht besonders zufriedenstellend und zeigen größere Abweichungen. Im Moment fällt mir dazu nichts mehr ein (eventuell ein reading_old?). Vielleicht hat ja jemand eine Lösung.

Lieben Dank.

Viele Grüsse
Marcus

rudolfkoenig

Bei der SVG-Anzeige aus FileLog (und auch DbLog?) gibt es die Funktion delta-d.
Hilft nur dann, wenn die Bewaesserung taeglich einmal stattfinden.

Aeroschmelz

#2
Ich habe es mal mit folgendem UserReadings versucht, allerdings bekommt er dann sobald der Durchfluss auf 0 geht meistens den letzten Höchstwert beim Wasserverbrauch nicht mehr mit, sollte aber bei den Mengen dann auch nicht besonders ins Gewicht fallen.

attr LinkTap_Garten userReadings Pipeline_VolumeInt:Pipeline_DF.* {if(ReadingsVal("LinkTap_Garten","Pipeline_DF",0) > 0) {return ReadingsVal("LinkTap_Garten","Pipeline_Volumen",0)} elsif (ReadingsVal("LinkTap_Garten","Pipeline_DF",0) == 0) {return 0}}, \
Pipeline_VolumeTot:Pipeline_Volumen.* monotonic {sprintf("%.2f",ReadingsVal($name,"Pipeline_Volumen",0))}, \
Schlauch_VolumeInt:Schlauch_DF.* {if(ReadingsVal("LinkTap_Garten","Schlauch_DF",0) > 0) {return ReadingsVal("LinkTap_Garten","Schlauch_Volumen",0)} elsif (ReadingsVal("LinkTap_Garten","Schlauch_DF",0) == 0) {return 0}}, \
Schlauch_VolumeTot:Schlauch_Volumen.* monotonic {sprintf("%.2f",ReadingsVal($name,"Schlauch_Volumen",0))}