Selbstbau Funkthermometer 433Mhz

Begonnen von matlen67, 28 April 2016, 09:59:57

Vorheriges Thema - Nächstes Thema

matlen67

Hallo zusammen.
Ich hatte mir vor einigen Jahren zur Raumklima und Heizungsüberwachung Funkthermometer selber gebau.
Die Temperatur und Luftfeuchteanzeige wurde über eine Webseite die auf eine Raspberry Pi läuft dargestellt.
Nun hatte ich FHEM für mich entdeckt und wollte die Funkthermometer gerne dort mit integrieren. Dazu habe ich mir erstmal einen nanoCul mit 433Mhz Funkmodul gebaut um schon mal ein Grundlage für den Empfang zu haben.
Da FHEM und Perl für mich absolutes Neuland sind war es für mich erstmal einfacher meine Funkthermometer umzuprogrammieren.
Ich hatte dann ein Thema zu TCM Funkthermometer und deren Protokolle die über ein Modul mit eingebunden werden gefunden, und dort die zwei Sachen gepostet.
Nun kam der Wunsch auf ein Thema zu den Funkthermometer zu eröffnen. Das möchte ich nun hiermit tun :)

Nun zum Funkthermometer.
Da ich nicht gerne auf Lochstreifenplatine rumbastel, lasse ich mir immer sobald alles auf einem Breadboard erfolgreich getestet wurde, Leiterplatten anfertigen.
Diese beziehe ich aus China von der Fa. Itead. Da kosten 10 Leiterplatten im Format 5cm x 5cm ca. 14,50USD ink. Porto (ca. 12,80€).
Der Bestellvorgang ist recht simple. Hierzu muss man sich einmalig Registrieren, dann ein Leiterplattenformat auswählen und Bezahlen (Z.B mit Paypal).
Danach bekommt man eine Bestellnummer, diese füge ich dann als Benennung der Leiterplattendaten des entsprechenden Zip-Archives ein (Bsp. order_012345678.zip)
Das Zip-Archiv enthält dann alle relevanten Files im Gerberformat die der Leiterplattenhersteller benötigt. Das alles ist auch sehr gut auf der Webseite beschrieben.
Das Zip-Archiv muss dann noch unter der entsprechenden Bestellnummer auf die Firmenserver hochgeladen werden. Da ich die Leiterplatten ja schon mal bestellt habe und die Gerberdateien noch vorliegen habe, füge ich sie am Ende mit ein ein Archiv ein, so das nur noch die Bestellnummer aktualisiert werden muss.

Zur Hardware.
Die Leiterplatte ist wie oben beschrieben, professionell gefertigt, das Layout habe ich obwohl SMD Bauteile zum Einsatz kommen extra etwas
großzügig dimensioniert damit auch der ungeübte Bastler die Komponenten mit einem handelsüblichen Lötkolben (mit kleiner Spitze) aufbringen kann.
Das funktioniert bei mir sehr gut mit 0,5mm Durchmesser Lötzinn. Auch der Microkontroller lässt sich Bein für Bein prima aufbringen.

Als Temperatur/Feuchtesensor kommt ein DHT22 Sensor zum Einsatz. Alternativ wo keine Luftfeuchte gebraucht wird (bei mir für Heizung Vor- und Rücklauf)
kann auch ein DS1820 Temperatursensor eingesetz werden. Diese lassen sich dann prima mit einem Kabelbinder an die entsprechenden Rohre fest strapsen.
Auf der Leiterplatte ist dazu ein Steckbrücke vorhanden. Kontakte offen = DHT22, Kontakte geschlossen = DS1820.

Angetrieben wird das ganze von einem Atmel Attiny84 mit 8Mhz internen Takt. Programmiert wurde das ganze in Bascom.
Hauptproblem ist das sobald die Leiterplatte fertig bestückt wurde die sogenannten Fusebits gesetz und das Hex file geschrieben werden muss.
Dazu ist auf der Leiterplatte ein 10 Poliger ISP Anschluss vorhanden. Ich nutze zum Flashen den MK2 von myavr.de da dieser auch direkt aus Bascom heraus funktioniert.
Dafür gibt es auch ein entsprechendes Flashtool das ich mit in das Archiv packe. Mit dem Flashtool lassen sich auch die Fusebits bearbeiten.
Mit den Fusebits läßt sich das Verhalten des Microkontroller steuern. Takt intern/extern, Resetpin ja/nein, Schreib und Leseschutz ein/aus usw...
Spiel da bloß nicht mit rum, im schlimmsten Fall ist der Attiny84 dann für euch unbrauchbar.
Für dieses Projekt muss nur der interne Takteiler 'divide clock by 8 internally' deaktiviert werden da sonst der Takt noch durch 8 geteilt wird und der Controller nur
mit 1Mhz läuft. Von der Sache währe das nicht schlimm, nur stimmen dann die Timings nicht mehr die für das Übertragungsprotokoll verantwortlich sind.

