Coder Social home page Coder Social logo

brewmaniacesp8266's Introduction

BrewManiacEx

BrweManiacEx Architecture

BrewManiacEx is a brew controller based on ESP8266. It was started by mimicking famous Arduino-based Open ArdBir, so most of Open ArdBir functions are included.

  • Manual and Automation brewing process control
  • PID and PWM heat control
  • Automatic PUMP control

The most important feature that BrewManiacEx differs from Open ArdBir is

  • WiFi Enabled, Web-based interface You can view, change the settings, monitor and control the brew on your phones, tablets, and computers.

Additionally,

  • Multiple sensors support Up to 5 sensors are supported. Different sensors can be used in different stages.
  • PID autotune Run the PID Autotune to get the best PID parameters for your system instead of guessing.
  • Sparge water Heating control Run the sparge water heating when the main heating element is idle during mashing to enable using only one 15A/20A GFCI socket.
  • Temperature logging chart Watching the temperature chart during brew and after brew
  • [Untested/uncompleted] Distilling PWM controlled heating instead of PID controlled. Customized 4 stages: pre-heat, head, heart, and tail, which are defined by temperature ranges.

NOTE:

Flash layout and File system are changed in 0.4.9. All data and setting will be lost after upgrading. Please backup before upgrading. The major change in 0.4.9 is adapting of LitteFS, whihch is quiet new to ESP8266/Arduino framework. Although the performance is better, the stability is in doubt. Please be aware.

Update History

  • 0.5.3

    • Two-point temperature calibration option
    • Low Pass Filter setting. (Originally hard-coded.)
    • Pump access during removing malt.
  • 0.5.2

    • Automatic resumption of automation brew process when reset or power shortage.
  • 0.5.1

  • 0.5

    • Rollback framework to 2.2.0. (Newer framework seems to have issues with my new WiFi6 AP.)
    • New web page theme by bootstrap
    • Sensor management from web pages
    • Customizable Recipe Source
    • embedded HTML/Javascript
    • (Partial) Russian LCD text
    • Bugs fix
      • Heating is turned on during Hopstand
      • Time isn't synchronized
      • Log saving failure for LittleFS.
  • 0.4.9 (pre-release)

    • Update framework to 2.3.3
    • Change File System to LittleFS
    • Display critical system information on WiFi setup page, system update page, and about page.
    • Fix HTML/JS version error.
    • Change Flash Layout to 2M program
    • 16M flash layout support.
  • 0.4.8

    • Only HTML/JS has 0.4.8.
    • Change Charting library to dygraph.
    • re-orgnize HTML/JS
  • 0.4.7

    • Update framework to 2.2.0
    • Update ArduinoJson to v6
  • 0.4.6

    • multi sensor calibration error fixed
    • enable dragging on mobile platform
    • Heat@Pump option to stop heating if pump is not running.
  • 0.4.5

    • new web fontend
    • LCD mirror on web pages
  • 0.4.2

    • AP only mode fixes
    • HopStand support for exported beerXML from BeerSmith and Brewersfriend.com
    • Settings survive through formatting file system
    • Low pass filtered applied to temperature sensor readings.
    • (untested, unverified, not enabled by default) Level sensor(float ball) support for Kettle-RIMS
  • 0.4

    • update ESPAsyncTCP and ESPAsyncWebServer library
    • Websocket instead of Server Side Event(EventSource)
    • Continuously Up/Down button action
    • Bug fixed, no temperature chart in Manual and Distilling mode.
    • Bug fixed, setting temperature udpate when changed
    • Bug fixed, No PUMP control in distilling auto mode
  • 0.3.3 [12/06/2017]

    • bugs fixed.
    • Moveable control panel, progress table, and temperature chart.

brewmaniacesp8266's People

Contributors

allthepies avatar dumpamob avatar franciscopaniskaseker avatar lekrom avatar vitotai avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

brewmaniacesp8266's Issues

BrewManiac ESP8266 System update

Hi,

I have uploaded firmware to the wemos d1 mini.
Connected to my wifi and open web page of BrewManiac. After that I press "update now" and update stuck. Not movig from [Processing]bm.047.jgz
error

Web-ui "lid" over buttons does not open on Android/Chrome

I'm not sure if this is device specific or not, but on my handheld devices (android) i am not able to push the web ui buttons due to the 'lid'

