Code: Alles auswählen
if (sens_value == 85.0) { // missing VCC
Danke
Code: Alles auswählen
if (sens_value == 85.0) { // missing VCC
Ja. Irgendwie bin ich davon ausgegangen dass es das beim MQTT Sensor auch gibt.
Nur Erfahrung. Google sonst mal "DS18B20 85 grad" - der Fehler scheint immer bei unzureichender Stromversorgung aufzutreten. z.B. VCC ab, oder Kabel zu lang, oder im parasitären Betrieb nicht genug Leistung in der Stromversorgung. Ist glaube ich kein echtes "Feature" aber ein reproduzierbares Verhalten.Innuendo hat geschrieben: ↑Donnerstag 10. Januar 2019, 07:17 Matschie: könntest Du mir zuDeine Quelle nennen. Ich finde dazu nichts in der dallasCode: Alles auswählen
if (sens_value == 85.0) { // missing VCC
Edit: CRC check hinzugefügt*The power-on reset value of the temperature register is +85°C.
Hallo,graythread hat geschrieben: ↑Mittwoch 9. Januar 2019, 12:35 2.1 Temperatur Offset einstellbar: Zumindest meine One-Wire sind alles andere als genau und es wäre doch toll, wenn diese Offsets direkt on-edge berechnet würden und der "richtige" Wert CBP gemeldet würde?
Code: Alles auswählen
d_offset = Property.Number("Offset", configurable=True, default_value="0", description="Offset relative to sensor data")
...
def get_value(self):
return {"value": self.last_value + float(self.d_offset), "unit": self.unit}
Sieht doch nach einer guten Lösung aus!
Klappt das gut? Und bringt es was?graythread hat geschrieben: ↑Samstag 12. Januar 2019, 15:49 Super, danke Dir!
Hab auch mit dem Frontend-Refactor ein bisschen weiter gemacht.
Code: Alles auswählen
def get_value(self):
try:
self.last_value = round(self.last_value + float(self.d_offset), 2)
except Exception as e:
pass
return {"value": self.last_value, "unit": self.unit}
..und funktioniert bei mir auch prima, zumindest auf den ersten Blick:-)
Ich denke schon. Es gibt keine Notwendigkeit mehr, Internet Access zu haben, da alle benötigten Dateien jetzt direkt auf dem Chip liegen (was ich zuhause zB in einem eigenen "Brausubnet" ganz praktisch finde). Außerdem wird die Menge an Daten, die mit jedem Request gepullt wird, um einiges reduziert, da der Server nicht mehr HTML-Formatierungskram auspuckt, sondern dies im Frontend passiert. Und die Methoden liefern jetzt alle korrekte Rückgabewerte, vorher gab es im Frontend immer Fehler beim Posten/Löschen von Sensoren/Aktoren. Kleinkram halt, aber hält den Code was übersichtlicher:-).matschie hat geschrieben: ↑Montag 14. Januar 2019, 09:48Klappt das gut? Und bringt es was?graythread hat geschrieben: ↑Samstag 12. Januar 2019, 15:49 Super, danke Dir!
Hab auch mit dem Frontend-Refactor ein bisschen weiter gemacht.
Das get_value wird jedes mal ausgelöst, wenn der CBPi den Wert des Sensors abfragt. Dann wird auch jedes mal der offset addiert.Innuendo hat geschrieben: ↑Montag 14. Januar 2019, 09:59 Schau da mal drüberich denke, die get_value verarbeitet das Addieren vom Offset mehrfach. Ich hatte am cbpi eine korrekte Anzeige und am Win Client wurde offset doppelt addiert.Code: Alles auswählen
def get_value(self): try: self.last_value = round(self.last_value + float(self.d_offset), 2) except Exception as e: pass return {"value": self.last_value, "unit": self.unit}
Code: Alles auswählen
try:
self.send_value = round(self.last_value + float(self.d_offset), 2)
except Exception as e:
pass
return {"value": self.send_value, "unit": self.unit}
Dann werde ich das am Wochenende auch mal machen. Wenn du einen Pull-Request öffnest, werde ich das dann wenn alles klappt auch zu mir mergen.
Probiere ich heute Abend aus. Dankematschie hat geschrieben: ↑Dienstag 15. Januar 2019, 07:52 Ich hab es jetzt so gelöst, konnte es aber noch nicht live testen:Code: Alles auswählen
try: self.send_value = round(self.last_value + float(self.d_offset), 2) except Exception as e: pass return {"value": self.send_value, "unit": self.unit}
Pull request ist geöffnet. Weiß nicht, ob es geklappt hat.
Musst natürlich oben wo last_value definiert ist auch noch den neuen send_value = 0 definieren. Wollte nur nicht den ganzen code hier hin kopieren.
Code: Alles auswählen
self.send_value = round(float(self.last_value) + float(self.d_offset), 2)
Code: Alles auswählen
class MQTTActor(ActorBase):
topic = Property.Text("Topic", configurable=True, default_value="", description="MQTT TOPIC")
pPower = 100
def init(self):
def on_message(client, userdata, msg):
json_data = json.loads(msg.payload)
new_state = json_data['state']
#If new_state != old_state and new_state == 'off':
if new_state == 'off':
self.api.switch_actor_off(self.id)
return
else:
pass
on_message.actorid = self.id
self.api.cache["mqtt"].client.subscribe(self.topic)
self.api.cache["mqtt"].client.message_callback_add(self.topic, on_message)
def on(self, power):
....
Zumindest teilweise gemacht: https://github.com/matschie1/MQTTDevice/pull/4Innuendo hat geschrieben: ↑Dienstag 15. Januar 2019, 20:35 Das war fast die Lösung ...Nun funktioniert auch das Offset.Code: Alles auswählen
self.send_value = round(float(self.last_value) + float(self.d_offset), 2)
Meine ESPs sind nun alle auf den "merged Stand". Subjektiv finde ich die Module dank der Anpassung von graythread agiler. OTA hat wunderbar funktioniert. Über den FSBrowser die config.json eingespielt. Passt aus meiner Sicht soweit.
Weil html und styles für mich ein graus ist, wäre ich für eine Lösung für die Ideen Button "All MQTT/actors off" und ein Button "Reboot ESP" dankbar.
Innu
Die Idee finde ich aber super, würdest du das organisieren?graythread hat geschrieben: ↑Samstag 19. Januar 2019, 12:29 Wir sollten mal eine ReadMe schreiben, in der alle benötigten Plugins und Repositories, auch auf CraftbeerPi-Seite, erwähnt werden (wie wäre es mit einer GitHub Organization, in die alle "official" Repos reingepackt werden, auf die wir alle Schreibzugriff haben? Ist bei OpenSource Projekten gratis möglich). Zumindest ich musste am Anfang ein paar durchprobieren bevor ich das PID Autotune und dann die "geregelte" Ansteuerung der Platte hinbekommen hatte.
Ja, sehe ich auch so. Aber am besten wenn es "fertig" ist..
Code: Alles auswählen
void loop() {
cbpiEventSystem(20); // Check WLAN
cbpiEventSystem(30); // Display and NTP Update
cbpiEventSystem(21); // OTA handle
cbpiEventSystem(22); // Check MQTT
cbpiEventSystem(23); // Webserver handle
cbpiEventSystem(24); // MDNS handle
cbpiEventSensors(0); // Sensor handle
cbpiEventActors(0); // Actor handle
cbpiEventInduction(0); // Induction handle
while (gEM.getNumEventsInQueue()) // Eventmanager process all queued events
{
gEM.processEvent();
}
delay(100);
}
Code: Alles auswählen
void showDispTime(String value)
{
#ifdef DISPLAY
display.setCursor(5, 5);
display.setTextSize(2);
display.setTextColor(WHITE);
display.print(value);
#endif
}
Edit: Hab den log etwas gekürztMQTTDevice:33:22: error: 'D3' was not declared in this scope
#define ONE_WIRE_BUS D3
^
C:\Users\********\Desktop\MQTTDevice\MQTTDevice.ino:34:17: note: in expansion of macro 'ONE_WIRE_BUS'
OneWire oneWire(ONE_WIRE_BUS);
0_SETUP:82:23: error: 'D0' was not declared in this scope
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
0_SETUP:82:27: error: 'D1' was not declared in this scope
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
^
0_SETUP:82:31: error: 'D2' was not declared in this scope
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
^
exit status 1
'D3' was not declared in this scope
Ohne den Thread jetzt Hijacken zu wollen: ja das funzt. Habe das genau so im Einsatz. Einen Th16 mit Tasmota für den Gärschrank per mqtt mit dem Raspi verbunden.
Ha! könntest du mir verraten wie der topic und payload aussehen müssen im cbpi damit da was passiert?
Kann ich dir leider erst in ca 1 Woche sage da ich momentan keinen Zugriff auf meine Brausteuerung habe.amplitude hat geschrieben: ↑Samstag 26. Januar 2019, 16:51Ha! könntest du mir verraten wie der topic und payload aussehen müssen im cbpi damit da was passiert?