Also nur einmal die Fusebits auslesen, Haken weg bei 'divide clock by 8 internally' und wieder schreiben(Bild im Archiv). Dann noch das Hexfile schreiben.
Hierzu habe ich erstmal 15 verschiedene Files vorbereitet mit unterschiedlicher Sender ID's.

Der Sender selber besteht aus einem kleinen Modul, nennt sich RF-Link und sendet auf 433Mhz. Zu beziehen ist der Sender bei Watterott.com

Zur Stromversorgung nutze ich eine 3.6V Lithium AA Batterie, diese hält ca. 1,5 Jahre.
Im Archiv findet sich auch eine Preisliste mit allen Komponenten + Bestellnummer + Bezugsquelle.
Die kosten pro Sender liegen ohne Gehäuse,Batterie und ggv. Batteriehalter bei ca. 12€/Stück ohne Porto.


Das Archiv hat folgenden Inhalt
. 15 Hexfiles zum Flashen des Attiny84 mit unterschiedlichen Sender ID's
. Gerberfiles zur Leiterplattenherstellung
. Layoutdaten im Eagle format (www.cadsoft.de)
. Flashtool für Windows
. Bild Fusebits
. Preisliste in Excel


So nun ein fröhliches Nachbauen


Achtung! das Thema ist noch in Erstellung, und wird in wenigen Tagen fertiggestellt.
Es folgen noch Bilder der Sender und ein Downloadlink für das Archiv mit den Dateine.

Gruß matlen67

