Skip to content

Commit

Permalink
Fix grainbin update error (#307)
Browse files Browse the repository at this point in the history
* add test sensor data

* handle if there are no temperatures

* add tests for grainbin.update

* Update README.md

* add healthcheck for pgadmin and postgres

* add a startup script

* Update .dockerignore

* remove database_management container

* add netcat to dockerfile
  • Loading branch information
nstoik committed Jan 28, 2024
1 parent e3e520e commit f103f7e
Show file tree
Hide file tree
Showing 19 changed files with 398 additions and 49 deletions.
7 changes: 5 additions & 2 deletions 1wire/Dockerfile
Expand Up @@ -2,7 +2,7 @@ FROM ubuntu:22.04

RUN apt-get update && \
apt-get upgrade -y && \
apt-get install i2c-tools owserver ow-shell owhttpd -y && \
apt-get install curl i2c-tools owserver ow-shell owhttpd -y && \
apt-get autoremove -y && \
apt-get autoclean && \
rm -rf /var/lib/apt/lists/*
Expand All @@ -15,4 +15,7 @@ COPY owfs.conf /etc/owfs.conf

EXPOSE 2121

ENTRYPOINT ["/start.sh"]
ENTRYPOINT ["/start.sh"]

HEALTHCHECK --interval=60s --timeout=3s \
CMD curl -f http://localhost:2121/ || exit 1
15 changes: 15 additions & 0 deletions README.md
Expand Up @@ -106,6 +106,14 @@ docker compose -f docker-compose.yml -f docker-compose.dev.yml -f docker-compose
# Building Docker Containers
There are multiple options for building the docker containers

## Login to Docker Hub
To login to docker hub, execute the following command and enter your credentials:
```bash
docker login
```

This is required to push the containers to docker hub.

## Build single platform container
To build a single docker container for a single platform, execute the following command:
```bash
Expand Down Expand Up @@ -153,6 +161,13 @@ Bake all the containers. In the example below, the TAG variable is set to the ta
```bash
TAG=0.1 docker buildx bake --builder fd_buildx --file docker-bake.hcl --push
```

To bake a single target or group specified in the `docker-bake.hcl` configuration file, run the following, replacing "TARGET_NAME" with the target or group name:
```bash
TAG=0.1 docker buildx bake --builder fd_buildx --file docker-bake.hcl --push "TARGET_NAME"
```


**Note** Overwrite variables defined in the `docker-bake.hcl` file by specifying them as arguments to the command. Any required `ARG` in the docker files need to be specified in the `docker-bake.hcl` file.

The list of available variables are:
Expand Down
3 changes: 2 additions & 1 deletion device/.devcontainer/devcontainer.Dockerfile
Expand Up @@ -15,11 +15,12 @@ ARG USER_GID=$USER_UID
ARG WORKING_DIR=/workspaces/device

# Configure apt and install packages
# install netcat for the start.sh script
RUN apt-get update && \
apt-get -yqq install --no-install-recommends apt-utils dialog apt-transport-https locales 2>&1 && \
#
# Verify git, process tools, lsb-release (common in install instructions for CLIs) installed
apt-get -yqq install git procps lsb-release && \
apt-get -yqq install git procps lsb-release netcat-traditional && \
# Clean up
apt-get autoremove -y && \
apt-get clean -y && \
Expand Down
3 changes: 2 additions & 1 deletion device/.dockerignore
@@ -1,4 +1,5 @@
.env*
.mypy_cache
.pytest_cache
.*.egg-info
.*.egg-info
Dockerfile
9 changes: 7 additions & 2 deletions device/Dockerfile
Expand Up @@ -61,8 +61,9 @@ ARG USER_GID=$USER_UID
ARG WORKING_DIR=/workspaces/device

# install libpq-dev for python postgres support
# install netcat for the start.sh script
RUN apt-get update && apt-get install -y \
libpq-dev \
libpq-dev netcat-traditional \
&& rm -rf /var/lib/apt/lists/*

RUN pip install -U pip && pip install pipenv && \
Expand All @@ -89,7 +90,11 @@ COPY --from=build-stage /home/${USERNAME}/.local/share /home/${USERNAME}/.local/
WORKDIR $WORKING_DIR
RUN pipenv run pip install -e .

ENV SCRIPT_WORKING_DIR=$WORKING_DIR

COPY --chown=${USER_UID}:${USER_GID} --chmod=+x start.sh $WORKING_DIR/start.sh

# Switch back to dialog for any ad-hoc use of apt-get
ENV DEBIAN_FRONTEND=

CMD ["pipenv", "run", "fd_device", "run"]
ENTRYPOINT $SCRIPT_WORKING_DIR/start.sh
14 changes: 12 additions & 2 deletions device/fd_device/grainbin/update.py
Expand Up @@ -76,10 +76,20 @@ def get_indivudual_grainbin_update(grainbin: Grainbin) -> dict:


def get_average_temperature(temperatures: list, percision: int = 4) -> str:
"""Get the average temperature from a list of temperature strings."""
"""Get the average temperature from a list of temperature strings.
avg = round(statistics.mean([float(i) for i in temperatures]), percision)
Args:
temperatures (list): A list of temperature strings.
percision (int, optional): The number of decimal places to round the average temperature to. Defaults to 4.
Returns:
str: The average temperature as a string. If the list is empty, returns "N/A".
"""

if len(temperatures) == 0:
return "N/A"

avg = round(statistics.mean([float(i) for i in temperatures]), percision)
return str(avg)


Expand Down
19 changes: 19 additions & 0 deletions device/start.sh
@@ -0,0 +1,19 @@
# A start up script for the fd_device container.
# This script is run when the container is started.
# It will wait for the database to be ready, then run any migrations
# and then start fd_device.

# Wait for the database to be ready
echo "Waiting for database to be ready..."
while ! nc -z fd_database 5432; do
sleep 0.1
done
echo "Database is ready!"

# Run migrations
echo "Running database migrations..."
pipenv run fd_device database database_upgrade --revision head

# Start fd_device
echo "Starting fd_device..."
pipenv run fd_device run
@@ -1,4 +1,4 @@
<HTML><HEAD><TITLE>1-Wire Web: Directory</TITLE></HEAD>
<BODY BGCOLOR='#BBBBBB'><TABLE WIDTH='100%' BGCOLOR='#DDDDDD' BORDER='1'><TR><TD>OWFS</TD><TD><A HREF='/'>Bus listing</A></TD><TD><A HREF='http://www.owfs.org'>OWFS homepage</A></TD><TD><A HREF='http://www.maxim-ic.com'>Dallas/Maxim</A></TD><TD>by <A HREF='mailto://paul.alfille@gmail.com'>Paul H Alfille</A></TD></TR></TABLE>
<H1>bus.1</H1><HR>
<TABLE BGCOLOR="#DDDDDD" BORDER=1><TR><TD><A HREF='/'><CODE><B><BIG>top</BIG></B></CODE></A></TD><TD>highest level</TD><TD>directory</TD></TR><TR><TD><A HREF='/bus.1/interface'><CODE><B><BIG>interface</BIG></B></CODE></A></TD><TD>interface</TD><TD>directory</TD></TR><TR><TD><A HREF='/bus.1/28.CC9A290D0000'><CODE><B><BIG>28.CC9A290D0000</BIG></B></CODE></A></TD><TD>28.CC9A290D0000</TD><TD>directory</TD></TR><TR><TD><A HREF='/bus.1/28.BC9A290D0000'><CODE><B><BIG>28.BC9A290D0000</BIG></B></CODE></A></TD><TD>28.BC9A290D0000</TD><TD>directory</TD></TR><TR><TD><A HREF='/bus.1/28.BBE5290D0000'><CODE><B><BIG>28.BBE5290D0000</BIG></B></CODE></A></TD><TD>28.BBE5290D0000</TD><TD>directory</TD></TR><TR><TD><A HREF='/bus.1/simultaneous'><CODE><B><BIG>simultaneous</BIG></B></CODE></A></TD><TD>simultaneous</TD><TD>directory</TD></TR><TR><TD><A HREF='/bus.1/alarm'><CODE><B><BIG>alarm</BIG></B></CODE></A></TD><TD>alarm</TD><TD>directory</TD></TR></TABLE></BODY></HTML>
<TABLE BGCOLOR="#DDDDDD" BORDER=1><TR><TD><A HREF='/'><CODE><B><BIG>top</BIG></B></CODE></A></TD><TD>highest level</TD><TD>directory</TD></TR><TR><TD><A HREF='/bus.1/interface'><CODE><B><BIG>interface</BIG></B></CODE></A></TD><TD>interface</TD><TD>directory</TD></TR><TR><TD><A HREF='/bus.1/28.CC9A290D0000'><CODE><B><BIG>28.CC9A290D0000</BIG></B></CODE></A></TD><TD>28.CC9A290D0000</TD><TD>directory</TD></TR><TR><TD><A HREF='/bus.1/28.BC9A290D0000'><CODE><B><BIG>28.BC9A290D0000</BIG></B></CODE></A></TD><TD>28.BC9A290D0000</TD><TD>directory</TD></TR><TR><TD><A HREF='/bus.1/28.BBE5290D0000'><CODE><B><BIG>28.BBE5290D0000</BIG></B></CODE></A></TD><TD>28.BBE5290D0000</TD><TD>directory</TD></TR><TR><TD><A HREF='/bus.1/simultaneous'><CODE><B><BIG>simultaneous</BIG></B></CODE></A></TD><TD>simultaneous</TD><TD>directory</TD></TR><TR><TD><A HREF='/bus.1/alarm'><CODE><B><BIG>alarm</BIG></B></CODE></A></TD><TD>alarm</TD><TD>directory</TD></TR></TABLE></BODY></HTML>%
27 changes: 27 additions & 0 deletions device/tests/grainbin/test_bus_2_2_owfs_page.txt
@@ -0,0 +1,27 @@
<HTML><HEAD><TITLE>1-Wire Web: bus.2/28.FF63B4711404</TITLE></HEAD>
<BODY BGCOLOR='#BBBBBB'><TABLE WIDTH='100%' BGCOLOR='#DDDDDD' BORDER='1'><TR><TD>OWFS</TD><TD><A HREF='/'>Bus listing</A></TD><TD><A HREF='http://www.owfs.org'>OWFS homepage</A></TD><TD><A HREF='http://www.maxim-ic.com'>Dallas/Maxim</A></TD><TD>by <A HREF='mailto://paul.alfille@gmail.com'>Paul H Alfille</A></TD></TR></TABLE>
<H1>bus.2/28.FF63B4711404</H1><HR>
<BR><small><A href='/uncached/bus.2/28.FF63B4711404'>uncached version</A></small><TABLE BGCOLOR="#DDDDDD" BORDER=1><TR><TD><A HREF='/bus.2/'><CODE><B><BIG>up</BIG></B></CODE></A></TD><TD>directory</TD></TR><TR><TD><B>address</B></TD><TD>28FF63B47114047A</TD></TR>
<TR><TD><B>alias</B></TD><TD><FORM METHOD='GET' ACTION='http://fd1.farmmonitor.ca:8443/bus.2/28.FF63B4711404'><INPUT TYPE='TEXT' NAME='alias' VALUE=''><INPUT TYPE='SUBMIT' VALUE='CHANGE'></FORM></TD></TR>
<TR><TD><B>crc8</B></TD><TD>7A</TD></TR>
<TR><TD><B>errata</B></TD><TD><A HREF='/bus.2/28.FF63B4711404/errata'>errata</A></TD></TR>
<TR><TD><B>family</B></TD><TD>28</TD></TR>
<TR><TD><B>fasttemp</B></TD><TD>22</TD></TR>
<TR><TD><B>id</B></TD><TD>FF63B4711404</TD></TR>
<TR><TD><B>latesttemp</B></TD><TD>22</TD></TR>
<TR><TD><B>locator</B></TD><TD>FFFFFFFFFFFFFFFF</TD></TR>
<TR><TD><B>power</B></TD><TD>NO (0)</TD></TR>
<TR><TD><B>r_address</B></TD><TD>7A041471B463FF28</TD></TR>
<TR><TD><B>r_id</B></TD><TD>041471B463FF</TD></TR>
<TR><TD><B>r_locator</B></TD><TD>FFFFFFFFFFFFFFFF</TD></TR>
<TR><TD><B>scratchpad</B></TD><TD><PRE>600101011FFF1F103F</PRE></TD></TR>
<TR><TD><B>temperature</B></TD><TD>21.875</TD></TR>
<TR><TD><B>temperature10</B></TD><TD>22</TD></TR>
<TR><TD><B>temperature11</B></TD><TD>21.875</TD></TR>
<TR><TD><B>temperature12</B></TD><TD>21.875</TD></TR>
<TR><TD><B>temperature9</B></TD><TD>22</TD></TR>
<TR><TD><B>temphigh</B></TD><TD><FORM METHOD='GET' ACTION='http://fd1.farmmonitor.ca:8443/bus.2/28.FF63B4711404'><INPUT TYPE='TEXT' NAME='temphigh' VALUE='1'><INPUT TYPE='SUBMIT' VALUE='CHANGE'></FORM></TD></TR>
<TR><TD><B>templow</B></TD><TD><FORM METHOD='GET' ACTION='http://fd1.farmmonitor.ca:8443/bus.2/28.FF63B4711404'><INPUT TYPE='TEXT' NAME='templow' VALUE='1'><INPUT TYPE='SUBMIT' VALUE='CHANGE'></FORM></TD></TR>
<TR><TD><B>tempres</B></TD><TD><FORM METHOD='GET' ACTION='http://fd1.farmmonitor.ca:8443/bus.2/28.FF63B4711404'><INPUT TYPE='TEXT' NAME='tempres' VALUE='11'><INPUT TYPE='SUBMIT' VALUE='CHANGE'></FORM></TD></TR>
<TR><TD><B>type</B></TD><TD>DS18B20</TD></TR>
</TABLE></BODY></HTML>%
4 changes: 4 additions & 0 deletions device/tests/grainbin/test_bus_2_owfs_page.txt
@@ -0,0 +1,4 @@
<HTML><HEAD><TITLE>1-Wire Web: Directory</TITLE></HEAD>
<BODY BGCOLOR='#BBBBBB'><TABLE WIDTH='100%' BGCOLOR='#DDDDDD' BORDER='1'><TR><TD>OWFS</TD><TD><A HREF='/'>Bus listing</A></TD><TD><A HREF='http://www.owfs.org'>OWFS homepage</A></TD><TD><A HREF='http://www.maxim-ic.com'>Dallas/Maxim</A></TD><TD>by <A HREF='mailto://paul.alfille@gmail.com'>Paul H Alfille</A></TD></TR></TABLE>
<H1>bus.2</H1><HR>
<TABLE BGCOLOR="#DDDDDD" BORDER=1><TR><TD><A HREF='/'><CODE><B><BIG>top</BIG></B></CODE></A></TD><TD>highest level</TD><TD>directory</TD></TR><TR><TD><A HREF='/bus.2/interface'><CODE><B><BIG>interface</BIG></B></CODE></A></TD><TD>interface</TD><TD>directory</TD></TR><TR><TD><A HREF='/bus.2/28.77A9290D0000'><CODE><B><BIG>28.77A9290D0000</BIG></B></CODE></A></TD><TD>28.77A9290D0000</TD><TD>directory</TD></TR><TR><TD><A HREF='/bus.2/28.FF63B4711404'><CODE><B><BIG>28.FF63B4711404</BIG></B></CODE></A></TD><TD>28.FF63B4711404</TD><TD>directory</TD></TR><TR><TD><A HREF='/bus.2/simultaneous'><CODE><B><BIG>simultaneous</BIG></B></CODE></A></TD><TD>simultaneous</TD><TD>directory</TD></TR><TR><TD><A HREF='/bus.2/alarm'><CODE><B><BIG>alarm</BIG></B></CODE></A></TD><TD>alarm</TD><TD>directory</TD></TR></TABLE></BODY></HTML>%
4 changes: 2 additions & 2 deletions device/tests/grainbin/test_owfs_interface.py
Expand Up @@ -99,7 +99,7 @@ def test_get_all_busses_including_all(mocker):
def test_get_all_sensors_of_bus(mocker):
"""Test the get_all_busses function including fetching the all bus."""

with open(f"{CONFIG.TEST_DIR}/grainbin/test_bus_owfs_page.txt") as f:
with open(f"{CONFIG.TEST_DIR}/grainbin/test_bus_1_owfs_page.txt") as f:
text_as_list = f.readlines()
test_text = "/n".join(text_as_list)

Expand All @@ -118,7 +118,7 @@ def test_get_all_sensors_of_bus(mocker):
def test_read_sensor_of_bus(mocker):
"""Test the read_sensor_of_bus function."""

with open(f"{CONFIG.TEST_DIR}/grainbin/test_sensor_owfs_page.txt") as f:
with open(f"{CONFIG.TEST_DIR}/grainbin/test_sensor_1_1_owfs_page.txt") as f:
text_as_list = f.readlines()
test_text = "/n".join(text_as_list)

Expand Down
27 changes: 27 additions & 0 deletions device/tests/grainbin/test_sensor_1_1_owfs_page.txt
@@ -0,0 +1,27 @@
<HTML><HEAD><TITLE>1-Wire Web: bus.1/28.CC9A290D0000</TITLE></HEAD>
<BODY BGCOLOR='#BBBBBB'><TABLE WIDTH='100%' BGCOLOR='#DDDDDD' BORDER='1'><TR><TD>OWFS</TD><TD><A HREF='/'>Bus listing</A></TD><TD><A HREF='http://www.owfs.org'>OWFS homepage</A></TD><TD><A HREF='http://www.maxim-ic.com'>Dallas/Maxim</A></TD><TD>by <A HREF='mailto://paul.alfille@gmail.com'>Paul H Alfille</A></TD></TR></TABLE>
<H1>bus.1/28.CC9A290D0000</H1><HR>
<BR><small><A href='/uncached/bus.1/28.CC9A290D0000'>uncached version</A></small><TABLE BGCOLOR="#DDDDDD" BORDER=1><TR><TD><A HREF='/bus.1/'><CODE><B><BIG>up</BIG></B></CODE></A></TD><TD>directory</TD></TR><TR><TD><B>address</B></TD><TD>28CC9A290D000005</TD></TR>
<TR><TD><B>alias</B></TD><TD><FORM METHOD='GET' ACTION='http://fd1.farmmonitor.ca:8443/bus.1/28.CC9A290D0000'><INPUT TYPE='TEXT' NAME='alias' VALUE=''><INPUT TYPE='SUBMIT' VALUE='CHANGE'></FORM></TD></TR>
<TR><TD><B>crc8</B></TD><TD>05</TD></TR>
<TR><TD><B>errata</B></TD><TD><A HREF='/bus.1/28.CC9A290D0000/errata'>errata</A></TD></TR>
<TR><TD><B>family</B></TD><TD>28</TD></TR>
<TR><TD><B>fasttemp</B></TD><TD>22.5</TD></TR>
<TR><TD><B>id</B></TD><TD>CC9A290D0000</TD></TR>
<TR><TD><B>latesttemp</B></TD><TD>22.5</TD></TR>
<TR><TD><B>locator</B></TD><TD>FFFFFFFFFFFFFFFF</TD></TR>
<TR><TD><B>power</B></TD><TD>NO (0)</TD></TR>
<TR><TD><B>r_address</B></TD><TD>0500000D299ACC28</TD></TR>
<TR><TD><B>r_id</B></TD><TD>00000D299ACC</TD></TR>
<TR><TD><B>r_locator</B></TD><TD>FFFFFFFFFFFFFFFF</TD></TR>
<TR><TD><B>scratchpad</B></TD><TD><PRE>680101011FFF081097</PRE></TD></TR>
<TR><TD><B>temperature</B></TD><TD>22.1875</TD></TR>
<TR><TD><B>temperature10</B></TD><TD>22.25</TD></TR>
<TR><TD><B>temperature11</B></TD><TD>22.25</TD></TR>
<TR><TD><B>temperature12</B></TD><TD>22.1875</TD></TR>
<TR><TD><B>temperature9</B></TD><TD>22.5</TD></TR>
<TR><TD><B>temphigh</B></TD><TD><FORM METHOD='GET' ACTION='http://fd1.farmmonitor.ca:8443/bus.1/28.CC9A290D0000'><INPUT TYPE='TEXT' NAME='temphigh' VALUE='1'><INPUT TYPE='SUBMIT' VALUE='CHANGE'></FORM></TD></TR>
<TR><TD><B>templow</B></TD><TD><FORM METHOD='GET' ACTION='http://fd1.farmmonitor.ca:8443/bus.1/28.CC9A290D0000'><INPUT TYPE='TEXT' NAME='templow' VALUE='1'><INPUT TYPE='SUBMIT' VALUE='CHANGE'></FORM></TD></TR>
<TR><TD><B>tempres</B></TD><TD><FORM METHOD='GET' ACTION='http://fd1.farmmonitor.ca:8443/bus.1/28.CC9A290D0000'><INPUT TYPE='TEXT' NAME='tempres' VALUE='12'><INPUT TYPE='SUBMIT' VALUE='CHANGE'></FORM></TD></TR>
<TR><TD><B>type</B></TD><TD>DS18B20</TD></TR>
</TABLE></BODY></HTML>%
Expand Up @@ -2,26 +2,26 @@
<BODY BGCOLOR='#BBBBBB'><TABLE WIDTH='100%' BGCOLOR='#DDDDDD' BORDER='1'><TR><TD>OWFS</TD><TD><A HREF='/'>Bus listing</A></TD><TD><A HREF='http://www.owfs.org'>OWFS homepage</A></TD><TD><A HREF='http://www.maxim-ic.com'>Dallas/Maxim</A></TD><TD>by <A HREF='mailto://paul.alfille@gmail.com'>Paul H Alfille</A></TD></TR></TABLE>
<H1>bus.1/28.BC9A290D0000</H1><HR>
<BR><small><A href='/uncached/bus.1/28.BC9A290D0000'>uncached version</A></small><TABLE BGCOLOR="#DDDDDD" BORDER=1><TR><TD><A HREF='/bus.1/'><CODE><B><BIG>up</BIG></B></CODE></A></TD><TD>directory</TD></TR><TR><TD><B>address</B></TD><TD>28BC9A290D00009D</TD></TR>
<TR><TD><B>alias</B></TD><TD><FORM METHOD='GET' ACTION='http://fd_1wire:2121/bus.1/28.BC9A290D0000'><INPUT TYPE='TEXT' NAME='alias' VALUE=''><INPUT TYPE='SUBMIT' VALUE='CHANGE'></FORM></TD></TR>
<TR><TD><B>alias</B></TD><TD><FORM METHOD='GET' ACTION='http://fd1.farmmonitor.ca:8443/bus.1/28.BC9A290D0000'><INPUT TYPE='TEXT' NAME='alias' VALUE=''><INPUT TYPE='SUBMIT' VALUE='CHANGE'></FORM></TD></TR>
<TR><TD><B>crc8</B></TD><TD>9D</TD></TR>
<TR><TD><B>errata</B></TD><TD><A HREF='/bus.1/28.BC9A290D0000/errata'>errata</A></TD></TR>
<TR><TD><B>family</B></TD><TD>28</TD></TR>
<TR><TD><B>fasttemp</B></TD><TD>22.5</TD></TR>
<TR><TD><B>fasttemp</B></TD><TD>22</TD></TR>
<TR><TD><B>id</B></TD><TD>BC9A290D0000</TD></TR>
<TR><TD><B>latesttemp</B></TD><TD>22.5</TD></TR>
<TR><TD><B>latesttemp</B></TD><TD>22</TD></TR>
<TR><TD><B>locator</B></TD><TD>FFFFFFFFFFFFFFFF</TD></TR>
<TR><TD><B>power</B></TD><TD>NO (0)</TD></TR>
<TR><TD><B>r_address</B></TD><TD>9D00000D299ABC28</TD></TR>
<TR><TD><B>r_id</B></TD><TD>00000D299ABC</TD></TR>
<TR><TD><B>r_locator</B></TD><TD>FFFFFFFFFFFFFFFF</TD></TR>
<TR><TD><B>scratchpad</B></TD><TD><PRE>68014B461FFF081095</PRE></TD></TR>
<TR><TD><B>temperature</B></TD><TD>22.375</TD></TR>
<TR><TD><B>temperature10</B></TD><TD>22.5</TD></TR>
<TR><TD><B>temperature11</B></TD><TD>22.5</TD></TR>
<TR><TD><B>temperature12</B></TD><TD>22.375</TD></TR>
<TR><TD><B>temperature9</B></TD><TD>22.5</TD></TR>
<TR><TD><B>temphigh</B></TD><TD><FORM METHOD='GET' ACTION='http://fd_1wire:2121/bus.1/28.BC9A290D0000'><INPUT TYPE='TEXT' NAME='temphigh' VALUE='75'><INPUT TYPE='SUBMIT' VALUE='CHANGE'></FORM></TD></TR>
<TR><TD><B>templow</B></TD><TD><FORM METHOD='GET' ACTION='http://fd_1wire:2121/bus.1/28.BC9A290D0000'><INPUT TYPE='TEXT' NAME='templow' VALUE='70'><INPUT TYPE='SUBMIT' VALUE='CHANGE'></FORM></TD></TR>
<TR><TD><B>tempres</B></TD><TD><FORM METHOD='GET' ACTION='http://fd_1wire:2121/bus.1/28.BC9A290D0000'><INPUT TYPE='TEXT' NAME='tempres' VALUE='12'><INPUT TYPE='SUBMIT' VALUE='CHANGE'></FORM></TD></TR>
<TR><TD><B>scratchpad</B></TD><TD><PRE>600101021FFF101069</PRE></TD></TR>
<TR><TD><B>temperature</B></TD><TD>22.1875</TD></TR>
<TR><TD><B>temperature10</B></TD><TD>22.25</TD></TR>
<TR><TD><B>temperature11</B></TD><TD>22.25</TD></TR>
<TR><TD><B>temperature12</B></TD><TD>22.1875</TD></TR>
<TR><TD><B>temperature9</B></TD><TD>22</TD></TR>
<TR><TD><B>temphigh</B></TD><TD><FORM METHOD='GET' ACTION='http://fd1.farmmonitor.ca:8443/bus.1/28.BC9A290D0000'><INPUT TYPE='TEXT' NAME='temphigh' VALUE='1'><INPUT TYPE='SUBMIT' VALUE='CHANGE'></FORM></TD></TR>
<TR><TD><B>templow</B></TD><TD><FORM METHOD='GET' ACTION='http://fd1.farmmonitor.ca:8443/bus.1/28.BC9A290D0000'><INPUT TYPE='TEXT' NAME='templow' VALUE='2'><INPUT TYPE='SUBMIT' VALUE='CHANGE'></FORM></TD></TR>
<TR><TD><B>tempres</B></TD><TD><FORM METHOD='GET' ACTION='http://fd1.farmmonitor.ca:8443/bus.1/28.BC9A290D0000'><INPUT TYPE='TEXT' NAME='tempres' VALUE='12'><INPUT TYPE='SUBMIT' VALUE='CHANGE'></FORM></TD></TR>
<TR><TD><B>type</B></TD><TD>DS18B20</TD></TR>
</TABLE></BODY></HTML>
</TABLE></BODY></HTML>%

0 comments on commit f103f7e

Please sign in to comment.