Asystent AI
arduino + Home Assi...
 
Powiadomienia
Wyczyść wszystko

arduino + Home Assistant

4 Wpisów
2 Użytkownicy
0 Reactions
1,918 Wyświetleń
(@pawel1)
Wpisów: 18
Praktykant
Autor tematu
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 
[#2816]

w arduino mam skrypt który działa bez problemu w Domoticzu, po przejsciu na HA działa tylko częsciowo.

Co trzeba by zmienić aby były widoczne przekazniki?

Temperatura jak i kontaktrony dzialaja prawidlowo.

 

// Enable debug prints to serial monitor
#define MY_DEBUG


// Enable and select radio type attached
//#define MY_RADIO_RF24
//#define MY_RADIO_NRF5_ESB
//#define MY_RADIO_RFM69
//#define MY_RADIO_RFM95

// Set LOW transmit power level as default, if you have an amplified NRF-module and
// power your radio separately with a good regulator you can turn up PA level.
//#define MY_RF24_PA_LEVEL RF24_PA_LOW

// Enable serial gateway
#define MY_GATEWAY_SERIAL

// Define a lower baud rate for Arduinos running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender)
#if F_CPU == 8000000L
#define MY_BAUD_RATE 38400
#endif

// Enable inclusion mode
#define MY_INCLUSION_MODE_FEATURE
// Enable Inclusion mode button on gateway
//#define MY_INCLUSION_BUTTON_FEATURE

// Inverses behavior of inclusion button (if using external pullup)
//#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP

// Set inclusion mode duration (in seconds)
#define MY_INCLUSION_MODE_DURATION 60
// Digital pin used for inclusion mode button
//#define MY_INCLUSION_MODE_BUTTON_PIN 3

// Set blinking period
#define MY_DEFAULT_LED_BLINK_PERIOD 300

// Inverses the behavior of leds
//#define MY_WITH_LEDS_BLINKING_INVERSE

// Flash leds on rx/tx/err
// Uncomment to override default HW configurations
//#define MY_DEFAULT_ERR_LED_PIN 4 // Error led pin
//#define MY_DEFAULT_RX_LED_PIN 6 // Receive led pin
//#define MY_DEFAULT_TX_LED_PIN 5 // the PCB, on board LED

#include <SPI.h>
#include <MySensors.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <Bounce2.h>

#define RELAY_1 24 // pompa cyrkulacji
#define RELAY_2 25
#define RELAY_3 26
#define RELAY_4 27
#define RELAY_5 28
#define RELAY_6 29
#define RELAY_7 30
#define RELAY_8 31
#define RELAY_9 32
#define RELAY_10 33
#define RELAY_11 34
#define RELAY_12 35
#define RELAY_13 36
#define RELAY_14 37
#define RELAY_15 38
#define RELAY_16 39

#define NUMBER_OF_RELAYS 21 // Total number of attached relays
#define RELAY_ON 0 // GPIO value to write to turn on attached relay
#define RELAY_OFF 1 // GPIO value to write to turn off attached relay

#define BUTTON_PIN 3 //wlacznik cyrkulacji
#define BUTTON2_PIN 4
#define BUTTON3_PIN 5
#define BUTTON4_PIN 6
#define BUTTON5_PIN 7
#define BUTTON6_PIN 8
#define BUTTON7_PIN 9
#define BUTTON8_PIN A7
#define BUTTON9_PIN A8
#define BUTTON10_PIN A9
#define BUTTON11_PIN A10
#define BUTTON12_PIN A11
#define BUTTON13_PIN A12
#define BUTTON14_PIN A13
#define BUTTON15_PIN A14
//#define BUTTON16_PIN 2


#define CHILD_ID_1 46 //Kontaktron
#define BUTTON_PIN_1 46 // Arduino Digital I/O pin for button/reed switch
#define CHILD_ID_2 47
#define BUTTON_PIN_2 47 // Arduino Digital I/O pin for button/reed switch


#define COMPARE_TEMP 0 // Send temperature only if changed? 1 = Yes 0 = No

#define ONE_WIRE_BUS 2 // Pin z podpietymi czujnikami
#define ATTACHED_DS18B20 29
unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds)
// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0; // will store last time LED was updated

OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
DallasTemperature sensors(&oneWire); // Pass the oneWire reference to Dallas Temperature.