(http://abload.de/thumb/temperatursensor123es7.jpg)  (http://abload.de/thumb/temperatursensor123es7.jpg)

Sendetelegramm
(http://abload.de/thumb/signaldgs30.jpg)


Downloadlink files
klick

Update 11.01.2020:
Oha lange nicht mehr hier gewesen (seit 2016)(gab kein Grund da die Tempsensoren bis heute einwandfrei funktionien)
ABER, irgendwann wird es doch langweilig :)

Ich hatte seit Ewigkeiten mal wieder ein update von FEHM eingespielt und muste feststellen das sich da wohl einiges in der 14_CUL97001.pm geändert hat und dadurch meine Sensoren in FHEM nicht mehr funktionierten, da ich meine Änderungen in der pm ja immer selber vorgenomme habe. Ich habe dann zwar meine Modifikationen wieder in die aktuelle pm integriert fand das aber ziemlich bescheiden jedesmal hier was zu ändern.
Deshalb hatte ich mich dazu entschlossen ein vorhandenes Protokoll zu verwenden.
Es ist das Ventus W044 geworden.
Da auch meine Programmierumgebung BASCOM unter Win10 alles andere als schön zu bedienen und zu installieren ist habe ich das dann auch gleich als Sketch für Arduino umgesetzt.
Ich poste das hier nur der Vollständigkeit halber. evtl kann ja auch jemand damit so was anfangen für andere Projekte.
Stand heute 11.01.2020 ist es voll funktionsfähig. Ich werde es aber bestimmt code-mäßig noch optimeren und verfeinern.

Gruß matlen67


// matlen67 11.01.2020
//
// used lib's
// ATtiny84:          https://github.com/SpenceKonde/ATTinyCore
// ATtiny84 Pinout:   https://github.com/SpenceKonde/ATTinyCore/blob/master/avr/extras/ATtiny_x4.md
// DHT22 lib:         https://arduino.cc/playground/Main/DHTLib
// OneWire:           https://github.com/PaulStoffregen/OneWire
// ds18b20:           https://github.com/milesburton/Arduino-Temperature-Control-Library
//
// flash Attiny84 over ISP
// my programmer: myAVR MK2/AVR910
//
// Edit Arduino-IDE settings: (open path: Arduino IDE Voreinstellungen -> Einstellungen unten)
//
// edit preferences.txt_:  (C:\Users\xxxxx\AppData\Local\Arduino15)
// upload.using=mySmartUSB
// upload.verbose=true
//
// edit programmers.txt:  (C:\Users\xxxx\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.1)
// mySmartUSB.name=mySmartUSB
// mySmartUSB.communication=serial
// mySmartUSB.protocol=avr910
// mySmartUSB.program.protocol=avr910
// mySmartUSB.program.speed=19200
// mySmartUSB.program.tool=avrdude
// mySmartUSB.program.extra_params=-P{serial.port} -b{program.speed} -F
//#########################################################################################################


#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>
#include <dht.h>
#include <OneWire.h>
#include <DallasTemperature.h>


#define DHT22_PIN 1     // DHT sensor is connected on ATtiny pin 12 (PA1) Arduino Pin 1
#define ONE_WIRE_BUS 1  // DS18b20 sensor is connected on ATtiny pin 12 (PA1) Arduino Pin 1
#define DATA_PIN 2      // RFLink Data Pin ATtiny pin 11 (PA2)
#define TASTER_PIN 3    // Taster Pin ATtiny pin 10 (PA3)


OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
dht DHT;


// watchdog interrupt
ISR(WDT_vect){
  wdt_disable();  // disable watchdog
}


//##############################
//#      Sender ID's           #
//##############################
// müssen zweistellig sein
//byte    id = 11;   // Aussen
byte    id = 12; // Wohnzimmer
//byte    id = 13; // Schlafzimmer
//byte    id = 14; // Kinderzimmer
//byte    id = 18; // Heizung vorlauf
//byte    id = 19; // Heizung ruecklauf


byte    battery = 12;
int     temp_int = 0;
double  temp_double;
int     hum_int = 0;
double  hum_double;
byte    hum_byte = 0;
byte    rh_ones = 0;
byte    rh_tens = 0;

byte    n0 = 0;
byte    n1 = 0;
byte    n2 = 0;
byte    n3 = 0;
byte    n4 = 0;
byte    n5 = 0;
byte    n6 = 0;
byte    n7 = 0;
byte    n8 = 0;


void setup() {
  pinMode(DATA_PIN, OUTPUT); // Arduino Pin 2, ATtiny84 Pin 11 (A2) RFLink data
  pinMode(TASTER_PIN, INPUT);

  if ( digitalRead(TASTER_PIN) == 0 ){
    sensors.begin();
  }

}


void loop() {
  delay(3000);

  if ( digitalRead(TASTER_PIN) == 0 ){
    myReadDS18B20();
  }else{
    myReadDHT22(); 
  }

  //Sende Daten 5 mal
  calc_checksum();
  for (int i=0; i<5; i++){
    send_sync();
    send_data();
  }

  // ATtinny goes sleep  70 ca. 10 min.
  for (int i = 0; i < 70; i++){
    EnableWatchdog();
  }
 
}


void myReadDS18B20(){

  sensors.requestTemperatures();                        // start temperatur request
  delay(750);                                           // wait for conversation Temperatur inside sensor
  float temperatur_float = sensors.getTempCByIndex(0);  // get the temperature (if temp 85.0 error wait for conv to short?)
  temp_int = temperatur_float * 10;
  temp_int = convert_temperatur(temp_int);

  rh_ones = convert_humidity(0);                        // DS18b20 hat keine Luftfeuchte
  rh_tens = convert_humidity(0);                        // DS18b20 hat keine Luftfeuchte
   
}


void myReadDHT22(){
 
  int chk = DHT.read22(DHT22_PIN);
 
  switch (chk){
   
    case DHTLIB_OK:
           
      temp_double = DHT.temperature;
      temp_int = temp_double*10;
      temp_int = convert_temperatur(temp_int);

      hum_double = DHT.humidity;
      hum_int = hum_double*10;

      if(hum_int >= 100){
        hum_int = hum_int / 10;
        hum_byte = hum_int % 10;
        rh_ones = convert_humidity(hum_byte);

        hum_byte = hum_int / 10;
        rh_tens = convert_humidity(hum_byte);
     
      }else{
        hum_int = hum_int / 10;
        hum_byte = hum_int;
        rh_ones = convert_humidity(hum_byte);

        hum_byte = 0;
        rh_tens = convert_humidity(hum_byte);
      }
      break;

    default:
       temp_int = convert_temperatur(999);
       rh_ones = convert_humidity(9);
       rh_tens = convert_humidity(9);
       break;
  }
}


void EnableWatchdog(){
  // sleep bit patterns:
  //  1 second:  0b000110
  //  2 seconds: 0b000111
  //  4 seconds: 0b100000
  //  8 seconds: 0b100001
  byte interval = 0b100001;               // 8 second
  MCUSR = 0;                              // reset various flags
  WDTCSR |= 0b00011000;                   // see docs, set WDCE, WDE
  WDTCSR =  0b01000000 | interval;        // set WDIE, and appropriate delay

  wdt_reset();
  set_sleep_mode (SLEEP_MODE_PWR_DOWN);
  sleep_mode();                           // now goes to Sleep and waits for the interrupt
  }
 

int convert_temperatur (int temp_org){
  // reverse temperature (26,8°C) = ( int 268 / 12bit:000100001100) reverse int 776 / 12bit:001100001000 )
  int temp_rev = 0;
  byte r = 0;
   
  for (int i=11; i>=0; i--){
    if (bitRead(temp_org,i)){
      bitSet(temp_rev,r);
    }
    r++;
  }
  return temp_rev;
}


int convert_humidity (int hum_org){
  int rh_rev = 0;
  byte r = 0;
   
  for (int i=3; i>=0; i--){
    if (bitRead(hum_org,i)){
      bitSet(rh_rev,r);
    }
    r++;
  }
  return rh_rev;
}



void calc_checksum(){
  //                n0   n1   n2   n3   n4   n5   n6   n7   n8
  //                1    5    4    14   8    0    0    4    8
  // 154E800480  = 0001 0101 0100 1110 1000 0000 0000 0100 1000
  // reverse all = 1000 1010 0010 0111 0001 0000 0000 0010 0001
 
  int checksumme = 0;
  byte r = 0;

  //sender id n0
  n0 = 0;
  r = 0;
  for (int i=7; i>=4; i--){
    if (bitRead(id,i)){
      bitSet(n0,r);
    }
    r++;
  }

  //sender id n1
  n1 = 0;
  r = 0;
  for (int i=3; i>=0; i--){
    if (bitRead(id,i)){
      bitSet(n1,r);
    }
    r++;
  }

  //batterie n2
  n2 = 0;
  r = 0;
  for (int i=3; i>=0; i--){
    if (bitRead(battery,i)){
      bitSet(n2,r);
    }
    r++;
  }

  //temperatur n3
  n3 = 0;
  r = 0;
  for (int i=11; i>=8; i--){
    if (bitRead(temp_int,i)){
      bitSet(n3,r);
    }
    r++;
  }

  //temperatur n4
  n4 = 0;
  r = 0;
  for (int i=7; i>=4; i--){
    if (bitRead(temp_int,i)){
      bitSet(n4,r);
    }
    r++;
  }

  //temperatur n5
  n5 = 0;
  r = 0;
  for (int i=3; i>=0; i--){
    if (bitRead(temp_int,i)){
      bitSet(n5,r);
    }
    r++;
  }

  //humidity ones n6
  n6 = 0;
  r = 0;
  for (int i=3; i>=0; i--){
    if (bitRead(rh_ones,i)){
      bitSet(n6,r);
    }
    r++;
  }

  //humidity tens n7
  n7 = 0;
  r = 0;
  for (int i=3; i>=0; i--){
    if (bitRead(rh_tens,i)){
      bitSet(n7,r);
    }
    r++;
  }

  checksumme = 0xF - n0;
  checksumme -= n1;
  checksumme -= n2;
  checksumme -= n3;
  checksumme -= n4;
  checksumme -= n5;
  checksumme -= n6;
  checksumme -= n7;
  checksumme = checksumme & 0xF;
 
  //checksum n8
  n8 = 0;
  r = 0;
  for (int i=3; i>=0; i--){
    if (bitRead(checksumme,i)){
      bitSet(n8,r);
    }
    r++;
  }

}


void send_data(){
  //Sendetelegramm
  //      n0   n1   n2   n3   n4   n5   n6   n7   n8
  // Bit 0..........................................35
  //     0001 0101 0100 1110 1011 0000 0100 1010 0000
  // dez  01   05   04   0E   0B   00   04   0A   00
  //
  //Bit  0 -  7 = Sender ID Bsp:00001111 = 21
  //Bit  8      = Batterie 0 = Bat ok, 1 = Low Bat
  //Bit  9      = x0 = 1 (wenn x0 und x1 gleich dann Regensensor)
  //Bit 10      = x1 = 0
  //Bit 11      = 0  = Scheduled transmission / 1 press button on Sender
  //Bit 12 - 23 = Temperatur  12Bit Two's Complement: 000011010111 = 215 (21,5°C) must reversed to 111010110000 (-336)
  //Bit 24 - 27 = Luftfeuchte einer    2 = 0010 -> must reverse 0100 = 4
  //Bit 28 - 31 = Luftfeuchte zehner   5 = 0101 -> must reverse 1010 =-6  (Bsp. 52%)
  //Bit 32 - 35 = Checksumme = n8 = (0xf - n0 - n1 - n2 - n3 - n4 - n5 - n6 - n7) & 0xF

  //sender id n0
  for (int i=7; i>=4; i--){
    if (bitRead(id,i)){
      send_1();
    }else{
      send_0();
    }
  }

  //sender id n1
  for (int i=3; i>=0; i--){
    if (bitRead(id,i)){
      send_1();
    }else{
      send_0();
    }
  }

  //batterie n2
  for (int i=3; i>=0; i--){
    if (bitRead(battery,i)){
      send_1();
    }else{
      send_0();
    }
  }

  //temperatur n3
  for (int i=11; i>=8; i--){
    if (bitRead(temp_int,i)){
      send_1();
    }else{
      send_0();
    }
  }

  //temperatur n4
  for (int i=7; i>=4; i--){
    if (bitRead(temp_int,i)){
      send_1();
    }else{
      send_0();
    }
  }

  //temperatur n5
  for (int i=3; i>=0; i--){
    if (bitRead(temp_int,i)){
      send_1();
    }else{
      send_0();
    }
  }

  //humidity ones n6
  for (int i=3; i>=0; i--){
    if (bitRead(rh_ones,i)){
      send_1();
    }else{
      send_0();
    }
  }

  //humidity tens n7
  for (int i=3; i>=0; i--){
    if (bitRead(rh_tens,i)){
      send_1();
    }else{
      send_0();
    }
  }

  //checksum n8
  for (int i=3; i>=0; i--){
    if (bitRead(n8,i)){
      send_1();
    }else{
      send_0();
    }
  }

}

void send_sync(){
  //************************************
  //Syncbit
  //
  //| 500us|   9000us    |
  // ------
  //|      |_____________
  //
  //************************************
  digitalWrite(DATA_PIN, HIGH);
  delayMicroseconds(530);
  digitalWrite(DATA_PIN, LOW);
  delayMicroseconds(9100);
}

void send_0(){
  //************************************
  //Logisch 0
  //
  //| 500us|   2000us    |
  // ------
  //|      |_____________
  //
  //************************************
  digitalWrite(DATA_PIN, HIGH);
  delayMicroseconds(530);
  digitalWrite(DATA_PIN, LOW);
  delayMicroseconds(2100);
}

void send_1(){
  //************************************
  //Logisch 1
  //
  //| 500us|   4000us    |
  // ------
  //|      |_____________
  //
  //************************************
  digitalWrite(DATA_PIN, HIGH);
  delayMicroseconds(530);
  digitalWrite(DATA_PIN, LOW);
  delayMicroseconds(4100);
}

FHEM -> Raspi 3B+
nanoCul 433Mhz & JeeLink 868 Mhz selbstbau Arduino Nano
Diverse Funkthermometer eigenentwicklung
LaCross TX29 DHT-IT
Ghoma Steckdosen

ext23

He he es gibt noch Leute die Bascom benutzen ja ;-) Aber man kann sagen was man will, der Compiler von Bascom ist echt besser was das Ergebnis angeht, sprich die Speicherbelegung.