On my computer the lid flips up when clicking on it. Unsure whether there is something else needed on mobile though. Am i the only one with this issue?

modbus / mqtt intergration

Is there a possibility of modbus and or mqtt intergration?
Would be great to be able to remotely set to manual , read Temps and Set point from an industrial PLC.
Cheers
Jono

PWM of 100% causes LCD corruption

buffer[1]=(pwm/10)? ('0' +(pwm/10)):' ';

The ui.h function to display the PWM value causes screen corruption for a PWM value of 100%, it's displayed as "1:0%". This is due to the middle character logic performing a div 10 and adding the result to the character '0'. So for 100 the result is '0' + 10 which gives the colon ":" character.

The calculation should used the modulus operator on the result of the DIV 10. e.g. '0' + ((pwm/10)%10)

There may be other examples of this in ui.h for other three digit values.

Hop Stand program kept heat on in PWM mode

During a brewing session which included a 20 minute Hop Stand, with the stand setpoint at 80 degC, BMEx kept the heater on (in PWM mode) when in Hop Stand even though the wort temperature was sill in the 90degC region. I was expecting the heat to go off and we had to reduce the PWM to 0 in order to continue with the hop stand.

Fahrenheit temperatures

While I would not call this a bug, it would be nice when using Fahrenheit temperatures that the values both in the BrewManiacEx as well as in the web pages use round values. What I mean by this is can the temperature values being in units of .25 or 1.0 degrees F?

For Temperature Calibration Value and Start PID Range, instead of .18 degree F steps, could they be .25 degree steps. For all other temperature variables 1 degree F steps would be ideal.

Temperature reached event occurred prematurely

Used BM v040pre for a real brew session last Saturday, all went well apart from one issue.

When in the boil stage, the temperature reached event fired when the temperature reached approx 86 degC. This started the countdown timer etc and registered the temp reached event on the logging graph (attached below). I pressed the pause button to suspend the timer and resumed once the boil had actually been reached. So all ended well but had I not spotted the premature event trigger then the brew would not have worked out as planned.
The web UI did lose contact with BMEx a few minutes before, but reconnected OK.

bmtemperror

The BMEx log file is also attached.

0003.zip

JS Console output (you can see the connection loss event + recovery)

bmjserrors

The JS error is due to the settime API response returning a zero byte response. Firefox doesn't like this for JS httprequests (we fixed this for some other API). This should be a red herring as far as this issue is concerned but you might like to resolve it 👍

Set point or pwn constantly changing after a UP+DWN reset

I've noticed this while trying out the distill feature (again thanks Vito, it seems to be working. Still need to test the recipe and automation)

But if I do a up+dwn reset and go into manual mode for example the set point either keeps increasing or decreasing without pushing anything. Guessing that it's a logical hickup somewhere

Set point in web interface

Set point is shown as 35 degrees on panel page if it's loaded up after the setpoint has been set on the unit itself or if hard refresh is performed.

This could cause confusion to someone who loads up remote monitor away from unit.

bmsp

Unable to change network

In web interface. When trying to switch from one wifi network to another, new settings are not applied.
It's in AP mode since the old network is unavailable. Network tab shows that the request gets a 200 response, but it continues to show the old network and stays in AP mode.

Is there other ways to set network settings?

V 0.4.6

sync HTTPClient in async webserver

sorry for open ticket for my question but I 'm curious about how your HttpUpdateHandler class actually work without any problem with async library , I've notice user can manually requested for _firmwareUpdateStart and define remote server _firmwareUpdateUrl , when this request replied , set new status to US_FirmwareUpdatePending and in loop runUpdate() always check the status and when is US_FirmwareUpdatePending , ESPhttpUpdate.update(_firmwareUpdateUrl, _fwVersion); do the rest , however as you well aware ESPhttpUpdate.update use sync HTTPClient and probably not compatible with async client , I was wondering why use this approach without any problem ? why don't use async client to connect the remote server for update firmware
thanks

LCD/OLED display: Pump indicator not restored after Iodine test

If the Iodine test phase is enabled then when exiting the iodine test phase to either mashout or extend mash then the pump indicator on the LCD isn't restored even though the pump is running.

The issue is that the pump on() method returns without doing anything if the pump is already on. And so the pump indicator never gets restored.

