Czy jest możliwość dodania obsługi licznika Itron AnyQuest Cyble ?
Moim komponentem wmbus jest to niemożliwe, tam na naklejce masz 433MHz a CC1101 u mnnie jest ustawiony na 868MHz.
Szybki przegląd internetu wskazuje że (najprawdopodobniej), produkują też inną wersję dla wM-Bus.
Zakupiłem cc1101 w wersji 433MHz
Ten licznik działa na trochę innej zasadzie i do tego na 433MHz.
Potrzebny osobny interfejs z CC1101 (433MHz), który bedzię odpytywał ten licznik (licznik odpowiada na zapytanie w okreslonych godzinach).
Mam taki jako główny na budynku i swietnie działa z projektem
psykokwak-com/everblu-meters-esp8266: Fetch water usage data from Cyble meters for esp8266 (github.com)
Integracja z HA przez MQTT.
Maiłeś jakieś problemy z uruchomieniem ? W HA nie mam odczytu ale w serial monitor odczyt działa:
Test frequency : 433.760010
Got frequency : 433.760010
Liters : 814833
Battery (in months) : 84
Counter : 63
@_Szczepan, czy to ma szansę działać z nakładką Itron na 433MHz? Kupiłem cc1101 na 433MHz, podłączyłem, ale w logach nie widzę, żeby coś znalazł.
@szeryf
Pytanie przeniosłem tutaj (to już wcześniej wydzielony fragment tamtego wątku).
Odpowiedź jest niestety negatywna, ale popatrz czy opisywany tu projekt nie podejdzie do twojej nakładki.
Witam jakiego programu używaliście do skompilowania
Tutaj jest pełny opis ale nie mam pojęcia jak sprawdzić freqwency key. Używam programu Arduino na Windows a próbuję zrobić według tej instrukcji
Możesz użyć chmurowego środowiska Gitpod, wystarcza przeglądarka z dostępem do internetu i konto na Github.
Dziękuję będę dalej kombinowal uczył się
Coś o liczniku anyquest
Użyj Gitpod, masz wówczas zawsze aktualne biblioteki i platformę tę samą co Ardiuno.
teraz moge edytować pliki wszystko działa a w którym miejscu wystepuje kompilacja?>
Plik został skompilowany na ARDUINO INO (chociaż próbowałem na Visual Studio ale bez rezultatu )i uruchomiony na ESP 32 Devkit 1 bez anteny Wszystko się uruchomiło ,złapał sygnał ale brak go w HA czy kto wie czy mam coś tutaj zmienić
char *jsonTemplate =
"{ \
\"liters\": %d, \
\"counter\" : %d, \
\"battery\" : %d, \
\"timestamp\" : \"%s\"\
}";
int _retry = 0;
void onUpdateData()
{
struct tmeter_data meter_data;
meter_data = get_meter_data();
time_t tnow = time(nullptr);
struct tm *ptm = gmtime(&tnow);
Serial.printf("Current date (UTC) : %04d/%02d/%02d %02d:%02d:%02d - %s\n", ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec, String(tnow, DEC).c_str());
char iso8601[128];
strftime(iso8601, sizeof iso8601, "%FT%TZ", gmtime(&tnow));
if (meter_data.reads_counter == 0 || meter_data.liters == 0) {
Serial.println("Unable to retrieve data from meter. Retry later...");
// Call back this function in 10 sec (in miliseconds)
if (_retry++ < 10)
mqtt.executeDelayed(1000 * 10, onUpdateData);
return;
}
digitalWrite(LED_BUILTIN, LOW); // turned on
Serial.printf("Liters : %d\nBattery (in months) : %d\nCounter : %d\n\n", meter_data.liters, meter_data.battery_left, meter_data.reads_counter);
mqtt.publish("everblu/cyble/liters", String(meter_data.liters, DEC), true);
delay(50); // Do not remove
mqtt.publish("everblu/cyble/counter", String(meter_data.reads_counter, DEC), true);
delay(50); // Do not remove
mqtt.publish("everblu/cyble/battery", String(meter_data.battery_left, DEC), true);
delay(50); // Do not remove
mqtt.publish("everblu/cyble/timestamp", iso8601, true); // timestamp since epoch in UTC
delay(50); // Do not remove
char json[512];
sprintf(json, jsonTemplate, meter_data.liters, meter_data.reads_counter, meter_data.battery_left, iso8601);
mqtt.publish("everblu/cyble/json", json, true); // send all data as a json message
}
// This function calls onUpdateData() every days at 10:00am UTC
void onScheduled()
{
time_t tnow = time(nullptr);
struct tm *ptm = gmtime(&tnow);
// At 10:00:00am UTC
if (ptm->tm_hour == 10 && ptm->tm_min == 0 && ptm->tm_sec == 0) {
// Call back in 23 hours
mqtt.executeDelayed(1000 * 60 * 60 * 23, onScheduled);
Serial.println("It is time to update data from meter :)");
// Update data
_retry = 0;
onUpdateData();
return;
}
// Every 500 ms
mqtt.executeDelayed(500, onScheduled);
}
String jsonDiscoveryDevice1(
"{ \
\"name\": \"Compteur Eau Index\", \
\"unique_id\": \"water_meter_value\",\
\"object_id\": \"water_meter_value\",\
\"icon\": \"mdi:water\",\
\"state\": \"{{ states(sensor.water_meter_value)|float / 1 }}\",\
\"unit_of_measurement\": \"L\",\
\"device_class\": \"water\",\
\"state_class\": \"total_increasing\",\
\"qos\": \"0\",\
\"state_topic\": \"everblu/cyble/liters\",\
\"force_update\": \"true\",\
\"device\" : {\
\"identifiers\" : [\
\"14071984\" ],\
\"name\": \"Compteur Eau\",\
\"model\": \"Everblu Cyble ESP8266/ESP32\",\
\"manufacturer\": \"Psykokwak\",\
\"suggested_area\": \"Home\"}\
}");
String jsonDiscoveryDevice2(
"{ \
\"name\": \"Compteur Eau Batterie\", \
\"unique_id\": \"water_meter_battery\",\
\"object_id\": \"water_meter_battery\",\
\"device_class\": \"battery\",\
\"icon\": \"mdi:battery\",\
\"unit_of_measurement\": \"%\",\
\"qos\": \"0\",\
\"state_topic\": \"everblu/cyble/battery\",\
\"value_template\": \"{{ [(value|int), 100] | min }}\",\
\"force_update\": \"true\",\
\"device\" : {\
\"identifiers\" : [\
\"14071984\" ],\
\"name\": \"Compteur Eau\",\
\"model\": \"Everblu Cyble ESP8266/ESP32\",\
\"manufacturer\": \"Psykokwak\",\
\"suggested_area\": \"Home\"}\
}");
String jsonDiscoveryDevice3(
"{ \
\"name\": \"Compteur Eau Compteur\", \
\"unique_id\": \"water_meter_counter\",\
\"object_id\": \"water_meter_counter\",\
\"icon\": \"mdi:counter\",\
\"qos\": \"0\",\
\"state_topic\": \"everblu/cyble/counter\",\
\"force_update\": \"true\",\
\"device\" : {\
\"identifiers\" : [\
\"14071984\" ],\
\"name\": \"Compteur Eau\",\
\"model\": \"Everblu Cyble ESP8266/ESP32\",\
\"manufacturer\": \"Psykokwak\",\
\"suggested_area\": \"Home\"}\
}");
String jsonDiscoveryDevice4(
"{ \
\"name\": \"Compteur Eau Timestamp\", \
\"unique_id\": \"water_meter_timestamp\",\
\"object_id\": \"water_meter_timestamp\",\
\"device_class\": \"timestamp\",\
\"icon\": \"mdi:clock\",\
\"qos\": \"0\",\
\"state_topic\": \"everblu/cyble/timestamp\",\
\"force_update\": \"true\",\
\"device\" : {\
\"identifiers\" : [\
\"14071984\" ],\
\"name\": \"Compteur Eau\",\
\"model\": \"Everblu Cyble ESP8266/ESP32\",\
\"manufacturer\": \"Psykokwak\",\
\"suggested_area\": \"Home\"}\
}");
void onConnectionEstablished()
{
Serial.println("Connected to MQTT Broker :)");
Serial.println("> Configure time from NTP server.");
configTzTime("UTC0", "pool.ntp.org");
Serial.println("> Configure Arduino OTA flash.");
ArduinoOTA.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH) {
type = "sketch";
}
else { // U_FS
type = "filesystem";
}
// NOTE: if updating FS this would be the place to unmount FS using FS.end()
Serial.println("Start updating " + type);
});
ArduinoOTA.onEnd([]() {
Serial.println("\nEnd updating.");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("%u%%\r\n", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) {
Serial.println("Auth Failed");
}
else if (error == OTA_BEGIN_ERROR) {
Serial.println("Begin Failed");
}
else if (error == OTA_CONNECT_ERROR) {
Serial.println("Connect Failed");
}
else if (error == OTA_RECEIVE_ERROR) {
Serial.println("Receive Failed");
}
else if (error == OTA_END_ERROR) {
Serial.println("End Failed");
}
});
ArduinoOTA.setHostname("EVERBLUREADER");
ArduinoOTA.begin();
mqtt.subscribe("everblu/cyble/trigger", [](const String& message) {
if (message.length() > 0) {
Serial.println("Update data from meter from MQTT trigger");
_retry = 0;
onUpdateData();
}
});
Serial.println("> Send MQTT config for HA.");
// Auto discovery
delay(50); // Do not remove
mqtt.publish("homeassistant/sensor/water_meter_value/config", jsonDiscoveryDevice1, true);
delay(50); // Do not remove
mqtt.publish("homeassistant/sensor/water_meter_battery/config", jsonDiscoveryDevice2, true);
delay(50); // Do not remove
mqtt.publish("homeassistant/sensor/water_meter_counter/config", jsonDiscoveryDevice3, true);
delay(50); // Do not remove
mqtt.publish("homeassistant/sensor/water_meter_timestamp/config", jsonDiscoveryDevice4, true);
delay(50); // Do not remove
onScheduled();
}
void setup()
{
Serial.begin(115200);
Serial.println("\n");
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH); // turned off
mqtt.setMaxPacketSize(1024);
//mqtt.enableDebuggingMessages(true);
/*
// Use this piece of code to find the right frequency.
for (float i = 433.76f; i < 433.890f; i += 0.0005f) {
Serial.printf("Test frequency : %f\n", i);
cc1101_init(i);
struct tmeter_data meter_data;
meter_data = get_meter_data();
if (meter_data.reads_counter != 0 || meter_data.liters != 0) {
Serial.printf("\n------------------------------\nGot frequency : %f\n------------------------------\n", i);
Serial.printf("Liters : %d\nBattery (in months) : %d\nCounter : %d\n\n", meter_data.liters, meter_data.battery_left, meter_data.reads_counter);
digitalWrite(LED_BUILTIN, LOW); // turned on
while (42);
}
}
*/
cc1101_init(FREQUENCY);
/*
// Use this piece of code to test
struct tmeter_data meter_data;
meter_data = get_meter_data();
Serial.printf("\nLiters : %d\nBattery (in months) : %d\nCounter : %d\nTime start : %d\nTime end : %d\n\n", meter_data.liters, meter_data.battery_left, meter_data.reads_counter, meter_data.time_start, meter_data.time_end);
while (42);
*/
}
void loop()
{
mqtt.loop();
ArduinoOTA.handle();
}
Czy masz na myśli “bez transceivera CC1101”?
tak narazie próbowałem skompilować na sucho bin który zakonczył się powodzeniem i dołaczeniem everblue cyble do sieci lokalej
Gratulacje, ale skoro nie mają się skąd brać dane, to dlaczego sądzisz, że firmware powinno publikować jakiekolwiek dane przez MQTT?
zrobiłem rownież na sucho czunik przeplywu wody i tutaj poszło jak wpisałem HA auto discovery tylko chyba mylę pojęcia
Czy ktoś wie jak ustawić 4pm?
// This function calls onUpdateData() every days at 10:00am UTC
void onScheduled()
{
time_t tnow = time(nullptr);
struct tm *ptm = gmtime(&tnow);
// At 10:00:00am UTC
if (ptm->tm_hour == 10 && ptm->tm_min == 0 && ptm->tm_sec == 0) {
// Call back in 23 hours
mqtt.executeDelayed(1000 * 60 * 60 * 23, onScheduled);
Serial.println("It is time to update data from meter :)");
// Update data
_retry = 0;
onUpdateData();
return;
}
Bez anteny też się daaaa
teraz czekamy na antenkę jeżeli ktoś bedzie miał problem z kompilacją wyjaśnie śmiało pisać
I tried the aformentioned setup with an Anyquest Cyble Enhanced. The final result was that the water company replaced the whole meter in 4 months. Because they were unable to read it anymore. Which is down to the fact that the read counter does not match to what is in their database. And once it does not match, they are unable to get the data. It is like a tamper flag for them.
Anyhow the meter can be read Monday to Friday in working hours. As it was meant to be read by the water company and nobody else.