/Daniel
HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

juergs

Hi,
in diesem Thread wird ja etwas Ähnliches behandelt:
https://forum.fhem.de/index.php/topic,50333.0.html

Das was Du da geplant hast, passt da prima mit rein.
Wäre auf alle Fälle mit Platinenbestellung dabei.

Grüße,
Jürgen 


SpenZerX

Hi,

Nathan Chantrell hat da schon vor vielen Jahren Pionierarbeit geleistet.

Viele Projekte lassen sich damit realisieren.

Ich würde die Technik aber heute nur noch für Battery Only Projekte verwenden.


KölnSolar

#5
@matlen67: die letzten posts verweisen ja auf jeelink Entwicklungen. hardwaretechnisch vermutlich ähnlich, und auch Entwicklungen zu mysensors, fhemduino, signalduino, ESP8266 ..... haben sicherlich ihre Berechtigung. Die Besonderheit Deiner tollen Entwicklungsarbeit ist aber doch meiner Meinung nach, dass die Einbindung via a-culfw für 433MHz CULs erfolgt !!! Und den haben viele Anwender und wollen nicht noch einen weiteren transceiver (basteln=Fehlerquelle).
Vielleicht im Betreff ergänzen ?
Grüße Markus
Edit: Und batteriebetrieben m. 1,5 Jahren ist auch noch eine Besonderheit oder ?
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

