MQTT met de Siemens LOGO! 8.4

Hallo.
Heeft iemand al geprobeerd om script te maken voor de nieuwe Siemens LOGO! 8.4 om de MQTT publish waardes uit te lezen in Homey.
Ik kan Homey wel waardes laten versturen via de kaart MQTT client verstuur
Alleen de uitgelezen waardes via de lees het verstuurde bericht op de trigger mqtt client kan ik niet vertalen in een waarde waar ik in de Homey iets mee kan

Voorbeeld van het ontvangen bericht van de LOGO
{“state”:{“reported”:{“buitentemp”:{“desc”:“AM-word-1-1”,“value”:[222]},“buitenvocht”:{“desc”:“AM-word-3-1”,“value”:[536]},“$logotime”:1716238693}}}

M. vr. gr.
Wilco Wassink

Het ontvangen bericht is in JSON format.
Je kunt dan de logica JSON flowkaartjes gebruiken om bepaalde waardes uit het bericht te filteren.
Voor buitentemp is dit het in te vullen pad:
$.state.reported.buitentemp.value
en voor buitenvocht:
$.state.reported.buitenvocht.value

Het is wel jammer dat de waarde [222] is, i.p.v. gewoon numeriek 222, want dat kun je direct als numerieke waarde gebruiken en/of naar een numerieke variabele schrijven;

Flow voorbeeld:


Als tussenstap moeten de [ ] tekens gefilterd worden.
Dat kan met een klein homeyscriptje, neem hiervoor de DAN kaart ‘Run code met argument en return Number-Tag’ zoals hieronder te zien;

Daar het getal 222 heel waarschijnlijk de temperatuurwaarde 22,2 moet zijn, delen we het getal meteen door 10, afgerond op 2 decimalen:
Voorbeeld:
Screenshot from 2024-05-21 02-02-39


De code die ik heb gebruikt:
(deze maakt automatisch de HomeyScript tag [HS_tag_buitentemp_wwassink] aan en zet de gestripte waarde erin)

// strip [] from value [123] and divide by 10
const arg = args[0];
var realNum = Number('' + ( arg.split("[")[1].split("]")[0] ))
// divide by 10, rounded to 2 digits:
var realNumHuman = Math.round((realNum / 10) * 100)/100;
await tag('HS_tag_buitentemp_wwassink', realNumHuman);

console.log(args[0]);
return realNumHuman;
$.state.reported.buitenvocht.value[0]
2 Likes

Hallo ,
Hartelijk dank jullie voor de snelle reacties
Heb nu nog 2 dagen storingsdienst en dan ga ik weer met dit bezig

Haal de info niet via een api call binnen maar gebruik de broker van Homey
en haal de informatie op met een MQTT client kaart met trigger wanneer een bericht is ontvangen en maak dan een notificatie met a bericht ontvangen via topic
m vr gr,
Wilco Wassink

Ach, had ik kunnen weten :stuck_out_tongue: Ik gebruikte [0] ook bij de split functie :blush::laughing:.
Maar ik had nooit bedacht (niet opgezocht) dat dan de [ ] brackets weggelaten worden.

1 Like

[222] is een array (“lijst”) met één numerieke waarde er in.

2 Likes

A post was merged into an existing topic: Hoe filter ik een door komma’s gescheiden lijst?

Heren het werkt fantastisch.
Met de haken value[0] hoef ik alleen nog door 10 te delen en de waardes kan ik in een variabele zetten

Bedankt ben super op weg geholpen door jullie

PS. Peter_Kawa komt dit van Kawasaki ( Ik heb zelf nog een 1972 H2 Widowmaker)

1 Like

Graag gedaan.
Ha ja, Kawasaki inderdaad :motorcycle:
1e motor ooit was een KLR250.
Later heb ik heel lang een ‘gestripte’ GPZ750 gehad, geweldig ding.

Hi Wilco,

Kan jij mogelijk een paar screenshots erbij zetten of info hoe het nu werkt? Ik loop even vast met LOGO! 8.4. Op HA had ik het werkend maar Homey is toch wat anders.

Topic om uit te lezen, LOGO_Pub

{“state”:{“reported”:{“M1”:{“desc”:“M-bit-1-1”,“value”:[0]},“M2”:{“desc”:“M-bit-2-1”,“value”:[0]},“M3”:{“desc”:“M-bit-3-1”,“value”:[0]},“M4”:{“desc”:“M-bit-4-1”,“value”:[0]},“V0”:{“desc”:“V-bit-0.0-1”,“value”:[0]},“M5”:{“desc”:“M-bit-5-1”,“value”:[1]},“V1”:{“desc”:“V-bit-1.0-1”,“value”:[1]}}}}

Topic om in te stellen LOGO_Sub

Het lukt me bv wel om al de V / network inputs te sturen via MQTT Client send op Topic LOGO_Sub

{“state”: {“V1”: {“value”:[1]}}}

Idealiter, heb ik een aantal switches in Homey, waarbij de status komt van de LOGO_Pub en ik kan schakelen via de LOGO_Sub.

Mogelijk helpt jouw input mij. Of zijn er andere met ideeen.

uitlezen zie screenshot

1 Like

Dank, dat helpt een hoop. Zou je ook het homeyscriptje kunnen delen?

Stuur jij op het laatst dan weer apparatuur aan, of worden dat variables?

eenvoudig scriptje om bv temperatuur waarde uit de logo in te lezen door 10 te delen en afronden op 2 cijfers

/// /10, round 2 digits:

var Num10 = Math.round((args[0] / 10) * 100)/100;

return Num10;

zenden naar logo

script

voor variabele 3 SE accu naar logeo te zenden

1 Like