Converting a script to lua for Domoticz
Posted: Monday 13 February 2017 23:23
Hello,
I have a Lue script for de Wemos.
But i want it to use for Domoticz.
is it possible to convert it to a lua script. I am a moob in prograaming lua.
Thanks to Erwin Lokhorst for the sketch
/* Regeling tbv pomp vloerverwarming.
Bij een watertemperatuur van 40C en hoger EN een verschil in temperatuur tussen aanvoer en retour van 4C of meer,
gaat de pomp van de vloerverwarming draaien.
Komt de temperatuur hier onder, dan zal de pomp nog 10 minuten blijven doordraaien en daarna uitschakelen.
Voor de periode buiten het stookseisoen: Als er langere tijd geen warmte aanvoer van de CV is,
zal de pomp na ca elke 8 uur toch voor ca 10 minuten gaan draaien om te voorkomen dat deze vast kan komen te zitten.
Welke sensor op de aanvoer en welke op de retour van de cv zit wordt automatisch bepaald.
/*
/* De data van beide sensoren zit op PIN 2. Het relais wordt aangestuurd via PIN 8.
En voor de lcd geldt:
DEVICE PINOUT (SPI Interface):
PIN 1: GND
PIN 2: +5V
PIN 3: SDA - Connect to Arduino analogue PIN 4
PIN 4: SCL - Connect to Arduino analogue PIN 5
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
int relais = 8;
int temp_status = 0;
int teller; // teller voor nalooptijd
int nalooptijd;
word pauzeteller; // teller voor pomp uit tijd
int pomppauze; // tijd in min dat de pomp uit is
int pomp_status;
float aanvoer = 0;
float retour = 0;
float temp1 = 0;
float temp2 = 0;
LiquidCrystal_I2C lcd(0x27,16,2);
/* Library te downloaden via: http://forum.hobbycomponents.com/viewto ... =39&t=1125 (wel registreren)*/
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress sensor1 = { 0x10, 0x1E, 0x4F, 0xB5, 0x02, 0x08, 0x00, 0x1C };
DeviceAddress sensor2 = { 0x10, 0x21, 0x82, 0xB5, 0x02, 0x08, 0x00, 0x1B };
/* invoeren unieke adressen van de sensoren. zie onderstaande link voor tutorial en sketch.
http://www.hacktronics.com/Tutorials/ar ... inder.html */
void setup()
{
pinMode(relais,OUTPUT);
lcd.init();
sensors.begin();
sensors.setResolution(sensor1, 10);
sensors.setResolution(sensor2, 10);
lcd.begin(16,2);
lcd.clear();
}
void loop()
{
lcd.backlight(); // backlight lcd aan
delay(2000);
lcd.clear();
sensors.requestTemperatures(); // lezen van de sensoren.
float temp1 = sensors.getTempC(sensor1);
float temp2 = sensors.getTempC(sensor2);
if (temp1 == -127.00) { // bij een defect of losraken van een van de sensoren volgt en error.
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Error: sensor 1)");
}
if (temp2 == -127.00) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Error: sensor 2)");
}
if (temp1 >= temp2) { // kijkt welke van de twee sensoren de hoogste temperatuur meet,
aanvoer = temp1; // dit is dan de "aanvoer" en de lagere de "retour".
retour = temp2;
} else {
aanvoer = temp2;
retour = temp1;
}
lcd.clear();
lcd.setCursor(0,0); // geeft de temperatuur van beide sensoren aan op de lcd.
lcd.print("Aanvoer: ");
lcd.print(aanvoer);
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("Retour : ");
lcd.print(retour);
lcd.print(" C");
delay(2000); // er is twee keer een delay van 2 sec = totaal 4 sec per cyclus.
if (temp1 > 39.00 || temp2 > 39.00) { // indien meer dan 39C gemeten (ketel brandt)
temp_status = 1; // voldoende warmte aanvoer om pomp te laten draaien
pomp_status = 1;
} else {
if (aanvoer - retour > 4) { // indien meer dan 4C verschil
temp_status = 1; // voldoende warmte aanvoer om pomp te laten draaien
pomp_status = 1;
} else {
temp_status = 0; // te weinig warmte aanvoer om pomp te laten draaien
pomp_status = 0;
}
}
if (temp_status == 1) { // zo lang er voldoende warmte aanvoer is
teller = 150; // de teller hog zetten voor nalooptijd pomp. ( 150 * 4 = 600 sec = 10 min)
} else {
if (teller > 0) { // tot zo lang de teller nog niet op 0 staat
--teller; // dan loopt de teller af met 1 (4 seconden per keer ivm 2 x delay2000)
nalooptijd = teller / 15; // nalooptijd wordt berekend door de counter te delen door 15 = xxx minuten
pomp_status = 1; // Pompstatus wordt hoog omdat de pomp nog wel zo lang moet blijven draaien
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Pomp gaat uit.");
lcd.setCursor(0,1);
lcd.print("Nalooptijd: ");
lcd.print(nalooptijd);
lcd.print("min"); // weergave op lcd hoelang de pomp nog naloopt.
} else { // geen warmteaanvoer en de teller(nalooptijd) is terug op 0 dan
pomp_status = 0; //hoeft de pomp niet meer te draaien
}
if (temp_status == 0 && teller == 0) { // als er geen warmte aanvoer is EN counter is terug gelopen naar 0
++pauzeteller; // dan loopt deze teller met 4sec per keer op (2x delay 2000ms)
pomppauze = pauzeteller / 15; // de 4 sec vertraging weer corrigeren voor weergave op lcd AANPASSEN (= omrekenen naar minuten)
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Pomp is uit");
lcd.setCursor(0,1);
lcd.print("voor: ");
lcd.print(pomppauze);
lcd.print(" min"); //weergave op lcd hoelang de pomp uit is.
pomp_status = 0; //pomp hoeft niet te draaien
}
if (pauzeteller >= 7200 && pauzeteller <= 7350) { // Pomp moet nu voor 10 minuten draaien *per ca 8 uur) om te voorkomen dat deze vast kan gaan zitten
pomp_status = 1; // Pompstatus wordt hoog omdat deze moet gaan draaien.
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Pomp draait voor");
lcd.setCursor(0,1);
lcd.print(" 10 min");
}
if (pauzeteller == 7350) {
pomp_status = 0; // de pomp hoeft niet meer te draaien
pauzeteller = 0; // teller resetten op 0
}
}
if (pomp_status == 1) { // pomp aan of uitzetten
digitalWrite(relais,HIGH);
} else {
digitalWrite(relais,LOW);
}
}
I have a Lue script for de Wemos.
But i want it to use for Domoticz.
is it possible to convert it to a lua script. I am a moob in prograaming lua.

Thanks to Erwin Lokhorst for the sketch
/* Regeling tbv pomp vloerverwarming.
Bij een watertemperatuur van 40C en hoger EN een verschil in temperatuur tussen aanvoer en retour van 4C of meer,
gaat de pomp van de vloerverwarming draaien.
Komt de temperatuur hier onder, dan zal de pomp nog 10 minuten blijven doordraaien en daarna uitschakelen.
Voor de periode buiten het stookseisoen: Als er langere tijd geen warmte aanvoer van de CV is,
zal de pomp na ca elke 8 uur toch voor ca 10 minuten gaan draaien om te voorkomen dat deze vast kan komen te zitten.
Welke sensor op de aanvoer en welke op de retour van de cv zit wordt automatisch bepaald.
/*
/* De data van beide sensoren zit op PIN 2. Het relais wordt aangestuurd via PIN 8.
En voor de lcd geldt:
DEVICE PINOUT (SPI Interface):
PIN 1: GND
PIN 2: +5V
PIN 3: SDA - Connect to Arduino analogue PIN 4
PIN 4: SCL - Connect to Arduino analogue PIN 5
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
int relais = 8;
int temp_status = 0;
int teller; // teller voor nalooptijd
int nalooptijd;
word pauzeteller; // teller voor pomp uit tijd
int pomppauze; // tijd in min dat de pomp uit is
int pomp_status;
float aanvoer = 0;
float retour = 0;
float temp1 = 0;
float temp2 = 0;
LiquidCrystal_I2C lcd(0x27,16,2);
/* Library te downloaden via: http://forum.hobbycomponents.com/viewto ... =39&t=1125 (wel registreren)*/
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress sensor1 = { 0x10, 0x1E, 0x4F, 0xB5, 0x02, 0x08, 0x00, 0x1C };
DeviceAddress sensor2 = { 0x10, 0x21, 0x82, 0xB5, 0x02, 0x08, 0x00, 0x1B };
/* invoeren unieke adressen van de sensoren. zie onderstaande link voor tutorial en sketch.
http://www.hacktronics.com/Tutorials/ar ... inder.html */
void setup()
{
pinMode(relais,OUTPUT);
lcd.init();
sensors.begin();
sensors.setResolution(sensor1, 10);
sensors.setResolution(sensor2, 10);
lcd.begin(16,2);
lcd.clear();
}
void loop()
{
lcd.backlight(); // backlight lcd aan
delay(2000);
lcd.clear();
sensors.requestTemperatures(); // lezen van de sensoren.
float temp1 = sensors.getTempC(sensor1);
float temp2 = sensors.getTempC(sensor2);
if (temp1 == -127.00) { // bij een defect of losraken van een van de sensoren volgt en error.
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Error: sensor 1)");
}
if (temp2 == -127.00) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Error: sensor 2)");
}
if (temp1 >= temp2) { // kijkt welke van de twee sensoren de hoogste temperatuur meet,
aanvoer = temp1; // dit is dan de "aanvoer" en de lagere de "retour".
retour = temp2;
} else {
aanvoer = temp2;
retour = temp1;
}
lcd.clear();
lcd.setCursor(0,0); // geeft de temperatuur van beide sensoren aan op de lcd.
lcd.print("Aanvoer: ");
lcd.print(aanvoer);
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("Retour : ");
lcd.print(retour);
lcd.print(" C");
delay(2000); // er is twee keer een delay van 2 sec = totaal 4 sec per cyclus.
if (temp1 > 39.00 || temp2 > 39.00) { // indien meer dan 39C gemeten (ketel brandt)
temp_status = 1; // voldoende warmte aanvoer om pomp te laten draaien
pomp_status = 1;
} else {
if (aanvoer - retour > 4) { // indien meer dan 4C verschil
temp_status = 1; // voldoende warmte aanvoer om pomp te laten draaien
pomp_status = 1;
} else {
temp_status = 0; // te weinig warmte aanvoer om pomp te laten draaien
pomp_status = 0;
}
}
if (temp_status == 1) { // zo lang er voldoende warmte aanvoer is
teller = 150; // de teller hog zetten voor nalooptijd pomp. ( 150 * 4 = 600 sec = 10 min)
} else {
if (teller > 0) { // tot zo lang de teller nog niet op 0 staat
--teller; // dan loopt de teller af met 1 (4 seconden per keer ivm 2 x delay2000)
nalooptijd = teller / 15; // nalooptijd wordt berekend door de counter te delen door 15 = xxx minuten
pomp_status = 1; // Pompstatus wordt hoog omdat de pomp nog wel zo lang moet blijven draaien
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Pomp gaat uit.");
lcd.setCursor(0,1);
lcd.print("Nalooptijd: ");
lcd.print(nalooptijd);
lcd.print("min"); // weergave op lcd hoelang de pomp nog naloopt.
} else { // geen warmteaanvoer en de teller(nalooptijd) is terug op 0 dan
pomp_status = 0; //hoeft de pomp niet meer te draaien
}
if (temp_status == 0 && teller == 0) { // als er geen warmte aanvoer is EN counter is terug gelopen naar 0
++pauzeteller; // dan loopt deze teller met 4sec per keer op (2x delay 2000ms)
pomppauze = pauzeteller / 15; // de 4 sec vertraging weer corrigeren voor weergave op lcd AANPASSEN (= omrekenen naar minuten)
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Pomp is uit");
lcd.setCursor(0,1);
lcd.print("voor: ");
lcd.print(pomppauze);
lcd.print(" min"); //weergave op lcd hoelang de pomp uit is.
pomp_status = 0; //pomp hoeft niet te draaien
}
if (pauzeteller >= 7200 && pauzeteller <= 7350) { // Pomp moet nu voor 10 minuten draaien *per ca 8 uur) om te voorkomen dat deze vast kan gaan zitten
pomp_status = 1; // Pompstatus wordt hoog omdat deze moet gaan draaien.
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Pomp draait voor");
lcd.setCursor(0,1);
lcd.print(" 10 min");
}
if (pauzeteller == 7350) {
pomp_status = 0; // de pomp hoeft niet meer te draaien
pauzeteller = 0; // teller resetten op 0
}
}
if (pomp_status == 1) { // pomp aan of uitzetten
digitalWrite(relais,HIGH);
} else {
digitalWrite(relais,LOW);
}
}