KölnSolar

#6
und nun, nachdem ich jetzt wirklich verstanden hab, wie Dein Projekt funktioniert, ein paar Fragen dazu.
Temp.- u. Feuchtigkeitssensoren habe ich schon zur Genüge.  8)  Dein professionelles Hardwaredesign ist mir auch nicht so wichtig, da würde ich eher basteln. Ich würde u.U. mit ein paar Modifikationen Deine "Firmware" für die Übertragung von Schaltzuständen missbrauchen wollen.
1.) Unwissend wie ich bin: Wäre es für Dich zu aufwändig so etwas zu programmieren, also anstatt Temperatur die Schaltzustände Ein/Aus zu senden und dann auch als HEX-File hier zur Verfügung zu stellen ?
     Sicherlich könnte ich aber auch den Temp./Feuchtigkeitswert entsprechend missbrauchen. Ist halt etwas weniger chic.
2.) Ist Deine Software auf den Attiny84(lt. Stückliste Attiny84A) beschränkt oder ginge da auch ein Attiny85 ? (Sorry, null Ahnung von µC's  :'()
3.) oder ginge auch so etwas mit nem Attiny841
     http://www.watterott.com/de/Wattuino-Nanite841?x10bad=1558202427f0e739f43ea5418e3664aa
     oder eben gar mit Attiny85
     http://www.watterott.com/de/Wattuino-Nanite841?x10bad=1558202427f0e739f43ea5418e3664aa
     http://www.watterott.com/de/Wattuino-Nanite85?x10bad=1558202427f0e739f43ea5418e3664aa
     zu flashen ?  Würde ja dann den MK2 überflüssig machen, richtig ?
