User Tools

Site Tools


arduinohouse

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
arduinohouse [2023/05/17 07:05]
admin
arduinohouse [2023/05/17 09:28] (current)
admin
Line 1: Line 1:
 +
 + you need the process that monitors your process to be the process' parent. What does this mean? It means only the process that starts your process can reliably wait for it to end. In bash, this is absolutely trivial.
 +
 +until myserver; do
 +    echo "Server 'myserver' crashed with exit code $?.  Respawning.." >&2
 +    sleep 1
 +done
 +
 +The above piece of bash code runs myserver in an until loop. The first line starts myserver and waits for it to end. When it ends, until checks its exit status. If the exit status is 0, it means it ended gracefully (which means you asked it to shut down somehow, and it did so successfully). In that case we don't want to restart it (we just asked it to shut down!). If the exit status is not 0, until will run the loop body, which emits an error message on STDERR and restarts the loop (back to line 1) after 1 second.
 +
 +Why do we wait a second? Because if something's wrong with the startup sequence of myserver and it crashes immediately, you'll have a very intensive loop of constant restarting and crashing on your hands. The sleep 1 takes away the strain from that.
 +
 +Now all you need to do is start this bash script (asynchronously, probably), and it will monitor myserver and restart it as necessary. If you want to start the monitor on boot (making the server "survive" reboots), you can schedule it in your user's cron(1) with an @reboot rule. Open your cron rules with crontab:
 +
 +crontab -e
 +
 +Then add a rule to start your monitor script:
 +
 +@reboot /usr/local/bin/myservermonitor
 +
 +Alternatively; look at inittab(5) and /etc/inittab. You can add a line in there to have myserver start at a certain init level and be respawned automatically.
 +
 +-----------------------------------------------------------------------------------------
 +
 +https://forum.arduino.cc/t/433mhz-using-radiohead-constructor-argument-to-change-rx-tx-pins/1077731 radiohead tx pin
 +
 +https://startingelectronics.org/tutorials/arduino/digispark/digispark-windows-setup/  digispark setup
 +
 +https://www.instructables.com/Receiving-and-sending-data-between-Attiny85/  attiny setup
 +
 +https://github.com/adidax/dht11   dht11 library download
 +
 +https://www.makerguides.com/dht11-dht22-arduino-tutorial/ humidity sensor on attiny
 +
 +https://www.circuitbasics.com/how-to-set-up-the-dht11-humidity-sensor-on-an-arduino/  humidity sensor on attiny
 +
 +https://triq.org/rtl_433/STARTING.html    rtl433 getting started
 +
 +https://nodered.org/docs/user-guide/editor/workspace/import-export   exporting nodered flows
 +
 +------------------------------------------------------------------------------------------------------
 +
 +https://lastminuteengineers.com/433mhz-rf-wireless-arduino-tutorial/    arduino 433 transmitters and receivers
 +
 +https://forum.arduino.cc/t/sending-arrays-with-manchester-h-and-rf433/257585   manchester.h  arrays
 +
 +
 +
 +https://reference.arduino.cc/reference/en/language/variables/data-types/array/   arduino array reference
 +
 +  int myInts[6];
 +  int myPins[] = {2, 4, 8, 3, 6};
 +  int mySensVals[5] = {2, 4, -8, 3, 2};
 +  char message[6] = "hello";
 +  
 +--------------------------------------------------------------------
 +
 +https://stackoverflow.com/questions/16041191/filling-array-in-c-by-using-functions
 +
 +Arrays filling
 +------------------------------------------------------------------------------------------
 +
 +
 +
 +https://triq.org/rtl_433/OPERATION.html
 +
 +https://www.airspayce.com/mikem/arduino/RadioHead/ask_transmitter_8pde-example.html  radiohead ASK transmitter
 +
 +https://randomnerdtutorials.com/rf-433mhz-transmitter-receiver-module-with-arduino/  arduino receive/transmit
 +
 +https://github.com/merbanan/rtl_433  rtl433 download
 +
 +https://tech.sid3windr.be/2017/03/getting-your-currentcost-433mhz-data-into-openhab-using-an-rtl-sdr-dongle-and-mqtt/
 +    currentcost and mqtt rtl433
 +    
 +    
 +
 +---------------------------------------------------------------------------------------------------------------
 https://forum.arduino.cc/t/arduino-433-mhz-rf-sending-numbers-instead-of-strings/619707/4 https://forum.arduino.cc/t/arduino-433-mhz-rf-sending-numbers-instead-of-strings/619707/4
 Looking at the loop() in the ask_transmitter example Looking at the loop() in the ask_transmitter example