I added a PumpControl method "updateUI" and call this from the autoModeNextMashingStep() and autoModeIodineTestToMashExtension() functions

PumpControl

		void updateUI() {
			if ( isOn() ) {
				uiPumpStatus(PumpStatus_On);
		    wiReportPump(PumpStatus_On);
			} else {
				uiPumpStatus(PumpStatus_Off);
				wiReportPump(PumpStatus_Off);
			}
		}

autoModeNextMashingStep

	else if(_mashingStep ==7)
	{
		if(readSetting(PS_PumpOnMashOut)) {
			 pump.on();
		}
		else {
			pump.off();
		}
		pump.updateUI();

autoModeIodineTestToMashExtension

	setSettingTemperature( automation.stageTemperature(_mashingStep));

	#if	MANUAL_PUMP_MASH == true
	uiButtonLabel(ButtonLabel(Up_Down_PmPus_STP));
	#else
	uiButtonLabel(ButtonLabel(Up_Down_Pause_STP));
	#endif
    autoModeEnterMashingExtension();
    _mashingStageExtendEnable = false;
		pump.updateUI();
}

bm031.js: missing prefChanged function call when prefer infuse checkbox selected

$("#mi_prefer_infuse").change(function () { Recipes.userPreference.preferInfuse = $("#mi_prefer_infuse").is(':checked') ? 1 : 0 });

Could
Recipes.prefChanged()
be added to the prefer infuse change handler ? This then activates the "update" button to allow option changes to be saved as is the case for the other recipe option values.

Branch PWM

Vito, what's being developed on the PWM branch ? Replacing PID with PWM ?

Enhancement suggestion: Javascript playing alert sound

Vito,

Could you include a code enhancement in the main code stream:

It's a modification to the sound function in the bm.025 Javascript file.

Modified code follows:
sound: function (t) { var b = this; if (b.soundTimeout) clearTimeout(b.soundTimeout); Beep.pause(); Beep.currentTime = 0; Beep.loop = true; Beep.play(); if (t > 0) b.soundTimeout = setTimeout(function () { b.soundTimeout = null; Beep.pause(); Beep.currentTime = 0; }, t * Beep.duration * 1000 ) },