4.) das von Jürgen oben verlinkte Projekt von Simonberry basiert ja noch auf einem Arduino, ist aber nach meinem Verständnis aufgrund der gewählten Entwicklungsumgebung auch für Endanwender handel-/modifizierbar, so dass 1.)-3.) sich erledigen würden, im Gegensatz zu Deiner Umgebung mit Bascom. Umgekehrt hast Du es bereits auf nem Attiny mit Batteriebetrieb implementiert, was simonberry noch in Angriff nehmen möchte. Wenn ich damit richtig liege, mein Gedanke: Könnt Ihr Euch zusammentun und wir bekämen eine individuelle Plattform für batteriebetriebene Eigenbau-Sensoren, die via CUL in fhem mit dortigen Bordmitteln integrierbar sind ?
5.) Könntest Du vielleicht irgendwann wenn Zeit ist, das Layout im "Bildformat" bereitstellen. Ist immer so aufwändig nur für einen Fall eine neue Software(cadsoft) zu installieren.

Bitte nicht hauen, sind nur die Gedanken eines µC-Laien.
Schönes Wochenende
Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

beSmart

Hallo.
@SpenZerX

Dein Bild finde ich sehr interessant. Was ist das für ein µC? Welche Software?


Dank und Gruß


Dirk

SpenZerX

Zitat von: beSmart am 29 April 2016, 12:49:23
Hallo.
@SpenZerX

Dein Bild finde ich sehr interessant. Was ist das für ein µC? Welche Software?


Dank und Gruß


Dirk

Ist ein Prototyp zu dem Thema hier - der wirklich funktioniert!

- Flashupdate über Pins
- gute Reichweite
- digitale Temperatur
- 1 Jahr Batterielaufzeit (bei 5 min Zyklus)
nur der WAF-Factor passt so erstmal nicht

Materialkosten 2,-

ATtiny 84A-PU
STX882 ASK Transmitter
Pullwiderstand
db18b20
+ggf. Kondensator

simonberry

@KölnSolar

bei meinem Projekt bin ich zwar schon ein bißchen weiter. Sprich ich habe es auf einen ATTiny85 portiert und schon erste Ehrfahrungen gesammelt. Leider bin ich mit dem PowerSafe modus noch nicht ganz so zufrieden, das es wirklich mit Batterie geht umd das öffentlich zu machen.

Schaltzustände müsste man auch relativ einfach mit nem tiny und 433 MHz ans FHEM bringen können. Da gibt es für IT schon eine fertige Bibliothek "RC-Switch". Das kann dann allerdings nur mit der a-culfw empfangen werden.

@matlen
Das ist auch ein feines Projekt was Du da vorstellst. Kompliment!!
Ich bastle aber selber rum, weil das basteln schon so viel spaß macht.

