Home
JAQForum Ver 20.06
Log In or Join  
Active Topics
Local Time 23:30 06 May 2024 Privacy Policy
Jump to

Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.

Forum Index : Microcontroller and PC projects : PicoMiteWeb firmware for the Pico W - now making real progress

     Page 2 of 8    
Author Message
lizby
Guru

Joined: 17/05/2016
Location: United States
Posts: 3019
Posted: 09:08pm 07 Feb 2023
Copy link to clipboard 
Print this post

Oops, here's the attachment:
g1html.zip

Browser is chrome. This is what I have when I "view page source".

<html>
<title>Solar Greenhouse System</title>
<meta http-equiv='refresh' content='120' >
<head></head>
<BODY bgcolor='#d0d0d0'>
<form name='f1' method='get' action='G'>


<!-- line below eliminates favicon requests -->

<link href='data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=' rel='icon' type='image/x-icon' />
<P style='margin-top: .01; margin-bottom: .01'><b>
<table background='https://www.dropbox.com/s/3u25uvf2rkzmznx/Image3.jpg?raw=1'>
<tr><td>

<font color='#088A08' size='6'>
Solar Greenhouse System Status</font>

<font size='4'>Sat, Feb 6, 2023 22:19</font>

</td></tr>

<tr><td>
</font></P>
<table border=1 rules=none><font size='5'>
<tr><td></td>
<td>
 <font size='5'>
<input onChange='this.form.submit();' type='radio' name='Y' value='0' checked> OFF  
<input onChange='this.form.submit();' type='radio' name='Y' value='1' > AUTO  
<input onChange='this.form.submit();' type='radio' name='Y' value='2' > MANUAL </td></font>

<td>  </td></tr>
<tr><td>         </td>
<td>                
           </td>
<td>         </td></tr>

<tr><td><input size=13 value='CIRCULATOR' style='background-color:#ff0000' readonly> 
<input type='checkbox' name='W' value='1' .......></td>
<td><font size='5'>
Outside Temperature 93
</td>
<td>  <input size=10 value='FAN OUT' style='background-color:#ff0000' readonly>
 <input type='checkbox' name='W' value='4' .......> </td></tr>

<tr><td></td>
<td><font size='5'>
Inside Temperature 99
</td>
<td>  </td></tr>

<tr><td><input size=13 value='LOUVER VENT' style='background-color:#ff0000' readonly> 
<input type='checkbox' name='W' value='2' .......></td>
<td><font size='5'>
Outside Humidity 96
</td>
<td>  <input size=10 value='FAN IN' style='background-color:#7fff00' readonly>
 <input type='checkbox' name='W' value='5' checked> </td></tr>

<tr><td></td>
<td><font size='5'>
Inside Humidity 93
</td><td></td></tr>

<tr><td><input size=13 value='MISTER' style='background-color:#ff0000' readonly> 
<input type='checkbox' name='W' value='3' .......></td>
<td><font size='5'>
Circulator Temperature Supply 97
</td>
<td>  <input size=10 value='HEATER' style='background-color:#ff0000' readonly>
 <input type='checkbox' name='W' value='6' .......> </td></tr>

<tr><td></td><td><font size='5'>
Circulator Temperature Return 96
</td><td></td></tr>
</font></table>


<table rules=none>
<tr><td><font size='5' color='red'>
Values for Simulation
</font></td></tr>
</table>
<table border=1 rules=none><font size='4'>
<tr><td>Outside Temp</td><td><input size=5 name='A' value=''></td>
<td> Inside Temp </td><td><input size=5 name='B' value=''></td></tr>
<tr><td>Outside Humidity</td><td><input size=5 name='C' value=''></td>
<td> Inside Humidity</td><td><input size=5 name='D' value=''></td></tr>
<tr><td>Circulator Supply</td><td><input size=5 name='E' value=''></td>
<td> Circulator Return</td><td><input size=5 name='F' value=''></td></tr>

</font>
</table>