Line 72: Line 150:
  
 ===================================================================================================== =====================================================================================================
 +--------------------------------------------------------------------------------------------------------
 +// ask_transmitter.pde
 +// -*- mode: C++ -*-
 +// Simple example of how to use RadioHead to transmit messages
 +// with a simple ASK transmitter in a very simple way.
 +// Implements a simplex (one-way) transmitter with an TX-C1 module
  
 +#include <RH_ASK.h>
 +#include <SPI.h> // Not actually used but needed to compile
  
 +RH_ASK driver;
  
 +
 +struct dataStruct{
 +  float press_norm ; 
 +  float press_hg;
 +  float temp;
 +  unsigned long counter;
 +   
 +}myData;
 +
 +byte tx_buf[sizeof(myData)] = {0};
 +
 +void setup()
 +{
 +    Serial.begin(9600);   // Debugging only
 +    if (!driver.init())
 +         Serial.println("init failed");
 +         
 +   myData.press_norm=1000.11; 
 +myData.press_hg=0.59; 
 +myData.temp=22.394; 
 +         
 +}
 +
 +void loop()
 +{
 +     
 +
 +  memcpy(tx_buf, &myData, sizeof(myData) );
 +  byte zize=sizeof(myData);
 +
 +driver.send((uint8_t *)tx_buf, zize);
 +
 +   // driver.send((uint8_t *)msg, strlen(msg));
 +    driver.waitPacketSent();
 +    myData.counter++;
 +    delay(2000);
 +}
 +----------------------------------------------------------------------------------------------------------
  
 <file js nestedstruct >/* <file js nestedstruct >/*
Line 171: Line 296:
  
 --------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------
 +
 +https://discourse.nodered.org/t/http-post-with-parameter-and-body/21132/2
 +
 +Try using below code inside a function node. Of course you want to replace the data otherwise the API will not authenticate.
 +
 +The HTTP request node should have the Method field configured as "-set by msg.method-"
 +
 +msg.headers = {}
 +msg.method = "POST"
 +msg.url = "https://arche.webuntis.com/WebUntis/jsonrpc.do" ;
 +msg.headers["content-type"] = "application/json"
 +
 +
 +msg.payload = {
 +"id":"ID",
 +"method":"authenticate",
 +"params":
 +{
 +"user":"xy",
 +"password":"PASSWORD",
 +"client":"CLIENT"
 +},
 +"jsonrpc":"2.0"
 +};
 +
 +----------------------------------------------------------------------------------------------------
 +https://www.tutorialspoint.com/structs-in-arduino-program
 +
 +Example
 +
 +The following example illustrates this −
 +
 +struct student{
 +   String name;
 +   int age;
 +   int roll_no;
 +};
 +
 +void setup() {
 +   // put your setup code here, to run once:
 +   Serial.begin(9600);
 +   Serial.println();
 +   student A = {"Yash", 25, 26};
 +   Serial.println(A.name);
 +   Serial.println(A.age);
 +   Serial.println(A.roll_no);
 +
 +   A.age = 27;
 +   Serial.println(A.age);
 +}
 +
 +void loop() {
 +   // put your main code here, to run repeatedly:
 +}
 +
 +
 +-------------------------------------------------------------------------------------------------
 +https://forum.arduino.cc/t/arduino-433-mhz-rf-sending-numbers-instead-of-strings/619707/3
 +
 +Looking at the loop() in the ask_transmitter example
 +
 +void loop()
 +{
 +    const char *msg = "hello";
 +
 +    driver.send((uint8_t *)msg, strlen(msg));
 +    driver.waitPacketSent();
 +    delay(200);
 +}
 +
 +There is a send() method; you can find that in C:\Users\yourUserName\Documents\Arduino\libraries\RadioHead\RH_ASK.cpp and the first line is important.
 +
 +bool RH_ASK::send(const uint8_t* data, uint8_t len)
 +
 +and 'states' that the send method expects a pointer to an uint8_t (aka byte) variable and a length.
 +
 +The line can also be found (in a slightly different form) in C:\Users\yourUserName\Documents\Arduino\libraries\RadioHead\RH_ASK.h (that's the file that you include at the top of the sketch).
 +
 +So if you now go back to the example code, you will see (uint8_t *)msg ; this is a so-called cast that tells the compiler to treat the char array (msg) as a byte array.
 +
 +So now you know that you actually need to send bytes and not characters etc. and how that's achieved.
 +
 +To send an int value, you can cast the address of the variable (the pointer) to an pointer to a byte. An int occupies a number of bytes; you can find that with the sizeof operator.
 +
 +That would look like
 +
 +int waterPressure = 1234;
 +drive.send((uint8_t*)&waterPressure, sizeof(waterPressure));
 +
 +Because waterPressure is not an array, you need the & in front of it to get the address of the variable
 +
 +-----------------------------------------------------------------------------------------
 +arduino string example
 +
 +https://arduinojson.org/v6/example/string/
 +
 +---------------------------------------------------------------------------------------------------
 +
 +
arduinohouse.1684307141.txt.gz · Last modified: 2023/05/17 07:05 by admin