Viele Grüße

Simonberry
NUC5i3RYK#DBLOG; MYSQL; LIRC; MPD; HM-CFG-HM-USB-2: HM-divers; MQTT2; Signalduino; Shelly; Sonoff; dash_dhcp; FS20; IT; FroniusWR; Somfy RTS; NFS-Server
Rpi B#: nfsmount; ser2net CUL868; CUL433; GPIO4:DS18B20; WEMOS-D1-MINI#JVC-via-IR;

matlen67

#10
@ KölnSolar
Die jetzige Software (hex file) dürfte nur auf dem ATtiny84 laufen. Für andere µC's muss das die Software angepasst und  neu kompiliert werden.
Der ATtiny85 hat ja auch nur 8 Beine die sind ja anders belegt. Der ATinny841 müsste Pinkompatible sein aber auch hier muss die Software angepasst werden da der mehr funktionen hat wie
z.B 2 x16Bit Timer, 2 x USART usw...

Schaltzustände senden sollte natürlich machbar sein, die µC's habe ja genug i/o Pins da kann mal ja alles mögliche abfragen und dan per funk auch senden. Musst dir dann nur ein Übertragungsprotokoll
ausdenken und eine entsprechende empfangssoftware die das Protokoll auswertet.

Meine ursprünglichen Temperaturfunksender hatte ich mit einer serielle Übertragung ausgestattet (wusste nur nicht wie man in FHEM ein Modul baut das die Daten auswertet, deshalb hatte ich die Sender ja umprogrammiert) da könnteste dann einfach plain text senden z.B. schalter1=ein / schalter1=aus. Sowas läßst easy auswerten.

Ja das Hauptproblem ist halt das Flashen der µC. Ich hatte vor Jahren mir mal für nen Satreciver ein Display gebaut das Sender, Sendung, Sendungsfortschritt usw anzeigt. Das lief über ein Atmega16.
Da hatte ich ein Bootloader und USB integriert so das ich mit einem selbstgeschriebenen Flashtool die Firmware direkt über den Reciver flashen kann(konnte).
Also machbar ist alles. Aber da die Temperaturfunksender  sind halt nur mit den nötigsten Komponenten ausgestattet. Und da ist halt ISP die erste wahl weil das in den ATtinny's integriert ist.

Nachtrag. Ein USB ISP programmer gibts in der Bucht für weniger als 4€. Also den sollte sich dann jeder Bastler auf Lager legen ;)

Layout als PDF

@beSmart

µC = Atmel ATtiny84, Programiersprache = Bascom

@juergs
Die Sourcen kommen noch wenn ich der Meinung bin das alles fertig ist. Ich habe gerade heute noch einiges geändert.



gruß matlen67



FHEM -> Raspi 3B+
nanoCul 433Mhz & JeeLink 868 Mhz selbstbau Arduino Nano
Diverse Funkthermometer eigenentwicklung
LaCross TX29 DHT-IT
Ghoma Steckdosen

juergs

#11
Hallo Zusammen,
offensichtlich hat jeder seinen eigenen Beweggründe warum er irgendwelche (Bastel) -Dinge umsetzt.

@KölnSolar:
Gute und klare Einschätzung, der ich mich nur anschließen kann.

Für diejenigen, die noch Eigenschaten von den ATtinies suchen (ohne Werbungsabsicht)
Hier sind die Eigenschaften der "Kleinen" schön aufgezeigt:
https://guloshop.de/shop/Mikrocontroller:::3.html?XTCsid=jav8gbmu0qi8gnevd93urq25l5
und nebenbei etwas billiger, als sonstwo.

Dann gäbe es noch die Arduino-Variante zur Programmierung der ATtinies:
http://highlowtech.org/?p=1695

Als weitere Möglichkeit würde ich die Verwendung von Thermoelementen vom Typ K ebenfalls vorschlagen:
http://ebay.to/1VXJrTS

1.Working voltage: DC5V
2, Operating Current: 50mA
3, the temperature measuring range: -200°C - 1300 °C [Test procedure for 0-1023 °C]
4, the temperature measurement accuracy: ± 1.5 °C
5, the temperature resolution: 0.25 °C

Ok, wäre nicht gerade sinnvoll für Batteriebetrieb, aber der Temperaturbereich ...

@matlen
Du hast auf die Bascom-Sourcen leider verzichtet, dann hätte man das auch entsprechend für Arduino,
AtmelStudio oder VisualMicro in C(++) einfach portieren und als Basis für Erweiterungen verwenden können
... schade eigentlich.

