Message Payload type



  • I'm sending a message from node to node but when the message gets there it's the wrong type.
    I need to send as P_STRING but it's showing as P_INT16

    This is my send

    void sendToReceiver(boolean reed_tripped)
    {
     char percent;
     
     Serial.print(" Light Status ");
     Serial.println(reed_tripped);
    
    switch (reed_tripped) {
     
     case 0:
     percent = "0";
    
     send(msgDimmer_to_5.setDestination(5).setSensor(0).set(percent).setType(V_PERCENTAGE));
     //send(msgDimmer_to_5.setDestination(5).setSensor(0).set(percent));
     //send(msgDimmer_to_5.set(percent, 0));
     
     break;
     
     case 1:
     percent = "30";
    
     send(msgDimmer_to_5.setDestination(5).setSensor(0).set(percent).setType(V_PERCENTAGE));
     //send(msgDimmer_to_5.setDestination(5).setSensor(0).set(percent));
     //send(msgDimmer_to_5.set(percent, 0));
     break;
    
    }
     
    
    }
    

    and the message

    2836 !TSF:MSG:SEND,8-8-5-5,s=0,c=1,t=3,pt=2,l=2,sg=0,ft=0,st=NACK:4
    2842 !TSF:RTE:N2N FAIL
    2846 TSF:MSG:SEND,8-8-0-5,s=0,c=1,t=3,pt=2,l=2,sg=0,ft=0,st=OK:4
    2854 MCO:SLP:MS=360000,SMS=0,I1=0,M1=1,I2=255,M2=255
    2861 TSF:TDI:TSL
    

    What the heck am I doing wrong?


  • Mod

    @r-nox you are setting the message type to V_PERCENTAGE. You probably want to use V_TEXT.



  • @r-nox said in Message Payload type:

    char percent;

    Your data is of type char. Make it char *. Something like

    char buf[MAX_PAYLOAD_SIZE+1];
    strcpy ( buf, "30" );
    send(msgDimmer_to_5.setDestination(5).setSensor(0).set(buf).setType(V_TEXT));
    


  • @frits

    I tried this. Here's the results. They are close but payload looks corrupted.

    char buf[MAX_PAYLOAD_SIZE+1];
    strcpy ( buf, percent );
    
    void sendToReceiver(boolean reed_tripped)
    {
      char percent;
      
      Serial.print(" Light Status ");
      Serial.println(reed_tripped);
     
     switch (reed_tripped) {
      
      case 0:
      percent = "0";
      Serial.print(" Select case is ");
      Serial.println("0");
      
    char buf[MAX_PAYLOAD_SIZE+1];
    strcpy ( buf, percent );
    
    send(msgDimmer_to_5.setDestination(5).setSensor(0).set(buf).setType(V_TEXT));
      
      break;
      
      case 1:
      percent = "30";
      Serial.print(" Select case is ");
      Serial.println("30");
      
    char buf2[MAX_PAYLOAD_SIZE+1];
    strcpy ( buf, percent );
    send(msgDimmer_to_5.setDestination(5).setSensor(0).set(buf2).setType(V_TEXT));
      
     
      break;
    
     
    }
    

    My results have had their molecules mixed during transport. I expected "30" but received :⸮

    4870 TSF:MSG:SEND,8-8-0-5,s=0,c=1,t=47,pt=0,l=3,sg=0,ft=0,st=OK:⸮
    
    

    Any further advice?



  • @mfalkvidd

    Sending as V_TEXT did not have the effect needed.

    void sendToReceiver(boolean reed_tripped)
    {
      char percent;
      
      Serial.print(" Light Status ");
      Serial.println(reed_tripped);
     
     switch (reed_tripped) {
      
      case 0:
      percent = "0";
      Serial.print(" Select case is ");
      Serial.println("0");
    
      send(msgDimmer_to_5.setDestination(5).setSensor(0).set(percent).setType(V_TEXT));
      //send(msgDimmer_to_5.setDestination(5).setSensor(0).set(percent));
      //send(msgDimmer_to_5.set(percent, 0));
      
      break;
      
      case 1:
      percent = "30";
      Serial.print(" Select case is ");
      Serial.println("30");
        
      send(msgDimmer_to_5.setDestination(5).setSensor(0).set(percent).setType(V_TEXT));
      //send(msgDimmer_to_5.setDestination(5).setSensor(0).set(percent));
      //send(msgDimmer_to_5.set(percent, 0));
      break;
      
     
    }
      
     
    }
    

    and the results

    3201 TSF:MSG:SEND,8-8-0-5,s=0,c=1,t=47,pt=2,l=2,sg=0,ft=0,st=OK:4
    

    Payload still shows as P_INT16 and payload is 4 but in fact should be 30

    This should be simple. I don't understand what's going wrong.



  • @r-nox said in Message Payload type:

    char buf2[MAX_PAYLOAD_SIZE+1];
    strcpy ( buf, percent );
    send(msgDimmer_to_5.setDestination(5).setSensor(0).set(buf2).setType(V_TEXT));

    You copied to buf, but sent buf2 😉



  • @frits Thank you for catching that. I was just reworking and now it's sending proper values. 🙂


Log in to reply
 

Suggested Topics

  • 21
  • 20
  • 79
  • 177
  • 3
  • 2
  • 5

141
Online

9.8k
Users

10.3k
Topics

106.7k
Posts