Basically this starts the sound played at the beginning each time and also plays the entire sound rather than just a one second snippet. (sorry code formatting is bad, git doesn't seem capable of showing nesting)

I would like to change the default "Beep" sound (as I think it's too harsh) and so with this code modification then it plays the sound fully and also from the start.

Thanks.

NTC 10K

Is it possible to implement the reading temperature also from NTC 10K? The goal is to have two choose, one by 1-wire and the second by A0 pin (3v3,150k,ntc)... There are some All-In One kettle that using NTC probe.
Thanks

Use more than one pump

Good Morning.
I have a question and would like everyone's help.

I am trying to build my system in the HERMS method and would like to use more than one pump.
In the HERMS method you use a pump to recirculate water in the HLT pan, one in the MLT that is also used for BK and another pump in the chiller.

Could someone help me by telling me where I can modify the program to use more than one pump?

Thank you very much in advance

Samuel

issue with PID parameter scaling

Hi Vito. Great work on the latest BM. I have upgraded my system from the old arduino BM to the latest BMex. There is however something i would like to recommend. I realise the temp control stuff came from open ardbir, but there is an issue in their original PID parameters. Firstly, negative PID coefficients are not allowed and makes no sense in my opinion. I realise that the actual paramers are scaled and shifted to account for this. The issue is that the way the parameters are displayd makes it not very intuitive to tune. Also, at least in my system, the kD parameter can not be set correctly. Analysing the amplitude an period when performing the autotune implies I need a kD of 5000-ish. Not possible with the current scaling, it overflows and the stored kD is incorrect. I have hacked the code on my arduino version to fix this. Without this hack my system tends to overshoot a bit. The kP and kI values are correctly obtained from the autune. Regard, Lekrom.

Mash out setting when recipe imported

Hi Vito,

When importing a BeerXML recipe which has a mash out step defined, BMEx is adding another mash out step as per the recipe options settings. Could you add an option in the recipes section to use mash out steps from the BeerXML ? I know you did something similar for the mash-in temperature setting.

Thanks! Myself and a brewing mate have built a Braumeister replacement controller using BMEx this weekend. Works really well and my mate is very impressed.

Translation???

Is it possible to translate brewmaniac like brewpiless?

Multi-Language portugues-br

Hi, Vito.

Could you tell me what folder and file I can edit? I want to help you implement the Portuguese-BR language, since I saw that you have improved the OTA update system, giving you the option to choose a language.

Issue with sparge heating control.

Hi Vito. Found a bug with sparge heating. As soon as i enter auto mode, sparge heater is turned on and stays on. The lcd as well as lcd on web interface does not update the sparge temp in auto mode, frozen at last temp reading prior to entering auto mode. The temp #2 box on web interface does however seem to show correctly.

'PCF8574' does not name a type

Arduino: 1.8.1 (Mac OS X), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, 115200, 4M (3M SPIFFS)"

In file included from sketch/BrewManiac.cpp:17:0:
pins.h:75: error: 'PCF8574' does not name a type
PCF8574 pcf8574(PCF8574_ADDRESS, I2C_SDA, I2C_SCL);
^
sketch/pins.h: In function 'void btnPrepareRead()':
pins.h:91: error: 'pcf8574' was not declared in this scope
_portvalue=pcf8574.read8();
^
In file included from sketch/BrewManiac.cpp:313:0:
sketch/ui.h: In function 'void uiScanLcdAddress()':
ui.h:302: error: 'class LiquidCrystal_I2C' has no member named 'updateAddress'
lcd.updateAddress(address);
^
exit status 1
'PCF8574' does not name a type

screenshot 2017-08-11 18 33 55

EN locale spelling mistakes

Should be "Password"

"retype_new_password": "Retype New Passwoard",

Should be "don't match!!"

"new_password_dont_match": "New Passwords dont' mathce!!",

Should be "Down"

"button_down": "Dowwn",

Should be "Temperature"

"sparge_temperature_control": "Tempearature Control",

Should the "network"

"__network_settings__": "Netork setting tab",

Custom audio error for repeating sounds.

I've created a MP3 file and associated sounds.json file to create custom sound alerts for BM. Currently I've got the same sound for each alert, a klaxon type sound which lasts for 2 seconds.

This works fine in Chrome, but in Firefox the cases where the sound repeats more than once causes an error to be reported in the JS console and a "beep" is played after the first instance of the sound.

The error is "error not playing" and is emitted in the following section of Javascript within the SoundBox function:

		`b.audioTimeout = setInterval(function () {
				if ((Date.now() - j) > k) {
					if (b.audio.currentTime == d) {
						console.log("error not playing");
						b.audio = new Audio(b.audiosrc);
						b.audioLoaded = false;
						b.audio.oncanplaythrough = function () {
							b.audio.oncanplaythrough = null;
							b.audioLoaded = true
						};
						b.audio.load();
						clearInterval(b.audioTimeout);
						b.playing = false;
						b.queue.unshift({
							s: "beep",
							t: b.beep.duration
						});
						checkQueue()
					}
				}`

I suspect that it's something to do with entering the "if ((Date.now() - j) > k) " IF statement block after 1 second has elapsed and the code believing that the second invocation of the sound hasn't started.

If I modify the JS to "reset" the variable j each time the alert is played again then all works fine. Amended code again from SoundBox follows:

			`	if (b.audio.currentTime > i) {
					b.audio.pause();
					h++;
					if (h < c) {
						b.audio.currentTime = d;
						j = Date.now();    // Added this to fix the issue
						b.audio.play()
					} else {
						clearInterval(b.audioTimeout);
						b.playing = false;
						checkQueue()
					}
				}`

I just added "j = Date.now();" which makes sense as you want to reinitialise the sound start time each time it is initiated.

It's an odd one, do you think you could add this "fix" to the codebase ?

Attached is a zip containing the MP3 + sounds.json which reproduce the error (in Firefox). Although the error also happens with your example audio file with the synthesised speech.

example.zip

PID settings not updating

Hi Vito,

I am in the process of upgrading my brew kettle controller from the old Brewmaniac + BMESP8266 to the new BrewManiacEX. I have run into a few bugs.
The PID menu settings do not update correctly when using the LCD / button (offline) interface. I changed the updateSetting() function to add some debugging data to the code as follows:

bool updateSetting(int addr,byte value)
{
#if SerialDebug == true
Serial.print("Updating setting: ");
Serial.print("addres: ");
Serial.print(addr);
Serial.print(" value: ");
Serial.print(value);
Serial.print("\n\r");
#endif
return SpiEEPROM.write(addr,value);
}

In the serial monitor, while attempting to change any setting, I see the following:
Updating setting: addres: 0 value: 64
Updating setting: addres: 0 value: 11
Updating setting: addres: 0 value: 33
Updating setting: addres: 0 value: 7
Updating setting: addres: 0 value: 17
Updating setting: addres: 0 value: 85
Updating setting: addres: 0 value: 35
Updating setting: addres: 0 value: 10
Updating setting: addres: 0 value: 50

The adress is always 0 regardless of the item I try to change. If I re-enter the PID setup menu, all values remain unchanged.

Also, If I use the Web interface to change the settings, all works correctly except for the kD parameter which also does not respond here.

Any thoughts?

-Regards,
Lekrom

Change recipe options Use INFUSE_TEMP to default to checked

I export recipes from Beersmith in BeerXML format and then import into BM. All of my recipes have mash-in temperatures set but because the BM recipe import capability has a default mash-in temp then I have to remember to either set this or select the Use INFUSE_TEMP checkbox prior to recipe import.

I think it would make sense to have the Use INFUSE_TEMP recipe option selected by default, if the imported recipe has an INFUSE_TEMP element (as they are optional) then BM would use that, if the element is not present then BM would fall back to the mash in temp defined in BM.

Obviously I can fork BM and make this change to suit myself but I'd like to suggest making this the default setting for the main repo.

Number of Pins to PCF8574

I'm trying to set up P4 from PCF8574, but I can not figure out which number to use.
I know that.
P0-1
P1-2
P2-4
P3-8
P4 -?
P5-32
P6 -?
P7 -?

PID vs setup Boil temp setting

Issue started in wrong local:
vitotai/BMESP8266#1 (comment)

Problem:
If I set up 95.5 C degrees as a BOIL TEMP in setup menu and after mash-out I set 95.5 C degrees, when it get 93.5 C degrees PID will start on/off heating element (because PID Start = ) until get boil temp and then enable PWM. If I will boil the wort, I do not want PID control anymore.

Suggestion:
Change PID decision. If the sensor temp is equal or greater to "boil temp configuration minus pid start variable", enable PWM. Or we can use a OR decision. If what we set is equal to BOIL TEMP, do not use PID. I think the first suggestion is the best.

Problem to get it to work

I have some problem with your software.
When I compile it in Arduino IDE I get this:
pins.h:88: error: invalid conversion from 'int' to 'TwoWire*' [-fpermissive]

I have tried several things but nothing helps.
It seems that I have problem to load the pcf8574_esp files.
Any idea what I'm doing wrong?

Void setup in SyncClient

Hi Vito, I am not very good with code compilation and this is probably a very easy fix. I am having a conflict with with line 1109 in brewmaniacEX and line 14 in SyncClient saying 'redefinition of void setup ( ) ' Is there a way to change the name?

Compilation errors

Hi Vito,

I'm trying to compile the latest BrewManiacESP8266 code from Git and have hit a compilation error I can't resolve.
`In file included from sketch\BrewManiac.cpp:17:0:

pins.h:75: error: 'PCF8574' does not name a type

PCF8574 pcf8574(PCF8574_ADDRESS,I2C_SDA, I2C_SCL);

^`

pins.h references a class called PCF8574 but the library you listed as required ( https://github.com/WereCatf/PCF8574_ESP ) doesn't define a class with that name, the class that is defined in pcf8574_esp.h is named "PCF857x".

I can't see how this would work. Can you check please ?

D1 mini board only - howto buttons?

Hey.
I'm trying to get this thing to work, and are working my way around the coding.
I've set:
#define BUTTON_USE_EXT false
in pins.h, since I'm not using the pcf8574, but I'm unsure about how to use the remaining pins for the buttons.
I'm not using a buzzer either, so I'm trying to set it up to use D0, D8, D3 and D4 for the buttons.
The codes compiles and uploads without a problem, but when I short those pins to ground, nothing happens.
Also, if I go the web interface, and push Manual, and then No, the text start looping fast, so something is running in circles....
Any help?

Can't save recipes

Love the s/w Vito, got it up and running on a NodeMCU.

However, when I load in a beerXML file it renders fine but attempting to save it gives an alert popup with the text "Error saving recipe:500". The serial output at the same time is "File UL Failed:/R/CitraGold"

BeerXML file attached.

citra.xml.txt

Screenshot also attached.

citraerror

Edit: I should mention that I'm building the binary in the ArduinoIDE rather than using the pre-built binary image. So if there are any specific settings I need e.g. SPIFFS size etc at build time then let me know. The target is also a NodeMCU ESP12E rather than a Wemos D1 Mini.

Looking at the code, isn't the place the recipe is written to SPIFFS in RecipeFileHandler::handleUpload ?

If so, this method doesn't seem to be referenced anywhere else and the method which is throwing the "File UL Failed:/R/CitraGold" error, handleRequest just looks for existence of the file and if not present then returns the 500 error I'm seeing. I must be missing something :)

Automation page Fahrenheit Issues

  1. On the Automation page, if the temperature is configured for Fahrenheit, the temperatures in the Mash Schedule don’t display right. Upon editing the Mash Schedule temperatures and clicking save, the Mash Schedule will show the temperature that was just changed either correct or not, but the other temperatures are way too high. The temperatures are being multiplied by 1.8 and having 32 added to them. It is as if the temperature are thought to be in Celcius, so they are being converted to Fahrenheit when the don’t need to be.

  2. Another issue that happens in the Automation page is that after making several changes and saving, an error starts happening when saving. The pop up error box says “Error saving automation, server response:Bad Request”. To see this error, edit a mash schedule temperature or time, save it. Then repeat this several times and the error will start occurring.

sparge temperature parameter

Hi vito,
I would like to ask which parameter of the software I have to change for the sparge temperature to be able to set below the minimum settable. I want to use secondary temperature control to manage a decoction I must be able to set 70 °C sparge set temperatures

Delete recipe doesn't work

I can now save recipes, which is great!

However, the delete recipe option doesn't work for me. I click on delete and nothing happens.

Looking at the bm.js Javascript it would appear that the function associated with the "delRecipe" tag is incorrect and is using the output from "var r = t.viewing;" as the recipe name to be deleted whereas this actually returns an object.

The Chrome JS console gives the following error when I select "Delete"
error condition lib.js:2 Uncaught Error: Syntax error, unrecognized expression: #recipe-list-[object Object] at Function.fa.error (lib.js:2) at fa.tokenize (lib.js:2) at fa.select (lib.js:2) at Function.fa [as find] (lib.js:2) at n.fn.init.find (lib.js:2) at n.fn.init (lib.js:2) at n (lib.js:2) at rmList (bm.js:3332) at Object.success (bm.js:3341) at i (lib.js:2)

And the Serial output from the ESP returns

RM request:R/[object Object]
RM executed:/R/[object Object]

So it looks like an Object is being used instead of a filename.

Is "r" actually a BeerRecipe object and so should the code in the delRecipe function not be:

var r = t.viewing.name;

Or should the ".name" reference be made after the Recipes.list lookup ?

The use of the "viewing" variable in the Recipes object does seem inconsistent. Sometimes it's assigned a string, othertimes it's assigned a BeerRecipe object

I'll try some debugging tonight.

Returning no body to a XMLhttprequest call results in error in Firefox

request->send(200);

Returning no body causes a client side JS error in Firefox (new version) as it doesn't like empty responses.

XML Parsing Error: no element found Location: http://192.168.0.14/button.php?code=4 Line Number 1, Column 1:

No error reported in Chrome. The error doesn't stop the panel buttons (in this case) from working but no errors are good right! 👍

Returning an empty JSON structure fixes the problem.
request->send(200, "text/json", "{}")

Sensor resolution setting

Hi Vito,

I noticed that the sensor resolution setting is not kept in Persistent Storage and thus the setting is lost on power down. Is there a reason for this? Probably not a huge issue but changes in sensor resolution may affect the PID auto-tuning accuracy. May be other complications as well.

-Lekrom

Add Edimax SP-1101W Smart Plug

Please add the option to use the Edimax WLAN plug to switch on/off the heater for example. If you need some hints, please look at the CBP-project. Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.