@SpenZerX
Vielleicht kannst Du evtl. ein Beitrag leisten. Die spartanische Umsetzung find ich klasse (;-)

Über den Sleep-Mode des ATtiny85 gib es schöne Abhandlungen:
http://www.re-innovation.co.uk/web12/index.php/en/blog-75/306-sleep-modes-on-attiny85
http://s6z.de/cms/index.php/homeautomation-homecontrol/hardwareplattformen/arduino-atmel/9-winterschlaf-fuer-arduino
oder hier
https://www.insidegadgets.com/2011/01/03/building-a-standalone-temperature-logger-part-1/

Habe leider noch keinen ATTiny8x o.Ä., muss daher noch ein bisschen abwarten ....

Als weiteren Anwendungsfall könnte ich mir auch sowas vorstellen:
http://hackaday.com/2013/04/18/pulse-oximeter-from-lm324-led-and-photodiode/


Hier noch einge Ratschläge zur Reichweitenerhöhung der 433 MHz Sender (bei 3V3 etwas dünne Reichweite)
http://avr.börke.de/Funksteckdosen.htm
http://www.gsurf.de/avr-elro-funksteckdosen-mit-attiny-2313-schalten/
Hier könnte ich mir eine Ladungspumpe für den Sendevorgang vorstellen um z.B. kurzzeitig von 3V3 auf 9V zu kommen ....

Das hier das Prinzip:
http://www.sprut.de/electronic/switch/schalt.html
http://www.sprut.de/electronic/switch/smallup/smallup.html

matlen67

Zitat von: simonberry am 29 April 2016, 14:21:36
@KölnSolar

bei meinem Projekt bin ich zwar schon ein bißchen weiter. Sprich ich habe es auf einen ATTiny85 portiert und schon erste Ehrfahrungen gesammelt. Leider bin ich mit dem PowerSafe modus noch nicht ganz so zufrieden, das es wirklich mit Batterie geht umd das öffentlich zu machen.

Schaltzustände müsste man auch relativ einfach mit nem tiny und 433 MHz ans FHEM bringen können. Da gibt es für IT schon eine fertige Bibliothek "RC-Switch". Das kann dann allerdings nur mit der a-culfw empfangen werden.

@matlen
Das ist auch ein feines Projekt was Du da vorstellst. Kompliment!!
Ich bastle aber selber rum, weil das basteln schon so viel spaß macht.

Viele Grüße

Simonberry


Ja das mit dem Powerdown mode gefällt mir bei mir auch nicht wirklich. Den µC schlafen legen ist ja kein Problem allerdings braucht man dann einen exteren Interrupt um ihn wieder zum leben zu erwecken. Oder halt über Watchdog der läuft aber längstens 8 Sekunden.
Also bei mir sieht das so aus:

Watchdog initialiesieren
Daten per Funk senden

und dann eine Schleife

     for i = 1 To 70                                  '70 ca 10 min
         Config powermode = powerdown
      next i


Schleifen start -> powerdown starten -> Watchdog weckst den µC nach 8 sek. -> schleife kleiner 70 (10min bei mir) sofort wieder für 8 sek. powerdown usw..

Also nicht wirklich schön da der µC alle 8sek kurz aufwacht. Aber egal Batterie hält ca 1,5 Jahre :)
FHEM -> Raspi 3B+
nanoCul 433Mhz & JeeLink 868 Mhz selbstbau Arduino Nano
Diverse Funkthermometer eigenentwicklung
LaCross TX29 DHT-IT
Ghoma Steckdosen

juergs


juergs

#14
@Matlen67:
habe Dein Parallelthread leider erst zu spät gesehen ... https://forum.fhem.de/index.php/topic,28519.msg444165.html#msg444165
Habe meine bestellten ATtiny84 + 85 bekommen und die Programmier-Infrastruktur aufgebaut ... (;-)

  • Obwohl der DS10B20 erfassst wird und der Sender Bitfolgen sendet, wird nichts von FHEM erkannt,braucht man da noch ein weiteres Perl-Modul?
  • Welchen LogAnalyzer verwendest Du (welche Software dazu?) -> scheint besser als die Salae-Version zu sein....

LogAnalyzer: https://www.ikalogic.com/

Dannt stricke ich das Ganze mal auf das LaCrosse-Protokoll um.
Noch etwas Interessantes:
https://www.itead.cc/sonoff-th.html
https://www.itead.cc/blog/itead-intelligent-switch-433mhz-communication-protocol

Grüße,
Jürgen