<font size='4'>
To submit new values, click 'Simulate' <input type='submit' value='Simulate'></font>
 
</td></tr></font></table>
</form>
</BODY>
</html>                
                                                                                   


Same happens with edge browser.
Edited 2023-02-08 07:12 by lizby
PicoMite, Armmite F4, SensorKits, MMBasic Hardware, Games, etc. on fruitoftheshed
 
JanVolk
Regular Member

Joined: 28/01/2023
Location: Netherlands
Posts: 100
Posted: 09:52pm 07 Feb 2023
Copy link to clipboard 
Print this post

Hi Peter

You mentioned that CtrlVal and Gui commands and CtrlVal function are deprecated.
In the Commands List GUI is still present "list commands" and WEB command is new.
In the Functions List, CtrlVal(, MM.HPos, MM.VPos, MsgBox( are deprecated and JSON$( is new.

Jan
 
lizby
Guru

Joined: 17/05/2016
Location: United States
Posts: 3019
Posted: 10:11pm 07 Feb 2023
Copy link to clipboard 
Print this post

  JanVolk said  In the Functions List, CtrlVal(, MM.HPos, MM.VPos, MsgBox( are deprecated and JSON$( is new.

MM.INFO(HPOS) and MM.INFO(VPOS) supply the loss of MM.HPos and MM.VPos.
PicoMite, Armmite F4, SensorKits, MMBasic Hardware, Games, etc. on fruitoftheshed
 
matherp
Guru

Joined: 11/12/2012
Location: United Kingdom
Posts: 8594
Posted: 11:05pm 07 Feb 2023
Copy link to clipboard 
Print this post

  Quote  n the Commands List GUI is still present "list commands"


GUI test lcdpanel + GUI reset lcdpanel + gui test touch + gui calibrate + gui bitmaop that's all
 
JanVolk
Regular Member

Joined: 28/01/2023
Location: Netherlands
Posts: 100
Posted: 11:26pm 07 Feb 2023
Copy link to clipboard 
Print this post

Lizby and Peter,

Thank you for the explanation. Those are things I hadn't even thought of.

Jan
 
pwillard
Senior Member

Joined: 07/06/2022
Location: United States
Posts: 274
Posted: 01:34am 08 Feb 2023
Copy link to clipboard 
Print this post

Is there a way to determine if the WEB NTP command has timed out while the program is still running?

IE; ERROR: NTP TIMEOUT causes the program to end.  I want to just have it try again. as 99% of the time, the first attempt times out but subsequent tries succeed.

I tried using mm.errno... but no luck.

I mean, also there is no way to deal with OPTION WIFI ssid,pass not succeeding... my program is just hung waiting
Edited 2023-02-08 11:45 by pwillard
 
TassyJim

Guru

Joined: 07/08/2011
Location: Australia
Posts: 5914
Posted: 02:43am 08 Feb 2023
Copy link to clipboard 
Print this post

@lizby
It looks like the length of the html file has to be below the tcpip packet length - usually 1460 bytes. I stripped your gh1 file down and it does work with most removed. The good news is, the 'submit' button works and you can retrieve the submitted data OK. Just need short html files (for now)

Edit: On my system and my network, a html file of length 1460 bytes does at it should. The same file with one extra byte (= 1461 bytes) fails to progress past the "sending page" stage. The page IS sent.  Any trailing zero bytes appended by XMODEM do not cause any issues and are dropped before sending.

@pwillard,
you need to get creative for now.
 DATE$ = "01-04-2000"
 ON ERROR SKIP
 WEB ntp 11
 IF DATE$ = "01-04-2000" THEN PRINT "OOPS!"
 PRINT DATE$


RUN
OOPS!
01-04-2000
[21] WEB tcp read a%,buff%()
Error : WIFI not connected


You can decide what to do after "OOPS!" but at this stage the only way to reconnect is to power down.

I am sure these issues will get addressed once the main system settles down.

Jim
Edited 2023-02-08 13:41 by TassyJim
VK7JH
MMedit   MMBasic Help
 
matherp
Guru

Joined: 11/12/2012
Location: United Kingdom
Posts: 8594
Posted: 07:55am 08 Feb 2023
Copy link to clipboard 
Print this post

Jim - thanks for the diagnosis - should be able to fix that
 
matherp
Guru

Joined: 11/12/2012
Location: United Kingdom
Posts: 8594
Posted: 08:29am 08 Feb 2023
Copy link to clipboard 
Print this post

Version 5.07.07a5


PicoMiteWebV5.07.07a5.zip


Now allows pages > 1460 bytes. Tested with lizby's examople
 
TassyJim

Guru

Joined: 07/08/2011
Location: Australia
Posts: 5914
Posted: 08:45am 08 Feb 2023
Copy link to clipboard 
Print this post

  matherp said  Jim - thanks for the diagnosis - should be able to fix that


It was a rainy day today!

Jim
VK7JH
MMedit   MMBasic Help
 
IanRogers

Senior Member

Joined: 09/12/2022
Location: United Kingdom
Posts: 151
Posted: 12:57pm 08 Feb 2023
Copy link to clipboard 
Print this post

  TassyJim said  
  matherp said  Jim - thanks for the diagnosis - should be able to fix that


It was a rainy day today!

Jim


LOL.. If you are talking about blighty..

Yesterday I was looking out and this very strange yellow ball was in the sky..
I'd give my left arm to be ambidextrous
 
Michal
Senior Member

Joined: 02/02/2022
Location: Poland
Posts: 116
Posted: 01:51pm 08 Feb 2023
Copy link to clipboard 
Print this post

Hi @matherp

How to ask PicoMiteW(via COM)what IP was assigned to it?

Michal
 
matherp
Guru

Joined: 11/12/2012
Location: United Kingdom
Posts: 8594
Posted: 02:38pm 08 Feb 2023
Copy link to clipboard 
Print this post

mm.info(ip address)
 
lizby
Guru

Joined: 17/05/2016
Location: United States
Posts: 3019
Posted: 03:36pm 08 Feb 2023
Copy link to clipboard 
Print this post

Thanks, Jim, for the analysis and diagnosis, and thanks, Peter, for the fix.

I'm now working on what to do with the values the program is getting back after the [Simulate] button press: /G?Y=0&W=2&W=5&A=&B=&C=74&D=&E=&F=

Fun, fun, fun.
PicoMite, Armmite F4, SensorKits, MMBasic Hardware, Games, etc. on fruitoftheshed
 
matherp
Guru

Joined: 11/12/2012
Location: United Kingdom
Posts: 8594
Posted: 05:40pm 08 Feb 2023
Copy link to clipboard 
Print this post

  Quote  I'm now working on what to do with the values the program is getting back after the [Simulate] button press:


Here is an example of what I do

Option explicit
Option default integer
Dim buff%(512)
Const maxargs=20
Const ds18B20pin = 4
Const relaypin = 2
Const stemp=17 'setting for lowest temperature on radio buttons
Const heatingoff$=" BGCOLOR='#00ff00'>Off"
Const heatingon$=" BGCOLOR='#ff0000'>On "
Const check$="checked='checked' "
Const hysteresis=0.5
'
Dim checked$(11)
Dim integer setpointb=4 'setting for default temperature
Dim integer setpointt=stemp+setpointb-1
Dim notstarted=1,notended=0
Dim float currenttemp,readtemp
Dim float maxtemp, mintemp
Dim heating$=heatingon$
checked$(setpointb)=check$
SetPin relaypin,dout
currenttemp=TEMPR(ds18b20pin)
maxtemp=currenttemp
mintemp=currenttemp
updateheater

WEB ntp
Do
 If Right$(Time$,1)="0" And notstarted=1 Then
   TEMPR START ds18b20pin,3
   notstarted=0
   notended=1
 EndIf
 If Right$(Time$,1)="2" And notended=1 Then
   readtemp=TEMPR(ds18b20pin)
   If readtemp<1000 Then currenttemp=readtemp
   notstarted=1
   notended=0
   maxmin
   updateheater
 EndIf
 poll
Loop
Sub poll
 Local a%,s$,page$,i,nparams%
 Local arg$(1,maxargs-1)
 For a%=1 To MM.Info(max connections)
'  LongString clear buff%()
 WEB tcp read a%,buff%()
 If LLen(buff%()) Then
   Print "Received ",LLen(buff%())," bytes on PCB ",a%-1
   LongString print buff%()
   page$=parsehtmldata$(nparams%,buff%(), arg$())
   Print page$
   For i=0 To nparams%
     Print arg$(0,i),"=",arg$(1,i)
     If arg$(0,i)="RB" Then ' setting for radio button
       checked$(setpointb)=""
       Print Val(Right$(arg$(1,i),Len(arg$(1,i))-1))
       setpointb=Val(Right$(arg$(1,i),Len(arg$(1,i))-1))
       setpointt=setpointb+stemp-1
       checked$(setpointb)=check$
       updateheater
     EndIf
     If arg$(0,i)="RESET" And arg$(1,i)="YES" Then 'Reset maxmin
       maxtemp=currenttemp
       mintemp=currenttemp
     EndIf
   Next
   If page$="INDEX"  Then
     Print "sending page"
     WEB transmit page a%,"test6.html"
   ElseIf page$="small.jpg" Then
     Print "Sending picture"
     WEB transmit file a%,"small.jpg","image/jpeg"
   ElseIf page$="favicon.ico" Then
      Print "sending favicon"
      WEB Transmit FILE a%,"favicon.ico","image/vnd.microsoft.icon"
   Else
       WEB transmit code a%, 404
   EndIf
 EndIf
 Next a%
End Sub
'
Function parsehtmldata$(paramcount As integer, inbuf() As integer, arg$())
 Const starttext$="HTTP"
 Local a$,b$
 Local integer buf(Bound(inbuf()))
 Local integer inpos,startparam,processargs
 paramcount=0
 inpos=LInStr(inbuf(),"GET /",1)
 If inpos=0 Then
   parsehtmldata$=""
 Else
   LongString MId buf(),inbuf(),inpos+5
   inpos=LInStr(buf(),starttext$,1)
   If inpos>2 Then 'page request found
     inpos=inpos-2
     a$=LGetStr$(buf(),1,inPos)
     inpos=Instr(a$,"?")
     If inpos<>0 Then 'parameters found
       processargs=1
       parsehtmldata$=Left$(a$,inpos-1)
       a$=Mid$(a$,inpos+1)
       Do
         arg$(0,paramcount)=""
         arg$(1,paramcount)=""
         inpos=Instr(a$,"=")
         startparam=1
         arg$(0,paramcount)=Mid$(a$,startparam,inpos-startparam)
         startparam=inpos+1
         inpos=Instr(a$,"&")
         If inpos<>0 Then
           arg$(1,paramcount)=Mid$(a$,startparam,inpos-startparam)
           a$=Mid$(a$,inpos+1)
           paramcount=paramcount+1
         Else
           arg$(1,paramcount)=Mid$(a$,startparam)
           paramcount=paramcount+1
           processargs=0
         EndIf
       Loop While processargs
     Else
       parsehtmldata$=a$
     EndIf
   Else ' no page requested
     parsehtmldata$="INDEX"
   EndIf
 EndIf
End Function
Sub maxmin
 If currenttemp>maxtemp Then
   maxtemp=currenttemp
 EndIf
 If currenttemp<mintemp Then
   mintemp=currenttemp
 EndIf
End Sub
Sub updateheater
'  Print "current setpoint is    ",setpointt
'  Print "current temperature is ",currenttemp
 Local float hcalc
 If setpointt=stemp+11 Then
   Pin(relaypin)=1
   heating$=heatingon$
 ElseIf setpointt=stemp Then
   Pin(relaypin)=0
   heating$=heatingoff$
 Else
   hcalc = setpointt + hysteresis
   If currenttemp>=hcalc Then 'turn heating off
     Pin(relaypin)=0
     heating$=heatingoff$
   EndIf
   hcalc = setpointt - hysteresis
   If currenttemp<=hcalc Then 'turn heating on
     Pin(relaypin)=1
     heating$=heatingon$
   EndIf
 EndIf
End Sub


  Quote  <html>
<head>
<title>
Remote Thermostat</title></head
<link rel="icon" type="image/x-icon" sizes="16x16" href="data:image/png;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAP//ADMA/wD/AAQAFf8AAAIACABZAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAVQBVAAUABQUABQBQBVAFBQAFAFAFBQAAVQBVAAUFBQAAAAAABVAAAAAAAAAAAAAAAAAAACREMzERAAAAJkRDMxEQAAAmZEQzMREAAAZmREMzERAAAGZkRDMxEQAABmZEQzMREAAAZmREMzERAAAGZkRDMxH//wAAuzMAALrtAACa7QAArzMAAKv/AACf/wAA//8AAAA/AAAAHwAAAA8AAIAHAADAAwAA4AEAAPAAAAD4AAAA" />
<body>
<form name='f1' method='get' action='INDEX'>
<h2 align='left'>Remote Thermostat Control System V1.0</h2>
Update Code: <input type='text' name='CODE' size='6' value='000000'><br><p><TABLE BORDER='1' CELLSPACING='0' CELLPADDING='5'>
<TR><TD>Heating</TD><TD{heating$}</TD></TR>
</TABLE></p><p><TABLE BORDER='1' CELLSPACING='0' CELLPADDING='5'><TR><TD></TD>
<TD>Temperature</TD></TR><TR><TD>Current</TD><TD> {str$(currenttemp,4,1)}°C<br></TD><TR><TD>Max</TD><TD> {str$(maxtemp,4,1)}°C<br></TD><TR>
<TD>Min</TD><TD> {str$(mintemp,4,1)}°C<br></TD>
</TABLE></p><input name='RESET' type='checkbox' value='YES' onClick='this.form.submit()'>
Reset Max/Min<p><TABLE BORDER='1' CELLSPACING='0' CELLPADDING='5'><TR><TD>Thermostat</TD>
<TD><input name='RB' type='radio' value='R0' {checked$(0)} onClick='this.form.submit()'> Off<br></TD>
<TD><input name='RB' type='radio' value='R1' {checked$(1)} onClick='this.form.submit()'> {stemp}<br></TD>
<TD><input name='RB' type='radio' value='R2' {checked$(2)} onClick='this.form.submit()'> {stemp+1}<br></TD>
<TD><input name='RB' type='radio' value='R3' {checked$(3)} onClick='this.form.submit()'> {stemp+2}<br></TD>
<TD><input name='RB' type='radio' value='R4' {checked$(4)} onClick='this.form.submit()'> {stemp+3}<br></TD>
<TD><input name='RB' type='radio' value='R5' {checked$(5)} onClick='this.form.submit()'> {stemp+4}<br></TD>
<TD><input name='RB' type='radio' value='R6' {checked$(6)} onClick='this.form.submit()'> {stemp+5}<br></TD>
<TD><input name='RB' type='radio' value='R7' {checked$(7)} onClick='this.form.submit()'> {stemp+6}<br></TD>
<TD><input name='RB' type='radio' value='R8' {checked$(8)} onClick='this.form.submit()'> {stemp+7}<br></TD>
<TD><input name='RB' type='radio' value='R9' {checked$(9)} onClick='this.form.submit()'> {stemp+8}<br></TD>
<TD><input name='RB' type='radio' value='R10' {checked$(10)} onClick='this.form.submit()'> {stemp+9}<br></TD>
<TD><input name='RB' type='radio' value='R11' {checked$(11)} onClick='this.form.submit()'> On<br></TD>
</TABLE>
</p></form>
</body></html>
 
lizby
Guru

Joined: 17/05/2016
Location: United States
Posts: 3019
Posted: 06:03pm 08 Feb 2023
Copy link to clipboard 
Print this post

Thanks. I've done this before, so I know which way I'm going. My approach is somewhat different from yours so I'm going to follow that path before I do what you're doing with the MMBasic variable names embedded in the HTML code with {}.

I started on this method with PICAXE, hence the single-character names I use for HTML entities.

To me, this is a big step for the Picomite.
PicoMite, Armmite F4, SensorKits, MMBasic Hardware, Games, etc. on fruitoftheshed
 
matherp
Guru

Joined: 11/12/2012
Location: United Kingdom
Posts: 8594
Posted: 07:05pm 08 Feb 2023
Copy link to clipboard 
Print this post

ALL PLEASE NOTE

There is currently a conflict between any commands or functions that disable interrupts e.g. TEMPR and web activity.
This can be seen both as misreads on the DS18B20 and crashes or incorrect responses in the web transactions.
This is something I'm working on.
I'm also trying to tidy up program startup and shutdown so that it is more reliable to rerun a web program
 
pwillard
Senior Member

Joined: 07/06/2022
Location: United States
Posts: 274
Posted: 07:41pm 08 Feb 2023
Copy link to clipboard 
Print this post

It's all good... it's fun to play with even as it is...
 
lizby
Guru

Joined: 17/05/2016
Location: United States
Posts: 3019
Posted: 03:43am 09 Feb 2023
Copy link to clipboard 
Print this post

After a depressing number of errors on my part, I have my program accepting inputs from the web page and making appropriate
changes to the output web page:



I can change the mode: Off, Automatic, Manual; I can change which outputs are to be on and off: CIRCULATOR, FAN_OUT,
LOUVER_VENT, FAN_IN, MISTER, and HEATER; and I can specify simulated temperatures for running the program in AUTO mode.

Next I have to write the code to actually turn the pins on and off based on actual or simulated sensor readings for
temperature and humidity.

I started this project in 2017, planning to use a 28-pin Micromite and I don't remember which serial TCP/IP module.
I wrote about 500 lines of code, but never did the hardware, so didn't get much testing done. The program is far from
ready for prime time.

I'm very happy to be able to pick this up now with the Picomite. In 2017, I didn't have a solar greenhouse. I still don't,
but I do have a solar "shedlet" that I built last year which has two used 270W panels. This program will enable me to
get some practice in integrating everything.

(I had to power-cycle many times. I hope in his tidying up Peter will smooth out some of those glitches. I also hope that
DS18B20s can be made to work reliably--otherwise, I may need to use a co-processor. There's also a problem with getting
Day of the Week from the Epoch date which I have to track down.)

~
Edited 2023-02-09 13:47 by lizby
PicoMite, Armmite F4, SensorKits, MMBasic Hardware, Games, etc. on fruitoftheshed
 
TassyJim

Guru

Joined: 07/08/2011
Location: Australia
Posts: 5914
Posted: 04:24am 09 Feb 2023
Copy link to clipboard 
Print this post

You definitely need a reset button fitted!

For 'day of week" try
 '
 DIM INTEGER ed, dow
 DIM dy$
 
 DATE$ = "01-04-2000"
 ON ERROR SKIP
 WEB ntp 11
 IF DATE$ = "01-04-2000" THEN PRINT "OOPS!"
 PRINT DATE$
 
 PRINT EPOCH(now)
 ed = EPOCH(now)/86400
 dow = (ed + 3) MOD 7
 dy$=MID$("SunMonTueWedThuFriSatSun",dow*3+1,3)
 
 PRINT ed, dow,dy$



VK7JH
MMedit   MMBasic Help
 
     Page 2 of 8    
Print this page
© JAQ Software 2024