Pomiar ilości spalonego ekogroszku

Witam, pomóżcie mi bo mnie zaćmiło.

Potrzebuję zrobić licznik ekogroszku, pomiar ma być dokonywany w funkcji czasu a nie na podstawie impulsów.

Wstępnie kalibruję układ poprzez zmierzenie ile ekogroszku poda podajniki w ciągu np. 100 minut. Uzyskaną wartość podzielę na czas w sekundach w jakim pracował podajnik. Tym sposobem mam ilość gramów węgla podawaną w 1s do palnika. Czyli potrzebuje czas pracy podajnika w sekundach mnożyć przez ilość węgla wyliczoną wcześniej.
Encja silnika wystawia stan on/off.
Mam nadzieję że jasno opisałem. Macie jakieś pomysły ?
Pozdrawiam.

Tu masz licznik

input_boolean

czas_podlewania_pauza:
  name: Czas_podlewania_pauza  

pir_kuchnia_is_reading:
  name: Pir_kuchnia is reading
    
pir_kuchnia_timer_pause:
  name: Pause Pir_kuchnia Timer    

input_number

czas_podlewania:
    name: 'Czas Podlewania'
    icon: mdi:timer
    min: 5
    max: 100
    step: 1
    unit_of_measurement: mins

W razie problemów pytaj

Artur, chyba nie o to mi chodziło, albo nie tak to chciałem skomplikowac.
Jeszcze raz to przemyślałem, generalnie chodzi mi o to aby z encji on/off zrobic druga encję która przelicza stan on na czas i mnoży przez podaną zmienną ilosci węgla.
I tą encje z wynikiem przetworze sobie w NR.

Takie encje nie istnieją., musisz sobie napisać funkcję.
Jaki kierunek według mnie: Pole tekstowe w HA zmienna węgiel timer w NR wyzwalany Sonoff I na końcu funkcja wyliczająca to czego potrzebujesz

Możesz mi po kroku opisać co mam zrobić ? Dodać pomocnika w HA i tam w polu tekstowym wpisać zmienną węgiel, a można bez tego pola wpisać to na stałe gdzieś w NR bo to sie nie zmieni a przynajmniej nie tak szybko. Dalej timer w NR, ale jak go skonfigurować? I po co wyzwalany Sonoff ?
Gdzie ta funkcja ma być i jak ją napisać?

Pozdrawiam.

hej
@artpc nie do konca rozumiem poco masz tam Gate?
zakładasz że triger 1s non stop chodzi? nawet jak nie używasz?
trochę jak zostawienie włączonego żelazka jak wychodzisz z domu :slight_smile:
Zerknij sobie jak jest bez gate, chodzi tylko o to żeby zatrzymać trigera przez msg.reset

