A jak wpiszesz w Pi4 takie polecenie jak wyżej to otrzymasz coś zwrotnie?
<adres ip>/<rozszerzenie> to link jaki masz po zalogowaniu.
Ewentualnie taki:
Code: Select all
curl -D- -u <username>:<password> http://<LOKALNY_ADRES_IP>/econet/regParams A jak wpiszesz w Pi4 takie polecenie jak wyżej to otrzymasz coś zwrotnie?
Code: Select all
curl -D- -u <username>:<password> http://<LOKALNY_ADRES_IP>/econet/regParams Otwierasz konsolę Twojego Rp4 i wpisujesz to polecenie.zuchnet wrote: Tue Oct 25, 2022 1:17 pm Kurka wodna dla mnie to czarna magia ale po pracy spróbuję to wykonać![]()
djack2017 wrote: Tue Oct 25, 2022 10:02 am Jeśli daje się odczytać dane w jsonie to można zrobić gateway do serwera Zabbix i wyświetlać dane na ekranie w dowolnym kształcie, np. tak jak w pierwszym poście w tym wątku.
Tak z czystej ciekawości, możesz podesłać mi jeden odczyt danych w jsonie?maciej38 wrote: Mon Oct 24, 2022 1:59 pm Odświeżę temat, bo od jakiegoś czasu mam podobny sterownik (Plum tylko branding Kostrzewa)
Na urządzenie można się zalogować lokalnym adresem IP. Nic tam praktycznie nie ma.
Ale pod tym adresem IP wystawia większość danych w jsonie.
Code: Select all
pi@jezyna:~ $ curl -D- -u user:pass http://xxx.xxx.xxx.xxx/econet/regParams
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 25 Oct 2022 15:18:43 GMT
Server: lighttpd/1.4.35
{"settingsVer":62229,"editableParamsVer":13,"schedulesVer":18,"remoteMenuVer":{"11": 22484, "10": 28492, "13": 26517, "12": 14149, "15": 48055, "14": 55, "1": 35510, "3": 60260, "2": 3175, "4": 33154, "7": 61692, "6": 30202, "9": 37720, "8": 53580},"currentDataParamsEditsVer":9,"curr":{"thermostat": 0, "pumpCOWorks": false, "fan2Exhaust": false, "feederWorks": false, "feeder": false, "ecoSterMode2": 255, "ecoSterMode3": 255, "ecoSterMode1": 0, "mixerPumpWorks4": false, "mixerPumpWorks5": false, "ecoSterContacts1": false, "ecoSterContacts2": false, "ecoSterContacts3": false, "statusCWU": 4, "fuelLevel": 77, "tempOpticalSensor": 2.8025969286496341e-45, "fanPower": 0.0, "mixerTemp1": 54.370864868164062, "mixerTemp3": null, "mixerTemp2": null, "mixerTemp5": null, "mixerTemp4": null, "blowFan1Active": false, "statusCO": 2, "ecoSterDaySched1": false, "feederOuter": false, "pumpCWUWorks": false, "tempCOSet": 60, "alarmOutput": false, "ecoSterSetTemp1": 20.5, "fan": false, "lighter": false, "transmission": 5, "fuelStream": 0.0, "lighterWorks": false, "mode": 5, "alarmOutputWorks": false, "pumpSolar": false, "ecoSterTemp3": null, "ecoSterTemp2": null, "ecoSterTemp1": 20.299999237060547, "ecoSterNumber": 3, "contactGZC": false, "blowFan1": false, "blowFan2": false, "tempCO": 67.810546875, "pumpCO": true, "mixerPumpWorks1": true, "contactGZCActive": false, "pumpCirculation": true, "mixerPumpWorks2": false, "ecoSterDaySched2": false, "ecoSterDaySched3": false, "mixerPumpWorks3": false, "outerBoilerWorks": false, "pumpFireplace": false, "feederOuterWorks": false, "mixerSetTemp4": 40, "mixerSetTemp5": 40, "feeder2AdditionalWorks": false, "pumpSolarWorks": false, "mixerSetTemp1": 40, "mixerSetTemp2": 40, "mixerSetTemp3": 40, "pumpCWU": true, "blowFan2Active": false, "tempCWU": 48.844955444335938, "boilerPowerKW": 0.0, "tempCWUSet": 45, "pumpCirculationWorks": false, "outerBoiler": false, "boilerPower": 0, "fan2ExhaustWorks": false, "pumpFireplaceWorks": false, "tempFeeder": 43.863784790039062, "fanWorks": false, "ecoSterSetTemp2": null, "ecoSterSetTemp3": null, "feeder2Additional": false}}
pi@jezyna:~ $
Code: Select all
/*
Copyright (C) AC SOFTWARE SP. Z O.O.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
//Tested with https://github.com/SUPLA/arduino/tree/develop on NODEMCU
//GENERETIC ESP8266 MODULE
//CPU FREQ 80MHz
//CRYSTAL 26MHz
//1M NO SPIFFS
//DOUT
//v2 LOWER MEMORY
#define SUPLA_COMM_DEBUG //Zakomentuj tą linię by wyłączyć DEBUGOWANIE
#include <SPI.h>
#include <SuplaDevice.h> //https://github.com/SUPLA/arduino/tree/develop
#include <ArduinoJson.h> //Benonit Blanchot 6.14.0
#include <EEPROM.h>
#include <ESP8266HTTPClient.h>
#include <supla/network/esp_wifi.h>
//******************************************************************WIFI SETUP************************************************************************************************
Supla::ESPWifi wifi("xxxxxxxxxxx", "xxxxxxxxxxxxx");
//*****************************************************************SUPLA SETUP************************************************************************************************
// Replace the falowing GUID with value that you can retrieve from https://www.supla.org/arduino/get-guid
char GUID[SUPLA_GUID_SIZE] = {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx};
// Replace the following AUTHKEY with value that you can retrieve from: https://www.supla.org/arduino/get-authkey
char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx};
const char* SERVER_SUPLA = "svrxx.supla.org";
const char* Email_adres = "xxxxxxxxxxxxxxxxxxxx";
String url;
//*****************************************************************SETUP************************************************************************************************
int timer = 0;
// -------------Kanal 0 ----------
float tempCOSet = 0;
float tempCO = 0;
// -------------Kanal 1 ----------
float tempCWUSet = 0;
float tempCWU = 0;
// -------------Kanal 2 ----------
float mixerSetTemp1 = 0;
float mixerTemp1 = 0;
// -------------Kanal 3 ----------
float fuelLevel = 0;
float ecoSterTemp1 = 0;
// -------------Kanal 4 ----------
float fanPower = 0;
float ecoSterSetTemp1 = 0;
// -------------Kanal 5 ----------
float mode = 0;
float tempFeeder = 0;
// -------------Kanal 6 ----------
float fuelStream = 0;
float boilerPowerKW = 0;
// -------------Kanal 7 ----------
float pumpCWUWorks = 0;
bool pumpCWUWorks_bool = false;
float pumpCOWorks = 0;
bool pumpCOWorks_bool = false;
String number_ = "";
String Device_name = "";
String Device_name_old = "";
String zmienna = "";
byte licz_sprawdzenie_adresu_stacji = 0;
//****************************************************************************************************************************************************************************
void setup() {
Serial.begin(115200);
Serial.println(" ");
Odczytaj_zakres_eeprom(100, 200);
Device_name = zmienna.c_str();
Serial.print("Set device name to: ");
Serial.println(Device_name);
SuplaDevice.setName(Device_name.c_str());
Device_name_old = Device_name;
SuplaDevice.setTemperatureHumidityCallback(&get_temperature_and_humidity);
// SuplaDevice.addPressureSensor();
SuplaDevice.addDHT22(); // kanal 0
SuplaDevice.addDHT22(); // kanal 1
SuplaDevice.addDHT22(); // kanal 2
SuplaDevice.addDHT22(); // kanal 3
SuplaDevice.addDHT22(); // kanal 4
SuplaDevice.addDHT22(); // kanal 5
SuplaDevice.addDHT22(); // kanal 6
SuplaDevice.addDHT22(); // kanal 7
SuplaDevice.begin(GUID, // Global Unique Identifier
SERVER_SUPLA, // SUPLA server address
Email_adres, // Email address used to login to Supla Cloud
AUTHKEY); // Authorization key
WiFi.softAPdisconnect(true);
}
//****************************************************************************************************************************************************************************
void loop() {
SuplaDevice.iterate();
++timer;
if(timer == 60000){
++licz_sprawdzenie_adresu_stacji;
if(licz_sprawdzenie_adresu_stacji==1){
Device_name = "";
Device_name = "ecoNet300";
if (Device_name != Device_name_old){
EEPROM.begin(4096);
delay(100);
for (int zmienna_int = 0; zmienna_int < 4096; ++zmienna_int) {
EEPROM.write(zmienna_int, 0); //Czyszczenie pamięci EEPROM
}
EEPROM.end(); delay(100);
EEPROM.begin(4096); delay(100);
for (int zmienna_int = 0; zmienna_int < Device_name.length(); ++zmienna_int){EEPROM.write(100 + zmienna_int, Device_name[zmienna_int]);delay(5);}
EEPROM.end(); delay(200);
ESP.reset();
}
}
if(licz_sprawdzenie_adresu_stacji==100){
licz_sprawdzenie_adresu_stacji==0;
}
Odczytaj_dane_z_econet();
}
if(timer >= 60000 ){
timer = 0;
}
delay(1);
}
//****************************************************************************************************************************************************************************
void get_temperature_and_humidity(int channelNumber, double *temp, double *humidity) {
switch(channelNumber) {
case 0: {
*temp = tempCO;
*humidity = tempCOSet;
break;
}
case 1: {
*temp = tempCWU;
*humidity = tempCWUSet;
break;
}
case 2: {
*temp = mixerTemp1;
*humidity = mixerSetTemp1;
break;
}
case 3: {
*temp = ecoSterTemp1;
*humidity = fuelLevel;
break;
}
case 4: {
*temp = ecoSterSetTemp1;
*humidity = fanPower;
break;
}
case 5: {
*temp = tempFeeder;
*humidity = mode;
break;
}
case 6: {
*temp = boilerPowerKW;
*humidity = fuelStream;
break;
}
case 7: {
*temp = pumpCOWorks;
*humidity = pumpCWUWorks;
break;
}
}
}
//****************************************************************************************************************************************************************************
void Odczytaj_dane_z_econet(){
ESP.wdtFeed();
const char* host="http://xxx.xxx.xxx.xxx/econet/regParams";
if(WiFi.status()== WL_CONNECTED){
WiFiClient client;
HTTPClient http;
Serial.print("Lacze ");
Serial.println(host);
http.useHTTP10(true);
http.begin(client, host);
// string "user:password" zakodowane basic64
// na tej stronie można zamienic sobie https://www.base64decode.org/
// np dla user i pass string ma postać dXNlcjpwYXNz
http.addHeader("Authorization", "Basic xxxxxxxxxxxxxxxxxxxx");
//http.GET();
int httpResponseCode = http.GET();
if (httpResponseCode>0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
//String payload = http.getString();
//Serial.println(payload);
DynamicJsonDocument doc(4096);
deserializeJson(doc, http.getStream());
// Read values
//Serial.println(doc["curr"]["fuelLevel"].as<long>());
//Serial.println(doc["curr"]["tempCWU"].as<long>());
// ---------- kanal 0 CO ----------------------------------
// tempCOSet %
tempCOSet = doc["curr"]["tempCOSet"];
Serial.print("tempCOSet:..........");
Serial.print(tempCOSet);
Serial.println("*C");
// tempCO
tempCO = doc["curr"]["tempCO"];
Serial.print("tempCO:.............");
Serial.print(tempCO);
Serial.println("*C");
// ---------- kanal 1 CWU ----------------------------------
tempCWUSet = doc["curr"]["tempCWUSet"];
Serial.print("tempCWUSet..........");
Serial.print(tempCWUSet);
Serial.println("*C");
// tempCWU
tempCWU = doc["curr"]["tempCWU"];
Serial.print("tempCWU:............");
Serial.print(tempCWU);
Serial.println("*C");
// ---------- kanal 2 MIX----------------------------------
// mixerSetTemp1
mixerSetTemp1 = doc["curr"]["mixerSetTemp1"];
Serial.print("mixerSetTemp1:......");
Serial.print(mixerSetTemp1);
Serial.println("*C");
//mixerTemp1
mixerTemp1 = doc["curr"]["mixerTemp1"];
Serial.print("mixerTemp1:.........");
Serial.print(mixerTemp1);
Serial.println("*C");
// ---------- kanal 3 ecoSter40 i paliwo ----------------------------------
// fuelLevel %
fuelLevel = doc["curr"]["fuelLevel"];
Serial.print("fuelLevel:..........");
Serial.print(fuelLevel);
Serial.println("%");
// ecoSterTemp1
ecoSterTemp1 = doc["curr"]["ecoSterTemp1"];
Serial.print("ecoSterTemp1:.......");
Serial.print(ecoSterTemp1);
Serial.println("*C");
// ---------- kanal 4 ecoSter40 i nadmuch ----------------------------------
// fanPower %
fanPower = doc["curr"]["fanPower"];
Serial.print("fanPower:...........");
Serial.print(fanPower);
Serial.println("%");
// ecoSterSetTemp1
ecoSterSetTemp1 = doc["curr"]["ecoSterSetTemp1"];
Serial.print("ecoSterSetTemp1:....");
Serial.print(ecoSterSetTemp1);
Serial.println("*C");
// ---------- kanal 5 mode i Temp podajnika ----------------------------------
// mode
mode = doc["curr"]["mode"];
Serial.print("mode:...............");
Serial.println(mode);
// tempFeeder
tempFeeder = doc["curr"]["tempFeeder"];
Serial.print("tempFeeder:.........");
Serial.print(tempFeeder);
Serial.println("*C");
// ---------- kanal6 boilerPowerKW fuelStream----------------------------------
// boilerPowerKW
boilerPowerKW = doc["curr"]["boilerPowerKW"];
Serial.print("boilerPowerKW:......");
Serial.print(boilerPowerKW);
Serial.println("kW");
//fuelStream
fuelStream = doc["curr"]["fuelStream"];
Serial.print("fuelStream:.........");
Serial.print(fuelStream);
Serial.println("kg/h");
// ---------- kanal7 Pompy ----------------------------------
// pumpCOWorks
pumpCOWorks_bool = doc["curr"]["pumpCOWorks"];
if (pumpCOWorks_bool == true ){
pumpCOWorks = 100.0;
}
else {
pumpCOWorks = 0.0;
}
Serial.print("pumpCOWorks:........");
Serial.println(pumpCOWorks);
// pumpCWUWorks
pumpCWUWorks_bool = doc["curr"]["pumpCWUWorks"];
if (pumpCWUWorks_bool == true ){
pumpCWUWorks = 100.0;
}
else {
pumpCWUWorks = 0.0;
}
Serial.print("pumpCWUWorks:.......");
Serial.println(pumpCWUWorks);
}
// Nie udalo sie polaczyc
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
http.end();
Serial.println("Rozlaczono");
}
// Nie mamy WIFI :(
else {
Serial.println("WiFi Disconnected");
}
}
//****************************************************************************************************************************************************************************
int Odczytaj_zakres_eeprom(int x1, int y1) {
EEPROM.begin(4096);
delay(10);
zmienna = "";
byte znak = 0;
for (int zmienna_int_3 = x1; zmienna_int_3 < y1; ++zmienna_int_3) {
znak = EEPROM.read(zmienna_int_3);
if (znak >= 32 && znak <= 126){
zmienna += char(znak);
}
}
}
//****************************************************************************************************************************************************************************
Właśnie go piszę. W międzyczasie znalazłem sporo oznaczeń parametrów w internecie.
Możemy spróbować, choć z Zabbixem nie miałem jeszcze do czynieniaMógłbyś go ew. przetestować (np. na moim serwerze Zabbix) jak go skończę?