Hallo,
habe da folgendes Script bekomme allerdings immer eine Fehlermeldung könnte da mal jemand von euch Experten schauen wo da der Fehler liegt?
//#define PLUGIN_ID 43
//#define PLUGIN_NAME "LaCrosse"
//#define LACROSSE_TERM_PULSECOUNT 44*2
//#define LACROSSE_RAIN_PULSECOUNT 44*2
//#define LACROSSE_PULSECOUNT 44*2
//#define LACROSSE_MIN_PULSECOUNT 38*2
uint8_t Plugin_043_ProtocolCRC( uint8_t *addr, uint8_t len);
byte Plugin_043_ProtocolCheckID(byte checkID);
byte Plugin_043_ProtocolValidID[5];
byte Plugin_043_ProtocolVar[5];
void setup() {
// pinMode(led,OUTPUT);
// pinMode(tx, OUTPUT);
}
boolean Plugin_043(byte function, struct NodoEventStruct *event, char *string)
{
boolean success = false;
switch (function)
{
#ifdef PLUGIN_043_CORE
case PLUGIN_RAWSIGNAL_IN:
{
if (RawSignal.Number != LACROSSE_PULSECOUNT) return false;
byte basevar = 0;
unsigned long bitstream1 = 0; // holds first 10 bits
unsigned long bitstream2 = 0; // holds last 26 bits
int temperature = 0;
int humidity = 0;
byte checksum = 0;
byte data[10];
byte parity = 0;
byte bitcounter = 0; // counts number of received bits (converted from pulses)
//==================================================================================
// get bytes
for (byte x = 1; x < RawSignal.Number; x += 2) {
if (RawSignal.Pulses[x]*RawSignal.Multiply > 750) {
if (bitcounter < 16) {
bitstream1 = (bitstream1 << 1);
bitcounter++; // only need to count the first 10 bits
} else {
bitstream2 = (bitstream2 << 1);
}
} else {
if (bitcounter < 16) {
bitstream1 = (bitstream1 << 1) | 0x1;
bitcounter++; // only need to count the first 10 bits
} else {
bitstream2 = (bitstream2 << 1) | 0x1;
}
}
}
//==================================================================================
// all bytes received, make sure checksum is okay
//==================================================================================
data[0] = (bitstream1 >> 12) & 0x0f; // prepare nibbles from bit stream
data[1] = (bitstream1 >> 8) & 0x0f;
data[2] = (bitstream1 >> 4) & 0x0f;
data[3] = (bitstream1 >> 0) & 0x0f;
data[4] = (bitstream2 >> 24) & 0x0f;
data[5] = (bitstream2 >> 20) & 0x0f;
data[6] = (bitstream2 >> 16) & 0x0f;
data[7] = (bitstream2 >> 12) & 0x0f;
data[8] = (bitstream2 >> 8) & 0x0f;
data[9] = (bitstream2 >> 4) & 0x0f;
//==================================================================================
parity = data[4] & 1; // no check of parity for now
// first perform a checksum check to make sure the packet is a valid mebus packet
for (byte i = 0; i < 10; i++) {
checksum = checksum + data[i];
}
checksum = checksum & 0x0f;
if (checksum != (bitstream2 & 0x0f )) return false;
//==================================================================================
// now process the various sensor types
//==================================================================================
void loop() {
int i;
Serial.print(F("LaCrosse : "));
if (data[2] == 0) {
Serial.print(F("Temperature = "));
temperature = data[5] * 100;
temperature = temperature + data[6] * 10;
temperature = temperature + data[7];
temperature = temperature - 500;
Serial.println( (float)temperature / 10 );
}
if (data[2] == 0x0e) {
Serial.print(F("Humidity = "));
Serial.print(data[5]);
Serial.print(data[6]);
humidity = (data[5] * 10) + data[6];
Serial.println((" % "));
}
//==================================================================================
basevar = Plugin_043_ProtocolCheckID(data[2]);
event->Par1 = data[2];
event->Par2 = basevar;
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 = 43; // Nummer van dit device
if (basevar == 0) return true;
//==================================================================================
// set user variables
if (data[2] == 0) {
UserVar[basevar - 1] = (float)temperature / 10;
}
if (data[2] == 0x0e) {
UserVar[basevar + 1 - 1] = (float)humidity;
}
RawSignal.Number = 0;
success = true;
break;
}
case PLUGIN_COMMAND:
{
if ((event->Par2 > 0) && (Plugin_043_ProtocolCheckID(event->Par1) == 0))
{
for (byte x = 0; x < 5; x++)
{
if (Plugin_043_ProtocolValidID[x] == 0)
{
Plugin_043_ProtocolValidID[x] = event->Par1;
Plugin_043_ProtocolVar[x] = event->Par2;
success = true;
break;
}
}
}
break;
}
#endif // PLUGIN_043_CORE
#if NODO_MEGA
case PLUGIN_MMI_IN:
{
char *TempStr = (char*)malloc(INPUT_COMMAND_SIZE);
if (GetArgv(string, TempStr, 1))
{
if (strcasecmp(TempStr, PLUGIN_NAME) == 0)
{
if (event->Par1 > 0 && event->Par1 < 255 && event->Par2 > 0 && event->Par2 <= USER_VARIABLES_MAX)
{
event->Type = NODO_TYPE_PLUGIN_COMMAND;
event->Command = 43; // Plugin nummer
success = true;
}
}
}
free(TempStr);
break;
}
case PLUGIN_MMI_OUT:
{
strcpy(string, PLUGIN_NAME); // Eerste argument=het commando deel
strcat(string, " ");
strcat(string, int2str(event->Par1));
strcat(string, ",");
strcat(string, int2str(event->Par2));
break;
}
#endif //NODO_MEGA
}
return success;
}
//#ifdef PLUGIN_043_CORE
/*********************************************************************************************\
* Check for valid sensor ID
\*********************************************************************************************/
byte Plugin_043_ProtocolCheckID(byte checkID)
{
for (byte x = 0; x < 5; x++) if (Plugin_043_ProtocolValidID[x] == checkID) return Plugin_043_ProtocolVar[x];
return 0;
}
//#endif //CORE