General Electric Appliances Dishwasher Software Development Kit
This node.js package provides functionality for communicating with a dishwasher via the General Electric Appliance Software Development Kit. In order to use this software, you must first connect your dishwasher to your computer using the Green Bean.
- dishwasher.cycleStatus
- dishwasher.operatingMode
- dishwasher.disabledFeatures
- dishwasher.reminders
- dishwasher.rates
- dishwasher.turbidityCalibration
- dishwasher.doorCount
- dishwasher.userConfiguration
- dishwasher.error
- dishwasher.cycleCounts
- dishwasher.continuousCycle
- dishwasher.controlLock
- dishwasher.personality
- dishwasher.diverterCalibration
- dishwasher.cycleState
- dishwasher.analogData
- dishwasher.cycleData0
- dishwasher.cycleData1
- dishwasher.cycleData2
- dishwasher.cycleData3
- dishwasher.cycleData4
- dishwasher.dryDrainCounters
- dishwasher.tubLight
- Operating mode
- Disabled features
- Reminders
- User configuration
- Control lock
- Personality source
- Cycle state
Below are a few node.js applications that demonstrate how to use this package to interact with a dishwasher.
The cycle status is an object with the following fields:
- cycleRunning (zero if the cycle is not running, non-zero if running)
- activeCycle (the active cycle, see cycle state)
- activeCycleStep (the current step in the active cycle)
- stepsExecuted (the number of steps executed in the cycle)
- stepsEstimated (the estimated number of steps in the cycle)
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.cycleStatus.read(function (value) {
console.log("cycle status is:", value);
});
dishwasher.cycleStatus.subscribe(function (value) {
console.log("cycle status changed:", value);
});
dishwasher.cycleStatus.write({
cycleRunning: 1,
activeCycle: 2,
activeCycleStep: 1,
stepsExecuted: 1,
stepsEstimated: 2
});
});
The operating mode is an integer value of the operating mode enumeration.
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.operatingMode.read(function (value) {
console.log("operating mode is:", value);
});
dishwasher.operatingMode.subscribe(function (value) {
console.log("operating mode changed:", value);
});
dishwasher.operatingMode.write(1);
});
The disabled features are an integer value of the disabled features bit field.
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.disabledFeatures.read(function (value) {
console.log("disabled features are:", value);
});
dishwasher.disabledFeatures.subscribe(function (value) {
console.log("disabled features changed:", value);
});
dishwasher.disabledFeatures.write(3);
});
The reminders are an integer value of the reminders bit field.
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.reminders.read(function (value) {
console.log("reminders are:", value);
});
dishwasher.reminders.subscribe(function (value) {
console.log("reminders changed:", value);
});
dishwasher.reminders.write(0);
});
The rates are an object with the following fields:
- fillRate (the rate that water fills)
- drainRate (the rate that water drains)
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.rates.read(function (value) {
console.log("rates are:", value);
});
dishwasher.rates.subscribe(function (value) {
console.log("rates changed:", value);
});
dishwasher.rates.write({
fillRate: 0,
drainRate: 0
});
});
The turbidity calibration is an integer value used to calibrate the sensor readings.
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.turbidityCalibration.read(function (value) {
console.log("turbidity calibration is:", value);
});
dishwasher.turbidityCalibration.subscribe(function (value) {
console.log("turbidity calibration changed:", value);
});
dishwasher.turbidityCalibration.write(0);
});
The door count is a read-only integer value that is incremented each time the door is opened.
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.doorCount.read(function (value) {
console.log("door count is:", value);
});
dishwasher.doorCount.subscribe(function (value) {
console.log("door count changed:", value);
});
});
The user configuration is an array of bytes representing the user configuration bit field.
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.userConfiguration.read(function (value) {
console.log("user configuration is:", value);
});
dishwasher.userConfiguration.subscribe(function (value) {
console.log("user configuration changed:", value);
});
dishwasher.userConfiguration.write([0, 0, 0]);
});
The error is an object with the following fields:
- errorId (the error id)
- errorState (zero if the error is cleared, one if the error is set)
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.error.read(function (value) {
console.log("error is:", value);
});
dishwasher.error.subscribe(function (value) {
console.log("error changed:", value);
});
dishwasher.error.write({
errorId: 0,
errorState: 1
});
});
The cycle counts are an object with the following fields:
- startedCount (the number of times a cycle was started)
- completedCount (the number of times a cycle was completed)
- resetCount (the number of times a cycle was reset)
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.cycleCounts.read(function (value) {
console.log("cycle counts are:", value);
});
dishwasher.cycleCounts.subscribe(function (value) {
console.log("cycle counts changed:", value);
});
dishwasher.cycleCounts.write({
startedCount: 2,
completedCount: 1,
resetCount: 0
});
});
The cycle counts are an object with the following fields:
- cycleToRun (the cycle to run, see cycle state)
- cyclesRemaining (the number of remaining cycles)
- minutesBetweenCycles (the number of minutes between cycles)
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.continuousCycle.read(function (value) {
console.log("continuous cycle is:", value);
});
dishwasher.continuousCycle.subscribe(function (value) {
console.log("continuous cycle changed:", value);
});
dishwasher.continuousCycle.write({
cycleToRun: 1,
cyclesRemaining: 0,
minutesBetweenCycles: 5
});
});
The control lock is an integer value of the control lock enumeration.
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.controlLock.read(function (value) {
console.log("control lock is:", value);
});
dishwasher.controlLock.subscribe(function (value) {
console.log("control lock changed:", value);
});
dishwasher.controlLock.write(0x55);
});
The personality is an object with the following fields:
- personality (the personality index, between 0 and 15, inclusive)
- source (the cycle to run, see personality source)
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.personality.read(function (value) {
console.log("personality is:", value);
});
dishwasher.personality.subscribe(function (value) {
console.log("personality changed:", value);
});
dishwasher.personality.write({
personality: 15,
source: 1
});
});
The diverter calibration is an object with the following fields:
- positionATime (the time at position A)
- positionBTime (the time at position B)
- positionCTime (the time at position C)
- positionDTime (the time at position D)
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.diverterCalibration.read(function (value) {
console.log("diverter calibration is:", value);
});
dishwasher.diverterCalibration.subscribe(function (value) {
console.log("diverter calibration changed:", value);
});
dishwasher.diverterCalibration.write({
positionATime: 1,
positionBTime: 2,
positionCTime: 3,
positionDTime: 4
});
});
The cycle state is an integer value of the cycle state enumeration.
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.cycleState.read(function (value) {
console.log("cycle state is:", value);
});
dishwasher.cycleState.subscribe(function (value) {
console.log("cycle state changed:", value);
});
dishwasher.cycleState.write(9);
});
The analog data is a read-only byte array of analog input sensor values.
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.analogData.read(function (value) {
console.log("analog data is:", value);
});
dishwasher.analogData.subscribe(function (value) {
console.log("analog data changed:", value);
});
});
The cycle data is a read-only object with the following fields:
- cycleTime (the time of the cycle)
- cycleDurationInMinutes (the duration of the cycle in minutes)
- cycleCompleted (zero if the cycle is not complete, one if incomplete)
- cycleMinimumTemperatureInFahrenheit (the minimum cycle temperature in Fahrenheit)
- cycleMaximumTemperatureInFahrenheit (the maximum cycle temperature in Fahrenheit)
- cycleFinalCirculationTemperatureInFahrenheit (the final circulation temperature in Fahrenheit)
- cycleMinimumTurbidityInNTU (the minimum turbidity value in NTU)
- cycleMaximumTurbidityInNTU (the maximum turbidity value in NTU)
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.cycleData0.read(function (value) {
console.log("cycle data 0 is:", value);
});
dishwasher.cycleData0.subscribe(function (value) {
console.log("cycle data 0 changed:", value);
});
});
The cycle data is a read-only object with the following fields:
- cycleTime (the time of the cycle)
- cycleDurationInMinutes (the duration of the cycle in minutes)
- cycleCompleted (zero if the cycle is not complete, one if incomplete)
- cycleMinimumTemperatureInFahrenheit (the minimum cycle temperature in Fahrenheit)
- cycleMaximumTemperatureInFahrenheit (the maximum cycle temperature in Fahrenheit)
- cycleFinalCirculationTemperatureInFahrenheit (the final circulation temperature in Fahrenheit)
- cycleMinimumTurbidityInNTU (the minimum turbidity value in NTU)
- cycleMaximumTurbidityInNTU (the maximum turbidity value in NTU)
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.cycleData1.read(function (value) {
console.log("cycle data 1 is:", value);
});
dishwasher.cycleData1.subscribe(function (value) {
console.log("cycle data 1 changed:", value);
});
});
The cycle data is a read-only object with the following fields:
- cycleTime (the time of the cycle)
- cycleDurationInMinutes (the duration of the cycle in minutes)
- cycleCompleted (zero if the cycle is not complete, one if incomplete)
- cycleMinimumTemperatureInFahrenheit (the minimum cycle temperature in Fahrenheit)
- cycleMaximumTemperatureInFahrenheit (the maximum cycle temperature in Fahrenheit)
- cycleFinalCirculationTemperatureInFahrenheit (the final circulation temperature in Fahrenheit)
- cycleMinimumTurbidityInNTU (the minimum turbidity value in NTU)
- cycleMaximumTurbidityInNTU (the maximum turbidity value in NTU)
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.cycleData2.read(function (value) {
console.log("cycle data 2 is:", value);
});
dishwasher.cycleData2.subscribe(function (value) {
console.log("cycle data 2 changed:", value);
});
});
The cycle data is a read-only object with the following fields:
- cycleTime (the time of the cycle)
- cycleDurationInMinutes (the duration of the cycle in minutes)
- cycleCompleted (zero if the cycle is not complete, one if incomplete)
- cycleMinimumTemperatureInFahrenheit (the minimum cycle temperature in Fahrenheit)
- cycleMaximumTemperatureInFahrenheit (the maximum cycle temperature in Fahrenheit)
- cycleFinalCirculationTemperatureInFahrenheit (the final circulation temperature in Fahrenheit)
- cycleMinimumTurbidityInNTU (the minimum turbidity value in NTU)
- cycleMaximumTurbidityInNTU (the maximum turbidity value in NTU)
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.cycleData3.read(function (value) {
console.log("cycle data 3 is:", value);
});
dishwasher.cycleData3.subscribe(function (value) {
console.log("cycle data 3 changed:", value);
});
});
The cycle data is a read-only object with the following fields:
- cycleTime (the time of the cycle)
- cycleDurationInMinutes (the duration of the cycle in minutes)
- cycleCompleted (zero if the cycle is not complete, one if incomplete)
- cycleMinimumTemperatureInFahrenheit (the minimum cycle temperature in Fahrenheit)
- cycleMaximumTemperatureInFahrenheit (the maximum cycle temperature in Fahrenheit)
- cycleFinalCirculationTemperatureInFahrenheit (the final circulation temperature in Fahrenheit)
- cycleMinimumTurbidityInNTU (the minimum turbidity value in NTU)
- cycleMaximumTurbidityInNTU (the maximum turbidity value in NTU)
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.cycleData4.read(function (value) {
console.log("cycle data 4 is:", value);
});
dishwasher.cycleData4.subscribe(function (value) {
console.log("cycle data 4 changed:", value);
});
});
The dry drain counters are an object with the following fields:
- noDryDrainDetectedCount (the number of times a dry-drain did not occur)
- noDryDrainDetectedMaximumValue (the maximum value a dry-drain cannot occur)
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.dryDrainCounters.read(function (value) {
console.log("dry drain counters are:", value);
});
dishwasher.dryDrainCounters.subscribe(function (value) {
console.log("dry drain counters changed:", value);
});
dishwasher.dryDrainCounters.write({
noDryDrainDetectedCount: 5,
noDryDrainDetectedMaximumValue: 45
});
});
The tub light is an object with the following field:
- dutyCyclePercentage (the duty cycle percentage between 0 and 100, inclusive)
var greenBean = require("green-bean");
greenBean.connect("dishwasher", function(dishwasher) {
dishwasher.tubLight.read(function (value) {
console.log("tub light is:", value);
});
dishwasher.tubLight.subscribe(function (value) {
console.log("tub light changed:", value);
});
dishwasher.tubLight.write({
dutyCyclePercentage: 50
});
});
The following is a list of the available operating modes and their enumerated value.
Value | Name |
---|---|
0 | Low Power |
1 | Power Up |
2 | Standby |
3 | Delay Start |
4 | Pause |
5 | Cycle Active |
6 | End of Cycle |
7 | Download Mode |
8 | Sensor Check Mode |
9 | Load Activation Mode |
The following is a diagram of the value for each bit in the disabled features. If the bit is set (value is 1) then that feature is disabled. If the bit is cleared (value is 0) then that feature is enabled.
Bit | Description |
---|---|
0 | Heated Dry |
1 | Boost |
2 | Sanitize |
3 | Wash Zones |
4 | Steam |
5 | Bottle Blast |
6+ | Reserved |
The following is a diagram of the value for each bit in the reminders. If the bit is set (value is 1) then the reminder is active. If the bit is cleared (value is 0) then the reminders is not active.
Bit | Description |
---|---|
0 | Clean Filter |
1 | Add Rinse Aid |
2 | Sanitized |
The following is a diagram of the value for each bit in the user configuration. There are three configuration bytes, each described below.
Bit | Description |
---|---|
0-3 | Delay Start |
4-5 | Zone Selected |
6 | Demo Mode |
7 | Mute |
Bit | Description |
---|---|
0 | Steam |
1 | UI Locked |
2-3 | Dry Options |
4-6 | Wash Temp |
7 | Rinse Aid Enabled |
Bit | Description |
---|---|
0 | Bottle Blast |
1-4 | Selected Cycle |
5 | Leak Detect Enabled |
6+ | Reserved |
The following is a list of the available control locks and their enumerated value.
Value | Name |
---|---|
0x55 | Locked |
0xAA | Unlocked |
The following is a list of the available personality sources and their enumerated value.
Value | Name |
---|---|
0 | Bootloader Parametric |
1 | A/D |
The following is a list of the available cycle states and their enumerated value.
Value | Name |
---|---|
1 | PreWash |
2 | Sensing |
3 | MainWash |
4 | Drying |
5 | Sanitizing |
6 | Turbidity Calibration |
7 | Diverter Calibration |
8 | Pause |
9 | Rinsing |
10 | Cycle Inactive |