[{"id":"862bcfbd.44e89","type":"debug","z":"88c744f9.ca6848","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":990,"y":640,"wires":[]},{"id":"2858d1c5.f5c7de","type":"counter","z":"88c744f9.ca6848","inc":"1","name":"","x":620,"y":700,"wires":[["97b356c.32c72a8"]]},{"id":"97b356c.32c72a8","type":"function","z":"88c744f9.ca6848","name":"[s] to [hh:mm:ss]","func":"msg.payload = (new Date(msg.payload * 1000)).toUTCString().match(/(\\d\\d:\\d\\d:\\d\\d)/)[0];\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":800,"y":700,"wires":[["7e600173.ddd6f","862bcfbd.44e89"]]},{"id":"7e600173.ddd6f","type":"ha-entity","z":"88c744f9.ca6848","name":"","server":"4d0e02c9.2307bc","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"timer_podlewanie"},{"property":"device_class","value":""},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"m"}],"state":"payload","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"","outputPayloadType":"str","x":990,"y":700,"wires":[[]]},{"id":"21258db7.48e4c2","type":"link in","z":"88c744f9.ca6848","name":"","links":["37a221af.aba38e"],"x":135,"y":700,"wires":[["91fb5fc7.c3a72"]]},{"id":"e0efa6bc.0da158","type":"link in","z":"88c744f9.ca6848","name":"","links":["8aba9138.efb24"],"x":135,"y":760,"wires":[["b56a70c7.8c21a"]]},{"id":"91fb5fc7.c3a72","type":"delay","z":"88c744f9.ca6848","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":240,"y":700,"wires":[["14a238cc.dedd07"]]},{"id":"14a238cc.dedd07","type":"trigger","z":"88c744f9.ca6848","name":"","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"-1","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":440,"y":700,"wires":[["2858d1c5.f5c7de"]]},{"id":"b56a70c7.8c21a","type":"change","z":"88c744f9.ca6848","name":"","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":760,"wires":[["14a238cc.dedd07"]]},{"id":"7854c9ef.87a7e8","type":"change","z":"88c744f9.ca6848","name":"Reset","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":530,"y":640,"wires":[["2858d1c5.f5c7de"]]},{"id":"505f6485.1e14dc","type":"inject","z":"88c744f9.ca6848","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"00 01 * * *","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":390,"y":640,"wires":[["7854c9ef.87a7e8"]]},{"id":"5fee0e9d.acf65","type":"comment","z":"88c744f9.ca6848","name":"Liczenie czasu podlewania","info":"","x":210,"y":600,"wires":[]},{"id":"4d0e02c9.2307bc","type":"server","name":"Asystent domowy","version":1,"legacy":false,"addon":false,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]

mozesz zrobić też tak, skoro w NR Ci nie idzie.

I potem jakiś template, czas * ilość groszku czy jak tam chesz

To jest tylko przykład, nikomu nie sugeruje rozwiązań w pełni działających, każdy powinien dojść do celu z niewielką pomocą / samodzielnie aby zrozumiał działanie swojego przepływu i dostosował go do swoich potrzeb. Z żelazkiem nie trafione, samo się wyłącza + wyłączanie zdefiniowanych stref zasilania po wyjściu z domu .

1 Like

Przetrawiłem Twój przepływ, ale mam problem.
W narzędziach deweloperskich encja sensor utworzona z NR nie zmienia się, cały czas mam stan 1 po wystartowaniu licznika , mino tego że node debug cały czas zwiększa się o jeden.
Po zresetowaniu licznika mam jakiś losowy czas w payload po każdym resecie inny:

_msgid: "d2fa274fcbf7639e"
payload: "05:22:20"
topic: ""
reset: true
count: 0

Możesz mi jeszcze wytłumaczyć o co tu chodzi:

msg.payload = (new Date(msg.payload * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];

ta zmienia sekundy na gg:mm:ss czyli 601sekund = 00:10:01
w zasadzie to w tym miejscu mógłbyś sobie zrobić funkcję zliczania groszku, czyli
msg.payload=msg.payload*0.005;
zakładając, ze w sekunde bierzesz 0.005kg groszku

w którym miejscu wstawiłeś inject? coś zmieniałeś? to co piszesz to zmiana timestrapa na gg:mm:ss

podłacz inject bezpośrednio do noda ostatniego sensor entity node i zobacz czy wartości się zmieniają, jak nie to coś masz nie tak z polaczeniem NR i HA

Tu mam sterowanie z encji on/off podajnika ( do testów steruje pomocnikiem przełącznik)
image

Po zresetowaniu licznika mam takie wartości stanu encji ( za kazdym resetem inny czas)

podłacz inject bezpośrednio do noda ostatniego sensor entity node i zobacz czy wartości się 
zmieniają, jak nie to coś masz nie tak z polaczeniem NR i HA

encja przyjmuje taki stan:

Zauważyłem jeszcze ze jak dodałem noda debug za sensor entity node to mam jakiś błąd:

to masz?

i ten counter masz zły, ten zainstaluj:

Mam:


image

A tu mam konflikt:
image

odinstaluj tamten i zainstaluj ten

Nie mogę go odinstalować, node coutner usunąłem NR zrestartowany, node countner nie mam w innych przepływach.

to pokaż opcje tego Twojego countera, bo
przelatuje przez niego timestrap, a nie powinien,
więc pewnie w nim ustawia się msg.

w jakiej wiadomości wyrzuca licznik, pokaż debug zaraz za nim

no to masz licznik tu msg.payload.data.count
zmień w funkcji
nie chyba tylko jako msg.count
zrób przy tym count > copy path