Lese temp fra Ch1 på HEATIT Z-TRM3

Hvordan leser man innstilt temperatur fra HEATIT Z-TRM3. (Ch 1). Har «Tibber Pulse» så derfor fungerer ikke Strømkontroll i FH. Tanken er å lage en flow for å håndtere det. Da må man vite hvilke temp man skal tilbakestille til etter en eventuell temp reduksjon.

Å lese temperaturen fra gulvføler (ch4) eller romføler (ch2) er rett frem. Benyttet en «Generic Trigger» node, og satt opp en «Trigger Config» på følgende måte:

Baderom 2 etg (room)
Bad 2 etg Gulvføler (sensor)
Temperature sensor (sensor_temp)
Sensor report (evt.sensor.report)

“Advanced service binding” ser da slik ut:
Service: sensor_temp
Interface: evt.sensor.report
Address: pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:sensor_temp/ad:9_4

Hvis man benytter de samme innstillingene men bytter ut kanalene med 0 eller 1 blir aldri Flowen kjørt. (Ser at «Executed» er 0.)

Forsøkte så å lese “evt.setpoint.report» fra termostaten, men denne triggeren blir heller aldri kjørt.

«Trigger Config»
Baderom 2 etg (room)
Bad 2 etg Termostat (thermostat)
Thermostat (thermostat)
(evt.setpoint.report)

“Advanced service binding”
Service: thermostat
Interface: evt.setpoint.report
Address: pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:thermostat/ad:9_1

Ser jo under “Adapters” og «Services» at man kan lese ut setpunktet. Leser den samme verdien fra både kanal 0 og 1. Men man må skrive «heat» til «cmd.setpoint.get_report» for å kunne lese noe.

Har tidligere forsøkt å sende kommandoen «Get_Report» fra en «Action» node for deretter å lese resultatet med «Wait for Event» og kommandoen «evt.setpoint.report ». Har dårlig erfaring med denne «Wait for Event». Det har ført til at smarthubben har «hengt». Har IKKE kunne Stoppe eller slette Flowen. Å restarte hubben har heller ikke ført frem. Heller ikke Gjenoppretting, problem Flowen startet opp igjen. Har 2x måtte få supporten til å slette Flowen jeg jobber med. Å eksperimentere med Trigger har jeg ikke hatt noe problemer med.

Noen som har gjort seg noen erfaringer ?

Du kan åpne ThingsPlex i ny fane/ny nettleser, for så å lese av “message stream”. Da kan du kopiere ut innholdet og legge i “Action noden” under “payload” (heat som du nevner), så en ny “trigger node” etter den nevnte “Action node” for å samle inn resultatet.

1 Like

Jeg laget “Time Trigger” som skriver “cmd.setpoint.get_report” og payload satt til “heat”. I «Meassage Stream» ser dette slik ut:
{
“serv”: “thermostat”,
“type”: “cmd.setpoint.get_report”,
“val_t”: “string”,
“val”: “heat”,
“props”: null,
“tags”: null,
“src”: “tplex-ui”,
“ver”: “1”,
“uid”: “b86e1b29-05a7-4786-9a3c-3f8edce9aead”,
“topic”: “pt:j1/mt:cmd/rt:dev/rn:zw/ad:1/sv:thermostat/ad:9_1”
}

Deretter ser jeg følgende response:

{
“serv”: “thermostat”,
“type”: “evt.setpoint.report”,
“val_t”: “str_map”,
“val”: {
“temp”: “20.000000”,
** “type”: “heat”,**
** “unit”: “C”**
},
“props”: {},
“tags”: null,
“src”: “-”,
“ver”: “1”,
“uid”: “90b3ee4a-59d3-4527-945d-9ec139461753”,
“topic”: “pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:thermostat/ad:9_1”
}

Dette er også likt det man ser hvis man sender kommando fra «Adapters». Problemet er at jeg ikke klarer å lese denne. Har satt opp en Trigger som skal lese «evt.setpoint.report» men den blir aldri kjørt. (Laget en teller variabel som jeg ser ikke blir oppdatert.) Forsøkte å skrive temperaturen til av variabel av type “map of string”

Har du noen tips ?

Hva sier output i “log”? (Knapp nederst hvor du lagrer :slight_smile: )

Her er en log:

2023-03-09 17:25:18.004 debug flow ------Flow når temperaturen på Bad 2 etg Gulvføler er høyere enn 25C started, num of instances = 1 -----------
2023-03-09 17:25:18.005 debug flow Next node id = 96
2023-03-09 17:25:18.005 info fnode Executing Node . Name = cmd.setpoint.get_report = heat
2023-03-09 17:25:18.006 debug fnode publishing to: pt:j1/mt:cmd/rt:dev/rn:zw/ad:1/sv:thermostat/ad:9_1
2023-03-09 17:25:18.006 debug fnode — Waiting for time event ----
2023-03-09 17:25:18.007 debug flow Next node id =
2023-03-09 17:25:18.007 debug flow Transition node id is empty, exiting runner.
2023-03-09 17:25:18.007 debug flow ------Flow når temperaturen på Bad 2 etg Gulvføler er høyere enn 25C completed, num of instances = 0 -----------
2023-03-09 17:25:18.142 debug fnode –New receive node message–
2023-03-09 17:27:18 info fnode — New time event —
2023-03-09 17:27:18.001 debug fnode — Waiting for time event ----
2023-03-09 17:27:18.001 debug flow ------Flow når temperaturen på Bad 2 etg Gulvføler er høyere enn 25C started, num of instances = 1 -----------
2023-03-09 17:27:18.001 info fnode Next task will run at:2023-03-09 17:29:18
2023-03-09 17:27:18.002 debug flow Next node id = 96
2023-03-09 17:27:18.002 info fnode Executing Node . Name = cmd.setpoint.get_report = heat
2023-03-09 17:27:18.002 debug fnode publishing to: pt:j1/mt:cmd/rt:dev/rn:zw/ad:1/sv:thermostat/ad:9_1
2023-03-09 17:27:18.002 debug flow Next node id =
2023-03-09 17:27:18.003 debug flow Transition node id is empty, exiting runner.
2023-03-09 17:27:18.003 debug flow ------Flow når temperaturen på Bad 2 etg Gulvføler er høyere enn 25C completed, num of instances = 0 -----------
2023-03-09 17:27:18.151 debug fnode –New receive node message–

Har du fått sett noe på dette @espen ? Det bør da være fult mulig å lese temperaturen som er satt i en termostat i en Flow, når man kan lese denne ved å gå direkte på enheten.

(Driver å koder en flow som skal senke temperaturen etter en prioriteringsliste hvis snitte effekten er for høy. Må da vite hva temperaturen er satt til.)

Hvordan ser egentlig hele koden din ut? Høyre streng blir aldri kjørt, som du nevner selv.

{
  "Id": "69afaf40-b6c4-11ed-9350-4d1bed057ca1",
  "ClassId": "69afaf40-b6c4-11ed-9350-4d1bed057ca1",
  "Author": "xxxxxx@yyyyy",
  "Version": 0,
  "CreatedAt": "2023-02-27T17:30:22.132649Z",
  "UpdatedAt": "2023-03-06T22:56:44.623289145+01:00",
  "Name": "når temperaturen på Bad 2 etg Gulvføler er høyere enn 25C",
  "Group": "sensor_temperature",
  "Description": "send oppvarming settpunkt på  Bad 2 etg Termostat   til 21.0 ",
  "Nodes": [
    {
      "Id": "93",
      "Type": "trigger",
      "Label": "Leser termostat set punkt til Bad 2 etg.",
      "SuccessTransition": "94",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:thermostat/ad:9_1",
      "Service": "thermostat",
      "ServiceInterface": "evt.setpoint.report",
      "Config": {
        "InputVariableType": null,
        "IsValueFilterEnabled": false,
        "LookupServiceNameAndLocation": false,
        "PropFilterName": "unit",
        "PropFilterValue": "C",
        "RegisterAsVirtualService": false,
        "Timeout": 0,
        "ValueFilter": {
          "Value": "",
          "ValueType": "str_map"
        },
        "ValueJPath": null,
        "ValueJPathResultType": null,
        "VirtualServiceGroup": "ch_0",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "papp": {
          "customValues": null,
          "nodeId": "21",
          "nodeName": "temp",
          "nodeType": "temperature"
        },
        "x": 542,
        "y": 214
      },
      "TypeAlias": "Trigger"
    },
    {
      "Id": "94",
      "Type": "set_variable",
      "Label": "Temp temp til \"Bad_2etg_Temp\"",
      "SuccessTransition": "95",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultValue": {
          "Value": 0,
          "ValueType": ""
        },
        "IsVariableInMemory": false,
        "Name": "Bad_2etg_Temp",
        "UpdateGlobal": true,
        "UpdateInputMsg": false
      },
      "Ui": {
        "nodeType": "",
        "x": 545,
        "y": 446
      },
      "TypeAlias": "Set variable"
    },
    {
      "Id": "95",
      "Type": "transform",
      "Label": "Bad_2etg_Read_Cnt += 1",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "Bad_2etg_Read_Counter + 1",
        "IsLVariableGlobal": false,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": true,
        "IsTargetVariableInMemory": false,
        "LVariableName": "",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "Bad_2etg_Read_Counter",
        "TargetVariableType": "float",
        "Template": "",
        "TransformType": "calc",
        "ValueMapping": [],
        "XPathMapping": []
      },
      "Ui": {
        "nodeType": "",
        "x": 542,
        "y": 653
      },
      "TypeAlias": "Transform"
    },
    {
      "Id": "96",
      "Type": "action",
      "Label": "cmd.setpoint.get_report = heat",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:dev/rn:zw/ad:1/sv:thermostat/ad:9_1",
      "Service": "thermostat",
      "ServiceInterface": "cmd.setpoint.get_report",
      "Config": {
        "DefaultValue": {
          "Value": "heat",
          "ValueType": "string"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "ResponseToTopic": "",
        "VariableName": "",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 215,
        "y": 466
      },
      "TypeAlias": "Action"
    },
    {
      "Id": "97",
      "Type": "time_trigger",
      "Label": "Hver 2 min",
      "SuccessTransition": "96",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultMsg": {
          "Value": "",
          "ValueType": ""
        },
        "Expressions": [
          {
            "Comments": "",
            "Expression": "@every 2m",
            "Name": ""
          }
        ],
        "GenerateAstroTimeEvents": false,
        "Latitude": 0,
        "Longitude": 0,
        "SunriseTimeOffset": 0,
        "SunsetTimeOffset": 0
      },
      "Ui": {
        "nodeType": "",
        "x": 211,
        "y": 226
      },
      "TypeAlias": "Time trigger"
    }
  ],
  "Settings": null,
  "IsDisabled": true,
  "IsDefault": false,
  "ParallelExecution": "parallel"
}