byte D[ATTACHED_DS18B20][8] = {
{ 0x28, 0x90, 0x5, 0x56, 0xB5, 0x1, 0x3C, 0xFC }, //1 22 cz sprzegla gorny
{ 0x28, 0xEA, 0x8A, 0x56, 0xB5, 0x1, 0x3C, 0xF }, //2 23 cz CWU
/* {0x28, 0x4B, 0xD9, 0x16, 0xA8, 0x1, 0x3C, 0x5}, //3 24 cz powrot cyrkulacji
{0x28, 0x44, 0x9E, 0x16, 0xA8, 0x1, 0x3C, 0x99}, //4 25 cz pompa CWU
{0x28, 0x6C, 0x18, 0x16, 0xA8, 0x1, 0x3C, 0xD9}, //5 26 cz podlogowka gora
{0x28, 0xA6, 0xB8, 0x56, 0xB5, 0x1, 0x3C, 0x0}, //6 27 cz temp pieca
{0x28, 0xDB, 0xB2, 0x56, 0xB5, 0x1, 0x3C, 0x6F}, //7 28 cz powrot podlogowki garaz
{0x28, 0x6, 0xC1, 0x16, 0xA8, 0x1, 0x3C, 0x78}, //8 29 cz sterownik pieca
{0x28, 0xD, 0x6B, 0x4, 0x0, 0x0, 0x0, 0x3B}, //9 30 cz pokoj 2
{0x28, 0x1F, 0x3D, 0x5, 0x0, 0x0, 0x0, 0x88}, //10 31 cz pokoj 1
{0x28, 0x50, 0xC3, 0x4, 0x0, 0x0, 0x0, 0x52}, //11 32 cz pokoj 4
{0x28, 0xCB, 0x8A, 0x4, 0x0, 0x0, 0x0, 0x1}, //12 33 cz pokoj 3
{0x28, 0x2B, 0xC0, 0x4, 0x0, 0x0, 0x0, 0x7C}, //13 34 cz gniazdo wzmacniacza wifi
{0x28, 0x42, 0x81, 0x4, 0x0, 0x0, 0x0, 0xD}, //14 35 cz woda uzytkowa na dom
{0x28, 0x30, 0x47, 0x5, 0x0, 0x0, 0x0, 0xCA}, //15 36 cz powrot podlogowki parter
{0x28, 0x5, 0xD7, 0x4, 0x0, 0x0, 0x0, 0xF4}, //16 37 cz podlogowka garaz
{0x28, 0x47, 0x19, 0x5, 0x0, 0x0, 0x0, 0xE0}, //17 38 cz powrot podlogowka gora
{0x28, 0xF5, 0x36, 0x5, 0x0, 0x0, 0x0, 0x1E}, //18 39 cz wody na grzejniki
{0x28, 0x86, 0xB7, 0x16, 0xA8, 0x1, 0x3C, 0x63}, //19 40 cz temp wody podlogowka parter
{0x28, 0xA1, 0x3B, 0x5, 0x0, 0x0, 0x0, 0x0}, //20 41 cz powrot wody grzejniki
{0x28, 0x98, 0x91, 0x4, 0x0, 0x0, 0x0, 0x7A}, //21 42 cz na powrocie pieca
{0x28, 0xD5, 0x10, 0x5, 0x0, 0x0, 0x0, 0xCC}, //22 43 cz obok palnika przy piecu
{0x28, 0x4B, 0xDE, 0x79, 0xA2, 0x1, 0x3, 0xCB}, //23 44 cz w rozdzielni elektrycznej
{0x28, 0xF9, 0x14, 0x5, 0x0, 0x0, 0x0, 0x18}, //24 45 cz w kanciapie
{0x28, 0x91, 0x7C, 0x5, 0x0, 0x0, 0x0, 0x55} //25 46 cz w wiatrolapie glownym
*/
};
//{0x28, 0x72, 0xD7, 0x4, 0x0, 0x0, 0x0, 0xE9}, //9 -30 cz okno przesowne prawa strona
//{0x28, 0xA4, 0x68, 0x4, 0x0, 0x0, 0x0, 0xBF}, //25 -46 cz na zewnatrz wschod
//{0x28, 0xD, 0x9D, 0x56, 0xB5, 0x1, 0x3C, 0x8E}, //27 -48 cz w lazience na gorze

float lastTemperature[ATTACHED_DS18B20];
int numSensors = 0;
bool receivedConfig = false;
bool metric = true;
// Initialize temperature message
MyMessage msg(0, V_TEMP);
MyMessage msg2(1, V_LIGHT);
MyMessage msg3(2, V_LIGHT);
MyMessage msg4(3, V_LIGHT);
MyMessage msg5(4, V_LIGHT);
MyMessage msg6(5, V_LIGHT);
MyMessage msg7(6, V_LIGHT);
MyMessage msg8(7, V_LIGHT);
MyMessage msg9(8, V_LIGHT);
MyMessage msg10(9, V_LIGHT);
MyMessage msg11(10, V_LIGHT);
MyMessage msg12(11, V_LIGHT);
MyMessage msg13(12, V_LIGHT);
MyMessage msg14(13, V_LIGHT);
MyMessage msg15(14, V_LIGHT);
MyMessage msg16(15, V_LIGHT);
MyMessage msg17(16, V_LIGHT);

MyMessage msg18(CHILD_ID_1, V_TRIPPED);
MyMessage msg19(CHILD_ID_2, V_TRIPPED);

void before() {
for (int sensor = 1, pin = RELAY_1; sensor <= NUMBER_OF_RELAYS; sensor++, pin++) {
// Then set relay pins in output mode
pinMode(pin, OUTPUT);
// Set relay to last known state (using eeprom storage)
digitalWrite(pin, loadState(sensor) ? RELAY_ON : RELAY_OFF);
}
// Startup up the OneWire library
sensors.begin();
}
Bounce debouncer = Bounce();
Bounce debouncer2 = Bounce();
Bounce debouncer3 = Bounce();
Bounce debouncer4 = Bounce();
Bounce debouncer5 = Bounce();
Bounce debouncer6 = Bounce();
Bounce debouncer7 = Bounce();
Bounce debouncer8 = Bounce();
Bounce debouncer9 = Bounce();
Bounce debouncer10 = Bounce();
Bounce debouncer11 = Bounce();
Bounce debouncer12 = Bounce();
Bounce debouncer13 = Bounce();
Bounce debouncer14 = Bounce();
Bounce debouncer15 = Bounce();
Bounce debouncer16 = Bounce();
Bounce debouncer17 = Bounce();
Bounce debouncer18 = Bounce();

int oldValue17 = -1; //kontaktron
int oldValue18 = -1;

void setup()
{
{
// Setup locally attached sensors
delay(11000);
// Setup the button.

pinMode(BUTTON_PIN_1, INPUT);
pinMode(BUTTON_PIN_2, INPUT);

// Activate internal pull-up
digitalWrite(BUTTON_PIN_1, HIGH);
digitalWrite(BUTTON_PIN_2, HIGH);

pinMode(BUTTON_PIN, INPUT_PULLUP); //pompa cyrkulacji
debouncer.attach(BUTTON_PIN);
debouncer.interval(5);

pinMode(BUTTON2_PIN, INPUT_PULLUP);
debouncer2.attach(BUTTON2_PIN);
debouncer2.interval(5);

pinMode(BUTTON3_PIN, INPUT_PULLUP);
debouncer3.attach(BUTTON3_PIN);
debouncer3.interval(5);

pinMode(BUTTON4_PIN, INPUT_PULLUP);
debouncer4.attach(BUTTON4_PIN);
debouncer4.interval(5);

pinMode(BUTTON5_PIN, INPUT_PULLUP);
debouncer5.attach(BUTTON5_PIN);
debouncer5.interval(5);

pinMode(BUTTON6_PIN, INPUT_PULLUP);
debouncer6.attach(BUTTON6_PIN);
debouncer6.interval(5);

pinMode(BUTTON7_PIN, INPUT_PULLUP);
debouncer7.attach(BUTTON7_PIN);
debouncer7.interval(5);

pinMode(BUTTON8_PIN, INPUT_PULLUP);
debouncer8.attach(BUTTON8_PIN);
debouncer8.interval(5);

pinMode(BUTTON9_PIN, INPUT_PULLUP);
debouncer9.attach(BUTTON9_PIN);
debouncer9.interval(5);

pinMode(BUTTON10_PIN, INPUT_PULLUP);
debouncer10.attach(BUTTON10_PIN);
debouncer10.interval(5);

pinMode(BUTTON11_PIN, INPUT_PULLUP);
debouncer11.attach(BUTTON11_PIN);
debouncer11.interval(5);

pinMode(BUTTON12_PIN, INPUT_PULLUP);
debouncer12.attach(BUTTON12_PIN);
debouncer12.interval(5);

pinMode(BUTTON13_PIN, INPUT_PULLUP);
debouncer13.attach(BUTTON13_PIN);
debouncer13.interval(5);

pinMode(BUTTON14_PIN, INPUT_PULLUP);
debouncer14.attach(BUTTON14_PIN);
debouncer14.interval(5);

pinMode(BUTTON15_PIN, INPUT_PULLUP);
debouncer15.attach(BUTTON15_PIN);
debouncer15.interval(5);

// pinMode(BUTTON16_PIN, INPUT_PULLUP);
// debouncer16.attach(BUTTON16_PIN);
// debouncer16.interval(5);

debouncer17.attach(BUTTON_PIN_1); //kontrakton
debouncer17.interval(5);
debouncer18.attach(BUTTON_PIN_2);
debouncer18.interval(5);
}

// requestTemperatures() will not block current thread
sensors.setWaitForConversion(false);
}

