Met behulp van Vayager heb ik een plugin gemaakt voor de Mertik Dru haard.
met de plugin worden zowel de input van de afstandbediening herkent als het is mogelijk de haard aan te sturen.
De plugin werkt bij mij prima maar ik ben opzoek naar wat andere met een haard die dit kunnen testen.
dus als er meerdere zijn met een haard met Mertik afstandsbediening graag de plugin testen.
- Code: Selecteer alles
//#######################################################################################################
//########################### Plugin-251 mertik maxitrol ################################################
//#######################################################################################################
/*********************************************************************************************\
* This Plugin takes care of reception of mertik maxitrol for fireplace
* PCB markings: G6R H4T1.
*
* Auteur : Maurice Ruiter (Dodge)
* Support : www.nodo-domotica.nl
* Datum : 3-3-2015
* Versie : 1.0
* Nodo productnummer : n.v.t. meegeleverd met Nodo code.
* Compatibiliteit : Vanaf Nodo build nummer ???
* Syntax : "maxitrol <Par1:Sensor ID>, <Par2:Basis Variabele>"
*********************************************************************************************
* Changelog: v1.0 initial release
*********************************************************************************************
* Technical information:
*
* 0001100101 10100101 10011010
* 0001100101 10010110 10011010
* 10 = 1
* 01 = 0
*
* higher: 10011010
* lower: 10100110
* off: 01101010
* on: 10101010
\*********************************************************************************************/
#define PLUGIN_ID 251
#define PLUGIN_NAME "maxitrol"
#define MAXITROL_PULSECOUNT 26
#define PLUGIN_251_EVENT "Maxitrol"
#define PLUGIN_251_COMMAND "MaxiSend"
#define PLUGIN_251_ON "On"
#define PLUGIN_251_OFF "Off"
#define PLUGIN_251_UP "Up"
#define PLUGIN_251_DOWN "Down"
#define PLUGIN_251_STOP "STOP"
#define PLUGIN_251_RUN_UP "Run_Up"
#define PLUGIN_251_RUN_DOWN "Run_Down"
#define FA20RFSTART 100
#define FA20RFSPACE 250
#define FA20RFLOW 400
#define FA20RFHIGH 750
byte Plugin_251_ProtocolCheckID(byte checkID);
byte Plugin_251_ProtocolValidID[2];
byte Plugin_251_ProtocolVar[2];
boolean Plugin_251(byte function, struct NodoEventStruct *event, char *string)
{
boolean success=false;
switch(function)
{
#ifdef PLUGIN_251_CORE
case PLUGIN_RAWSIGNAL_IN:
{
if (RawSignal.Number !=MAXITROL_PULSECOUNT) return false;
byte basevar=0;
unsigned int bitstream=0; // holds first 16 bits
byte address=0;
byte command=0;
byte status=0;
char buffer[14]="";
//==================================================================================
// get bytes
for(int x=3;x<=RawSignal.Number-1;x=x+2) {
if (RawSignal.Pulses[x]*RawSignal.Multiply < 550) {
bitstream = (bitstream << 1); // 0
} else {
bitstream = (bitstream << 1) | 0x1; // 1
}
}
//==================================================================================
// all bytes received, make sure checksum is okay
if (RawSignal.Pulses[1]*RawSignal.Multiply > 550) return false;
if (RawSignal.Pulses[2]*RawSignal.Multiply > 550) return false;
//==================================================================================
command=(bitstream) & 0x0f; // get address from pulses
address=(bitstream)>>4; // get command from pulses
if (command == 0xB) status=1; // up
else if (command == 0xD) status=2; // down
else if (command == 0x3) status=4; // on
else if (command == 0x7) status=3; // off
else if (command == 0x8) status=5; // stop
else if (command == 0xa) status=6; // run up
else if (command == 0xc) status=7; // run down
else {
return false;
}
//+==================================================================================
// Serial.print(" ID=");
// Serial.print(bitstream1,DEC);
// Serial.print(" actie=");
// Serial.println(event->Par2);
//==================================================================================
event->Par2=status;
event->Par1=address,DEC;
event->SourceUnit = 0; // Komt niet van een Nodo unit af, dus unit op nul zetten
event->Port = VALUE_SOURCE_RF;
event->Type = NODO_TYPE_PLUGIN_EVENT;
event->Command = 251; // Nummer van dit device
RawSignal.Repeats = true;
if (basevar == 0) return true;
//==================================================================================
RawSignal.Number=0;
success = true;
break;
} //einde ontvangen
case PLUGIN_COMMAND:
{
unsigned int bitstream=0; // holds first 16 bits
// unsigned int bitstream1=0; // holds the 4 bits for checksum
unsigned int bitstream2=0; // holds last 8 bits
if (event->Par2 == 1) bitstream2=0xB;
else if (event->Par2 == 2) bitstream2=0xD;
else if (event->Par2 == 3) bitstream2=0x7;
else if (event->Par2 == 4) bitstream2=0x3;
else if (event->Par2 == 5) bitstream2=0x8;
else if (event->Par2 == 6) bitstream2=0xA;
else if (event->Par2 == 7) bitstream2=0xC;
else {
return false;
}
// bitstream1=0x3;
bitstream= event->Par1;
RawSignal.Multiply=50;
RawSignal.Repeats=10;
RawSignal.Delay=20;
RawSignal.Pulses[1]=FA20RFLOW/RawSignal.Multiply;
RawSignal.Pulses[2]=FA20RFLOW/RawSignal.Multiply;
for(byte x=18;x>=3;x=x-2)
{
if ((bitstream & 1) == 1) {
RawSignal.Pulses[x] = FA20RFLOW/RawSignal.Multiply;
RawSignal.Pulses[x-1] = FA20RFHIGH/RawSignal.Multiply;
}
else {
RawSignal.Pulses[x] = FA20RFHIGH/RawSignal.Multiply;
RawSignal.Pulses[x-1] = FA20RFLOW/RawSignal.Multiply;
}
bitstream = bitstream >> 1;
}
for(byte x=26;x>=19;x=x-2)
{
if ((bitstream2 & 1) == 1) {
RawSignal.Pulses[x] = FA20RFLOW/RawSignal.Multiply;
RawSignal.Pulses[x-1] = FA20RFHIGH/RawSignal.Multiply;
}
else {
RawSignal.Pulses[x] = FA20RFHIGH/RawSignal.Multiply;
RawSignal.Pulses[x-1] = FA20RFLOW/RawSignal.Multiply;
}
bitstream2 = bitstream2 >> 1;
}
RawSignal.Pulses[27]=FA20RFSTART/RawSignal.Multiply;
RawSignal.Number=27;
RawSendRF();
success=true;
break;
}
#endif // PLUGIN_251_CORE
#if NODO_MEGA
case PLUGIN_MMI_IN:
{
char *TempStr=(char*)malloc(INPUT_COMMAND_SIZE);
if(GetArgv(string,TempStr,1))
{
if(strcasecmp(TempStr,PLUGIN_251_EVENT)==0)
{
event->Type = NODO_TYPE_PLUGIN_EVENT;
event->Command = 251; // Plugin nummer
success=true;
}
if(strcasecmp(TempStr,PLUGIN_251_COMMAND)==0)
{
event->Type = NODO_TYPE_PLUGIN_COMMAND;
event->Command = 251; // Plugin nummer
success=true;
}
}
// char *TempStr=(char*)malloc(INPUT_COMMAND_SIZE);
if(GetArgv(string,TempStr,3)) {
if(strcasecmp(TempStr,PLUGIN_251_ON)==0) event->Par2=4;
if(strcasecmp(TempStr,PLUGIN_251_OFF)==0) event->Par2=3;
if(strcasecmp(TempStr,PLUGIN_251_UP)==0) event->Par2=1;
if(strcasecmp(TempStr,PLUGIN_251_DOWN)==0) event->Par2=2;
if(strcasecmp(TempStr,PLUGIN_251_STOP)==0) event->Par2=5;
if(strcasecmp(TempStr,PLUGIN_251_RUN_UP)==0) event->Par2=6;
if(strcasecmp(TempStr,PLUGIN_251_RUN_DOWN)==0) event->Par2=7;
}
free(TempStr);
break;
}
case PLUGIN_MMI_OUT:
{
if(event->Type==NODO_TYPE_PLUGIN_EVENT)
strcpy(string,PLUGIN_251_EVENT); // Event
else if(event->Type==NODO_TYPE_PLUGIN_COMMAND)
strcpy(string,PLUGIN_251_COMMAND); // Command
// strcpy(string,PLUGIN_NAME); // Eerste argument=het commando deel
strcat(string," ");
strcat(string,int2str(event->Par1));
strcat(string,",");
// free(TempStr);
// break;
if (event->Par2==1) strcat(string,"Up");
else if (event->Par2==2) strcat(string,"Down");
else if (event->Par2==3) strcat(string,"Off");
else if (event->Par2==4) strcat(string,"On");
else if (event->Par2==5) strcat(string,"Stop");
else if (event->Par2==6) strcat(string,"Run Up");
else if (event->Par2==7) strcat(string,"Run Down");
else {
return false;
}
break;
}
#endif //NODO_MEGA
}
return success;
}