Kan du legge den inn som merket under?

image

Forsøker å skrive temperaturen til: “Bad_2etg_Temp”, forsøker også å telle opp “Bad_2etg_Read_Counter” men der skjer det ingen ting. Derfor ser det ut til at koden ikke blir kjørt.

Ser du ikke har konvertert på noen måte, kan ikke sette rett i variabel/verdi. Du må konvertere for så og sette variabel med verdi/kjøre. Se denne tråden; Sette temperatur fra en variabel - #10 by ThomasR

Hvis man bytter til å lese fra gulv sensoren fungerer det:

Baderom 2 etg (room)
Bad 2 etg Gulvføler (sensor)
Temperature sensor (sensor_temp)
Sensor report (evt.sensor.report)

Det er ikke lik funksjonalitet for den kanalen der, som Ch_1 ser det ut som.

Nei, det var bare en test på at resten av koden fungerer. Ser at kanal 1 skal lese datatypen “str_map”. Da trodde jeg man skulle lese hele denne, og så må man konvertere til float senere.

Konvertering rett etter trigger.

OK, så man må konvertere fra “str_map” til float rett etter trigger ? Har du et kode eksempel ? Henger ikke helt med på denne Transform noden. Ellers er det slik at man stadig må fyre av denne “cmd.setpoint.get_report” for å få leset kanal1 ?

Må man konvertere str_map til float ? Man kan jo ha vaiabler av typen str_map. Mener du at Flowen ikke blir kjørt pga. manglende konvertering ? Kjekt hvis du @M.Stensrod kan paste en kodesnutt for dette. Har prøvd en del men får det ikke til å spille. Ser jo i «message stream» at temperaturen til setpunktet blir lest:

{
“serv”: “thermostat”,
“type”: “evt.setpoint.report”,
“val_t”: “str_map”,
“val”: {
“temp”: “21.500000”,
“type”: “heat”,
“unit”: “C”
},
“props”: {},
“tags”: null,
“src”: “-”,
“ver”: “1”,
“uid”: “f18c34c3-7c71-40bf-a20f-6139dfb1970a”,
“topic”: “pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:thermostat/ad:9_1”
}

Etter evt.setpoint.report trigger, så legger du inn en Transform, lik den jeg har lagt inn under. På Target variable så må du lage en String variabel som blir satt. Burde få hentet ut “temp” i str_map responsen da.

image

evt.setpoint.report kommer hver gang du justerer termostaten, trenger ikke kjøre kommando for å hente verdien, med mindre du er usikker på om verdien er satt i termostaten.

Det skulle ikke være enkelt å få til.

Har opprettet en ny variabel som heter «Bad_2etg_Temp_str» og satt denne til «String».

La inn en Transform noden og valgte Json Path slik:

Men fremdeles blir det ikke skrevet noen ting til variabelen.

Hvis man skulle lykkes med å lese ut setpunktet fra termostaten forstår jeg dette blir som en string. Må denne da konverteres til float ? Er jo interessert i å ta denne verdien -3grader f.eks å skrive til termostaten inntil effekten er under limit.

Denne uttestings koden ser nå slik ut: