Virtual Impulse Counter

milanos
Posts: 24
Joined: Thu Sep 01, 2022 8:20 am

Post

Mam pytanie jak stworzyć klase sensora Supla::Sensor::VirtualImpulseCounter.

Czemu ma to służyć. Za pomocą modułu radiowego CC1101 i kodów z GitHub zaczytuję id i wartość zużycia licznika wody. Oczywiście filtruje je tylko do mojego licznika. Czyli posiadam podawaną co kilkanaście sekund wartość zużycia wody
Powyższa klasa ma mi posłużyć do przekazania wartości do Supli.

Obecnie działa mi to w oparciu o czytnik 'ramek" w postaci dongla USB + Linux + supla-virtual-device. Chcialbym się pozbyć pracującego laptopa tylko do czytania i przekazywania wartości do Supli.

Jeśli ktoś ma jakiś pomysł jak to zrobić z góry dziękuje.

Dodam że poprzez sensor VirtualThermometer udaje się przekazywać wartość ale ten sensor służy do przekazywania aktualnej temperatury a ja potrzebuje do przekazywania wartości pomiaru - najlepiej wodomierza
[email protected]
Posts: 1585
Joined: Mon Feb 06, 2023 8:56 am
Has thanked: 18 times
Been thanked: 26 times

Post

Siądę jutro do komputera to Ci napisze jak to zrobić inaczej, też walczę z licznikiem ale nie umiem dojść do ładu z ramką Apator 16-2 za to wiem jak to pokazywać w supli jako licznik
User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Na branchu termostatu jest już taka klasa:
https://github.com/SUPLA/supla-device/b ... ounter.cpp
Najlepsze suple dla Twojego domu :mrgreen:
milanos
Posts: 24
Joined: Thu Sep 01, 2022 8:20 am

Post

klew wrote: Tue Jul 25, 2023 5:57 pm Na branchu termostatu jest już taka klasa:
https://github.com/SUPLA/supla-device/b ... ounter.cpp
To jest impulse_counter.
Używam tej klasy gdy stosuje liczenie impulsów z gazomierza poprzez kontaktron.
Nie bardzo ogarniam jak jej użyć aby jawnie przekazać stan pomiaru pozyskany poprzez CC1101 i https://github.com/maciekn/izar-wmbus-esp
Last edited by milanos on Wed Jul 26, 2023 5:55 am, edited 1 time in total.
milanos
Posts: 24
Joined: Thu Sep 01, 2022 8:20 am

Post

[email protected] wrote: Tue Jul 25, 2023 5:49 pm Siądę jutro do komputera to Ci napisze jak to zrobić inaczej, też walczę z licznikiem ale nie umiem dojść do ładu z ramką Apator 16-2 za to wiem jak to pokazywać w supli jako licznik
Super, wielkie dzięki
User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

milanos wrote: Wed Jul 26, 2023 5:50 am To jest impulse_counter. Nie bardzo ogarniam jak jej użyć aby jawnie przekazać stan pomiaru pozyskany z https://github.com/maciekn/izar-wmbus-esp poprzez CC1101
Tak, to jest "impulse counter" - przecież o to pytałeś ;)

Jak masz instancję tej klasy, to wystarczy:

Code: Select all

  licznik->setCounter(wartość);
Podobnie jak przy VirtualThermometer, tylko nazwa metody jest inna. Licznik impulsów działa też tylko na liczbach całkowitych, więc jeśli odczyt z licznika masz w liczbach zmiennoprzecinkowych, to musisz je przeliczać na całkowite, a precyzję (ilosć imp na jednostkę miary) konfigurujesz w Cloud)
Najlepsze suple dla Twojego domu :mrgreen:
milanos
Posts: 24
Joined: Thu Sep 01, 2022 8:20 am

Post

klew wrote: Wed Jul 26, 2023 5:54 am
milanos wrote: Wed Jul 26, 2023 5:50 am To jest impulse_counter. Nie bardzo ogarniam jak jej użyć aby jawnie przekazać stan pomiaru pozyskany z https://github.com/maciekn/izar-wmbus-esp poprzez CC1101
Tak, to jest "impulse counter" - przecież o to pytałeś ;)

Jak masz instancję tej klasy, to wystarczy:

Code: Select all

  licznik->setCounter(wartość);
Podobnie jak przy VirtualThermometer, tylko nazwa metody jest inna. Licznik impulsów działa też tylko na liczbach całkowitych, więc jeśli odczyt z licznika masz w liczbach zmiennoprzecinkowych, to musisz je przeliczać na całkowite, a precyzję (ilosć imp na jednostkę miary) konfigurujesz w Cloud)
Dzieki za info spróbuje tak zrobić i dam znać czy zadziałało.
[email protected]
Posts: 1585
Joined: Mon Feb 06, 2023 8:56 am
Has thanked: 18 times
Been thanked: 26 times

Post

Code: Select all

class WaterMeter: public ChannelElement{
  public:
    WaterMeter(): lastReadTime(0){
      channel.setType(SUPLA_CHANNELTYPE_IMPULSE_COUNTER);
      channel.setDefault(SUPLA_CHANNELFNC_IC_WATER_METER);
      channel.setNewValue(-1.0);

    };

    double getValue(){
      return random(1,3);
    }

    void iterateAlways(){
      if(lastReadTime+10000<millis()){
        lastReadTime=millis();
        ++counter;
        channel.setNewValue(counter);
      }
    }
    
    protected:
      uint64_t lastReadTime;
      uint64_t counter =0;
    
};
Podstaw w getValue swoja logike i działa ;)
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

milanos wrote: Wed Jul 26, 2023 5:57 am
@klew wrzucił link nie do tego pliku ;)
https://github.com/SUPLA/supla-device/b ... ounter.cpp
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl

Return to “Pomoc”