Selbstbau Funkthermometer 433Mhz

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

Vorheriges Thema - Nächstes Thema

juergs


rippi46

So meine Attiny sind jetzt endlich da.
Programmieren konnte ich ihn auch schon, aber leider wurde noch kein Device in fhem angelegt.

Muss mann noch etwas beachten.

Gruß rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

juergs


rippi46

Ich denke schon. PB4 --> Pin3 am attiny oder?
Ist es wichtig ob ich auf 1Mhz oder 8Mhz flasche?

Gruß rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

juergs

#64
Ja! FHEM kann keine Zeitlupe :D

Setze Clock auf "internal 8MHz" oder besser 16MHz über PLL:

https://www.hackster.io/porrey/attiny-16mhz-610d41
http://www.engbedded.com/fusecalc

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).

rippi46

#65
Hallo juergs

habe es jetzt geschafft. In der .ino stehen die Fuses mit "avrdude: safemode: Fuses OK (H:FF, E:DF, L:E2)" --> dann geht aber nichts mehr.  :(
Habe zwei Attinys vermutlich geschrottet. Mit "avrdude: safemode: Fuses OK (H:DF, E:FF, L:E2)" funktioniert es dann mit neuen Attinys.
Vielleicht kann man die "Verfuseten" mit der High-Voltage-Methode wiederbeleben.

Kann ich jeden Pin des Attiny für den Transmitter verwenden oder gibt es bevorzugte Pins? Ebenso für die Onewire-Devices?

Danke trotzdem für den Hinweis!


Gruß rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

ArduPino

Ich flashe meine Attiny über die Arduino IDE per USB Programmer.
Da kann man gar keine Fuses (selber) setzen. Einfach auf 8Mhz stellen und Bootloader brennen.
Dann den sketch.
Es gibt einen Arduino ISP2 Sketch , mit dem könnte man mal versuchen den Attiny wiederzubeleben.
Das geht z.B. wenn man aus versehen 8Mhz external gewählt hat, anstatt z.B. 8Mhz internal.
Ob das in deinem Fall auch hilft, müsste man testen.

juergs


ArduPino

Also mein Attiny85 läuft auf 8Mhz.
Leider läuft diese Narcoleptic Library nicht auf meinem Digispark...hatte da aber schon was mit dem whatchdog usw. gemacht.
Ob das genau so gut ist wie das andere weiß ich nicht. Per whatchdog kann man den Attiny nur 8 Sekunden schlafen legen, ich habe es so gemacht, das diese sleep routine direkt mehrmals hintereinander aufgerufen wird. So wacht er auf, und schläft wieder.
Auch hatte ich damals eine Spannungsmessung eingebaut um den Akku zu überwachen. Diese funktioniert jetzt aber nicht mehr. Ich wollte das mit einer eigenen Sender ID machen und dann einfach als Temperatur übertragen. Die erste Übertragung ist richtig, beim zweiten mal senden aber nicht mehr. Andere Librarys hab eich nicht. Sogar eine weniger weil hier das senden per digitalWrite gemacht wird...egal,wird verschoben.

Mit dem Neigungsschalter war ja mal eine blöde Idee  :o
Eigentlich sollte das Teil mit den Kabeln ja am Fensterrahmen befestigt werden, am Fenster selber dann das Gegenstück (Magnet).
Wenn ich nun irgend was mit einem Neigungsschalter machen will, muss ich schon an dem Teil mit den Anschlusskabeln was machen...also müsste das Teil dann ans Fenster, was aber wegen den Kabeln eher schlecht ist...tja, denkfehler.
Falls mir nichts besseres einfällt,werde ich zwei Fensterkontakte befestigen um gekippt und offen zu unterscheiden, mal sehen. Das dann aber nur bei wichtigen Fenstern.

Hauptsächlich geht es mir um eine Alarmanlage. Nun muss ich mal schauen, wie man überhaupt eine Alarmanlage aufbauen könnte.
Da gibt es doch einiges was man beachten muss: Scharfschaltung, Alarmmeldung auf´s Smartphone, Abschaltmöglichkeiten bei Fehlalarm usw.
Wenn jemand dazu ein Projekt kennt, immer her damit.
Ansonsten passt das jetzt nicht wirklich hier rein, deshalb höre ich jetzt auf :)

rippi46

Hallo,

bin gerade noch dabei  bei den Funkthermometer (mit Fensterkontakt) eine Batterieüberwachung zu realisieren.
Habe aber immer wieder das Problem, das mir sowohl Batteriewerte als auch Fenster offen bzw. geschlossen Werte in der normalen Temperaturanzeige erscheinen.

Wie kann ich explizit festlegen mit welcher ID die Werte gesendet werden?

Oder lässt das Protokoll einen Batteriestatus zu?

Gruß rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

juergs

#70
Um das Verständnis des LaCrosse-Objektes etwas zu erläutern:

Es gibt mehrere Möglichkeiten diese Applikation einzusetzen und hoffe die Übersicht trägt etwas zum Verständnis
des Codes bei.
FHEM kann mit gleicher ID Temp + Hum-Messtellen unterscheiden. Diese werden einzeln versendet und FHEM setzt diese dann wieder unter einer ID zusammen.
Also kann man das Protokoll mit einer ID für eine Meßstelle oder 2 Meßstellen verwenden, wenn man diese mit der gleichen ID hintereinander sendet.
D.h. alle anderen Mischformen wären auch möglich. Also eine Meßstelle, eine ID. ZweiMeßstellen eine ID. n * zwei Meßstellen n* IDs ... usw.
Wenn die Funktionalität vom Standard abweicht, muss das in FHEM entsprechen konfiguriert werden (Bezeichnung, Skalierung).

ABER: das LaCrosse-Protokoll hat nur ein 7Bit-Adressraum, kann also max. 127 IDs erkennen!

Hoffe es  nicht zu kompliziert 'rüber gebracht zu haben.

Zum konkreten Problem:
Natürlich darf man die Batteriespannungsmessung nicht mit der gleichen ID versenden, wenn diese schon mit zwei anderen Messungen belegt ist.
-> Woher soll FHEM wissen, was jetzt an welcher Stelle anzuzeigen ist?
Also: Batteriespannung einfach mit weiterer ID versenden.

ZitatWie kann ich explizit festlegen mit welcher ID die Werte gesendet werden?
Einfach definieren und vor dem Versenden dem LaCrosse-Objekt mitgeben und dafür sorgen, dass jeder Meßwert mit "seiner" ID versendet wird!
Eigentlich gleiches Prinzip wie beim 4fach-DS18B20-Sensor: hier

Grüße,
Jürgen

juergs

#71
Noch eine Anmerkung zu den ATtiny85-Fuses:
8MHz internal ist richtig!

Die Screenshots sind meine gewählten Einstellungen.

rippi46

Hallo juergs,

Danke für deine ausführliche Beschreibung. Ich denke, dass ich das soweit verstanden habe.

Ich habe eher das Problem, dass ich auf eine andere ID umschalte  und dann meine Werte sende. Dann kann es passieren, dass die Werte bei der zuvor eingestellten ID landen. Entweder ist es ein Timingproblem (habe auch schon Delays eingefügt) oder ich schalte nicht richtig auf die neue ID um.

z.B. benutze ich folgende Befehle zum wechseln der ID und zum senden der Werte



LaCrosse.bSensorId = SENSOR_BASIS_ID;
LaCrosse.sendTemperature();

delay(2000);

LaCrosse.bSensorId = SENSOR_ID_1;
  LaCrosse.sendTemperature();

delay(2000);



Leider kommen nicht  immer alle Werte bei der richtigen ID an.

Gibt es noch einen anderen Befehl um explizit die ID zu setzen?


Gruß rippi

P.S. hast du zufällig einen funktionierenden Code für das Messen der Batteriespannung.(das sollte ja ohne zusätzliche Beschaltung an den Pins funktionieren)
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

juergs

#73
Ich glaube nicht, dass es ein Timing-Problem ist.
Dafür laufen bei mir ca. 7 Sensoren ohne Probleme.

Evtl. könnte es sein, dass andere Sender "dazwischenfunken"?  Vielleicht vom Nachbar?

Bei gleichen Zeitabständen kann das durchaus der Fall sein, deshalb habe ich im Code noch
eine Random-Funktion eingebaut um die Intervalle variieren zu können und nicht im
starren Zeitmuster zu verharren.

Außerdem habe ich für Narcoleptic noch eine Erweiterung eingebaut um Minuten lang den Controller schlafen zu legen können:

void delay_minutes(int minutes);

Zitathast du zufällig einen funktionierenden Code für das Messen der Batteriespannung.(das sollte ja ohne zusätzliche Beschaltung an den Pins funktionieren)
... baue morgen mal was zusammen ...

Grüße,
Jürgen

juergs

#74
Erst mal "Batteriespannung messen"  vorne weg:

measure-battery-voltage

ZitatVcc = 1.1 * 1023 / ADC-measurement


long readVcc() {
  // Read 1.1V reference against AVcc
  // set the reference to Vcc and the measurement to the internal 1.1V reference
  #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
    ADMUX = _BV(MUX5) | _BV(MUX0);
  #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
    ADMUX = _BV(MUX3) | _BV(MUX2);
  #else
    ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #endif 

  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Start conversion
  while (bit_is_set(ADCSRA,ADSC)); // measuring

  uint8_t low  = ADCL; // must read ADCL first - it then locks ADCH 
  uint8_t high = ADCH; // unlocks both

  long result = (high<<8) | low;

  result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
  return result; // Vcc in millivolts
}


Die Konstante 1125300L muss ggf. angepasst werden. (für genauere Werte präzise Spannungsmesser benutzen und gegen messen.)
Siehe auch Improving Accuracy


Ich benutze u.A. diese IDE-ATtiny-Preferences-Einstellungen:
attiny-support-unter-arduino-1-6-installieren
und nicht die Digispark (mit USB-Bootloader).
Bei mehreren Einträgen (z.B. ESP8266) durch Komma separiert eingeben.