void presentation()
{
// Send the sketch version information to the gateway and Controller
sendSketchInfo("Relay and Temp", "1.0");

for (int sensor = 1; sensor <= NUMBER_OF_RELAYS + ATTACHED_DS18B20; sensor++) {
// Register all sensors to gw (they will be created as child devices)

if (sensor <= NUMBER_OF_RELAYS) {
present(sensor, S_BINARY);
}
else {
present(sensor, S_TEMP);
}
}
{
// Register binary input sensor to gw (they will be created as child devices)
// You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage.
// If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
present(CHILD_ID_1, S_DOOR);
present(CHILD_ID_2, S_DOOR);
}

}

void loop() {
{
unsigned long currentMillis = millis();

if (currentMillis - previousMillis >= SLEEP_TIME) {
// save the last time you blinked the LED
previousMillis = currentMillis;

// Fetch temperatures from Dallas sensors
sensors.requestTemperatures();

// query conversion time and sleep until conversion completed
int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution());
// sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater)
sleep(conversionTime);

// Read temperatures and send them to controller
for (int i = 0; i < ATTACHED_DS18B20; i++) {

// Fetch and round temperature to one decimal
// float temperature = static_cast<float>(static_cast<int>((getConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;
float temperature = sensors.getTempC(D[i]);

// Only send data if temperature has changed and no error
if (COMPARE_TEMP == 1) {
if (lastTemperature[i] != temperature && temperature != -127.00 && temperature != 85.00) {
// Send in the new temperature
send(msg.setSensor(i + NUMBER_OF_RELAYS + 1).set(temperature, 1));
// Save new temperatures for next compare
lastTemperature[i] = temperature;
}
}
else {
if (temperature != -127.00 && temperature != 85.00) {
// Send in the new temperature
send(msg.setSensor(i + NUMBER_OF_RELAYS + 1).set(temperature, 1));
// Save new temperatures for next compare
lastTemperature[i] = temperature;
}
}
}
}
}
{
// Send locally attached sensor data here
if (debouncer.update()) { //1
// Get the update value.
int value = debouncer.read();
// Send in the new value.
if (value == LOW) {
saveState(1, !loadState(1));
digitalWrite(RELAY_1, loadState(1) ? RELAY_ON : RELAY_OFF);
send(msg2.set(loadState(1)));
}
}
if (debouncer2.update()) { //2
int value2 = debouncer2.read();
if (value2 == LOW) {
saveState(2, !loadState(2));
digitalWrite(RELAY_2, loadState(2) ? RELAY_ON : RELAY_OFF);
send(msg3.set(loadState(2)));
}
}
if (debouncer3.update()) { //3
int value3 = debouncer3.read();
if (value3 == LOW) {
saveState(3, !loadState(3));
digitalWrite(RELAY_3, loadState(3) ? RELAY_ON : RELAY_OFF);
send(msg4.set(loadState(3)));
}
}
if (debouncer4.update()) { //4
int value4 = debouncer4.read();
if (value4 == LOW) {
saveState(4, !loadState(4));
digitalWrite(RELAY_4, loadState(4) ? RELAY_ON : RELAY_OFF);
send(msg5.set(loadState(4)));
}
}
if (debouncer5.update()) { //5
int value5 = debouncer5.read();
if (value5 == LOW) {
saveState(5, !loadState(5));
digitalWrite(RELAY_5, loadState(5) ? RELAY_ON : RELAY_OFF);
send(msg6.set(loadState(5)));
}
}

if (debouncer6.update()) { //6
int value6 = debouncer6.read();
if (value6 == LOW) {
saveState(6, !loadState(6));
digitalWrite(RELAY_6, loadState(6) ? RELAY_ON : RELAY_OFF);
send(msg7.set(loadState(6)));
}
}

if (debouncer7.update()) { //7
int value7 = debouncer7.read();
if (value7 == LOW) {
saveState(7, !loadState(7));
digitalWrite(RELAY_7, loadState(7) ? RELAY_ON : RELAY_OFF);
send(msg8.set(loadState(7)));
}
}

if (debouncer8.update()) { //8
int value8 = debouncer8.read();
if (value8 == LOW) {
saveState(8, !loadState(8));
digitalWrite(RELAY_8, loadState(8) ? RELAY_ON : RELAY_OFF);
send(msg9.set(loadState(8)));
}
}

if (debouncer9.update()) { //9
int value9 = debouncer9.read();
if (value9 == LOW) {
saveState(9, !loadState(9));
digitalWrite(RELAY_9, loadState(9) ? RELAY_ON : RELAY_OFF);
send(msg10.set(loadState(9)));
}
}

if (debouncer10.update()) { //10
int value10 = debouncer10.read();
if (value10 == LOW) {
saveState(10, !loadState(10));
digitalWrite(RELAY_10, loadState(10) ? RELAY_ON : RELAY_OFF);
send(msg11.set(loadState(10)));
}
}

if (debouncer11.update()) { //11
int value11 = debouncer11.read();
if (value11 == LOW) {
saveState(11, !loadState(11));
digitalWrite(RELAY_11, loadState(11) ? RELAY_ON : RELAY_OFF);
send(msg12.set(loadState(11)));
}
}

if (debouncer12.update()) { //12
int value12 = debouncer12.read();
if (value12 == LOW) {
saveState(12, !loadState(12));
digitalWrite(RELAY_12, loadState(12) ? RELAY_ON : RELAY_OFF);
send(msg13.set(loadState(12)));
}
}

if (debouncer13.update()) { //13
int value13 = debouncer13.read();
if (value13 == LOW) {
saveState(13, !loadState(13));
digitalWrite(RELAY_13, loadState(13) ? RELAY_ON : RELAY_OFF);
send(msg14.set(loadState(13)));
}
}

if (debouncer14.update()) { //14
int value14 = debouncer14.read();
if (value14 == LOW) {
saveState(14, !loadState(14));
digitalWrite(RELAY_14, loadState(14) ? RELAY_ON : RELAY_OFF);
send(msg15.set(loadState(14)));
}
}

if (debouncer15.update()) { //15
int value15 = debouncer15.read();
if (value15 == LOW) {
saveState(15, !loadState(15));
digitalWrite(RELAY_15, loadState(15) ? RELAY_ON : RELAY_OFF);
send(msg16.set(loadState(15)));
}
}

if (debouncer16.update()) { //16
int value16 = debouncer16.read();
if (value16 == LOW) {
saveState(16, !loadState(16));
digitalWrite(RELAY_16, loadState(16) ? RELAY_ON : RELAY_OFF);
send(msg17.set(loadState(16)));
}
}

debouncer17.update();
// Get the update value
int value17 = debouncer17.read();

if (value17 != oldValue17) {
// Send in the new value
send(msg18.set(value17 == HIGH ? 1 : 0));
oldValue17 = value17;
}

debouncer18.update();
// Get the update value
int value18 = debouncer18.read();

if (value18 != oldValue18) {
// Send in the new value
send(msg19.set(value18 == HIGH ? 1 : 0));
oldValue18 = value18;
}

}
}
void receive(const MyMessage &message)
{
// We only expect one type of message from controller. But we better check anyway.
if (message.type == V_STATUS) {
// Change relay state
digitalWrite(message.sensor - 1 + RELAY_1, message.getBool() ? RELAY_ON : RELAY_OFF);
// Store state in eeprom
saveState(message.sensor, message.getBool());
// Write some debug info
Serial.print("Incoming change for sensor:");
Serial.print(message.sensor);
Serial.print(", New status: ");
Serial.println(message.getBool());
}
}

 
Dodane : 08/03/2022 9:38 pm
(@kamilkazmierczak)
Wpisów: 42
Praktykant Patron Strony Donator 2K22, Donator 2K23, Donator 2K24, Donator 2K25, Donator 2K26
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

Witam,

 

udalo Ci sie rozwiązać problem, bo w sumie wisze w tym samym miejscu ?


 
Dodane : 29/01/2023 11:55 pm
(@pawel1)
Wpisów: 18
Praktykant
Autor tematu
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

Hej,

Wywaliłem arduino, zakupiłem ESP32. dużo prostsze i więcej możiwości do konfiguracji. Tasmota, ESPeasy, ESPHOME, działa to dużo lepiej. 

 


 
Dodane : 30/01/2023 12:12 am
(@kamilkazmierczak)
Wpisów: 42
Praktykant Patron Strony Donator 2K22, Donator 2K23, Donator 2K24, Donator 2K25, Donator 2K26
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

Teoretycznie tak . Praktycznie chciałbym to zostawić niezależne. 


 
Dodane : 30/01/2023 12:38 am
Udostępnij: